[Python] 复制代码
#1,必须使用标准Python环境,以便安装xlrd,xlwt,xlutils这3个操作EXCEL的第3方库
#2,基准合约和合约池随便设个品种就可以
#3,基础周期随便选,运行模式选择固定轮询1秒
#4,默认文件记录在D:\\成交记录及持仓.xls,自己改路径
#5,金字塔模拟账户或者上期SIMNOW测试账户可以随便读取,实盘账户,必须使用金字塔标准版以上账号才能读取,否则读取失败
#6,记录以追加的方式,每次读取都会追加到表格下面
#7,注意打开EXCEL表格前先停止程序,或者启动停止程序前先关掉EXCEL表格,否则容易卡住
#8,金字塔不支持标准套利单和商品期权的委托单的读取
from PythonApi import *
import xlrd
import xlwt
from xlutils.copy import copy
from datetime import datetime
ex_file = 'D:\\成交记录及持仓.xls' # 写入操作的文件路径
cont_sheet = '成交记录' # excel中的工作簿名0
cont_sheet2 = '持仓' # excel中的工作簿名1
wt_work = None
wt_table = None #写成交记录表格
wt_table2 = None #写持仓表格
rd_work = None
rd_table = None #读成交记录表格
rd_table2 = None #读持仓表格
Read_Log_Tag=0
def init(context):
global wt_work
global wt_table
global wt_table2
global rd_work
global rd_table
global rd_table2
try:
rd_work=xlrd.open_workbook(ex_file)
print('打开EXCEL表格成功')
except FileNotFoundError:
print('EXCEL表格不存在,创建新表格:'+ex_file)
#行情表格
wt_work = xlwt.Workbook() # 创建一个worksheet
wt_table = wt_work.add_sheet(cont_sheet) # 添加一个工作簿,并设置工作簿0的名称
# 写入表头
table_head = ['编号','报单id', '合约代码', ' 委托下单时间', '方向','开平', '价格', '数量', '已成交', '未成交','订单类型']
for i in range(len(table_head)):
wt_table.write(0, i, table_head)
wt_table2 = wt_work.add_sheet(cont_sheet2) # 添加一个工作簿,并设置工作簿1的名称
# 写入表头
table_head2 = ['品种','多头总持', '多头开仓成本', '多头持仓成本', '空头总持','空头开仓成本','空头持仓成本','读取时间']
for i in range(len(table_head2)):
wt_table2.write(0, i, table_head2)
wt_work.save(ex_file)
pass
def handle_bar(context):
global wt_work
global wt_table
global wt_table2
global rd_work
global rd_table
global rd_table2
global Read_Log_Tag
rd_work=xlrd.open_workbook(ex_file)
rd_table = rd_work.sheet_by_name(cont_sheet) # 获取待读入文件指定的工作部Sheet0
if Read_Log_Tag==0:
print('成交记录表格行数:'+str(rd_table.nrows))
row=int(rd_table.nrows)+1
rd_table2 = rd_work.sheet_by_name(cont_sheet2) # 获取待读入文件指定的工作部Sheet1
if Read_Log_Tag==0:
print('持仓表格行数:'+str(rd_table2.nrows))
row2=int(rd_table2.nrows)+1
wt_work=copy(rd_work)
wt_table=wt_work.get_sheet(0)
wt_table2=wt_work.get_sheet(1)
if Read_Log_Tag==0:
order_list=get_orders('all',1)
if not(order_list==None) and len(order_list)!=0:
print('有订单')
for order in order_list:
#['编号','报单id', '合约代码', '委托下单时间', '方向','开平', '价格', '数量', '已成交', '未成交','订单类型']
wt_table.write(row, 0, order.system_id)
wt_table.write(row, 1, order.order_id)
wt_table.write(row, 2, order.order_book_id)
wt_table.write(row, 3, order.datetime.isoformat())
if order.side=='buy':
wt_table.write(row, 4, '买')
elif order.side=='sell':
wt_table.write(row, 4, '卖')
if order.position_effect=='open':
wt_table.write(row, 5, '开')
elif order.position_effect=='close':
wt_table.write(row, 5, '平')
wt_table.write(row, 6, order.price)
wt_table.write(row, 7, order.quantity)
wt_table.write(row, 8, order.filled_quantity)
wt_table.write(row, 9, order.unfilled_quantity)
wt_table.write(row, 10, order.type)
row += 1
#wt_work.save(ex_file)
else:
print('没有委托订单')
portfolio_book=get_portfolio_book(2)
if len(portfolio_book)!=0:
print('有持仓')
for order_book_id in portfolio_book:
portfolio=get_portfolio(order_book_id,2,calc=False)
#['品种','多头总持', '多头开仓成本', '多头持仓成本', '空头总持','空头开仓成本','空头持仓成本','读取时间']
wt_table2.write(row2, 0,order_book_id)
wt_table2.write(row2, 1,portfolio.buy_quantity)
wt_table2.write(row2, 2,portfolio.buy_avg_open_price)
wt_table2.write(row2, 3,portfolio.buy_avg_holding_price)
wt_table2.write(row2, 4,portfolio.sell_quantity)
wt_table2.write(row2, 5,portfolio.sell_avg_open_price)
wt_table2.write(row2, 6,portfolio.sell_avg_holding_price)
wt_table2.write(row2, 7,datetime.now().isoformat())
row2+=1
#wt_work.save(ex_file)
else:
print('没有持仓')
wt_work.save(ex_file)
print('委托记录及持仓读取完毕,请查看EXCEL表格')
print('注意打开EXCEL表格前先停止程序,或者启动停止程序前先关掉EXCEL表格,否则容易卡住')
Read_Log_Tag=1
pass