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