[TS懶人包] [保險服務]

2010年3月2日 星期二

變數的運用(三)

這一篇要來講狀態的記錄了…程式也開始慢慢複雜了起來…雖然我自己比較喜歡簡單的程式。不過還是來講一下複雜的程式該怎麼寫了。首先,什麼叫狀態?舉一個還不算複雜的例子:今日開高、當 MACD 死亡交叉後,作下一個 MACD 黃金交叉。

這也許可以當成一個當沖程式的進場。也就是只要開高,然後發生 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 點吧。

5 則留言:

  1. 習題:

    \*空單*\

    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大來鞭策

    請問這個策略是預計隔天會有大幅度變動的開盤嗎?!

    最後幾行程式碼很有趣..

    回覆刪除
  2. 有一個關於歷史資料匯入的小問題
    我的資料如下

    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
    可以請問一下錯在哪嗎

    回覆刪除
  3. Layx: 這個策略只是亂想的..

    至於資料..日期需要這種格式 2009/1/5

    回覆刪除
  4. 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 還有可能是其他原因嗎

    回覆刪除
  5. Layx: 也許是日期的順序沒排好吧..最近的日期要排在最下面..

    我單用你的第一筆資料進去設定是可以的

    回覆刪除

請留下您的大名…匿名者恕不回應…

Related Posts Plugin for WordPress, Blogger...