EMAパーセントチャネルとボリンジャーバンドレンジ取引戦略


作成日: 2023-11-13 17:38:01 最終変更日: 2023-11-13 17:38:01
コピー: 0 クリック数: 854
1
フォロー
1617
フォロワー

EMAパーセントチャネルとボリンジャーバンドレンジ取引戦略

概要

この戦略は,ユーザが選択したEMAと定義したパーセントチャネルに基づいています. 価格が上線より低ければ,戦略は多めに行います. 価格が下線より高ければ,戦略は空っぽになります. 価格がトレンド取引を開始し,チャネルを突破した場合,損失を防ぐためにすべてのポジションを平準化します.

トレンド市場では,配套のEMAパーセントチャネルとブリン帯のトレンド取引戦略を使用することが推奨されます.

原則

  1. 基準EMAとして200サイクルEMAを計算する.

  2. ユーザの設定したパーセントによって,上下を計算します. EMA* (1 + パーセント) EMA * (1 - パーセント)

  3. 20周期のブリン帯を計算し,通路の範囲を描画する.

  4. 閉盘価格が下から上へとブリン帯下線を突破したときには,多めに;閉盘価格が上から下へとブリン帯上線を突破したときには,空いてください.

  5. ATRでストップを計算し,過大損失を回避する.

  6. 価格が設定された通路の範囲を超えた場合,すべてのポジションを平仓して,さらなる損失を防ぐ.

利点

  1. EMAを基準として使用すると,トレンドの転換点をよりよく捉えることができます.

  2. パーセンテージ・チャネルは合理的な取引範囲を設定し,過度に頻繁な取引を避ける.

  3. ブリン帯は,入場タイミングを判断する補助的な抵抗位を提供する.

  4. ATR trailing stopdynamicallyを使用してストップダメージを設定し,単一取引のリスクを効果的に制御します.

  5. 価格が通路を超えた場合,全額を平定し,損失を迅速に制御できます.

  6. カスタマイズ可能なパラメータの設定は,異なる市場に対応して柔軟に調整できます.

リスク

  1. パーセンテージチャネルが幅が広い場合,トレンドを逃したり,損失を遅らせたりする可能性があります.

  2. パーセンテージ・チャネルが狭すぎると,取引が頻繁になり,取引コストが上がる可能性があります.

  3. ブリン帯のパラメータ設定が不適切であることも,取引機会を逃すことにつながります.

  4. ストップ・ロスの設定が過度に緩やかになる場合,単一の損失が過大になる可能性があります.

  5. 最適な取引範囲を見つけるには,適切な最適化が必要である.

最適化の方向

  1. 異なるEMA周期パラメータをテストして,最も適した平均線周期を見つけます.

  2. %通路パラメータを最適化して,最適な通路範囲を探します.

  3. ブリン帯周期パラメータを調整し,波動を捉える効果を最適化する.

  4. ATR周期と倍数を調整し,さらにストップ・ローズ戦略を最適化します.

  5. テストの条件は,上を空にするか,下を空にするかで,合格率が上がるかどうかです.

  6. トレンド指数と組み合わせて,早期の平仓の必要性を判断する.

要約する

この戦略は,平均線,チャネル,波動率などの複数の指標の優位性を総合的に利用し,比較的安定した区間取引戦略を実現する.鍵は,特定の市場に最も適したパラメータの設定を見つけ,リスクと収益のバランスを達成する.将来,パラメータと戦略の規則を最適化し続けることができる,またはトレンド取引戦略の組み合わせで使用することができる.

ストラテジーソースコード
/*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)  )