這也許可以當成一個當沖程式的進場。也就是只要開高,然後發生 MACD 死亡交叉後的下一個黃金交叉,就買進。
這時候,程式該判斷的東西就慢慢多起來了,你必需在 MACD 發生死亡交叉的時候記錄下已經發生死亡交叉的狀態了,而在這個狀態後的黃金交叉才作單。
先來把這個程式寫出來:
vars: crossStatus(0), openStatus(0);
if date <> date[1] then begin
crossStatus = 0;
openStatus = 0;
end;
Value1 = MACD(close, 12, 26);
Value2 = XAverage(MACD(close, 12, 26), 9);
if opend(0) > closed(1) then begin
openStatus = 1;
end;
if openStatus = 1 and Value1 cross under Value2 then begin
crossStatus = 1;
end;
if time < 1300 and crossStatus = 1 and Value1 cross over Value2 then begin
buy next bar at market;
end;
if time = 1340 then begin
exitlong next bar at market;
end;
在這個程式裡面,首先宣告了 crossStatus 和 openStatus 兩個變數,crossStatus 是儲存是不是已經產生死亡交叉的情況;而 openStatus 則是儲存開盤是否為開高的情況。
接下來就是換日的時候把這兩個變數都作歸零的動作。
然後是熟悉的 MACD 計算式。
再來是如果今天開高( opend(0) > closed(1) ),也就是今日的開盤價大於昨日的收盤價,就把 openStatus 這個變數設為 1。
而在 openStatus 這個變數為 1 的情況下,如果產生死亡交叉,就把 crossStatus 也設為 1。
接下來的進場條件,我設下了時間限制,也同時限制 crossStatus 在 1 的情況下, MACD 黃金交叉才買進。
最後則是一個出場條件。
變數的運用是個很有趣的東西,如何利用變數來達到想要的目地,則考驗著大家的邏輯能力。當你把進場條件列出來後,有時候卻不知道該怎麼動手…所以,多寫程式吧。
練習題就是把上面的程式加上空單訊號和停損條件。空單訊號則是相反,開低後等待黃金交叉後的死亡交叉進場,而停損則先利用固定停損 50 點吧。
習題:
回覆刪除\*空單*\
if opend(0) < closed(1) then begin
openStatus = -1;
end;
if openStatus = -1 and Value1 cross under Value2 then begin
crossStatus = -1;
end;
if time < 1300 and crossStatus = -1 and Value1 cross over Value2 then begin
sell next bar at market;
end;
if time = 1340 or price = entryprice + 40 then begin
exitshort next bar at market;
end;
有請DK大來鞭策
請問這個策略是預計隔天會有大幅度變動的開盤嗎?!
最後幾行程式碼很有趣..
有一個關於歷史資料匯入的小問題
回覆刪除我的資料如下
20100301,7410,7605,7394,7571
20100226,7383,7432,7341,7383
20100225,7513,7522,7335,7368
20100224,7466,7545,7458,7481
20100223,7534,7552,7451,7537
然後field order 選
Data-open-high-low-close
Data format 選
Year Month Day
但選好後進不去資料設定的部分
直接跳出field error
可以請問一下錯在哪嗎
Layx: 這個策略只是亂想的..
回覆刪除至於資料..日期需要這種格式 2009/1/5
ha看樣子是我想太多了
回覆刪除2010/3/1,7410,7605,7394,7571
2010/2/26,7383,7432,7341,7383
2010/2/25,7513,7522,7335,7368
2010/2/24,7466,7545,7458,7481
2010/2/23,7534,7552,7451,7537
2010/2/22,7615,7695,7552,7557
2010/2/10,7354,7478,7346,7414
2010/2/9,7175,7344,7151,7316
改成這樣..還是出現ascii data file error 還有可能是其他原因嗎
Layx: 也許是日期的順序沒排好吧..最近的日期要排在最下面..
回覆刪除我單用你的第一筆資料進去設定是可以的