回測時選擇 "模擬逐筆洗價", 進出場價位並非 "逐筆洗價" 結果

  •   842 
  • 最後發表   ry0203  2017 六月 13
ry0203 發文於   2017/05/30

 

if (close >= close[1] * (1 + 2/100)) //漲幅超過2%
then ret = 1;

用以上程式測試回測採 "模擬逐筆洗價":

1. 用日頻率, 2017/5/24 - 2017/5/25, 作多 "台紙(1902)"

2. 勾選 "模擬逐筆洗價", 最大同時進場次數設1

3. 停損設8%

回測結果進場價位卻是2017/5/24最高價 (16.4), 而非 "逐筆洗價" 的漲幅2%處 (15.25)

 

附註說明: 觀察多筆 "逐筆洗價" 進場價位, 不是當天最高價, 就是開盤價, 顯然不是 "逐筆洗價" 的結果, 如此的回測績效與實際操作會有很大的差異.

排序方式: 標準 | 最新
XQ小幫手 發文於   2017/05/31

Hi ry0203,

您的理解正確, 

"模擬逐筆洗價", 進出場價位確實並非 "逐筆洗價" 結果,

 

至於模擬逐筆洗價,也就是模擬K棒是怎麼模擬出來的,小幫手再詳細說明如下:

當您勾選模擬逐筆洗價功能時,系統會依照這根K棒所對應的歷史成交資料來產生多筆 O/H/L/C/V 的序列,並且依照此序列一一判斷是否需要進場以及停損/停利。

資料頻率為【日線】:
根據此頻率的 【5分鐘】的資料,模擬當時K棒的 O/H/L/C 形成順序,每筆K棒執行至多 4 次,讓每次執行時的 close 價可以碰觸到 O/H/L/C 這四個價位,模擬這一筆 K 棒的發展順序。

如果這這一筆 K棒 的資料順序是O,H,L,C的話:
第一次洗價:O/O/O/O,假設此時 close = O
第二次洗價:O/H/O/H,假設此時 close = H
第三次洗價:O/H/L/L ,假設此時 close = L
第四次洗價:O/H/L/C ,假設此時 close = C

如果這一筆 K棒 的資料順序是 O,L,H,C的話:
第一次洗價:O/O/O/O,假設此時 close = O
第二次洗價:O/O/L/L ,假設此時 close = L
第三次洗價:O/H/L/H ,假設此時 close = H
第四次洗價:O/H/L/C ,假設此時 close = C

若H/L在同一根 1 分鐘 K棒出現的話,則依照這一根 K棒是紅棒(Close > Open) 或是黑棒(C > O)而有所不同。如果是紅棒,則順序為O,L,H,C,反之則順序為 O,H,L,C。

若 H or L 價位與 Close 價或是 Open 價相同時,則可以省略其中部分洗價時機點。

成交量則平均分布到每一次洗價的時機點。例如如果這筆 K棒 洗三次,則第一次成交量 = 1/3V ,第二次成交量= 2/3V, 最後一次則是V。

由於系統端沒有這個商品的 1 分鐘對應資料時,則模擬 O/H/L/C 的方式會改成依照 High - Open 根 Open - Low 的比較決定:
如果 High - Open < Open - Low 的話,則假設K棒的發展為O,H,L,C
反之則假設K棒的發展為O,L,H,C

以上說明,謝謝。

ry0203 發文於   2017/06/01

對XQ的使用者來說, "可以回測" 絕對是很重要的原因, 但對使用回測功能的使用者來說, 進出場計算不正確的回測結果, 跟沒有回測是一樣的

1. 請問這樣不精確的回測結果要怎麼參考? 隨便寫個策略加上一個 "當日漲幅超過2%就市價進場" 的條件, 回測的進場價就不正確, 使用者要怎麼知道這個策略的績效如何? 這部分貴公司有何建議? 使用者要如何得到正確或更接近正確的回測結果?

2. 若回測可以使用print, 我還可以將進出場價位print出來, 自己用Excel來計算績效,  但https://forum.xq.com.tw/thread/%E7%84%A1%E6%B3%95%E5%9C%A8%E8%AD%A6%E7%A4%BA%E4%B8%AD%E4%BD%BF%E7%94%A8print/ 又確認 "回測沒有支援Print語法,故無法在回測中使用print", 這對使用者來說XQ回測不但進出場價位不正確, 連使用者要 debug 的 print 都不能使用, 請問我每個月繳錢得到的回測軟體是這樣, 要怎麼用?

3. 貴公司在print指令的介紹:

- print語法調整 http://xsblogs.xq.com.tw/print%E8%AA%9E%E6%B3%95%E8%AA%BF%E6%95%B4/

- https://xshelp.xq.com.tw/index.aspx?HelpName=Print&group=GENERALFUNC

都沒提到print不能在警示回測中使用的限制, 且在

- 如何運用print指令來抓程式的臭蟲 https://www.xq.com.tw/lesson/xspractice/%E5%A6%82%E4%BD%95%E9%81%8B%E7%94%A8print%E6%8C%87%E4%BB%A4%E4%BE%86%E6%8A%93%E7%A8%8B%E5%BC%8F%E7%9A%84%E8%87%AD%E8%9F%B2/ 

還提到 "Print指令只有在指標或是警示腳本內才會有作用", 都沒提不能在警示回測中使用 (指標回測是ok的), 這是否有刻意規避以達宣傳效果, 請問貴公司要對付費使用者如何交代?

XQ小幫手 發文於   2017/06/03

Hi ry0203,

待小幫手詢問相關人員後,再向您說明,謝謝。

XQ小幫手 發文於   2017/06/07

Hi ry0203,

謝謝您的指教,小幫手將依序回覆您的問題,

 

1. 請問這樣不精確的回測結果要怎麼參考? 隨便寫個策略加上一個 "當日漲幅超過2%就市價進場" 的條件, 回測的進場價就不正確, 使用者要怎麼知道這個策略的績效如何? 這部分貴公司有何建議? 使用者要如何得到正確或更接近正確的回測結果?

若您需要較準確的回測結果,可別勾選模擬逐筆洗價功能,並且將資料頻率調至1分鐘,回測結果會較為準確。

 

2. 若回測可以使用print, 我還可以將進出場價位print出來, 自己用Excel來計算績效,  但https://forum.xq.com.tw/thread/%E7%84%A1%E6%B3%95%E5%9C%A8%E8%AD%A6%E7%A4%BA%E4%B8%AD%E4%BD%BF%E7%94%A8print/ 又確認 "回測沒有支援Print語法,故無法在回測中使用print", 這對使用者來說XQ回測不但進出場價位不正確, 連使用者要 debug 的 print 都不能使用, 請問我每個月繳錢得到的回測軟體是這樣, 要怎麼用?

由於回測功能,是在伺服器端去進行運算,故Print語法回測時,不會匯出.txt檔案,以及在XS編輯器【執行】tab中顯示數據;

小幫手如果需要Debug回測腳本時,會先將此腳本轉換成自訂指標腳本,使用自訂指標腳本來Debug。

 

您的第三點問題如同小幫手第二點的答覆,以上,謝謝。

 

 

ry0203 發文於   2017/06/12

1. 關於小幫手提到: "若您需要較準確的回測結果,可別勾選模擬逐筆洗價功能,並且將資料頻率調至1分鐘,回測結果會較為準確。"

這回答有點敷衍, 用1分鐘線的OHLC模擬, 當然會比用日線的OHLC模擬更接近真實tick的逐筆洗價, 但問題是: 策略是依日線寫出 (例如使用到日KD), 逐筆洗價是希望盤中就進場以求有更好的價位, 難道我所有的策略都要用1分鐘線? 再者, 要將日線策略調整成1分鐘後, 並不是直接執行結果就會跟用日線是一樣的, 例如若用到日線的KD, 為了要在1分鐘線使用, 改腳本的幅度可能很大且複雜, 哪是一句話 "將資料頻率調至1分鐘" 這麼簡單的!

2. 關於小幫手提到: "小幫手如果需要Debug回測腳本時,會先將此腳本轉換成自訂指標腳本,使用自訂指標腳本來Debug。"

這問題也受限於XQ, 因為進場和出場策略必須寫在兩個不同的腳本中, 而非在單一腳本中 (例如用ret=1代表進場, ret=-1代表出場), 所以將進場策略直接從 "警示" 轉到 "指標" (假設所有 "警示" 的函數及可用欄位跟 "指標" 一樣???) 後, 也只能知道 "可能的" 進出場點, 進場後有沒有出場, 出場後有沒有進場, 現在是否是空手 (已進場的不再重複進場), 都無法知道! 簡單講, 要將進場及出場策略改在 "指標" 中執行, 想用 print 出來的資料來計算績效, 絕不是個小工程!

XQ小幫手 發文於   2017/06/13

Hi ry0203,

謝謝您的指教,小幫手將依序回覆您的問題,

 1. ... 例如若用到日線的KD, 為了要在1分鐘線使用, 改腳本的幅度可能很大且複雜, 哪是一句話 "將資料頻率調至1分鐘" 這麼簡單的!

如果修改腳本上有任何問題,可以在此發文章詢問,會有熱心版友協助您。

 

2. ... 簡單講, 要將進場及出場策略改在 "指標" 中執行, 想用 print 出來的資料來計算績效, 絕不是個小工程!

用指標腳本撰寫回測計算績效,確實會比用警示腳本的回測功能複雜許多;

因此小幫手建議若回測警示腳本要Debug,轉成自訂指標腳本撰寫判斷進出場點即可,

若進出場點與警示腳本回測的進出場點相同,則Debug成功。

如果修改腳本上有任何問題,可以在此發文章詢問,會有熱心版友協助您。

 

以上,謝謝。

 

 

  • 按讚來自於
  • 劉彥宏
發表回覆
Close