この戦略は,EMAと定義されたパーセントチャネルの選択に基づいています.価格が上帯を下回ると長引き,価格が下帯を下回ると短引きます.価格がトレンドを開始してチャネルの外に移動した場合,すべてのポジションは損失を防ぐために閉鎖されます.
トレンド市場では,姉妹の
200期間の EMA をベースライン EMA として計算する.
ユーザが定義したパーセントに基づいて上位および下位帯を計算する. 上部帯 = EMA * (1 + %) ローナー・バンド = EMA * (1 - %)
チャンネル範囲を表示するために20期ボリンジャー帯を計算します.
閉じる価格が下のボリンジャーバンドを越えるとロング.閉じる価格が上からの上部のボリンジャーバンドを越えるとショート.
過剰な損失を避けるため,ストップ損失を計算するために ATR を使用します.
価格が定義された%チャネル範囲を超えた場合,さらなる損失を防ぐためにすべてのポジションを閉じる.
EMAのベースラインは,トレンド逆転点をより良く把握するのに役立ちます.
%チャネルは,過剰取引を避けるために,合理的な取引範囲を設定します.
ボリンジャー帯は,エントリータイミングを助けるサポートとレジスタンスのレベルを提供します.
ATR トレイリングストップは,トレードリスクを効果的に制御するために,ストップロスを動的に設定します.
価格がチャネルを突破したときに すべてのポジションを閉じることで 損失を迅速に制御できます
パーソナライズ可能なパラメータは,異なる市場条件に柔軟性があります.
チャンネル範囲があまりにも広い場合,トレンドを見逃したり,ストップ損失を遅らせることもあります.
チャンネル範囲が狭すぎると,過剰取引が起こり,取引コストが上昇する可能性があります.
ボリンジャー・バンドのパラメータの設定が悪ければ 取引機会を逃す可能性があります
ストップロスの制限が過度に緩やかであれば,取引ごとに過度の損失が生じる可能性があります.
最適な取引範囲を見つけるためにパラメータを最適化する必要があります.
最適の移動平均値を見つけるために,異なる EMA 期間をテストします.
最適なチャンネル範囲を決定するために,%チャネルパラメータを最適化します.
波動性をより良く把握するためにボリンジャー帯の期間を調整する.
ATR 期間とマルチプリキュアを調整し,ストップ・ロスの戦略をさらに精密にします.
EMA の条件を下回り,勝率を向上させるかどうかを確認します.
早期離脱が必要かどうかを判断するために 傾向指標を組み込む.
この戦略は,移動平均値,チャネル,変動等の強みを組み合わせて,比較的安定したレンジ取引システムを構築する.鍵は,リスクと報酬をバランスするために,それぞれの特定の市場にとって最も適切なパラメータ設定を見つけることです.将来の改善は,ルールとパラメータを最適化したり,トレンド戦略と組み合わせたり続けることができます.
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-12 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="[mdeacey] EMA% Channel + BB Range Strategy", shorttitle="[mdeacey] EMA% Channel + BB Range Strategy", overlay=true) //EMA 200 len = input(title="EMA Length", type=input.integer, defval=200) srce = input(title="EMA Source", type=input.source, defval=close) ema1= ema(srce,len) percent = input(title="Channel Percentage (%)", type=input.float, defval= 1) valuee = (percent*ema1)/100 upperbande = ema1 + valuee lowerbande = ema1 - valuee plot(ema1, title='EMA200', color=color.gray, linewidth=1, style=plot.style_line ) plot(upperbande, title='EMA Upper Band', color=color.gray, linewidth=1, style=plot.style_line ) plot(lowerbande, title='EMA Lower Band', color=color.gray, linewidth=1, style=plot.style_line ) length = input(20, minval=2) src = input(close, title="Close price") mult = input(2.0, minval=0.001, maxval=50) MA2 = sma(src, length) dev = mult * stdev(src, length) upper = MA2 + dev lower = MA2 - dev signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white barcolor(color=signalColor) upperBand = plot(upper, color=color.gray, linewidth=1) lowerBand = plot(lower, color=color.gray, linewidth=1) fill(upperBand, lowerBand,color=color.gray) strategy.entry("Long",true,when = crossover(close,lower) and close <upperbande and close>lowerbande) strategy.close("Long",when = crossunder(close,lowerbande)) strategy.entry("Short",false,when = crossunder(close,upper) and close <upperbande and close>lowerbande) strategy.close("Short",when = crossover(close,upperbande)) //Inputs atrPeriod = input(defval=14, title="ATR Period",group='ATR Settings', type=input.integer) // Adjust this to change the ATR calculation length multiplierPeriod = input(defval=1.75, title="ATR Multiplier Period",group='ATR Settings', type=input.float)// Adjust this to change the distance between your candles and the line //ATR Calculation pine_rma(x, y) => alpha = y sum = 0.0 sum := (x + (alpha - 1) * nz(sum[1])) / alpha true_range() => max(high - low, max(abs(high - close[1]), abs(low - close[1]))) //Long SL plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1) // Short SL plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1) strategy.exit("Exit Long","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod) ) strategy.exit("eExit Short","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod) )