金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 559|回复: 15

python报单问题

[复制链接]

221

主题

857

帖子

857

积分

等级: 免费版

注册:
2022-4-2
曾用名:
发表于 2024-10-28 09:37 | 显示全部楼层 |阅读模式
请问老师,我的报单代码如下;为什么一直出现这个提示
    #有未成交单时,判断是否需要撤单
    if orderlist!=None:    #如果有挂单,这里增加撤单重开代码
        #撤单代码
        cancelorder(context,orderlist,strategy_hold,tbuyhold,tsellhold)         
    if portfolio_change>0:                    #如果仓差大于0执行后面的报单
        #获取买1价和卖1价
        lastprice=get_dynainf(code,7)         #获取最新价
        upperprice=get_dynainf(code,54)        #获取涨停价
        lowerprice=get_dynainf(code,55)        #获取跌停价
        nbuy1=get_dynainf(code,28)            #获取buy1买1价
        nsell1=get_dynainf(code,34)           #获取sell1卖1价
        mindiff=get_dynainf(code,208)          #获取合约最小变动价
        trading_day = get_dynainf(code,229)     #获取合约日期
        split_date = get_split(code,2)[-1].ex_dividend_date #获取合约换月日期
        today_split = split_date.date == trading_day  and strategy_hold==Y_strategy_hold #判断是否换月

        #如果涨跌停或者换月时间不交易
        if  not(today_split):

            #如果买一价卖一价差距过大,用中间价
            if nsell1-nbuy1>mindiff:
                n_mindiff=mindiff*round((nsell1-nbuy1)/mindiff/2)
                nbuy1 = nbuy1+n_mindiff
                nsell1 = nsell1-n_mindiff
            canuse=get_account(19)                #获取账户可用资金
            codeinfo=get_instruments(code)        #获取合约单位和保证金比例
            #计算账户实际资金能开仓手数
            canopen=canuse//(lastprice*codeinfo.multipliter*codeinfo.buy_margin_rate)    # 可开仓手数
            closelots =  random.randint(1,max(portfolio_change,1))                   #随机下单手数与可用取最小
            openlots = min(canopen, closelots)                  #随机下单手数与可用取最小
            #根据信号下单:      
            if strategy_hold>=0 and tsellhold>0:
                buy_close(code, "Limit", price=nsell1,volume = closelots, account = accounts,serial_id = 1)    # 用卖1价平空

            elif strategy_hold<=0 and tbuyhold>0:
                sell_close(code, "Limit", price=nbuy1,volume = closelots, account = accounts,serial_id = 2)    # 用买1价平多

            elif strategy_hold>0 and strategy_hold<tbuyhold :
                sell_close(code, "Limit", price=nbuy1,volume = closelots,account = accounts,serial_id = 3)          # 用卖1价减多

            elif strategy_hold<0 and abs(strategy_hold)<abs(tsellhold):
                buy_close(code, "Limit", price=nsell1,volume = closelots, account = accounts,serial_id = 4)     # 用买1价减空
            if not(lastprice>upperprice-5*mindiff or lastprice<lowerprice+5*mindiff or canuse<20000):            
                if strategy_hold>0 and tbuyhold==0 and canopen>0:
                    buy_open(code, "Limit", price=nsell1,volume = openlots,account = accounts,serial_id = 5)          # 用卖1价开多

                if strategy_hold<0 and tsellhold==0 and canopen>0:
                    sell_open(code, "Limit", price=nbuy1,volume = openlots,account = accounts,serial_id = 6)     # 用买1价开空   

                if tbuyhold>0 and strategy_hold>tbuyhold and canopen>0:
                    buy_open(code, "Limit", price=nsell1,volume = openlots,account = accounts,serial_id = 7)          # 用卖1价加多

                if strategy_hold<0 and abs(strategy_hold)>tsellhold and canopen>0:
                    sell_open(code, "Limit", price=nbuy1,volume = openlots,account = accounts,serial_id = 8)     # 用买1价加空
            else:
                return


截图202410280935562435.png

PleaceOrder.zip

9.5 KB, 下载次数: 218

回复

使用道具 举报

34

主题

9212

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-10-28 10:59 | 显示全部楼层
打印输出自己的平仓手数closelots,排查它实际委托的假的数量为什么是0.另外随机函数的参数1和参数2,必须是参数2>参数1.

平昨仓位不足的问题,你要对应自己的账户持仓看下,实际的昨仓是多少
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

221

主题

857

帖子

857

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2024-10-28 11:00 | 显示全部楼层
技术006 发表于 2024-10-28 10:59
打印输出自己的平仓手数closelots,排查它实际委托的假的数量为什么是0.另外随机函数的参数1和参数2,必须 ...

好的老师;为什么这个交易代码会造成锁仓,明明是净头寸开仓的逻辑呀
回复

使用道具 举报

34

主题

9212

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-10-28 11:30 | 显示全部楼层
胖虎爱吃鱼 发表于 2024-10-28 11:00
好的老师;为什么这个交易代码会造成锁仓,明明是净头寸开仓的逻辑呀

这取决你自己的开仓条件的处理方式。
如果你是引用图表策略的结果处理,只要源头的条件存在变化,无论你使用python还是后台,都会存在这种现象。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

221

主题

857

帖子

857

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2024-10-28 11:35 | 显示全部楼层
技术006 发表于 2024-10-28 11:30
这取决你自己的开仓条件的处理方式。
如果你是引用图表策略的结果处理,只要源头的条件存在变化,无论你 ...

    tbuyhold=portfolio.buy_quantity        #多单持仓量
    tsellhold=portfolio.sell_quantity      #空单持仓量
我3秒K线走完模式,是想要实现每间隔三秒报一次单。上面的交易报单是不是tbuyhold跟tsellhold返回的净头寸后的持仓而不是单边持仓。比如5手多单,3手空单;tbuyhold返还的不是5而是2.不然不会锁仓一直持有呀
回复

使用道具 举报

34

主题

9212

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-10-28 12:31 | 显示全部楼层
那只能通过调试输出每次执行过过程中计算的仓位结果,自行定位到发生锁仓的情况事,才能进一步分析才能知道为什么会锁仓。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

221

主题

857

帖子

857

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2024-10-28 14:13 | 显示全部楼层
技术006 发表于 2024-10-28 12:31
那只能通过调试输出每次执行过过程中计算的仓位结果,自行定位到发生锁仓的情况事,才能进一步分析才能知道 ...

buy_quantity        #多单持仓量
sell_quantity      #空单持仓量
这两个返回的是净持仓量吗
回复

使用道具 举报

34

主题

9212

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-10-28 14:37 | 显示全部楼层
他们各自返回多空方向上的可用持仓数量。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

221

主题

857

帖子

857

积分

等级: 免费版

注册:
2022-4-2
曾用名:
 楼主| 发表于 2024-10-28 16:35 | 显示全部楼层
技术006 发表于 2024-10-28 14:37
他们各自返回多空方向上的可用持仓数量。

如果是这样,那不应该会有锁仓的持仓存在了呀;
回复

使用道具 举报

20

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-10-28 17:30 | 显示全部楼层
这种净持仓策略,实际仓位和理论持仓方向相反时候 ,实际仓位是要全平的。

但是你这里的平仓手数计算:
closelots =  random.randint(1,max(portfolio_change,1))                   #随机下单手数与可用取最小

应该是不会全平的吧。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 13:48 , Processed in 0.195105 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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