新手開發策略常犯的錯誤 by.程式交易 楊宗儒

交易邏輯有bug

這是一個常見的錯誤。例如 if close cross over high then buy next bar and market;站上當K高點買進多單。當根的收盤價 卻是無法穿過自己的高點,所以條件不成立 買賣訊號也不會出現。必須要改成 if close cross over high[1] then buy next bar and market (大於前面1根K棒高點) 邏輯才成立

在開發策略的時候 建議先把交易邏輯用筆紙寫下來並且用圖畫出來 逐一比對

未設定停損機制

有些策略回測績效看起來不錯 但是沒有設停損,有可能是賠了1000點後凹回來的,績效報表上看不出來 實際上交易沒有人承受得住

舉例說明

if close cross over average(close,20) then buy next bar at market;

if marketposition=1 then sell nex bar at entryprice+20 limit

翻譯成白話 就是站上20日移動平均線買進多單,停利設20點平倉

從回測的績效來看勝率和績效也許都不錯,但是沒有親身經歷過你會發現結果是美好的但是過程是煎熬的

未考量結算日平倉

不論是台指期或是其他商品,期貨到期日未平倉部位都必須參與結算

以台指期為例,結算日是每個月第三個星期三,不論多單或是空單到了這時間沒平倉就必須參加結算。程式訊號還有未平倉但實際上卻已經結算出場了,會導致實際部位和策略部位不相符。

另外 在除權息旺季近月分和遠月份合約價差很大 使用連續月份的策略結算日隔天常常遇到大跳空,導致回測和實際產生落差

在外期的交易上有些商品不能放到結算日才平倉 會有實物交割的風險,策略開發上必須把這些因素考量進去

未開啟細部回測

範例說明 setpercenttrailing(5000,10)

該函數的用法,就是當獲利超過5000 拉回10%停利出場

如果使用的K棒週期較長設定拉回的範圍太小,在當根K棒的回測上無法辨識當根進出的點位 會導致績效變成快樂表,以為找到了聖杯

建議新手不要使用IOG模式; 使用set指令記得開啟細部回測

未加入手續費和滑價

手續費和滑價是交易成本的一部份,策略本身若是交易次數很多,那麼這部分會是比較大的負擔;加入交易成本後和未加入交易成本 績效比對可能落差會滿大

交易次數過少樣本數太少

回測就是把固定的邏輯套用過去數據驗證 得到可信度高的參考依據。交易的筆數夠多 在大數據法則得到的分析會更客觀,但新手常常為了讓報表好看加入許多濾網而降低了交易次數(例如一年只有交易10筆),也許績效看起來很漂亮但可能不切實際

回測的區間越長越好??

台指期從2001年上市, 20年前的股市環境時空背景不同 很難有固定的一套方法20年來都穩定賺錢,跑最佳化的區間太長 有可能表現比較理想的參數出現在前面幾年,其實策略近年已經快不行了 但是回測報表整體看起來還不錯 

以上是新手入門 開始使用Multicharts寫策略會遇到的陷阱,之後有更多的內容再補充