2014年12月18日 星期四

開發商品的交易系統 - 基礎篇 [21]

EasyTrader ArtNo 228
本篇要設計的交易系統概念包含了兩個元素:
第一個是轉位式移動平均線,它的意義是將平常我們熟悉的移動平均線指標,向前位移某K棒數量,而非以目前的K棒位置作基準,這樣作的好處是讓圖形的觀察有時間差的概念,以及降低一些不必要的雜訊。
第二個元素是成交量,它的意義是在期間內的換手交易數量,市場的價格運動通常在成交量的放大伴隨下,趨勢跟著形成! 一般而言,在一個正向發展的上漲趨勢中,成交量伴隨著紅K增加,當黑K時成交量會縮小,反之市場為跌勢中,成交量在黑K出現時放大,紅K出現時縮小。

在此交易系統內我們針對移動平均線與成交量都加入了位移的調整因子。
策略的概念描述如下:

交易系統參數與變數
Inputs: Price(Close), PLen(7), PDisp(5), VLen(7), VDisp(5), ATRPcnt(.20);
Vars: DMA(0), DMAV(0);

交易邏輯建立
a) 計算 7根K棒移動平均價同時轉位5 根K棒位置
b) 計算 7根K棒移動平均量同時轉位5 根K棒位置
DMA = Average(Price, PLen)[PDisp];
DMAV = Average(iff(DataCompression > 1 ,Volume,TickS), VLen)[VDisp];

多單進場
當收盤價大於轉位移動平均線且成交量也大於轉位移動平均量, 在買方條件成立後的下根K棒開盤價加上10根K棒真實區間平均值的 20%作為進場價格
IF MP <> 1 and Close Crosses Above DMA AND iff(DataCompression > 1 ,Volume,TickS) > DMAV Then Buy Next Bar at Open Next Bar + (ATRPcnt * AvgTrueRange(10)) Stop;

空單進場
當收盤價小於轉位移動平均線且成交量也小於轉位移動平均量, 在賣方條件成立後的下根K棒開盤價減去10根K棒真實區間平均值的 20%作為進場價格
IF MP <> -1 and Close Crosses Below DMA AND iff(DataCompression > 1 ,Volume,TickS) < DMAV Then Sell Next Bar at Open Next Bar - (ATRPcnt * AvgTrueRange(10)) Stop;

出場邏輯
{移動式追蹤出場}
a) 以最近 5根K棒最低價作為多單平倉價.
b) 以最近 5根K棒最高價作為空單平倉價.
ExitLong Next Bar at Lowest(Low, 5) Stop;
ExitShort Next Bar at Highest(High,5) Stop;

{進場條件消失}
c) 當多單在手且收盤價下穿移動平均線時平倉出場
d) 當空單在手且收盤價上穿移動平均線時平倉出場
IF Close Crosses under DMA Then ExitLong Next Bar at Market;
IF Close Crosses over DMA Then ExitShort Next Bar at Market;

台指期 60 分K 多空留倉 交易週期 2004/11/1~ 2014/10/31 交易成本 1200
結論:
1.由於成交量的計算在日K以上週期與分K不同,在實務程式撰寫中可以使用以下方式來作自動調整應用 iff(DataCompression > 1 , Volume , TickS)。
2.從圖表中指標線的觀察,黃白兩條均線的交叉突破與跌破也可以用來作為進場策略元素!
MagicQS139

7 則留言:

  1. 希望對剛踏入程式交易領域的新鮮人有所助益

    回覆刪除
  2. 我是用Multichars,初學程式,就依貴版程式依樣畫葫蘆,也通過編譯,但訊號就是不出來,請教貴
    作者,不知哪裡出錯?謝謝
    Inputs: price(close),PLen(7),PDisp(5),VLen(7),VDisp(5),ATRPcnt(20);

    Vars: DMA(0),DMAV(0);

    DMA= Average(price,Plen)[PDisp];
    DMAV= Average(iff(DataCompression>1, Volume, TickS),VLen)[VDisp];

    if marketposition <> 1 and close crosses over DMA and iff(DataCompression > 1,Volume, TickS)>DMAV
    then buy next bar at open next bar + (ATRPcnt*AvgTrueRange(10))Stop;

    if marketposition <> 1 and close crosses under DMA and iff(DataCompression > 1,Volume, TickS)<DMAV
    then sellshort next bar at open next bar - (ATRPcnt*AvgTrueRange(10))Stop;

    Sell next bar at Lowest(Low,5)Stop;
    buytocover next bar at Highest(High,5)Stop;

    if close crosses under DMA then sell next bar at market;
    if close crosses over DMA then buytocover next bar at market;

    回覆刪除
  3. 您好,參數要自己跑一下喔

    回覆刪除
  4. 參數Atrpcnt初始值是0.2 不是20

    回覆刪除
  5. 請問結論中的 iff(DataCompression > 1 , Volume , TickS) , 可以再進一步解釋嗎? 我想知道函式的參數意義,以及函式的定義, 謝謝!!

    回覆刪除
  6. 在日K以上時間框架的成交量是使用 Volume , 在分K的時間框架使用 Ticks 代表成交量 , 因此使用 DataCompression 來判斷目前視窗圖表的週期是屬於那一類的時間框架
    DataCompression 的定義如下
    0 = TickBar
    1 = Intra-day

    2 = Daily
    3 = Weekly
    4 = Monthly
    5 = Point & Figure

    回覆刪除