• 量化投资_EasyLanguage/PowerLanguage教学课程__【第二篇专题】__【第十六章关于编写bar内交易的小技巧】


    第十六章:关于编写bar内交易的小技巧

      前面讲过多次,在编写交易逻辑的时候需要先分析是否用到了bar内的数据,如果单纯的open价格买入,那只需要非bar内交易即可,如果你的代码遇到了盘中突破等bar内数据的话,就需要开启bar内交易。因此在遇到bar内交易的时候,我们首先想到的就是获取marketposition的bar持仓数据。如果我们只要求bar内只进行一次交易(一次平仓,一次出场)的话。我们需要用到Intrabarpersist这个复合数据类型。而且需要把marketposition持仓数据提取出来,因为marketposition本身是没有可回溯功能的。

      因此有下面的代码,开启bar内运行market单。

      示例代码1:双均线交叉,bar内模式

    [IntrabarOrderGeneration=true]
    var:intrabarpersist mp0(0),ma0(0),ma1(0);
    
    mp0=marketposition;
    
    ma0 = Average(close,5);
    ma1 = Average(close,20);
    
    if mp0[1] <> 1 and ma0 > ma1 then buy 1 shares next bar at market;
    
    if mp0[1] <> -1 and ma0 < ma1 then sellshort 1 shares next bar at market;
    
    
    print(barstatus," time=",Time_,"markposition= ",marketposition,
    " markposition_mp0= ",mp0, "mp0[1]= ",mp0[1]);

    //观察返回值(部分)

       0.00 time= 940.00markposition=    0.00 markposition_mp0=    0.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
    .....(省略)
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       1.00 time= 940.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       2.00 time= 941.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    0.00
       0.00 time= 941.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    1.00
       1.00 time= 941.00markposition=    1.00 markposition_mp0=    1.00 mp0[1]=    1.00

    【分析】

      1、蓝色的两条数据分别表示在一个bar内交易是的bar的起点和bar的终点

      2、在进行初次交易时,我们进行多单交易,此时mp0 = marketposition记录了持仓状态,mp0和marketposition为同步显示,表示意思是一样的

      3、第一个红色的mp0[1]表示位置,此时用mp0去回溯上一个bar的持仓状态,此时为0,因为在图表开头,此时并没有marketposition的状态

      4、第二个红色mp0[1]表示的位置,此时上一个bar结束,下一个bar开盘后,mp0去回溯删一个bar的状态,表示为持有了多头。

      在这里我们充分运用到了复合数据类型Intrabarpersist它的bar内可以回溯上一个bar的信息。因此这里可以用于日内交易。如果我们采取想上一个bar的持仓状态(“委托判断条件”),去进行下一个bar的开仓要求(“委托单触发”)。

      示例代码2:

    [IntrabarOrderGeneration=true]
    var:intrabarpersist mp0(0),intrabarpersist mp1(0), intrabarpersist ma0(0),
    intrabarpersist ma1(0);
    
    mp1=marketposition;
    
    ma0 = Average(close,5);
    ma1 = Average(close,20);
    
    if mp1[1] <> 1 and ma0[1] > ma1[1] then buy 1 shares next bar at market;
    
    if mp1[1] = 1 and ma0[1] < ma1[1] then sell 1 shares next bar at market;
    
    if mp1[1] = 1 then sell 1 shares next bar at ma0[1] stop ;

    【分析】:

      1、如果需要定义一个变量在bar内进行变化的话,那么需要设置Intrabarpersist var0(0)这样一个变量去接收它,比如var0 = high;var0=average()等。

     

     【备注】:子图不能实现bar内交易

    =================================================

    之前的文章感谢大家的转载,希望转载时请注明出处,本人转自其它网站的图表一并感谢,谢谢~!

    https://www.cnblogs.com/noah0532/

  • 相关阅读:
    C# 二维数组 排列组合
    highcharts(数据可视化框架),ajax传递数据问题
    EasyPoi导入验证功能
    EasyPoi使用入门
    SSJ(Spring+springMVC+JPA)设置xml文件思路流程
    spring框架设置jdbc
    使用JDBC完成CRUD(增删改查)
    Java的数据类型(常量,变量)
    jdk8的安装与卸载
    Java的第一个你好世界
  • 原文地址:https://www.cnblogs.com/noah0532/p/13720130.html
Copyright © 2020-2023  润新知