近期,好友(就是凌波微步大)與我討論到把賠到不行的策略對做這件事(他也有發文講這事)。真的要做的話,我們第一件要做的事情就是先把策略績效中的交易成本因素剔除。
由於我們還打算跟超級爛策略對做(你叫多單,我就下空單),所以最好把策略績效修改成,每做一筆交易就算平出也能拿到獎金,如果在這種條件下,還能做到賠錢,那真無疑是地獄倒楣鬼:一空就漲、一多就跌。因此,我先寫個函數來把原始策略績效改成剔除交易成本還附送獎金,產生負面評估的原始材料。
函數名稱: _fancyDaulyEquity(A, B)。參數A:抓取幾天前的 fancyEquity。參數B:每口交易成本設定。其他就自行看 code 研究吧。
由於我們還打算跟超級爛策略對做(你叫多單,我就下空單),所以最好把策略績效修改成,每做一筆交易就算平出也能拿到獎金,如果在這種條件下,還能做到賠錢,那真無疑是地獄倒楣鬼:一空就漲、一多就跌。因此,我先寫個函數來把原始策略績效改成剔除交易成本還附送獎金,產生負面評估的原始材料。
函數名稱: _fancyDaulyEquity(A, B)。參數A:抓取幾天前的 fancyEquity。參數B:每口交易成本設定。其他就自行看 code 研究吧。
input: DaysAgo(Numeric), costPerContract(Numeric);
var: tradeAmount(0), totalCost(0), totalContracts(0), fancyEquity(0);
array: DailyfancyEquity[](0);
tradeAmount= i_CurrentContracts;
if tradeAmount<>tradeAmount[1] then
totalContracts= totalContracts + pos(tradeAmount-tradeAmount[1]);
totalCost= totalContracts * costPerContract;
fancyEquity= i_OpenEquity + 2*totalCost;
once array_setmaxindex( DailyfancyEquity, 1 );
if sessionlastbar then begin
array_setmaxindex( DailyfancyEquity, array_getmaxindex(DailyfancyEquity)+1 );
_arrayShift( DailyfancyEquity );
DailyfancyEquity[1]= fancyEquity;
end;
if totalContracts>0 then begin
if DaysAgo=0 or sessionlastbar then
_fancyDailyEquity= fancyEquity
else
_fancyDailyEquity= DailyfancyEquity[DaysAgo];
end;
我們用個指標畫圖來比較一下 _fancyDailyEquity 與 i_openEquity 的差別。