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