很多人在測試留倉單時,往往都忽略了結算日當天,近月的契約已被結算掉了,隔日的新倉跳空,在實際上是參與不到的,這不管在參數最佳化或回測報表中,均無法顯示出來,為了要能更精細計算獲利的差異,應該要在結算日當天的13:25時將目前的部位先平倉掉,至隔日再依據策略決定是否建倉。在2003~2007四年的績效報表中,不平倉與平倉二種績效竟然可以差到20萬,為了能讓報表更能呈現實際情況,一定得看看平倉後的績效表現。
隔日建倉有二種做法,一種是隔日一開盤,自動建立昨日平倉掉的多空部位,另一種是等待下次訊號出現時再進場,不同的策略,會有不同的作法,所以本篇文章的將提供一個範本,可以由參數來設定這些交易的策略,讀者可以自行加入自己的進出場參數與進出場策略。
Inputs:IsAutoExit(true), IsAutoBuild(true) {,…其他參數.};
Variables:NeedLong(false), NeedShort(false) {,…其他變數.};
If Date <> Date[1] Then
Begin
If NeedLong Then
Buy(“LE_Settle”) At Next Bar Open;
If NeedShort Then
Sell(“SE_Settle”) At Next Bar Open;
If _IsSettleDay(Date[1]) Then
Begin
NeedLong = fasle;
NeedShort = false;
End;
End;
{
…
其他策略進出場條件
…
}
If Time > 1320 And IsAutoExit And _IsSettleDay(Date) And MarketPosition <> 0 Then
Begin
If MarketPosition > 0 Then
Begin
ExitLong(“LX_Settle”) At Next Bar Open;
If IsAutoBuild Then
NeedLong = true;
End;
If MarketPosition < 0 Then
Begin
ExitShort(“SX_Settle”) At Next Bar Open;
If IsAutoBuild Then
NeedShort = true;
End;
End;
2010年9月21日 星期二
2010年9月14日 星期二
[程式交易]計算最近幾日四價的均值
在前上一篇文章中寫到如何分鐘的策略中計算前幾日的最高最低價,本文將介紹如何計算前幾日四價(開高低收)的平均值。
函式原始碼:
{
NumericType : 傳入O, H, L, C四種字串來代表開盤價, 最高價, 最低價, 收盤價
DayCount : 計算的天數
}
Input : NumericType(String), DayCount(NumericSimple);
Variables : SumD(0), Counter(0);
SumD = 0;
For Counter = 1 To DayCount
Begin
If NumericType = "O" Then
SumD = SumD + OpenD(Counter);
If NumericType = "H" Then
SumD = SumD + HighD(Counter);
If NumericType = "L" Then
SumD = SumD + LowD(Counter);
If NumericType = "C" Then
SumD = SumD + CloseD(Counter);
End;
_AverageD = IFF(DayCount > 0, SumD / DayCount, 0);
函式原始碼:
{
NumericType : 傳入O, H, L, C四種字串來代表開盤價, 最高價, 最低價, 收盤價
DayCount : 計算的天數
}
Input : NumericType(String), DayCount(NumericSimple);
Variables : SumD(0), Counter(0);
SumD = 0;
For Counter = 1 To DayCount
Begin
If NumericType = "O" Then
SumD = SumD + OpenD(Counter);
If NumericType = "H" Then
SumD = SumD + HighD(Counter);
If NumericType = "L" Then
SumD = SumD + LowD(Counter);
If NumericType = "C" Then
SumD = SumD + CloseD(Counter);
End;
_AverageD = IFF(DayCount > 0, SumD / DayCount, 0);
2010年9月13日 星期一
[程式交易]計算最近幾日的高低點函式
在開發當沖策略時,常常會使用到前幾天的高或低價是否被突破,以做為進場的判斷,這些程式的寫法很類似,若每段訊號的程式都使用複製的方式,則一旦程式有錯,將會修改許多程式碼,最好的方式即是寫成函式來使用,這樣只需要修改函式部份即可。
以下為幾日最高價或最低價的函式原始碼:
[1]最高價(_HighestD)
Input : DayCount(NumericSimple);
Variables : HighestD(0), Counter(0);
HighestD = 0;
For Counter = 1 To DayCount
Begin
HighestD = IFF(HighD(Counter) > HighestD, HighD(Counter), HighestD);
End;
_HighestD = HighestD;
[2]最低價(_LowestD)
Input : DayCount(NumericSimple);
Variables : LowestD(0), Counter(0);
LowestD = 999999;
For Counter = 1 To DayCount
Begin
LowestD = IFF(LowD(Counter) < LowestD, LowD(Counter), LowestD);
End;
_LowestD = LowestD;
以下為幾日最高價或最低價的函式原始碼:
[1]最高價(_HighestD)
Input : DayCount(NumericSimple);
Variables : HighestD(0), Counter(0);
HighestD = 0;
For Counter = 1 To DayCount
Begin
HighestD = IFF(HighD(Counter) > HighestD, HighD(Counter), HighestD);
End;
_HighestD = HighestD;
[2]最低價(_LowestD)
Input : DayCount(NumericSimple);
Variables : LowestD(0), Counter(0);
LowestD = 999999;
For Counter = 1 To DayCount
Begin
LowestD = IFF(LowD(Counter) < LowestD, LowD(Counter), LowestD);
End;
_LowestD = LowestD;
2010年9月1日 星期三
[策略驗證] TradeStation的回測問題
在這二個月的策略驗證中, 發現TradeStation有一個致命的問題, 當設定天數為回推N日時, 若策略中會有計算起始日至目前中數值變化的數值時, 則該數值會隨著交易日慢慢地往後推而造成策略損益會變動的情形, 這在策略最佳化及策略全測時是看不出來的, 雖然可以將所有的起始日都回推為同一天, 但因資料時間超過十年, 會造成盤中計算量很大, 而造成訊號延遲的問題, 因為此問題的存在, 筆者決定將策略暫時停止驗證。
今後將先以TradeStation的EasyLanguage介紹為主, 再加上每日盤後會公佈一些市場的交易資訊為輔。
今後將先以TradeStation的EasyLanguage介紹為主, 再加上每日盤後會公佈一些市場的交易資訊為輔。
訂閱:
意見 (Atom)