• 量化投资_关于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                   //如果当前的收盘价大于触发价格设定点位,那么认定为上涨砖

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

              //上涨砖的收盘价等于开盘价+设定点位

              //上涨砖的时间等于当前K线触发时间

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

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

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

            end;

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

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

              //下跌砖的收盘价等于开盘价-设定点位

              //下跌砖的时间等于当前K线触发时间

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

               //第一块砖处理完毕,状态设置为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       //上一块砖为上涨,当根砖为上涨

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

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

                if Close > (BricOpen + SetPoint) then begin

                  //当根上涨砖的收盘价等于开盘价+设定点位

                  //当根上涨砖的时间等于触发价时间

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

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

                end;

            end;

     

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

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

                //当根下跌砖的开盘价 = 上一根涨砖的收盘价

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

                //当根下跌砖的时间为当根触发砖的时间

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

              end;

            end;

            ..............................................................................(略)

          end;

       

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

       Ø 2.1 第一步:开盘价与最高价和最低价进行对比,形成新的价格序列。距离最近的靠近开盘价,重组序列,如果最高价靠近开盘价,序列将不变。示意图如下:

      

    6. 第三大类问题!  

      Multicharts在V9版本(现在在用的中国版)在砖图的构成上面有Bug,因此不能用于实盘交易。所以根据所形成的砖图的构成原理,这里对砖图进行时齐和价齐的重新构造,方便算法的计算和应用。

    6.1 关于bug的问题!

      bug1:在设置砖图的组合方式的时候,“开高低收”和“收盘价”这两个选项无法进行选择,也就是你选择开高低收,关闭重新开启也是一样,选择收盘价开启还是选择开高低收。

      

      bug2:根据官宣论坛当中的解释,在实际的砖图中存在这样的bug,如图所示:

      砖图是二分的数据显示方式,这样显示第一:不是二分的形成方式,而且根据官宣论坛当中的解释无法解释这两块砖的形成。

      bug3:砖图的时间无法对齐,也就说,按照K线的close价格来计算砖图的大小,在09:01/21:01这个时间(以1分钟非传统砖图为例)是无法形成第一块砖图的,只有在第二个K线09:02/21:01或者说再大于这个时间的序列满足才可以,但是Multicharts上面存在两种情况都存在的可能,根据官宣论坛的解释也无法进行对齐。如图所示:

                                 

      我们可以看到第一幅图,21:01并不以第一根K线1分钟的close价格计算的(因为按照官宣解释,以收盘价格进行计算的话,只取开盘第一分钟K线的收盘价)砖图这个时间是无法形成的,只有第二个K线往下才有可能形成;但是观察第二幅图符合官宣的解释。

    6.2 锁定规则:

      根据官宣的解释,我们这样还是以1分钟K线为例子。我们锁定规则如下:

      第一:收盘平仓和不选择幽灵bar的状态,21:01/09:01为开盘第一根bar,以当根bar的收盘价作为非传统砖图第一块砖的开盘价,且在这个时间只锁定一个砖图的开盘价。

      第二:大于上面两个时间段,也就是说在盘中计算砖图的时候,按照对应的1分钟K线的时间进行对齐,因为画图必须时按照对应的K线时间序列的时间进行画图,如果当根没有形成砖,也必须画出这块儿砖,因此暂时以相等进行处理(后续需要想二分的那种砖图,可以把相等的砖抹去,把二分的砖存于数组当中计算也是可以的,后续如果有机会我把砖图的存放和砖图的提取也写出)

      第三:对于收盘的最后一根K线bar,如果当根不够砖图生成的大小,以最后一根bar的收盘价作为砖图的收盘价。

      第四:只有二分状态,像bug2当中的那种情况不允许发生。

      第五:按照官宣当中的“非传统砖图-Close”的形成方式进行生成,可能有些不同的就是如下:

      

      这是涨砖方式的计算,下跌砖的计算方式相同。

    6.3  代码显示示意图:

      

      以夜盘一段时间为例,实现砖图的形成过程。这样实现了砖图的确定关系,实现了时齐和价齐的状态,以上图的示例实盘应用可以直接使用,也是去重(去除相等的砖)存入数组中计算相关的数据,这样在数组当中计算的值是和下图二分计算的砖图值是一样的。

    最终实现效果图如下:

     

     实现代码见附录2:量化投资_关于Multicharts砖型图(传统砖型图和非传统砖型图)最详细的解释(2)

    https://www.cnblogs.com/post/readauth?url=/noah0532/p/10714633.html

      

  • 相关阅读:
    搭建Java环境
    【leetcode】257. 二叉树的所有路径
    【leetcode】563. 二叉树的坡度
    【leetcode】401. 二进制手表
    【leetcode】859. 亲密字符串
    【leetcode】1441. 用栈操作构建数组
    【leetcode】1502. 判断能否形成等差数列
    【leetcode】605. 种花问题
    【leetcode】1252. 奇数值单元格的数目
    【leetcode】1640. 能否连接形成数组
  • 原文地址:https://www.cnblogs.com/noah0532/p/10702877.html
Copyright © 2020-2023  润新知