1. 程式人生 > 實用技巧 >量化投資_EasyLanguage/PowerLanguage教學課程__【第二篇專題】__【第十章bar內模式與非bar內模式】

量化投資_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.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.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= 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/