この戦略は,価格チャネル指標とMACD指標を組み合わせて,トレンドを追跡し,複数のタイムフレームで過剰購入および過剰販売レベルを特定し,それによって購入および販売の決定を下す.この戦略にはリスクを管理するためにストップ損失と利益を取ることも含まれます.
価格チャネルインジケーターは,価格がチャネルを突破するときにトレンドを決定するために,最高価格と最低価格のEMAラインに基づいて価格チャネルを構築する. MACDインジケーターは,上昇と下落の勢いを判断する.ゼロ線上の値は牛市場を示唆し,下の値は熊市場を示唆する.
この戦略の取引信号は以下の側面から来ます.
MACD ヒストグラムが赤に転がるときに長引く. MACD ヒストグラムが緑に転がるときに短引く.
価格がチャネルの底に近づき,MACDがゼロ線以下になるとショートに入ります.
価格がチャネルの上位に近づき,MACDがゼロラインの上にあるときにロングを入力します.
MACD がゼロ線を超えると長引く.MACD がゼロ線を超えると短引く.
エクシートはストップ・ロストとテイク・プロフィートで起動します
インディケーターの組み合わせは 誤ったブレイクを防ぐ
異なる時間枠の指標の組み合わせにより,信頼性の高い傾向の検出が保証されます.
ストップ・ロスの取り入れと,トレード・ロスの取り入れを効果的に制御する.
オーバーオプティマイゼーションにつながる 制限された最適化空間
価格チャネルの低設定は 大きな動きを見逃します
ストレートストップ損失はより大きな損失を引き起こす.
解決策:
オーバーオプティマイゼーションを防ぐために ウォーク・フォワード・オプティマイゼーションを採用します
価格チャネルの適応パラメータを設定します
動向性に基づくストップ損失を導入し,ストップ距離を動的に調整する.
MACD パラメータの組み合わせを最適化する
価格チャネルパラメータの適応式計算を最適化する.
誤ったブレイクを防ぐため 効率を上げるため フィルターを追加します
この戦略は,価格チャネルとMACDの強みを合理的なパラメータセットアップと大きな最適化スペースで組み合わせます.トレンド検出とオーバーバイト/オーバーセール識別で良好なパフォーマンスを発揮します.ストップ損失/利益を得るメカニズムは取引損失ごとに制御します.今後,パラメータ最適化,フィルターを追加し,ストップ損失メカニズムを最適化することで改善することができます.
/*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)