2014年7月17日 星期四

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

EasyTrader ArtNo 180
當我們在開發系統時,應該遵循一定的經驗法則。這些是指導方針。例如,你應該知道有三種基本類型的市場 — 趨勢性、 波動性和無方向性 —,沒有一個系統能在三個市場中同時表現很好。

開發一個系統的關鍵是,要能夠在一個市場類型表現好同時能限制了在其他市場類型的損失。這是一個基本但很重要的概念。另一個概念是你不需等到有完整的進出想法才開始作交易系統規劃。例如,您可以有一個很棒的進場信號,但還不知道怎麼出場。這並不意味著你不能開始寫一個大系統。

它意味著你可以先從開發進場規則開始,直到它們符合需求,然後才開始作出場的調整。系統開發的第一步是決定你想要交易的市場類型。這是一個重要的決定,因為它決定了您將開發的交易系統類型。接下來將幫您瞭解發生在不同類型的市場可能發生的一些條件,並説明一些可能應用的交易系統。一旦你熟悉了基本的系統類型,您將能夠選擇您想要使用的類型。
一般來說,有三種類型的市場,它們是有趨勢的,波動的,和無方向的,每一種可以由特定的價格活動來表現特徵。每種市場都是可交易,但明顯的是不同的交易系統。現在讓我們看看每種類型的市場行為和適用于該類型的市場的交系統。趨勢型市場的特點是較大又持續在價格的上升或下跌。

圖 1 顯示市場趨勢的一個例子。這個趨勢的市場特點是持續的動作與小的、 短暫的修正了。顧名思義,趨勢性系統針對趨勢市場而設計,獲取所有可能會出現大的趨勢移動的優勢。



在創建一個趨勢型交易系統的首要工作是,永遠不要錯過任何一個大的價格變動。為了作到這一點的最簡單方法是在市場上手中總是持倉,那就是總有多單或空單在手。如果你總是有在倉部位,大價格移動發生時就能掌握。另一種方法是在市場上,總是在當前價格的上方或下方掛突破單 (這與停損單相同,但它用意是進入市場,而不是退出)。

這樣,不管在往任一方向快速移動的市場,你都會停在大動作開始之前進場。請記住,趨勢系統往往會在波浪似的擺蕩市場或毫無方向感的階段虧損。系統的勝率較小,意味著大的獲利來自於幾個大的交易。

這也意味著如果你錯過了大的價格變動,你可能沒有足夠的資本來堅持到等待下一次大的價格變動趨勢。另一個設計特徵應該是在市場的橫盤模式期間限制你的損失。請記住,沒有任何一個交易系統會在每個市場條件下賺錢。

所以設計上的優先考慮應該是在振盪的市場裡讓損失降到最低。許多趨勢系統在一年內主要的盈利來自於其中的兩三個月,其他月份只是損平或是小額虧損。在趨勢追隨系統中最常用的指標是移動平均線,經常是兩個 — 短期的移動平均線和長期移動平均線。

趨勢分析系統具有以下特點:
百分之八十的獲利來自於百分之二十的交易 ,它在交易中所所面臨的困難課題是 - 勝率低 在 60%~ 70 %的交易次數中面臨虧損 ,特別是在盤整期,交易等待的過程中信心建立是很重要的,許多研究人員估計任何市場 15%的時間是在趨勢模式,而無方向的 佔85%的時間。但如果你認為你能成功地通過此類型的心理挑戰,它被證明是非常有利可圖的。

接下來我們就開始介紹這個交易系統,所有參數僅是預設值,讀者需自己再根據習慣的方式作參數的調整

宣告必要參數與變數
inputs:Price(Close),FastLen(9),SlowLen(18),EntLen(12),TrailLen(8),ReEntLen(15),Ratio(3) ;
Vars:FastMA(0),SlowMA(0),EntPriceL(0),EntPriceS(0),CountL(-999),CountS(-999),ReEntCount(0);

FastMA = Average(Price,FastLen) ;
SlowMA = Average(Price,SlowLen) ;

作多進場邏輯
1.當短期均線 ( 9 根K棒 )向上交叉穿越長期均線 ( 18 根K棒 )時 , 找尋最近 8根K棒的最高價 ,將其乘以 1.03 作為作多進場價格

if FastMA Cross over SlowMA and BarNumber > 1 Then Begin
EntPriceL = Highest(High,8)*(1+Ratio/100) ;
CountL = 0 ;
end;

2.當上述條件成立時, 在未來的 12根 K棒中只要價格突破進場價 ,則進場作多
if MP <> 1 and CountL <= EntLen then Buy next Bar at EntPriceL stop ;

計算經過幾根 K棒
CountL = CountL + 1;

3. 當多單在倉時 ,且因其他出場規則出場後 , 再依據最近的 10根K棒的最高價掛 Stop 突破單 ,並維持自出場後15根K棒的時間 (也就是出場後15根 K棒內沒有再突破近10根K最高價,則取消掛單 )
{ Re- Entry }
if MP = 0 and MP[1] = 1 then ReEntCount = 1 ;
if MP = 0 and MP[1] = 1 and ReEntCount < ReEntLen then Begin
ReEntCount = ReEntCount + 1;
Buy next bar at Highest(High,10) stop ;
end;

作空進場邏輯
1.當短期均線 ( 9 根K棒 )向下交叉穿越長期均線 ( 18 根K棒 )時 , 找尋最近 8根K棒的最低價 ,將其乘以 0.97 作為作空進場價格

if FastMA Cross under SlowMA and BarNumber > 1 Then Begin
EntPriceS = Lowest(Low,8)*(1-Ratio/100) ;
CountS = 0 ;
end;

2.當上述條件成立時, 在未來的 12根 K棒中只要價格跌破進場價 ,則進場作空
if MP <> -1 and CountS <= EntLen then
Sell next Bar at EntPriceS stop ;

計算經過幾根 K棒
CountS = CountS + 1;

3. 當空單在倉時 ,且因其他出場規則出場後 , 再依據最近的 10根K棒的最低價掛 Stop 突破單 ,並維持自出場後15根K棒的時間 (也就是出場後15根 K棒內沒有再跌破近10根K最低價,則取消掛單 )

{ Re- Entry }
if MP = 0 and MP[1] = -1 then ReEntCount = 1 ;
if MP = 0 and MP[1] = -1 and ReEntCount < ReEntLen then Begin
ReEntCount = ReEntCount + 1;
Sell next bar at Lowest(Low,10) stop ;
end;

出場規則
1. 多單在倉時 ,價格到達最近 8根K棒 最低價時平倉出場
if MP = 1 then Begin
CountL = -999 ;
ExitLong next bar at Lowest(Low,TrailLen) stop ;
end;

2. 空單在倉時 ,價格到達最近 8根K棒 最高價時平倉出場
if MP = -1 then Begin
CountS = -999 ;
ExitShort next bar at Highest(High,TrailLen) stop ;
end;

3. 手中有部位時要根據可接受風險度先置放停損單作保護

台指期 日K 留倉 交易週期 2004/6/30 ~ 2014/6/30 交易成本 1200




用最簡化的短期均線在長期均線之上,當價格突破短期高點與 如意多空網 翻多時作多
if FastMA > SlowMA and BarNumber > 1 + 如意多空網翻多 Then
Buy next bar at Highest(High,FastLen) stop ;

用最簡化的短期均線在長期均線之下,當價格跌破短期低點與 如意多空網 翻空時作空


if FastMA < SlowMA and BarNumber > 1 + 如意多空網翻空 Then
Sell next bar at Lowest(Low,FastLen) stop ;

台指期 日K 留倉 交易週期 2004/6/30 ~ 2014/6/30 交易成本 1200 績效圖表如下



結論:在創建一個趨勢型交易系統的首要工作是,永遠不要錯過任何一個大的價格變動。為了作到這一點的最簡單方法是在市場上手中總是持倉
MagicQS096

3 則留言:

  1. 謝謝分享~學習許多!!辛苦版大了

    回覆刪除
  2. 有鑑於大家進入程式交易領域的時間不同,因此也會陸續寫一些有多一點策略元素概念說明與應用語法的文章,就請大家多多支持與交流! 謝謝

    回覆刪除
  3. 第一次接觸程式交易的世界,很慶幸能夠看到您的文章,請問除了所有開發基礎篇有沒有您特別推薦必讀的文章主題呢?謝謝

    回覆刪除