03 從指標開始

我們利用每一個開頭來回顧一下前一篇的重點與提出本篇的重點,其實不想說理論性的事,但這確是必要的,為了要完整掌握開發程式的方法,我們必須說明一些偏理論性的事項。

所以再一次,Multicharts程式最重要的觀念,每根K棒結束都執行程式一次(或是每tick一次)。這是專為交易而設計的系統,所有功能的開發皆以K棒為出發點,因此我們要養成習慣,以K棒來思考。我們最自然想得到的資料應該就是,K棒之間有何不同,那就必須比對不同K棒,所以就要取得當根K棒之前的K棒資料。這裡又是Multicharts的重點了,但這個重點有點複雜我們要分段說明。

首先要知道Multicharts中的資料可以是,K棒的價格、成交量與時間,還有我們自己定義的變數,我們先全部統稱為變數,變數會以K棒為單位,每根K棒都紀錄一次所有變數的值,這樣我們就能取出任何一個變數在任何一根K棒上的值,那程式中就是,以中括號[n]來取前第n根K的變數值,如當根K棒的開高收低分別是openhighlowclose,那前一根開與前二根收就是open[1]close[2];想看當根K高是否高過前根K,那就是if (high > high[1]) then “do something”;;判斷當根K低是否低於前跟K,即為if (low < low[1]) then “do something”;

現在就來動手寫寫看,運用這幾個重點,我們要寫一個指標,用來指出連續過高或連續破低的K棒,那就先以寫程式的步驟來規劃。

  1. 寫一個指標分別指出連續四根K過高或連續四根K破低;
  2. 判斷連續四根K過高那就是當根K高大於前一根K高,且前一根K高大於前二根K高,及前二根K高大於前三根K高,成立時在當跟K高點上五點畫一個黃點;同理當出現連續四根K棒破低我們畫一個藍點,請大家自己試試寫出連續四根K棒破低的條件;
  3. 檢查連續四根K棒過高條件,條件成立畫出黃點;檢查連續四根K棒破低條件,條件成立畫出藍點;
  4. 實作小程序:
    • 檢查連續四根K棒過高:
      • if (High > High[1]) and (High[1] > High[2]) and (High[2] > High[3]) then…
    • 檢查連續四根K棒破低:
      • if (Low < Low[1]) and (Low[1] < Low[2]) and (Low[2] < Low[3]) then…
    • 畫出高點黃點:
      • plot1(High + 5, “High”, yellow);
    • 畫出低點藍點:
      • plot2(Low – 5, “Low”, blue);
  5. 結合並完成:
    if (High > High[1]) and (High[1] > High[2]) and (High[2] > High[3])
     then plot1(High + 5, “High”, yellow);
    if (Low < Low[1]) and (Low[1] < Low[2]) and (Low[2] < Low[3])
     then plot2(Low – 5, “Low”, blue);

此指標就是我們利用K棒與前幾根K棒的價格比對後,所標示出連續過高破低的K棒,但須自己改變指標型態由線轉成點,這樣才能顯示如圖中的黃藍點。

但K棒中能記錄的不只是價格,我們再多寫一個指標,這次我們用自己定義的變數來做比較,那就來寫一個大家最常用的均線,我們要在均線上著色,將上漲與下跌分別畫上不同的顏色,按慣例由寫程式的步驟開始。

  1. 要寫出一個指標用來畫出均線並上色;
  2. 畫出一條均線,上漲時畫成黃色,下跌時畫成藍色;
  3. 設定變數記錄均線值與顏色、使用均線函數取得均線值、判斷均線漲時設定黃色,跌時設定藍色,持平設定灰色、畫出均線;
  4. 實作小程序:
    • 設定變數:
      • var:
          var0(0),
          color(lightgray);
    • 使用均線函數取得均線值:
      • var0 = AverageFC(Price, Length);
    • 判斷均線漲跌設定顏色:
      • if var0 > var0[1] then color = yellow)
         else if var0 < var0[1] then color = blue)
         else color = lightgray;)
    • 畫出均線:
      • Plot1(var0, “Avg”, color);
  5. 結合並完成:
    Input:
      Price(Close),
      Length(13);
    var:
      var0(0),
      color(lightgray);
    var0 = AverageFC(Price, Length);
    if var0 > var0[1] then color = yellow
     else if var0 < var0[1] then color = blue
     else color = lightgray;
    Plot1(var0, “Avg”, color);

此指標讓我們更容易看出均線的上揚與下探,但程式中還是有我們所尚未解釋到的,不過請大家先不要在意,因為這會在之後補上,現在我們還是專注在用步驟與重點,來練習設計與實作程式。

此次我們寫了兩個指標程式,希望不會讓大家有太大的負擔,在本篇結束前讓我們回顧至目前為止的重點。

  每根K棒結束都執行程式一次;
  以K棒來思考;
  每根K棒都紀錄一次所有變數的值;
  以中括號[n]來取前第n根K的變數值。

 

本篇發表於 MC 大解密。將永久鏈結加入書籤。

6 則回應給 03 從指標開始

  1. chiu1003 說道:

    M大真是太感謝你了。
    非常詳細的教學,容小弟膜拜一下……….

  2. 煮蜜 說道:

    mewmi大大︰感恩啊,認真上了三堂課例題也都做了,獲益良多,已經開始期待第四堂課鐘響呢!
    建議M大,就每次課程內容再加個習題,下一堂公布解答範例,可以讓大家知道是不是真的懂了。
    附帶一提,最後一個例題,當轉折時(由漲->跌 或跌->漲)第一段均線顏色無法立即更換,可有解?
    總之,謝謝您的熱心教導!

    • mewmi 說道:

      哈.. 習題.. 我想會來看的自是有心人.. 何須我多此一舉..
      若你這麼想要.. 那就給你一個……….
      請寫出回測績效呈45度角上升永不回落的策略..
      這就是你的習題啦XD

      顏色.. 有假的解你要嗎? 你可以仔細觀察想想為何會如此..
      這個若以後有機會在來說..
      提示就是.. 不是只有資料能向前取.. 畫圖也能往左右畫.. 試試吧!

  3. 煮蜜 說道:

    Mewmi 大提到:
    “”提示就是.. 不是只有資料能向前取.. 畫圖也能往左右畫.. 試試吧!””

    想了很久,這樣應該可以解決了
    plot1[1](var0[1],”Avg”,color);
    plot1(var0,”Avg”,color);

    謝謝提示!

發表迴響