EMAの%チャネルとボリンガー帯域取引戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月13日 17:38:01
タグ:

img

概要

この戦略は,EMAと定義されたパーセントチャネルの選択に基づいています.価格が上帯を下回ると長引き,価格が下帯を下回ると短引きます.価格がトレンドを開始してチャネルの外に移動した場合,すべてのポジションは損失を防ぐために閉鎖されます.

トレンド市場では,姉妹のEMA %チャネルとボリンジャー・バンド・トレンド・トレーディング・戦略を使用する.

原則

  1. 200期間の EMA をベースライン EMA として計算する.

  2. ユーザが定義したパーセントに基づいて上位および下位帯を計算する. 上部帯 = EMA * (1 + %) ローナー・バンド = EMA * (1 - %)

  3. チャンネル範囲を表示するために20期ボリンジャー帯を計算します.

  4. 閉じる価格が下のボリンジャーバンドを越えるとロング.閉じる価格が上からの上部のボリンジャーバンドを越えるとショート.

  5. 過剰な損失を避けるため,ストップ損失を計算するために ATR を使用します.

  6. 価格が定義された%チャネル範囲を超えた場合,さらなる損失を防ぐためにすべてのポジションを閉じる.

利点

  1. EMAのベースラインは,トレンド逆転点をより良く把握するのに役立ちます.

  2. %チャネルは,過剰取引を避けるために,合理的な取引範囲を設定します.

  3. ボリンジャー帯は,エントリータイミングを助けるサポートとレジスタンスのレベルを提供します.

  4. ATR トレイリングストップは,トレードリスクを効果的に制御するために,ストップロスを動的に設定します.

  5. 価格がチャネルを突破したときに すべてのポジションを閉じることで 損失を迅速に制御できます

  6. パーソナライズ可能なパラメータは,異なる市場条件に柔軟性があります.

リスク

  1. チャンネル範囲があまりにも広い場合,トレンドを見逃したり,ストップ損失を遅らせることもあります.

  2. チャンネル範囲が狭すぎると,過剰取引が起こり,取引コストが上昇する可能性があります.

  3. ボリンジャー・バンドのパラメータの設定が悪ければ 取引機会を逃す可能性があります

  4. ストップロスの制限が過度に緩やかであれば,取引ごとに過度の損失が生じる可能性があります.

  5. 最適な取引範囲を見つけるためにパラメータを最適化する必要があります.

オプティマイゼーションの方向性

  1. 最適の移動平均値を見つけるために,異なる EMA 期間をテストします.

  2. 最適なチャンネル範囲を決定するために,%チャネルパラメータを最適化します.

  3. 波動性をより良く把握するためにボリンジャー帯の期間を調整する.

  4. ATR 期間とマルチプリキュアを調整し,ストップ・ロスの戦略をさらに精密にします.

  5. EMA の条件を下回り,勝率を向上させるかどうかを確認します.

  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)  )


もっと