量化投資_EasyLanguage/PowerLanguage教學課程__【第二篇專題】__【第十章bar內模式與非bar內模式】
第十章:bar內模式與非bar內模式
1、MC對於bar的執行模式區分bar內模式與非bar內模式兩種,區分這兩種模式主要是為了(本人認為)是為了加速程式碼的運算速度。
2、可以根據訊號設定開啟bar內模式,也可以在程式碼上方寫入[IntrabarOrderGeneration=True],表示開啟bar內
3、回測時:
不開始bar內交易:每根K線收盤,計算一次
開啟bar內交易:根據精細資料的選擇作為計算週期
【精細資料】
4、實時:
不開始bar內交易:每根K線收盤(收到收盤tick時),計算一次
開啟bar內交易:每逢新tick計算一次
5、圖示:
6、開始bar內和不開啟bar內,barStatus的異同
開啟bar內:
//歷史行情讀取時
time= 1309.00 barstatus= 2.00 time= 1309.00 barstatus= 0.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1309.00 barstatus= 1.00 time= 1310.00 barstatus= 2.00
//實時資料時
time= 1311.00 barstatus= 2.00
time= 1312.00 barstatus= 0.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 1.00
time= 1312.00 barstatus= 2.00
不開始bar內:
time= 1301.00 barstatus= 2.00 time= 1302.00 barstatus= 2.00 time= 1303.00 barstatus= 2.00 time= 1304.00 barstatus= 2.00 time= 1305.00 barstatus= 2.00 time= 1306.00 barstatus= 2.00 time= 1307.00 barstatus= 2.00 time= 1308.00 barstatus= 2.00 time= 1309.00 barstatus= 2.00
【總結】:
在開啟bar時,讀取歷史行情的情況下是基於精細資料而言,因此在開始的第一個狀態會保證讀取的是收盤tick,然後再用開盤tick覆蓋掉,所以顯示了2後再顯示0,實時資料保持一致。
在不開始bar時,資料是在bar結束時更新一次。
7、bar內模式和非bar內模式,bar資料取值的不同點
非bar內模式下:
根據bar的合成規則:當新的一筆tick來臨,如果觸發bar的完成,此時在bar的最後一個tick會計算一次,形成收盤價,此時新來的這一筆tick就叫做下一個bar的開盤tick。
【舉例】:
第一步: 【上一個未完成的bar】 ----(新tick來臨)-----(促成上一個bar完成)---- 【形成上一個bar的收盤價】 + 【形成下一個bar的開盤價】
第二步: (新tick來臨) = (開盤tick)【下一個bar的】
第三步: 【舊bar形成】←←←close[1]/open[1]/high[1]/low[1]... 瞬間完成...open of next bar →→→ 【新bar開始】
【總結】
在第三步的瞬間完成,我們發現此時可以取到兩類值:
第一類:舊bar的開高低收的值
第二類:新bar的開盤價
因此,這就解釋了在非bar內模式下,為什麼我們下單可以下“buy 1 shares Next bar at open of Next bar”,此時“open of Next bar”等於右側箭頭的那一瞬間完成的新bar開盤價。
在一種解釋是,我們發現當前正在形成的這根bar上面顯示的市價和本地時間不一致:
如圖所示,bar上面的實現顯示是36分鐘,而電腦bar顯示的時間是35分鐘,而我們在這個bar結束時,列印的是35分鐘
這就解釋了,在MC機制下,bar上的時間總是提前是因為當前的的這個時間是準備要完成的時間,而不是完成後的時間。直白說就是當一個新開盤tick來臨時,等待這個bar的時間結束行程舊bar時的那一刻列印資料,此時已經完成了。
也就是在交易程式碼中:
if XXX > XXX then....
這樣就可以不用採用回溯的方式,在上面所說的“瞬時完成”的那一刻,舊的時間已經完成了,此時已是過去式,新的價格來的,此時是正在進行時。因此不用回溯。
MC的這種機制和其他軟體的不太一樣。其他的軟體都是等bar形式後,才公佈此時形成的時間,而MC是新的tick來臨時,按照這個規定的時間來完成tick。一個是過去完成時,一個是將來完成時。
bar內模式:
bar內模式的取值方式是非常不一樣的。正如前面所說的,在非bar內模式下,在“瞬時完成”,這一刻會取到舊bar的開高低收價格和新bar的開盤價。因為MC對於非bar模式具有這樣一種計算模式。但是bar內模式是每根tick都進行計算,因此不存在這種計算模式。因此不能取“open of next bar”這樣的數值。而且從上面可以看到,在非bar內模式下,列印的是“順勢完成”這個時刻列印,而且列印的是上一個時間的值,但是bar內模式下是實時列印,列印的是當前時刻的值。
=================================================
之前的文章感謝大家的轉載,希望轉載時請註明出處,本人轉自其它網站的圖表一併感謝,謝謝~!
https://www.cnblogs.com/noah0532/