blj0511 發表於 16-12-22 18:03

Multicharts程式交易結算日處理方式與其優缺點(含程式碼)

var:LastTradingDay(false);
if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)=3 then begin
        LastTradingDay=True;
end else begin
        LastTradingDay=False;
end;


結算日換到下月倉繼續(不處理結算日)
程式碼:(無)需在MC下單機設定換倉或是自行手動換倉
優點:
1.策略有延續性與合理性,不會影響後面策略的出手
2.對於一年出手次數很少的策略會有幫助
缺點:
1.需要另外設定或是手動換倉
2.在歷史績效的結果會多算績效,也就是實際會比歷史績效少, why?因為有除權息的關係,主要都來自結算日留空單被多算了績效,舉個例: 程式空 9100,結算價9000,此時次月因為除權息,所以換倉價位只有8850,假設結算日後出場價為8800,歷史績效的算法就是9100-8800=300,但是你實際上是(9100-9000結算日出場價)+(8850-8800)=150,因此歷史績效足足多算了150點,加上台股長期次月價都比本月價低,因此長期下來會被多計算績效,造成嚴重誤差,但相反的,如果是多單留倉,就會變成少算積效,因此一增一減不會差很多,但是長期來說會有相當程度多算績效


結算日一律出場
程式碼:
if LastTradingDay then setexitonclose;
缺點:
1.切斷策略延續性,結算日完從頭開始
2.回測績效可能會少一些,但至少正確
優點:
1.歷史績效計算正確
2.免除換倉麻煩
3.結算日沒倉,可好好睡一覺管它美股漲跌

結算日出場,隔天開盤依照結算日收盤前倉位再進場
程式碼:
if LastTradingDay then begin
if sessionlastbar then begin
if marketposition>0 then buy next bar at market;
if marketposition<0 then sellshort next bar at market;
end;
setexitonclose;
end;
缺點:
1.隔天在進場時,停損利出場位置會歸0重新計算
優點:
1.歷史績效計算正確
2.策略具有延續性


結算日空單出場,多單轉倉(不處理)
程式碼:
if LastTradingDay then begin
if marketposition<0 then setexitonclose;
end;
缺點:
1.多單要記得設定或手動換倉
優點:
1.只有多單要換倉,空單結算,少一半換倉的動作
2.歷史績效只會被少算不會多算,也就是實際獲利會比較多不會比較少
3.至少有一半以上的延續性

以上方法哪種方式才好,見仁見智,重點是套入你的程式,看看會怎樣再做決定,我個人偏向結算日一律出場,因為不管哪種方式,差異都不會太大(除非你一年出手很少),而且結算日沒倉我可以好好睡一覺,管它美股漲跌,給自己喘口氣


Efren 發表於 18-11-26 11:12

感謝觀念分享,受用良多。

Golden 發表於 18-10-19 08:10


感謝分享,受益良多

abottle 發表於 18-10-18 23:14

觀念問題正是新手入門的好貼文

交易愛好者 發表於 18-8-30 12:40

新手學習了,多謝分享

joedoit 發表於 18-7-22 20:00

感謝無私的分享, 新手學習到觀念了

anyo5152 發表於 18-7-5 20:46


感謝無私的分享, 新手學習了.

u04122 發表於 18-1-24 00:09

感謝版主無私的分享, 新手學習了.

ericif2 發表於 18-1-23 22:25

新手學習~~感謝分享

MaxWu 發表於 17-10-23 19:39

感謝分享,努力學習。

kingwang 發表於 17-8-10 20:19

感謝分享,受益良多

yuanlin 發表於 16-12-27 14:31

新手學習了,多謝分享

kdy0214 發表於 16-12-27 14:54

感謝無私分享~推!!

cukie 發表於 17-10-23 21:41

好資料感謝分享{:4_662:}

iwjmfupkwos 發表於 18-12-20 07:45

多謝分享,值得學習{:4_113:}
頁: [1] 2
查看完整版本: Multicharts程式交易結算日處理方式與其優缺點(含程式碼)