移動平均とRSIを組み合わせた取引戦略

MA DEMA RSI
作成日: 2024-04-30 16:31:24 最終変更日: 2024-04-30 16:31:24
コピー: 4 クリック数: 812
1
フォロー
1617
フォロワー

移動平均とRSIを組み合わせた取引戦略

概要

この戦略は,複数の移動平均と比較的強い指数 (RSI) を組み合わせて取引シグナルを生成する. 9日,21日,25日,99日の4つの異なる周期の移動平均を使用して,それらの間の交差によってトレンドの方向を判断する. 同時に,この戦略は,RSI指標を補助判断として導入し,市場が超買いまたは超売れるときに追加の取引シグナルを提供する.

この戦略の主な構想は,異なる周期的な移動平均のトレンド特性を利用し,それらの多頭並びと空頭並びによって市場の主要なトレンドを判断することです.短期平均線を上向きに長期平均線を横切ることは,看板信号とみなされ,逆に,下向きの信号とみなされます.RSI指数は,市場情勢を判断するために使用され,市場が過買または過売りしているときに反転信号を提供します.

戦略原則

  1. 9日,21日,25日,99日の4つの異なる周期の単純移動平均を計算します.
  2. 9日平均線と21日平均線の交差を判定する. 9日平均線が21日平均線を上に向かって通過すると,多行信号が生じ, 9日平均線が21日平均線を下に向かって通過すると,空白信号が生じます.
  3. 25日平均線と99日平均線の交差を判断すると,25日平均線が99日平均線を上に向かって渡るとき,多行信号が生じ,25日平均線が99日平均線を下に向かって渡るとき,空白信号が生じます.
  4. 14日RSIを計算すると,RSIが70を超えると,市場は超買い状態にある.RSIが30未満になると,市場は超売り状態にある.
  5. 移動平均クロスシグナルとRSIシグナルを統合して,最終的な取引シグナルを生成します.
    • 9日間の平均線が21日間の平均線を上向きに通過し,RSIが70以上であるとき,空きポジションを開きます.
    • 9日平均線が21日平均線を下向きに通過し,RSIが30未満であるとき,多仓を打つ.
    • 25日間の平均線が99日間の平均線を上向きに通過し,RSIが70以上であるとき,ポジションを開きます.
    • 25日平均線が99日平均線を下向きに通過し,RSIが30未満であるとき,空白ポジションを開きます.
  6. 移動平均線交差信号は平仓にも用いられ,相応の平平線交差が発生すると,以前のポジションを平衡する.

優位分析

  1. トレンド追跡:この戦略は,異なる周期的な移動平均のトレンド特性を利用し,市場の主要なトレンドを判断するために,それらの多頭並列と空頭並列を使用して,市場の大きな方向を把握するのに役立ちます.
  2. フィルタリングノイズ:単一の移動平均を使用するのではなく,複数の異なる周期の移動平均を使用するこの戦略は,短期的なノイズをフィルタリングし,信号の信頼性を向上させるのに役立ちます.
  3. 情緒判断:RSI指標を補助判断として導入し,市場情緒が過度に楽観的または悲観的であるときに反転信号を提供することで,市場の極端な状態で戦略が大きく引き下がることをある程度防ぐことができます.
  4. 論理的明晰さ: 戦略の取引論理は単純で明快で,理解し,実行しやすい.
  5. 適応性:この戦略は,移動平均の周期とRSIのパラメータを調整することで,異なる市場環境と取引品種に適応することができます.

リスク分析

  1. パラメータに敏感である:戦略のパフォーマンスは,移動平均の周期選択とRSIのパラメータ設定に敏感である可能性があり,異なるパラメータは,戦略のパフォーマンスの大きな違いを引き起こす可能性があります.
  2. トレンド識別遅延:移動平均は本質的に遅延指標であり,市場の転換点で一定の遅延が発生し,取引の機会を逃すか,誤った信号を生成する可能性があります.
  3. 振動市場では,頻繁に均線交差することが,戦略がより多くの取引シグナルを生成する可能性があるため,あまり理想的なパフォーマンスを発揮することができない.
  4. ブラック・スワン事件:この戦略は,歴史的なデータに基づいて判断され,いくつかの突発的なブラック・スワン事件に対して,反応が不十分である可能性があります.

最適化の方向

  1. パラメータ最適化:移動平均の周期とRSIのパラメータを最適化して,特定の市場で最高のパフォーマンスを示すパラメータの組み合わせを見つけます.遺伝的アルゴリズムなどの最適化方法を使用して自動的に最適なパラメータを見つけることができます.
  2. 信号フィルタリング:均線交差とRSI信号に基づいて,他の技術指標または価格行動パターンを導入して二次フィルタリングを行い,信号の正確性を高めます.例えば,ブリン帯,MACDなどの指標と組み合わせることができます.
  3. ポジション管理:現在の戦略に基づいて,ポジション管理の概念を導入し,市場トレンドの強さと確実性の動向に応じてポジションのサイズを調整し,リスクをよりよく制御し,収益を向上させる.
  4. ストップ・ストップ: ストップ・ストップとストップ・メカニズム,特に波動性ストップまたは追跡ストップを導入し,単一取引の最大リスクの限界を制御する.
  5. 多市場適応:戦略を複数の市場と品種に拡張し,適切なパラメータ調整とリスク管理により,異なる市場の取引機会を捉える.

要約する

この戦略は,異なる周期の移動平均とRSI指標を組み合わせて,傾向を追跡し,感情判断する取引戦略を形成する.その優点は,論理が明確で,適応性が強いこと,多均等な配合により,市場の傾向をよりよく把握するということです.しかし,同時に,パラメータに敏感であり,トレンド認識の遅れ,振動市場の不良なパフォーマンスなどのリスクもあります.将来,パラメータ最適化,シグナルフィルタリング,ポジション管理,ストップダウズアップなどの改善によって,戦略の性能と安定性をさらに向上させることができます.

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

//@version=5
strategy("Estratégia de Médias Móveis e RSI (por Svitorino_trade)", shorttitle="Estratégia-Médias Móveis", overlay=true)

len1 = input.int(9, minval=1, title="Length 1")
len2 = input.int(21, minval=1, title="Length 2")
len3 = input.int(25, minval=1, title="Length 3")
len4 = input.int(99, minval=1, title="Length 4")
rsi_length = input.int(14, minval=1, title="RSI Length")
rsi_oversold = input.float(30, minval=0, maxval=100, title="RSI Oversold Level")
rsi_overbought = input.float(70, minval=0, maxval=100, title="RSI Overbought Level")

src = input(close, title="Source")

ama(src, length) =>
    sum = 0.0
    for i = 0 to length - 1
        sum := sum + src[i]
    sum / length

avg1 = ama(src, len1)
avg2 = ama(src, len2)
avg3 = ama(src, len3)
avg4 = ama(src, len4)

rsi_value = ta.rsi(src, rsi_length)

// Condições de entrada e saída para períodos de 9 e 21
cruzamento_9_21_acima = avg1 > avg2 and avg1[1] <= avg2[1]
cruzamento_9_21_abaixo = avg1 < avg2 and avg1[1] >= avg2[1]

// Condições de entrada e saída para períodos de 25 e 99
cruzamento_25_99_acima = avg3 > avg4 and avg3[1] <= avg4[1]
cruzamento_25_99_abaixo = avg3 < avg4 and avg3[1] >= avg4[1]

// Plotando os sinais de entrada e saída
plotshape(series=cruzamento_9_21_acima, style=shape.triangleup, color=color.green, size=size.small, location=location.belowbar)
plotshape(series=cruzamento_9_21_abaixo, style=shape.triangledown, color=color.red, size=size.small, location=location.abovebar)
plotshape(series=cruzamento_25_99_acima, style=shape.triangleup, color=color.green, size=size.small, location=location.belowbar)
plotshape(series=cruzamento_25_99_abaixo, style=shape.triangledown, color=color.red, size=size.small, location=location.abovebar)

// Entradas e saídas para períodos de 9 e 21
if cruzamento_9_21_acima and rsi_value > rsi_overbought
    strategy.entry("Venda Curta", strategy.short)
if cruzamento_9_21_abaixo and rsi_value < rsi_oversold
    strategy.entry("Compra Curta", strategy.long)
if cruzamento_9_21_acima
    strategy.close("Compra Curta")
if cruzamento_9_21_abaixo
    strategy.close("Venda Curta")

// Entradas e saídas para períodos de 25 e 99
if cruzamento_25_99_acima and rsi_value > rsi_overbought
    strategy.entry("Compra Forte", strategy.long)
if cruzamento_25_99_abaixo and rsi_value < rsi_oversold
    strategy.entry("Venda Forte", strategy.short)
if cruzamento_25_99_acima
    strategy.close("Venda Forte")
if cruzamento_25_99_abaixo
    strategy.close("Compra Forte")