04 把指標變成訊號

一開始來複習一下,Multicharts程式最重要的觀念,每根K棒結束都執行程式一次、以K棒來思考、每根K棒都紀錄一次所有變數的值、以中括號[n]來取前第n根K的變數值。這樣搭配寫程式的步驟,就能讓我們順利的寫出程式。

這次我們來寫訊號,訊號與指標的最大差異就是,訊號有交易的指令,可做進出場動作,但不能使用plotN指令來畫圖。Multicharts的訊號動作與真實交易是很貼切的,但交易下單本就不是簡單的動作,所以要讓訊號出現到設定自動下單,這一連串的動作,其實是很複雜也很重要的,但我們目前還不要關注在此,我們先簡單的會寫訊號,讓訊號跑出進出場的動作就好。

那現在就來試試第一個訊號,把上篇的均線變色指標拿來,設計一下做出訊號,那就簡單的讓它黃買藍賣,還記得嗎?黃色就是均線上漲時,而藍色是均線下跌時,我們還是按照寫程式的步驟進行。

  1. 使用前篇第二指標,均線上漲黃色下跌藍色,來做黃買藍賣;
  2. 將均線檢查上漲與下跌條件保留,並把原本指標使用plotN畫出訊號並上顏色的程式部份,換成多單進場與空單進場指令;
  3. 使用均線函數取得均線值、判斷均線漲時多單進場、跌時空單進場;
  4. 實作小程序:
    • 使用均線函數取得均線值:
      • var0 = AverageFC(Price, Length);
    • 均線漲時多單進場:
      • if (var0 > var0[1]) then buy next bar at market;
    • 均線跌時空單進場:
      • if (var0 < var0[1]) then sellshort next bar at market;
  5. 結合並完成:
    Input:
      Price(Close),
      Length(13);
    var:
      var0(0);
    var0 = AverageFC(Price, Length);
    if (var0 > var0[1]) then buy next bar at market
    else if (var0 < var0[1]) then sellshort next bar at market;

這樣就完成了黃買藍賣的訊號了,程式中使用了else if,這是因為此訊號買賣動作必不同時存在,所以若多單進場成立就不用檢查空單條件了。另以多單進場為例,大家或許會覺得其怪,在黃色均線的狀態中,均線一直是上漲的,但為何只有在第一次藍變黃時,多單進場後就不在有多單進場的動作,那是因為Multicharts的預設值,單一訊號同方向只有一筆進場動作,這個特性讓我們便於寫程式,但我們要知道有這樣的設定值,將來也可以改變下單動作的設定,空單也是相同的原理。這訊號中只用到了進場動作,並無使用出場動作,所以反向的進場動作,會先將反向部位平倉,之後在建立新倉。

這訊號在趨勢產生時(4/19)效果不錯,但在盤整時(4/22)就會出現過度的虧損交易,所以再來試寫一訊號,讓它保留趨勢產生時進場,但盤整時不要有動作,在此訊號中加入另一條件讓它可以達成減少盤整時進場。

  1. 使用前項訊號,但要在趨勢盤才動作,盤整盤不動作;
  2. 趨勢盤與盤整盤最大的差異就是,每根K棒均線值的差會在趨勢盤時,差值較大,盤整盤時差值較小,所以在判斷進場條件時,將均線差值的判斷加入;
  3. 使用均線函數取得均線值、判斷均線漲時且均線差值較大多單進場,跌時且均線差值較大空單進場;
  4. 實作小程序:
    • 使用均線函數取得均線值:
      • var0 = AverageFC(Price, Length);
    • 均線漲且均線差值較大多單進場:
      • if (var0 > var0[1]) and (var0 – var0[1] > Diff) then buy next bar at market
    • 均線跌且均線差值較大空單進場:
      • else if (var0 < var0[1]) and (var0 – var0[1] < Neg(Diff)) then sellshort next bar at market;
  5. 結合並完成:
    Input:
      Price(Close),
      Length(13),
      Diff(1);
    var:
      var0(0);
    var0 = AverageFC(Price, Length);
    if (var0 > var0[1]) and (var0 – var0[1] > Diff) then buy next bar at market
    else if (var0 < var0[1]) and (var0 – var0[1] < Neg(Diff)) then sellshort next bar at market;

經由此多加的條件(var0 – var0[1] > Diff),來讓盤整時因均線差值不大,濾除可能無效的進場動作。

這樣就是訊號的基本程式了,但訊號的出場動作這次並沒用到,在之後的訊號中,會陸續使用更多交易的指令,來達成更多交易的動作。因為訊號所有的動作都是重點,所以此次並沒有特別定出重點,若要定出重點那我想應該是這個吧。
  Multicharts的訊號動作與真實交易很貼切。

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

7 則回應給 04 把指標變成訊號

  1. chiu1003 說道:

    感謝M大又一新作。

  2. Bruce 說道:

    感謝M大新作指點,造福許多人一窺程式交易的殿堂!!

  3. mewmi 說道:

    謝謝C大B大賞光.. 歡迎一同討論.. ^^

  4. Jerry 說道:

    您好,

    我剛接觸Multicharts,
    請問一下:
    我在Metatrader4,找到一個滿合適的指標,
    可以將MT4的指令語法轉換Multicharts的訊號,以直接進行下單交易嗎?
    煩請回覆,TKS!

    Jerry 2014/4/6

發表迴響