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

画线下单功能求解答 [MC]

  • MC用户求助:

    您说的”修改成为bar内开仓,系统的开仓和平仓就不按照之前的想法来开仓了“这句话不是太理解您的意思。
    一、您是基于MC自带的trendline LE和trendline SE进行的修改,但是MC自带的这个策略是可以实现跌破开多单、突破开空单的。
    二、您使用的判断语句是close<TL_GetValue(TLRef, Date, Time)没有问题,开启bar内的情况下,close是实时的价格,当实时价格在趋势线以下时执行多单开仓。
    三、并且您执行的是市价单,所以当条件满足时就发送市价单并且会立即成交,不会在下一笔tick条件不满足的情况下取消之前的委托单。
    四、代码中没有止损语句。

     

  • MC回复讨论一:

    您说的”修改成为bar内开仓,系统的开仓和平仓就不按照之前的想法来开仓了“这句话不是太理解您的意思。
    一、您是基于MC自带的trendline LE和trendline SE进行的修改,但是MC自带的这个策略是可以实现跌破开多单、突破开空单的。
    二、您使用的判断语句是close<TL_GetValue(TLRef, Date, Time)没有问题,开启bar内的情况下,close是实时的价格,当实时价格在趋势线以下时执行多单开仓。
    三、并且您执行的是市价单,所以当条件满足时就发送市价单并且会立即成交,不会在下一笔tick条件不满足的情况下取消之前的委托单。
    四、代码中没有止损语句。

     

  • MC回复讨论二:

    您看下这次的代码,是增加了止损的,但是·····每根K线上都是止损·····
    [IntrabarOrderGeneration = True]
    inputs: 
            TLRef( 1 ) ,                                                                      
            Sstop( 5 ) ;                  

    variables: 
            var0( TL_GetBeginDate( TLRef ) ), 
            var1( TL_GetBeginTime( TLRef ) ), 
            var2( false ) ;

    var2 = ( Date = var0 and ( BarType = 2 or ( BarType = 1 and Time >= var1 ) ) ) 
    or Date > var0 ;

    condition1 = var2 and Close < TL_GetValue( TLRef, Date, Time ) ;

    if condition1 then
            sellshort next bar at market;
            value1 = Close;

    condition2 =  Close > value1 + Sstop;

    if condition2 then
            buytocover next bar at market;

     

  • MC回复讨论三:

    抱歉,回复的有点晚!
    这个应该是您的触及压力线卖空的信号吧,那么您的触及支撑线做多的信号的代码应该和做空的代码很像,猜测应该是对称的。
    一、if condition1 then
            sellshort next bar at market;
            value1 = Close;
    这句语句应该是当条件满足,然后做空并且将当时的close价格赋值给value1,方便用于计算止损价,但是这句写错了,因为value1在if的条件语句之外,是实时更新的,应该写成如下形式:
    if condition1 then begin
            sellshort next bar at market;
            value1 = Close;
    end;
    二、由于在开启bar内交易下,close是实时价格,而您的代码中value1实质上和close是实时相等的,所以条件condition2在sstop为非负值的情况下永远返回false,也就是说
    if condition2 then
            buytocover next bar at market;
    语句中的止损永远不会执行。
    三、这部分也是最严重的问题,您说您的每根K线都是止损的,问题出在condition1,也就是您做空的条件上,对应的您做多的条件应该是var2 and Close>TL_getvalue(TLRef,date,Time);当价格在压力线和支撑线之间时,做空的语句会执行,因为做空的条件满足了,同时也会做多,因为做多的条件也满足了,这样就导致了反复进场,同时出场。您需要修改一下您的进场条件。

     

  • MC回复讨论四:

    抱歉,回复的有点晚!
    这个应该是您的触及压力线卖空的信号吧,那么您的触及支撑线做多的信号的代码应该和做空的代码很像,猜测应该是对称的。
    一、if condition1 then
            sellshort next bar at market;
            value1 = Close;
    这句语句应该是当条件满足,然后做空并且将当时的close价格赋值给value1,方便用于计算止损价,但是这句写错了,因为value1在if的条件语句之外,是实时更新的,应该写成如下形式:
    if condition1 then begin
            sellshort next bar at market;
            value1 = Close;
    end;
    二、由于在开启bar内交易下,close是实时价格,而您的代码中value1实质上和close是实时相等的,所以条件condition2在sstop为非负值的情况下永远返回false,也就是说
    if condition2 then
            buytocover next bar at market;
    语句中的止损永远不会执行。
    三、这部分也是最严重的问题,您说您的每根K线都是止损的,问题出在condition1,也就是您做空的条件上,对应的您做多的条件应该是var2 and Close>TL_getvalue(TLRef,date,Time);当价格在压力线和支撑线之间时,做空的语句会执行,因为做空的条件满足了,同时也会做多,因为做多的条件也满足了,这样就导致了反复进场,同时出场。您需要修改一下您的进场条件。

 

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

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


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

相关文章

    没有相关内容