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

新手求助:可否帮我实现一套止赢止损基础策略代码? [MC]

  • MC用户求助:

    大概理解您的意思,不过还是想以一个例子来理清一下思路:

    1、假设周期是15分钟周期,M代表的是7分钟,d代表的是3分钟,第一根bar的收盘价是9:15分钟。

    2、基于上述假设,建仓清仓周期时间点分别是9:22,9:29,依此类推,每次加7分钟是吧。

    3、在9:25分钟的时候,以市价买入一手建仓。

    4、那么请问,您的策略是否涉及加仓,也就是当前有多头持仓的情况下,下一个多头建仓的时间点是9:32分钟。

    5、在9:25分钟的时候买入建仓了,那么在9:29分钟之前,若价格没有达到损失或者盈利百分比就会在9:29进行市价平仓,是吧。

    6、若9:29平仓了,那么会在9:32再次多头进场是吧,然后再循环平仓建仓进行下去是吧

     

  • MC回复讨论一:

    大概理解您的意思,不过还是想以一个例子来理清一下思路:

    1、假设周期是15分钟周期,M代表的是7分钟,d代表的是3分钟,第一根bar的收盘价是9:15分钟。

    2、基于上述假设,建仓清仓周期时间点分别是9:22,9:29,依此类推,每次加7分钟是吧。

    3、在9:25分钟的时候,以市价买入一手建仓。

    4、那么请问,您的策略是否涉及加仓,也就是当前有多头持仓的情况下,下一个多头建仓的时间点是9:32分钟。

    5、在9:25分钟的时候买入建仓了,那么在9:29分钟之前,若价格没有达到损失或者盈利百分比就会在9:29进行市价平仓,是吧。

    6、若9:29平仓了,那么会在9:32再次多头进场是吧,然后再循环平仓建仓进行下去是吧

     

  • MC回复讨论二:

    感谢这么快的回应!

    不涉及加仓,竞价阶段不参与,其他描述无误。

    另外,补充一个需求点:第一次开仓有2种情况,除了上面说的第一根bar之外,还允许指定一个绝对时间(日期时分秒),这样我可以提前计划从哪个时间点开始真正运行策略。

    谢谢Alex!

     

  • MC回复讨论三:

    [IntrabarOrderGeneration=true]

    input: time_begin(91500), time_M(700), time_d(300), ploss(0.01), pprofit(0.01);

    var: intrabarpersist time_define0(0), intrabarpersist time_define1(0), intrabarpersist minus_seconds(0), intrabarpersist time_b(time_begin), intrabarpersist var_begin(0), intrabarpersist var_end(0);

    var: intrabarpersist time_end(0), intrabarpersist date0(0), intrabarpersist date1(0);

    value1=getappinfo(airealtimecalc);   //判断是否实时行情

    once begin

            once cleardebug;

            minus_seconds=timetoseconds(time_m)-timetoseconds(time_d);

            time_end=secondstotime_s(timetoseconds(230000)-timetoseconds(time_m)-timetoseconds(time_d)-300);

    end;

    time_define0=time_define1;  

    {time_define0存储前一笔tick的时间,而time_define1存储当笔tick的时间;同时下面的date0和date1也是同样的原理}

    date0=date1;

    date1=date;

    if value1=0 then

            time_define1=time_s

    else if value1=1 then

            time_define1=q_time_s;

    {以上4行代码,用于将回测的bar内时间与实行行情的时间连接起来,都存储在变量time_define1中}

    if date1<>date0 then begin

            var_begin=secondstotime_s(timetoseconds(time_begin)+timetoseconds(time_d));

            var_end=secondstotime_s(timetoseconds(var_begin)+minus_seconds);

    end;

    if marketposition=0 and time_define0<=var_begin and time_define1>=var_begin and time_define1<time_end then begin

            buy next bar at market;

            var_end=secondstotime_s(timetoseconds(time_define1)+minus_seconds);

    end;

    if marketposition=1 and (close>=entryprice*(1+pprofit) or close<=entryprice*(1-ploss) or (time_define0<=var_end and time_define1>=var_end)) then begin

            sell next bar at market;

            var_begin=secondstotime_s(timetoseconds(time_define1)+timetoseconds(time_d));

    end;

    注意事项:

    第一、这个代码可以用于夜盘品种,但是夜盘结束时间不能在凌晨;若需要适合所有的夜盘,需要做简单的处理。

    第二、见附图,需要访问bar内时间,这样才可以用于回测,否则只能用于实时行情中。

    第三、在信号设置中允许单一bar多笔进出场。

    第四、因为您的策略基本上已经不属于常规利用bar与bar之间的关系了,而是直接使用时间间隔进行处理的范畴,所以挺麻烦。

    第五、以上代码一次没有办法教会您,您可能需要一点点学习,不懂多问。

     

  • MC回复讨论四:

    [IntrabarOrderGeneration=true]

    input: time_begin(91500), time_M(700), time_d(300), ploss(0.01), pprofit(0.01);

    var: intrabarpersist time_define0(0), intrabarpersist time_define1(0), intrabarpersist minus_seconds(0), intrabarpersist time_b(time_begin), intrabarpersist var_begin(0), intrabarpersist var_end(0);

    var: intrabarpersist time_end(0), intrabarpersist date0(0), intrabarpersist date1(0);

    value1=getappinfo(airealtimecalc);   //判断是否实时行情

    once begin

            once cleardebug;

            minus_seconds=timetoseconds(time_m)-timetoseconds(time_d);

            time_end=secondstotime_s(timetoseconds(230000)-timetoseconds(time_m)-timetoseconds(time_d)-300);

    end;

    time_define0=time_define1;  

    {time_define0存储前一笔tick的时间,而time_define1存储当笔tick的时间;同时下面的date0和date1也是同样的原理}

    date0=date1;

    date1=date;

    if value1=0 then

            time_define1=time_s

    else if value1=1 then

            time_define1=q_time_s;

    {以上4行代码,用于将回测的bar内时间与实行行情的时间连接起来,都存储在变量time_define1中}

    if date1<>date0 then begin

            var_begin=secondstotime_s(timetoseconds(time_begin)+timetoseconds(time_d));

            var_end=secondstotime_s(timetoseconds(var_begin)+minus_seconds);

    end;

    if marketposition=0 and time_define0<=var_begin and time_define1>=var_begin and time_define1<time_end then begin

            buy next bar at market;

            var_end=secondstotime_s(timetoseconds(time_define1)+minus_seconds);

    end;

    if marketposition=1 and (close>=entryprice*(1+pprofit) or close<=entryprice*(1-ploss) or (time_define0<=var_end and time_define1>=var_end)) then begin

            sell next bar at market;

            var_begin=secondstotime_s(timetoseconds(time_define1)+timetoseconds(time_d));

    end;

    注意事项:

    第一、这个代码可以用于夜盘品种,但是夜盘结束时间不能在凌晨;若需要适合所有的夜盘,需要做简单的处理。

    第二、见附图,需要访问bar内时间,这样才可以用于回测,否则只能用于实时行情中。

    第三、在信号设置中允许单一bar多笔进出场。

    第四、因为您的策略基本上已经不属于常规利用bar与bar之间的关系了,而是直接使用时间间隔进行处理的范畴,所以挺麻烦。

    第五、以上代码一次没有办法教会您,您可能需要一点点学习,不懂多问。

 

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

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


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

相关文章

    没有相关内容