您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

请问实现同一个bar上出现平仓不再追加开仓,如何处理? [开拓者 TB]

  • 咨询内容: 因我做了两个独立的开仓条件,会有追加开仓的情况。模拟盘测试发现,如果第一个条件下已开仓1手,在某个bar上出现了平仓的信号(以开盘价发出),同时该bar也出现了满足另一个开仓条件发出的加仓1手的指令(以开盘价发出),带来两个问题:一是导致不必要的开平仓;二是系统因为无法判别顺序,会以平仓2手,开仓1手发出委托单,实际成交时先开后平没有问题,但如果先平2手后开1手,则导致留下1收开仓,暴露了风险。
    解决方案:
    1、同一bar上避免既有开仓又有平仓的方法,我查阅了网上的,一般是给开仓条件增加BarSinceExit!=0来处理,但这个函数的前提条件是空仓才有效,我这里的情况是bar上已有1手的持仓,所以无法使用。
    2、解决成交的顺序问题,我查阅使用先开仓再平仓来解决,应该是没问题的,对吧?

    请版主和高手帮忙!谢谢!

     

  • TB技术人员: 1,不在同一个bar上即开又平,可以将平仓语句写在开仓和加仓语句前,且是 if ....else if.....else if...的逻辑
    2,历史K线中没法判断实时的行情出现的先后顺序。。这个不太想法不太能实现 。

     

  • TB客服: 本帖最后由 dagan3200 于 2016-4-21 16:33 编辑
    小米 发表于 2016-4-20 11:30
    1,不在同一个bar上即开又平,可以将平仓语句写在开仓和加仓语句前,且是 if ....else if.....else if...的 ...


    调了下,发现不是两个条件下单,而是其中一个条件允许累计加仓(设置了最大允许加仓2次)导致,为了保留加仓的效果,同一个bar上只能保留既开又平。
    现在,为了保证真实账户与TB信号匹配,使用A函数来处理这个问题,如下。两个问题:
    1、调试显示第二行(If这句)缺少分号“;”,但我找不出错误原因。
    2、逻辑上也请帮忙看看对不对,先给 TickCnt1赋初值为0,然后每个tick过来执行一遍第一段的if语句 (效果是TickCnt1+1),经过30个tick后( TickCnt1达到30),再执行If里的语句。

    请大大指教!

                   TickCnt1=0;
                    If (TickCnt1<30 && MarketPosition==0)//TB信号为空仓,且30个Tick数未达到;
                    {
                      TickCnt1=TickCnt1+1;
                    }

                    Else If ( TickCnt1>=30 && MarketPosition==0); //TB信号为空仓,如果等待了TickCnt1个tick数后
                    {
                       If(A_BuyPosition>0 && A_BuyPosition>Abs(CurrentContracts)&&A_GetOpenOrderCount==0) //当前有买入持仓&&真实账户相对TB信号有多余持仓&&没有委托单时直接发单平掉多余持仓
                      {
                      A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition-Abs(CurrentContracts),Q_BidPrice);
                                      TickCnt1=0;
                             }
                       Else if(A_SellPosition>0 && A_SellPosition>Abs(CurrentContracts)&&A_GetOpenOrderCount==0)//当前有卖出持仓&&真实账户相对TB信号有多余持仓&&没有委托单时直接发单平掉多余持仓
                      {
                      A_SendOrder(Enum_Sell,Enum_Exit,A_SellPosition-Abs(CurrentContracts),Q_AskPrice);
                                      TickCnt1=0;
                             }
                    }

     

  • 网友回复:
    dagan3200 发表于 2016-4-21 13:58
    调了下,发现不是两个条件下单,而是其中一个条件允许累计加仓(设置了最大允许加仓2次)导致,为了保留 ...

    A函数是没有信号的,不存在信号前后的问题呀。。那我前面给的处理语句完全不适用于这里,可忽略。。。
    使用a_sendorder发单 ,是没法使用marketposition进行判断的。。

     

  • 网友回复: 本帖最后由 dagan3200 于 2016-4-21 16:30 编辑
    小米 发表于 2016-4-21 14:44
    A函数是没有信号的,不存在信号前后的问题呀。。那我前面给的处理语句完全不适用于这里,可忽略。。。
    使 ...


    是的,我这里marketpositon只是为了看当前图表上信号,图表上如果是空仓,而实际账户不是空仓再用A_sendorder去平掉多出的真实持仓,这样保证图表信号和真实持仓情况匹配。你看是这样吧?然后那个缺少分号“;”的错误提示怎么解?

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 511411198  点击这里给我发消息进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容