金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 471|回复: 3

请教python中order对象问题

[复制链接]

13

主题

55

帖子

55

积分

Rank: 2

等级: 标准版

注册:
2024-2-25
曾用名:
发表于 2024-6-7 17:35 | 显示全部楼层 |阅读模式
请教老师,我在策略模拟运行时老报错崩溃,按你们的提示写了一小段重现问题的代码如下,这个问题是,这个问题是,存下来的记录文件trail2里,最后一秒没有取到持仓。用print看了,order对象能取到存在tgh[0,'oid']里,print出来能看到是个order对象,但是到最后一秒的提取这个对象取filled-quantity属性的时候,我发的这段代码没有报错,trail2保存下来了,但是没有按代码预期在tgh[0,'chc]里取到成交数量,在模拟运行的时候报错说,str对象没有filledquantity属性,然后策略终止,不能保存trail2.
from PythonApi import *
import pandas as pd
import numpy as np
from datetime import datetime
from datetime import time
def init(context):
    context.bs=0
    context.tgh=pd.DataFrame(history_bars('SQRU09',200,'1s',['high','low','close','datetime'],adjusted_price=False),columns=['high','low','close','datetime'])
    context.tgh['oid']=0
    context.tgh['chc']=0
def handle_bar(context):
    context.bs+=1
    if context.bs==100:
        buy_open('SQRU09','limit',10000,2,serial_id = 1)
        context.tgh.loc[0,'oid']=get_orders('SQRU09',1)[-1]
    if context.now.time()==time(18,59,59):
        for i in range(len(context.tgh)):
            if context.tgh.loc[i,'oid']!=0:
                context.tgh.loc[i,'chc']=context.tgh.loc[i,'oid'].filled_quantity
def exit(context):
    context.tgh.to_csv('D:/tdxdata/trail2.csv',index=False)

补充内容 (2024-6-8 11:15):
这段代码不对,作疲。请解答下面的一段代码。
回复

使用道具 举报

13

主题

55

帖子

55

积分

Rank: 2

等级: 标准版

注册:
2024-2-25
曾用名:
 楼主| 发表于 2024-6-8 11:18 | 显示全部楼层
from PythonApi import *
import pandas as pd
import numpy as np
from datetime import datetime
from datetime import time
def init(context):
    context.bs=0
    context.tgh=pd.DataFrame(history_bars_date('SQRU09','2024-06-06 01:00:01','2024-06-06 19:00:00','1s',['high','low','close','datetime'],adjusted_price=False),columns=['high','low','close','datetime'])
    context.tgh['oid']=0
    context.tgh['chc']=0
def handle_bar(context):
    context.bs+=1
    if context.bs==100:
        buy_open('SQRU09','limit',18000,2,serial_id = 1)
        context.tgh.loc[0,'oid']=get_orders('SQRU09',1)[-1]
    if context.now.time()==time(18,59,59):
        for i in range(len(context.tgh)):
            if context.tgh.loc[i,'oid']!=0:
                context.tgh.loc[i,'chc']=context.tgh.loc[i,'oid'].filled_quantity
def exit(context):
    context.tgh.to_csv('D:/tdxdata/trail2.csv',index=False)


这段代码我回测了6月6日,回测报告显示委托2手成交2手,没有报错。但是保存的文件trail2中相应的chc单元格为0,说明18:59:59没有取到已成交数量。
回复

使用道具 举报

34

主题

9006

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-6-11 14:54 | 显示全部楼层
本帖最后由 技术006 于 2024-6-11 15:09 编辑

本地测试没有看到你说的错误。建议你吧错误截图贴出来。
代码中存在一些异常问题。
1.获取订单没有判断是否为空,
2.context.now.time()==time(18,59,59)context.now.time返回的是k线时间。受周期影响,横不成立的情况。

其次如果你只是想处理订单记录,也没必要写成这个形式,直接在收盘时获取全部订单,对全部订单进行一次性处理即可
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

13

主题

55

帖子

55

积分

Rank: 2

等级: 标准版

注册:
2024-2-25
曾用名:
 楼主| 发表于 2024-6-11 16:04 | 显示全部楼层
我贴的这段代码是为了说明order对象使用时存在的问题,技术006老师说的两个方面在这里都不影响复现问题。说直接一点order对象存在的问题是:按手册get_orders的返回值是个order对象,把返回值存在dataframe中以后,再用这个返回值.fill_quantity取成交数量,取不到,模拟时报错说 str对象没有fill_quantity属性,也就是说,保存在dataframe中就不是order对象了。在上面我的例子中,不会报错,但是取不到成交数量,你可以打开保存下来的trail2看,是0。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 04:13 , Processed in 0.280161 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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