週六回家,邊吃飯邊陪著父母在看很古老的影片"你槓龜, 我發財",是關於70年左右風行全台的大家樂,對同一張籤詩,大家都有不同的解讀方式,但是每個人都偏執於自己的解讀結果,而金融市場就如同一般,扣除內線之外,對於公開的資訊,大家也都具有不同的解讀觀點,這是很正常的,但怕的就是對某一種資訊的偏執,而產生錯誤研判後仍堅持自己的所看的資訊角度是正確的而不知停損,造成一次的錯誤解讀將資本一次虧光而退出市場。
筆者很喜歡看烏龍派出所來消遣時間,本週剛好看到名為"妖怪煙囪",日本早期有一座全國最大的發電廠,具有四根煙囪,但是由不同的角度去看,會看到不同的根數,所以被稱為妖怪煙囪,這就如同金融市場,由不同角度來解釋資訊會產生不同的結果,大家依片面的觀點來看都沒有錯,但是並不一定是事情的本質,要看清楚煙囪有幾根需要綜合各角度的資訊才能知道真正的根數,又或者站在發電廠底下往上看,才能算清真正有幾根,在金融市場,我們都不是真正的控盤者(就如同在發電廠看煙囪),能完全看清市場的本質,唯有多方吸收不偏執,才能真正了解市場的本質,而做出正確的投資決策。
2010年9月21日 星期二
[程式交易]留倉單轉倉的寫法
很多人在測試留倉單時,往往都忽略了結算日當天,近月的契約已被結算掉了,隔日的新倉跳空,在實際上是參與不到的,這不管在參數最佳化或回測報表中,均無法顯示出來,為了要能更精細計算獲利的差異,應該要在結算日當天的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;
隔日建倉有二種做法,一種是隔日一開盤,自動建立昨日平倉掉的多空部位,另一種是等待下次訊號出現時再進場,不同的策略,會有不同的作法,所以本篇文章的將提供一個範本,可以由參數來設定這些交易的策略,讀者可以自行加入自己的進出場參數與進出場策略。
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月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介紹為主, 再加上每日盤後會公佈一些市場的交易資訊為輔。
2010年8月2日 星期一
[策略驗證] 2010/07/29 訊號
前二天將上次發現出場訊號會互相干擾的問題解決了, 目前換成修改後的訊號繼續驗證。
今日於12:05出現買進訊號,買進價位在7716,於13:15當沖出場,出場價位7615,此次交易虧損1點,自6/14至今累計獲利156點。
今日於12:05出現買進訊號,買進價位在7716,於13:15當沖出場,出場價位7615,此次交易虧損1點,自6/14至今累計獲利156點。
訂閱:
文章 (Atom)