量化投资_关于Multicharts砖型图(传统砖型图和非传统砖型图)最详细的解释

Posted noah0532

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了量化投资_关于Multicharts砖型图(传统砖型图和非传统砖型图)最详细的解释相关的知识,希望对你有一定的参考价值。

1. Multicharts的图表中有砖型图的解释,参考官方论坛解释:https://forum.multicharts.cn/forum/cat/1/thread/2821?k=%E7%A0%96

2. 砖型图在交易中会非常棒的提升交易绩效,因为砖型图起到了降噪和二分的作用,降噪不用多解释,因为事先设定砖型图的波动单位,不符合这个单位的小波动就被过滤掉了;所谓二分就是在砖型图的世界中只有两种状态:涨和跌,因此对于绩效的提升非常棒。

3. 但是在Multicharts砖型图不能直接用于交易,这就使得砖型图的回测和实际交易存在一定的冲突(不是全部),我总结了一下主要原因时Multicharts砖型图(尤其是非传统砖型图)的砖的时间产生了偏移所导致的,因此在砖型图用于多图标插入和直接交易上会存在这方面的问题。究竟Multicharts软件中关于砖型图这块儿的代码具体出现了什么问题,希望后面能够改正过来。这里根据Multicharts的官方解释,对于砖型图进行提取解释和提取编程的方式,固定时间,不使砖型图进行偏移,方便进行回测和实盘交易。(可能后面写的比较繁杂,我尽可能简练和清晰的表示处理,因此分为几大类问题,要想研究Multicharts砖型图的朋友,耐住性子看完,这里的条例应该是非常清晰的

4. 第一大类的问题:

  传统砖图和非传统砖图:(借用官方说明里面的分类方式)

技术图片

  我们知道砖图是满足于多少个单位大小变动然后形成一块儿砖,这里我们拿K线图进行对比来看。

  K线:K线是时齐的数据表示方式(也就是说,规定好时间大小:比如30分钟,15分钟... ...,所有的K线四价(开高低手)都是在规定的这一个周期内去变化,只有当前周期结束了,下一个周期开始,然后在进行变化)。就好比我规定一个常规动作必须多长时间完成,不管你完成的“质量”如何。

  砖型图:砖型图是价齐的数据表示方式。时间不重要,你必须满足我设定的价格范围才能形成数据的表示,不满足不形成。就好比,我拿500ml的杯子,满足500ml我倒一次,不满足我继续等待。

  但是我们可以看到在Multicharts当中表示砖图属性当中有一个周期选项。这里的意思时新砖型图里面加入了时齐的因素,把传统砖图就行改进形成新砖图(也就是官网当中指的非传统砖图),后面还有价格选择:组合方式(收盘价/开高低收),收盘中端(就是每天开盘重新计算),显示幽灵bar,烛芯,真实开盘价,这些都很好理解,具体可以看官网。

  定义一下

  传统砖图:设定方式周期1tick,单位大小(对应品种最小变动/设置变动)。

  非传统砖图:设定方式周期>1tick,单位大小(对应品种最小变动/设置变动)。

  区别:

  区别1:最重要的一个区别就是加入一个“刷新频率”的概念,传统砖图很好理解,baidu很多自己看吧,非常简单。就是满足就形成。

  区别2:非传统砖图,也就是说为什么要有一个周期选择,就是把时间的变量加入进来,是在一个对应的K线周期范围内去完成,也就是时齐+价齐的一种形成方式。

  区别3:要理解非传统砖图,一定要对应着K线图来看。当前的砖型图价格的形成对应K线图来形成和观察。

  重点:

  为什么Muticharts要有这么一个非传统砖图,因为非传统砖图比传统砖图表示数据更好呗!存在就是合理的。

 

5. 第二大类问题:

  以非传统砖图最简单的方式为例解释非传统砖型图的形成方式,添加流程图解释,这样会更加明白。

  去除设定:幽灵bar,烛芯,真实开盘价(这三个不勾选,很简单理解自己看一下就明白了)

  保留设定:收盘时中断(就是每天开盘最为砖型图计算的一个起点,不勾选就是从图表开始的第一个K线位置继续宁计算),周期(设定1分钟,因为>1tick之上的刷新频率用1分钟比较看的清晰一些,其他一次类推)固定单位:5个点,以当前官网例子。

  我们观察组合方式有两种:

  技术图片开高低收方式/收盘价方式,因此我们分两种情况分别解释一下。解释了这两种情况也就对非传统砖图的概念

  设定概念和注意

    A:K线的时间序列:也就是K线的价格序列包含时间,包含开高低收。

    B:砖型图的时间序列:也就是目标形成的砖型图的时间序列,包含砖型图的开高低收,时间。

    C:触发价格:跟砖型图有关,这个概念需要保留。

    D:一定要拿砖型图的周期和K线图的周期对比进行观察,1分钟砖型图 对应 1分钟K线图。

 

  第一部分:以组合方式=收盘价,周期 = 1分钟,单位大小 = 5,收盘时中断

  Ø 1.1 以收盘价作为组合方式来说,如何都满足的话肯定要少一个块儿砖。

   解释:

    K线序列:A  B  C  D  E  F  G.... ....

    砖型序列:        A‘  B’  C‘  D’  E‘  F’  G‘... ....

  这也就是可以看出,K线图开盘时第一根K线的Close价格只是作为一个起始的价格进行计算。

  Ø 1.2 第零步:K线1分钟序列:

    time:  916.00    917.00    918.00    919.00    920.00    921.00    922.00    923.00  

    close:   28685.00   28708.00     28715.00          28699.00           28691.00          28702.00           28697.00          28687.00

  

  Ø 1.3 第一步:确定第一块砖的开盘价

    time:     未确定

    BricOpen:  28685.00   

 

    if time=开盘 then begin

       BricOpen = Close;  //第一块砖的开盘价等于第一个bar的收盘价

       BricClose = Close;  //第一块转的收盘价等于一个bar的收盘价,因为这里时按照时间序列写的默认等于close,暂时按照K线时间序列进行时齐。

       BricTime = 0;    //第一块砖的时间初始化为0,表示未完成

       TriggerPrice = Close;  //触发价 = 第一个bar的收盘价

       BricOne = 0;  //单独处理第一块砖

       BricCondition = 0;   //第一块砖的涨跌状态初始化为0,1为上涨,-1为下跌

    end;

 

  Ø 1.4 第二步:确定第一块砖的收盘价和时间

    time:    917.00

    BrickClose:    28690.00

 

    if time>开盘 and time <= 收盘 then begin

      if BricOne = 0 then begin                //如果第一块砖还没处理完毕

        if Close - TriggerPrice[1] > SetPoint then begin                   //如果当前的收盘价大于触发价格设定点位,那么认定为上涨砖

          BricOpen = BricOpen;             //上涨砖的开盘价等于第一个K线的开盘价

          BricClose = BricOpen + SetPoint;        //上涨砖的收盘价等于开盘价+设定点位

          BricTime = Time;               //上涨砖的时间等于当前K线触发时间

          TriggerPrice = Close;             //保留第一块砖的触发价 = 真实K线收盘价

          BricOne = 1;                 //第一块砖处理完毕,状态设置为1,不再处理第一块砖状态。

          BricCondition = 1;              //第一块砖处理完毕,标记为上涨状态

        end;

        if Close - TriggerPrice[1] < -1*SetPoint then begin     //如果当前的收盘价价格小于触发价格设定点位,那么认定为下跌砖

          BricOpen = BricOpen;             //下跌砖的开盘价等于第一个K线的开盘价

          BricClose = BricOpen - SetPoint;       //下跌砖的收盘价等于开盘价-设定点位

          BricTime = Time;              //下跌砖的时间等于当前K线触发时间

          TriggerPrice = Close;            //保留第一块砖的触发价 = 真实K线收盘价

          BricOne = 1;                //第一块砖处理完毕,状态设置为1,不再处理第一块砖状态。

          BricCondition = -1;             //第一块砖处理完毕,标记为下跌状态

        end;

      end;

 

      if BricOne = 1 then begin      //开始处理第二块砖

        XXXXXXXXXXXXXX

      end;

    end;

    

  Ø 1.5 第三步:开始处理第二块及其后面的砖

       继续第二步红色代码

      if BricOne = 1 then begin      //开始处理第二块砖,和第一块砖/后面的砖比较涨跌状态共有四种

        if  BricCondition[1] = 1 and Close - TriggerPrice[1] > 0  then begin       //上一块砖为上涨,当根砖为上涨

          BricOpen =  BricClose[1]  +  IntPart((TriggerPrice[1] - BricClose[1])/SetPoint) * SetPoint;

              //当根砖的开盘价为 IntPart (上一根的触发价 - 上一根的收盘价)/设定点位,然后取整,根据得到的倍数*设定点位 + 上一根收盘价。

              //如果为0表示价齐(当根开盘价=上根收盘价)

            if Close > (BricOpen + SetPoint) then begin

              BricClose = BricOpen + SetPoint;          //当根上涨砖的收盘价等于开盘价+设定点位

              BricTime = Time;                  //当根上涨砖的时间等于触发价时间

              BricPrice = Close;                //当根上涨砖的触发价 = 真实K线收盘价

              BricCondition = 1;                //标记当根为上涨砖 = 1

            end;

        end;

 

        if  BricCondition[1] = 1 and Close - TriggerPrice[1] < 0 then begin  //上一块砖为上涨,当根砖为下跌

          if Close < BricOpen[1]  then begin    //当根下跌砖的收盘价小于上一块儿上涨砖的开盘价,证明已够下跌幅度

            BricOpen = BricClose[1];      //当根下跌砖的开盘价 = 上一根涨砖的收盘价

            BricClose = BricOpen - SetPoint;  //当根下跌砖的收盘价 = 当根下跌砖的开盘价 - 设定幅度

            BricTime = Time;    //当根下跌砖的时间为当根触发砖的时间

            BricCondition = -1  //标记当根为下跌砖 = -1

          end;

        end;

 

        if  BricCondition[1] = -1 and Close - TriggerPrice[1] < 0  then begin       //上一砖为下跌,当根砖为下跌

          BricOpen =  BricClose[1]  -  IntPart((BricClose[1] - TriggerPrice[1])/SetPoint) * SetPoint;

              //当根砖的开盘价为 IntPart (上一根的收盘价 - 上一根的触发价)/设定点位,然后取整,根据得到的倍数*设定点位 , 上一根收盘价 - 这个倍数。

              //如果为0表示价齐(当根开盘价=上根收盘价)

            if Close < (BricOpen - SetPoint) then begin

              BricClose = BricOpen - SetPoint;          //当根下跌砖的收盘价等于开盘价-设定点位

              BricTime = Time;                  //当根下跌砖的时间等于触发价时间

              BricPrice = Close;                //当根下跌砖的触发价 = 真实K线收盘价

              BricCondition = -1;                //标记当根为下跌砖 = -1

            end;

        end;

 

        if  BricCondition[1] = -1 and Close - TriggerPrice[1] > 0 then begin  //上一块砖为下跌,当根砖为上涨

          if Close > BricOpen[1]  then begin    //当根上涨砖的收盘价大于上一块儿上涨砖的开盘价,证明已够上涨幅度

            BricOpen = BricClose[1];      //当根上涨砖的开盘价 = 上一根涨砖的收盘价

            BricClose = BricOpen + SetPoint;  //当根上涨砖的收盘价 = 当根下跌砖的开盘价 + 设定幅度

            BricTime = Time;    //当根下跌砖的时间为当根触发砖的时间

            BricCondition = 1  //标记当根为上涨砖 = 1

          end;

        end;

      end;

   

 

 

  第一部分:以组合方式=开高低收,周期 = 1分钟,单位大小 = 5,收盘时中断

 

 

 

 

(未完持续编辑)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

以上是关于量化投资_关于Multicharts砖型图(传统砖型图和非传统砖型图)最详细的解释的主要内容,如果未能解决你的问题,请参考以下文章

量化智能对冲搬砖交易系统开发,自动交易软件开发

量化投资

人工智能关于量化交易的知识点

量化交易投资入门

量化基于文本挖掘的量化投资应用

基于文本挖掘的量化投资应用