2014年11月20日 星期四

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

EasyTrader ArtNo 220
我們常用的布林帶技術指標是利用統計學裡的標準差來涵括在一定期間內,以平均線上下 2個標準差的方法來觀察市場價格的波動狀況,而根據波動的擴張或者是壓縮來建立我們的多空進場邏輯。本篇利用計數的方式來建立一個類似的通道系統

原理說明:如果有 30 根K棒 ,包含80%的K棒數 就是 30 * 80% = 24 根 K棒 ,也就是我們若是取 30根 K棒收盤價由大到小排序 ,那麼第三高的收盤價與第三低的收盤價中間包含的就是 80% 的K棒數,只要價格運動的過程中突破或跌破這個位置就進場,這樣的邏輯可行嗎 ? 當然到底是 80% 好? 還是 N% 好?就來測試看看囉 ! 
指標程式碼
input:Length(30),Ratio(80),PriceType(1) ;
Vars:Price(Close) ;

{ 選擇不同的價格型態作通道 }
if PriceType = 1 then Price = Close
else if PriceType = 2 then Price = TypicalPrice
else if PriceType = 3 then Price = AvgPrice
else if PriceType = 4 then Price = (High+Low)/2 ;

{ 依回溯 K棒的個數百分比來抓取對應的高/低 值}
Value1 = Round(Length*(100-Ratio)/2/100,0)+1 ;
Value2 = NthHighest(Value1,Price,Length) ;
Value3 = NthLowest(Value1,Price,Length) ;

{ 這裡我們使用了兩個內建函數 NthHighest , NthLowest }
NthHighest(N , Price , Period ) :取得區間第 N 高的價格
NthlLowest(N , Price , Period ) :取得區間第 N 低的價格
{ *******************************************************}


Plot1(Value2,"H%") ;
Plot2(Value3,"L%") ;
Plot3((Value2+Value3)/2,"M%") ;

測試程式碼
input:ExitType(2) ;
inputs:NBarL(28),NBarS(3),TradeProfit(0.05),TradeStopLoss(0.015),ATRs_L(12.7),ATRs_S(4.6);
vars: IsBalanceDay(False),MP(0),PF(0),PL(0),HLRange(100);
input:Length(30),Ratio(90),PriceType(2) ;
Vars:Price(Close) ;

MP = MarketPosition ;

if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

if PriceType = 1 then Price = Close
else if PriceType = 2 then Price = TypicalPrice
else if PriceType = 3 then Price = AvgPrice
else if PriceType = 4 then Price = (High+Low)/2 ;

Value1 = Round(Length*(100-Ratio)/2/100,0)+1 ;
Value2 = NthHighest(Value1,Price,Length) ;
Value3 = NthLowest(Value1,Price,Length) ;

{ 簡單多空進場邏輯 }
if MP <> 1 and Close[1] < Value2 then Buy next bar at Value2 stop ;
if MP <> -1 and Close[1] > Value3 then Sell next bar at Value3 stop ;

{ 常用出場邏輯 }
if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;

if ExitType = 2 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
end;

if ExitType = 3 then Begin
if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if ExitType = 4 then Begin
SetStopLoss(PL * BigPointValue) ;
setProfitTarget(PF * BigPointValue) ;
if MP > 0 and BarsSinceEntry = NBarL then {Sell } ExitLong next bar at Market ;
if MP < 0 and BarsSinceEntry = NBarS then {Buy} ExitShort next bar at Market ;
end;

if IsBalanceDay then setExitonClose ;
台指期 日 K 多空留倉 交易週期 2004/9/30~ 2014/9/30 交易成本 1200


台指期 60 min K 多空留倉 交易週期 2004/9/30~ 2014/9/30 交易成本 1200


加上如意多空網
台指期 30 min K 多空留倉 交易週期 2004/9/30~ 2014/9/30 交易成本 1200


結論:從統計取樣的有效性而言,回溯的K棒數至少要有 25根以上,另外也可以觀察在區間走平時的來回振盪,作低買高賣的策略。
MagicQS132

2 則留言: