複数の移動平均、RSI、標準偏差の終了を使用したローソク足の高さのブレイクアウト取引戦略


作成日: 2024-03-28 16:13:45 最終変更日: 2024-03-28 16:13:45
コピー: 0 クリック数: 671
1
フォロー
1617
フォロワー

複数の移動平均、RSI、標準偏差の終了を使用したローソク足の高さのブレイクアウト取引戦略

戦略概要

この戦略は,複数の指数の移動平均 ((EMA),相対的に強い指数 ((RSI) と標準差の出場条件に基づいて,潜在的な買入の機会を識別するために組み合わせています. 市場動向の方向と強さを分析するために,短期 (6・8・12日),中期 (55日),長期 (150・200・250日) のEMAを使用しています. RSIは,設定可能な買入 (30日) と販売 (70) の値を使用して,動きを評価し,オーバーバイまたはオーバーセールを識別します.

戦略原則

  1. 市場動向を評価するための視覚的参照として,複数の周期のEMA ((6,8,12,55,100,150,200) を計算します.
  2. ユーザが入力した線数 ((3-4根) に基づいて,最近のN根線の最高値と最低値を計算する.
  3. 購入条件:現在の閉店価格は,最近のN根線最高値より高く,EMAフィルター ((もし有効なら) よりも高い.
  4. 販売条件:現在の閉店価格は,最近のN根線の最低値より低く,そしてEMAフィルター (もし有効である場合) よりも低い.
  5. ロングポジションの出場条件:現在の閉店価格は12日EMA+0.5倍標準差以下,または12日EMAより低い.
  6. ショートポジションの出場条件:現在の閉盘価格が12日EMA - 標準差の0.5倍以上,または12日EMAより高い.
  7. RSIを補助指標として使用し,デフォルト周期は14,超売り値は30,超買い値は70。

戦略的優位性

  1. トレンドトラッキング (複数EMA) と動力 (RSI) の2つの次元を組み合わせることで,より包括的な市場分析の視点を提供します.
  2. 独特の標準差に基づく出場メカニズムにより,利益の保護とリスクの管理のバランスを取ることができます.
  3. コードのモジュール化度が高い. キーパラメータはユーザーによって設定され,柔軟性が高い.
  4. 複数の品種と時間周期,特に日経の株式とビットコインの取引に適用されます.

リスク分析

  1. 市場が揺れ動いたり,トレンドが逆転した初期に,偽信号が頻繁に現れ,連なる損失を引き起こします.
  2. デフォルトのパラメータは,すべての市場環境で有効ではありません.反省とパラメータの最適化が必要です.
  3. この戦略のみで取引するリスクは高く,他の指標と組み合わせて,レジスタンスレベルを支えるなどの補助的な意思決定を推奨します.
  4. 突発的な重大事件によって引き起こされるトレンドへの反転は遅い.

最適化の方向

  1. EMAとRSIのパラメータを最適化:品種,周期,市場特性を考慮して,パラメータの組み合わせを細工し,最適なパラメータの範囲を探します.
  2. ストップ・ストップ・メカニズムの加入:ATRなどの波動率指標を参照し,合理的なストップ・ストップ・ポジションを設定し,単一取引のリスクを制御する.
  3. ポジション管理の導入:トレンドの強さ ((例えばADX) または,キーサポートの抵抗点から近い距離に応じて,ポジションの大きさを調整できます.
  4. 他の技術指標の組み合わせで使用:ブリン帯,MACD,均線交差など,平仓開設信号の信頼性を向上させる.
  5. 分市場状態の最適化:トレンド,震動,ターニングなどの異なる市場状態をそれぞれ最適化するパラメータの組み合わせ.

要約する

この記事では,複数の移動平均線,RSI,標準差出場に基づく線高度突破取引戦略を提示します. この戦略は,傾向と動力の2次元から市場を分析し,同時に,トレンドの機会を捉えると同時に,リスク管理を兼ね備えるユニークな標準差出場機構を採用します. 戦略の構想は,明確で,論理的に厳格で,コードは簡潔で高効率です.

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

//@version=5
strategy("Candle Height Breakout with Configurable Exit and Signal Control", shorttitle="CHB Single Signal", overlay=true)

// Input parameters for EMA filter and its length
useEmaFilter = input.bool(true, "Use EMA Filter", group="Entry Conditions")
emaFilterLength = input.int(55, "EMA Filter Length", minval=1, group="Entry Conditions")
candleCount = input.int(4, "SamG Configurable Candle Count for Entry", minval=3, maxval=4, step=1, group="Entry Conditions")
exitEmaLength = input.int(12, "Exit EMA Length", minval=1, group="Exit Conditions", defval=12)
exitStdDevMultiplier = input.float(0.5, "Exit Std Dev Multiplier", minval=0.1, maxval=2.0, step=0.1, group="Exit Conditions")

// State variables to track if we are in a long or short position
var bool inLong = false
var bool inShort = false

// Calculating EMAs with fixed periods for visual reference
ema6 = ta.ema(close, 6)
ema8 = ta.ema(close, 8)
ema12 = ta.ema(close, 12)
ema55 = ta.ema(close, 55)
ema100 = ta.ema(close, 100)
ema150 = ta.ema(close, 150)
ema200 = ta.ema(close, 200)
emaFilter = ta.ema(close, emaFilterLength)
exitEma = ta.ema(close, exitEmaLength)

// Plotting EMAs
plot(ema6, "EMA 6", color=color.red)
plot(ema8, "EMA 8", color=color.orange)
plot(ema12, "EMA 12", color=color.yellow)
plot(ema55, "EMA 55", color=color.green)
plot(ema100, "EMA 100", color=color.blue)
plot(ema150, "EMA 150", color=color.purple)
plot(ema200, "EMA 200", color=color.fuchsia)
plot(emaFilter, "EMA Filter", color=color.black)
plot(exitEma, "Exit EMA", color=color.gray)

// Calculating the highest and lowest of the last N candles based on user input
highestOfN = ta.highest(high[1], candleCount)
lowestOfN = ta.lowest(low[1], candleCount)

// Entry Conditions with EMA Filter
longEntryCondition = not inLong and not inShort and (close > highestOfN) and (not useEmaFilter or (useEmaFilter and close > emaFilter))
shortEntryCondition = not inLong and not inShort and (close < lowestOfN) and (not useEmaFilter or (useEmaFilter and close < emaFilter))

// Update position state on entry
if (longEntryCondition)
    strategy.entry("Buy", strategy.long, comment="B")
    inLong := true
    inShort := false

if (shortEntryCondition)
    strategy.entry("Sell", strategy.short, comment="S")
    inLong := false
    inShort := true

// Exit Conditions based on configurable EMA and Std Dev Multiplier
smaForExit = ta.sma(close, exitEmaLength)
upperExitBand = smaForExit + exitStdDevMultiplier * ta.stdev(close, exitEmaLength)
lowerExitBand = smaForExit - exitStdDevMultiplier * ta.stdev(close, exitEmaLength)

exitConditionLong = inLong and (close < upperExitBand or close < exitEma)
exitConditionShort = inShort and (close > lowerExitBand or close > exitEma)

// Strategy exits
if (exitConditionLong)
    strategy.close("Buy", comment="Exit")
    inLong := false

if (exitConditionShort)
    strategy.close("Sell", comment="Exit")
    inShort := false

// Visualizing entry and exit points
plotshape(series=longEntryCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="Buy Signal", text="B")
plotshape(series=shortEntryCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="Sell Signal", text="S")