価格チャネルとMACDに基づくマルチタイムフレーム取引戦略


作成日: 2023-12-08 15:15:37 最終変更日: 2023-12-08 15:15:37
コピー: 0 クリック数: 616
1
フォロー
1621
フォロワー

価格チャネルとMACDに基づくマルチタイムフレーム取引戦略

概要

この戦略は,価格チャネル指標とMACD指標を組み合わせて,複数の時間枠でトレンドを追跡し,オーバーバイオーバーセルの判断を可能にするため,買付決定を策定する. 戦略は,同時にもストップ・ストップを組み合わせてリスクを管理する.

戦略原則

価格チャネル指数は,最高価格と最低価格のEMA均線に基づいて価格チャネルを構築し,価格突破チャネルによってトレンドを判断する.MACD指数は,多気勢を判断し,ゼロ軸上は多頭市場,下は空頭市場である.

この戦略の取引シグナルは以下の要素から生まれます.

  1. MACD ヒストグラム 赤いEnter多頭,緑のEnter空頭

  2. 価格が通路の底に近づき,MACDがゼロ軸の下にあるとき,空頭Enter

  3. 価格がチャネルの頂点に近づき,MACDがゼロ軸上にある場合

  4. MACD上はゼロ軸を横切るときにEnter多頭,下はゼロ軸を横切るときにEnter空頭

エクジット信号は止損停止セットから発生する.

戦略的優位性

  1. マルチメーター・コンビネーション・検証,偽突破を避ける

  2. 異なる時間枠の指標の組み合わせにより,トレンドの方向性をより確実に判断できます.

  3. 単一損失を効果的に制御するための止損防止メカニズムを導入

戦略リスク

  1. パラメータ最適化スペースは限られ,過度最適化が容易である.

  2. 価格通路のパラメータが低すぎると,大きな損失が発生します.

  3. ストップポイントが小さすぎると,大きな損失を伴う.

解決策は

  1. ウォーク・フォワードで,過剰な最適化パラメータを回避する.

  2. 価格チャネルパラメータを自在パラメータに設定します.

  3. 波動率ストップを導入してストップ距離を動的に調整する

戦略最適化の方向性

  1. MACD パラメータの組み合わせを最適化

  2. 価格通路の最適化パラメータを自律的に計算する

  3. フィルタリング条件を追加し,偽突破を回避して効率を上げます.

要約する

この戦略は,価格チャネル指標とMACD指標の優位性を統合し,合理的なパラメータ設定と最適化スペースが広く,トレンド判断とオーバーバイオーバーセール判断において効果が優れている.止損防止メカニズムは,1回の損失リスクを制御し,より安定した取引戦略である.その後,パラメータ最適化,フィルタ条件の追加,止損防止メカニズムの最適化などで改善することができる.

ストラテジーソースコード
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Sonic R + Barcolor MACD", overlay=true)
HiLoLen     = input(34, minval=2,title="High Low channel Length")
pacL        = ema(low,HiLoLen)
pacH        = ema(high,HiLoLen)
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0)
H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hisup= iff(delta>delta[1] and delta>0, 1,
	     iff(delta<delta[1], -1, nz(hisup[1], 0)))
hisdown = iff(delta<delta[1] and delta<0, 1,
	     iff(delta>delta[1], -1, nz(hisdown[1], 0)))
barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue )
//SR
PeriodLookBack = input(34)
xHighest = highest(PeriodLookBack)
xLowest = lowest(PeriodLookBack)
Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0)
// Strategy//
conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0)
gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH
consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0)
gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL
if(gobuy)
    strategy.entry("Buy",strategy.long)
if(gosell)
    strategy.entry("Sell",strategy.short)
//if(Trend==-1 and close<pacL)
//    strategy.close("Buy")
//if(Trend==1 and close>pacH)
//    strategy.close("Sell")
 ////////////// TP and SL//
SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1)
rr= input(defval=0.1,title="Reward/Risk",type=float)
useTPandSL = input(defval = false, title = "Use exit order strategy?")
Stop = SL
Take=SL*rr
Q = 100
if(useTPandSL)
    strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop)
    strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)