金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2561|回复: 2

[分享]Python下读取委托记录和持仓到EXCEL表格范例

[复制链接]

13

主题

37

帖子

37

积分

Rank: 1

等级: 新手上路

注册:
2021-6-23
曾用名:
发表于 2022-3-9 22:12 | 显示全部楼层 |阅读模式
本帖最后由 技术006 于 2022-3-10 22:58 编辑

[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






补充内容 (2022-3-10 08:10):
如果是要在盘后读取持仓和委托,必须在  工具-选项-程序化交易 中,把"交易时段选项"的勾去掉,这样才能在盘后触发

ReadTradingLogToEXCEL.pdf

137.23 KB, 下载次数: 1989

读取记录到EXCEL

点评

解答的非常优秀!: 5.0 非常棒!: 5.0
解答的非常优秀!: 5 非常棒!: 5
  发表于 2022-3-9 23:09
回复

使用道具 举报

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
发表于 2022-3-12 18:51 | 显示全部楼层
太好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-11-16 09:26 , Processed in 0.149452 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表