COCO研究院

 找回密碼
 註冊
搜索
查看: 10938|回復: 6

用自訂標準做最佳化排序

[複製鏈接]
發表於 16-4-5 09:46 | 顯示全部樓層 |閱讀模式
在作策略比較或策略選擇時, 先要決定績效衡量標準(Criteria)
這標準可能是淨利, MDD, 淨利/MDD, Sharpe Ratio,.....
Multicharts 在作最佳化時, 內建的排序基準大多只考慮獲利或風險單一層面, 少有獲利與風險同時考量的Criteria.
Profit Factor 勉強算是有同時考慮獲利與風險, 但是仍不夠周延.
且大多數交易人愛用的淨利/MDD與 Sharpe Ratio都不在其中

如果要用內建Criteria以外的績效指標來衡量績效, 有兩個方法:
1. 利用最佳化功能中的 Custom Criteria
Custom Criteria.PNG
按下Edit之後, 可以用sript language 輸入你想要使用 Criteria
裡面有個現成的淨利/MDD, 只要點取 Custom Criteria 就生效了
只要把Sort的主Key設定為Custom Criteria,
最佳化報表就會把不同參數的淨利/MDD顯示出來, 並將結果依淨利/MDD的高低來排序
Custom Criteria Report.PNG

但Custom Critria 的限制是: 在script language中, user 只能取用策略的整體績效數據來做運算,
個別K棒裡的數據則無法取得, 如此一來, Sharpe Ratio等需要每日報酬的Criteria 就無法使用這個方法了



 樓主| 發表於 16-4-5 10:04 | 顯示全部樓層
2. 利用 SetCustomFitnessValue 這個指令
在最佳化報表裡有一欄叫Custom Fitness Value,
這個變數可以在Study中被取用到.
MC 內建有一個 !optimize by Sharpe ratio! 的Signal,
就利用到SetCustomFitnessValue 這個指令來達成以Sharpe Ratio來對策略作排序.
這個Signal該如何搭配你的主Singal服用呢?
只要在策略設定時, 將 !optimize by Sharpe ratio! 訊號加入即可
AddSignal.PNG
如果要使用月報酬率來計算Sharpe Ratio, input設0.
如果要使用日報酬率來計算Sharpe Ratio, input設1.

如此一來, 最佳化報表中custom fitness value 就會顯示出sharpe value的值了




 樓主| 發表於 16-4-5 11:17 | 顯示全部樓層
本帖最後由 alexliou 於 16-4-5 13:04 編輯

自訂Sharpe Ratio函數
但內建的Sharpe Ratio函數(其實它挺複雜的)有幾個缺點:
1.沒有年化, 所以用月報酬和使用日報酬無法同時比較
2. 採取複利的概念, 對於永遠是一口單的策略不是很適用
3. 它以日曆日(or月)來計算報酬率, 而非交易日
4. 策略未持倉的日數, 不納入統計報酬率平均數與標準差的統計
第4點對永遠有單的策略有利, 因為空手時間多的策略, 通常損益的波動度較低,
如空手的交易日不列入計算標準差, 會使得分母變小,標準差相對變大.

所以我自己寫了一個MySharpeRatio函數,
它以交易日的日損益為基礎, 不考慮 Initial Capital
計算Sharpe Ratio = (日損益平均數 / 日損益標準差)  * SQRT(252)
這個函數可以:
a) 在圖形上方顯示Sharpe Ratio的值
Chart.PNG
b) 可以選擇是否要將每日損益輸出到檔案供進一步分析
c) 會自動判斷是否在最佳化過程中, 在最佳化時, 則只設定Custom Fitness Value,
而不作上述兩個動作以節省時間與避免無謂輸出
MySharpeRatio.zip (2.01 KB, 下載次數: 74, 售價: 5 金錢)

該如何服用這個函數呢?
只要在你的主信號最後一行加入
Z_MySharpeRatio(lastBaronChart_s, true, "D:\Trading\DailyReturn.csv");
(請先確定有D:\Trading 此一目錄)

如不要把每日損益輸出至檔案, 就改成
Z_MySharpeRatio(lastBaronChart_s, false, "D:\Trading\DailyReturn.csv");  



評分

參與人數 3金錢 +6 收起 理由
vandercooper + 2 太強了
phantom + 2 感謝分享
bacardi + 2 感謝分享

查看全部評分

發表於 16-10-9 20:10 | 顯示全部樓層
alexliou 發表於 16-4-5 11:17
自訂Sharpe Ratio函數
但內建的Sharpe Ratio函數(其實它挺複雜的)有幾個缺點:
1.沒有年化, 所以用月報酬和 ...

您好請問我編譯此函數時 Z_MySharpeRatio
跳出錯誤 SetCustomFitnessValue 說這個函數找不到 怎麼辦??

謝謝!
 樓主| 發表於 16-10-11 08:28 | 顯示全部樓層
kk20037 發表於 16-10-9 20:10
您好請問我編譯此函數時 Z_MySharpeRatio
跳出錯誤 SetCustomFitnessValue 說這個函數找不到 怎麼辦??
...

SetCustomFitnessValue 是內建指令, 不是函數應該不會找不到才對
是不是因為您用的是券商版
任何輸出相關的功能都被除去了呢?



發表於 23-1-8 15:10 | 顯示全部樓層
我用12版,出現錯誤訊息是
MultiCharts Standard does not allow using the following reserved words: DefineDLLFunc, External, External Method. The words is available in MultiCharts Gold.
試了一下不是SetCustomFitnessValue不能用,因為我把原來這個函式拿去另外的地方編譯是會過的,printToFile都註解掉就行了
發表於 23-2-23 13:25 | 顯示全部樓層
太好了 這個正是我尋找很久的東西 感謝alexliou大
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-4-23 22:54

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 | AI繪圖AI超擬真美女AI beauty AI Stable DiffusionAI正妹AI Lookbook