MACDとRSIのクロスオーバー戦略に基づく


作成日: 2024-01-23 15:26:08 最終変更日: 2024-01-23 15:26:08
コピー: 1 クリック数: 848
1
フォロー
1617
フォロワー

MACDとRSIのクロスオーバー戦略に基づく

概要

この戦略は,MACDとRSIの2つの指標の交差を計算して取引信号を生成する. RSIが超買い時,MACDの金叉死叉が発生すると,買入と売り出しの信号を生成する. この戦略は,価格の傾向性を考慮し,超買いと超売りの両方を組み合わせて,戦略の効果を高めるために,二つの異なるタイプの指標の優位性を組み合わせる.

戦略原則

この戦略は,主にMACDとRSIの2つの指標の組み合わせを使用して取引シグナルを生成します.

この戦略は,まずMACDの快慢平均線とシグナル線を計算する.快線が慢線より大きくなるのは金叉信号,快線が慢線より小さいのは死叉信号を生成する.これは,価格の傾向と動力が変化していることを示している.

同時に,この戦略はRSI指標を計算し,超買線と超売線を設定する. RSIが超売線を下回ると超売り,RSIが超買線上回ると超買いである.

RSIがオーバーバイオーバーセールしている場合,戦略はMACDの金叉時に買入シグナルを生じ,MACDのデッドフォーク時に売り出せシグナルを生じます.つまり,価格トレンドが転じるとき,MACD指標の感度を利用して転換点を捕捉します.RSI指標の役割は,オーバーバイオーバーセールがない場合の誤った取引を回避することです.

優位分析

この戦略は,MACDとRSIの2つの指標の優位性を組み合わせて,戦略の効果を高めることができます.

  1. MACDは価格変化を感知し,RSIは過剰買いと過剰売りを考慮し,両者は互いを補完する.

  2. この2つの指標を組み合わせると,不必要な取引を減らすために,いくつかのノイズ取引シグナルをフィルターすることができます.

  3. MACDは統計値の平均差値であり,RSIは統計値の変動比率であり,両方法は相互に検証することができる.

  4. MACD反応価格は急速に変化し,RSI反応価格はより顕著な偏差があり,組み合わせ使用は良い効果である.

リスクと解決

この戦略にはいくつかのリスクがあります.

  1. MACDとRSIは突発的な出来事の影響を受けやすいため,誤った信号が生じることがあります.適切なパラメータを調整して,信号をフィルターすることができます.

  2. 単一の株は効果が悪い場合,インデックスまたは組み合わせを使用することを考慮することができます.

  3. MACDクロスとRSIオーバーバイオーバーセール条件を同時に満たす必要があるため,信号を発信し,一部の機会を逃す可能性があります. RSIパラメータ要求を適切に低下させることができます.

最適化の方向

この戦略は,以下の点で最適化できます.

  1. MACDとRSIのパラメータを最適化して,異なる品種の特徴に適合させる.

  2. 損失の一定比率に達したときに,時効的に損失を止める戦略を増やす.

  3. ブリン帯,KDJなどの他の指標と組み合わせて,より厳格な取引シグナル条件を設定します.

  4. 高周波データで戦略を実行し,MACDの速慢特性を利用して,戦略の効果を向上させる.

  5. RSIの超買超売ラインを調整して,最適のパラメータの組み合わせを探します.

要約する

このMACDとRSIの交差戦略は,トレンド追跡と超買い超売り判断を組み合わせて,価格転換点を効果的に獲得し,戦略の効果を高めることができます.しかし,一定の制限があり,市場動向に応じて継続的にテストされ,最適化され,戦略の効果を十分に発揮する必要があります.

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

//@version=5
// © sabirt
strategy(title='MACD and RSI', overlay=true, shorttitle='MACD&RSI')
//MACD Settings
fastMA = input.int(title='Fast moving average', defval=12, minval=1)
slowMA = input.int(title='Slow moving average', defval=26, minval=1)
signalLength = input.int(9, minval=1)

//RSI settings
RSIOverSold = input.int(35, minval=1)
RSIOverBought = input.int(80, minval=1)
src = close
len = input.int(14, minval=1, title='Length')
up = ta.rma(math.max(ta.change(src), 0), len)
down = ta.rma(-math.min(ta.change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down)
wasOversold = rsi[0] <= RSIOverSold or rsi[1] <= RSIOverSold or rsi[2] <= RSIOverSold or rsi[3] <= RSIOverSold or rsi[4] <= RSIOverSold or rsi[5] <= RSIOverSold
wasOverbought = rsi[0] >= RSIOverBought or rsi[1] >= RSIOverBought or rsi[2] >= RSIOverBought or rsi[3] >= RSIOverBought or rsi[4] >= RSIOverBought or rsi[5] >= RSIOverBought



[currMacd, _, _] = ta.macd(close[0], fastMA, slowMA, signalLength)
[prevMacd, _, _] = ta.macd(close[1], fastMA, slowMA, signalLength)
signal = ta.ema(currMacd, signalLength)

avg_1 = math.avg(currMacd, signal)
crossoverBear = ta.cross(currMacd, signal) and currMacd < signal ? avg_1 : na
avg_2 = math.avg(currMacd, signal)
crossoverBull = ta.cross(currMacd, signal) and currMacd > signal ? avg_2 : na

strategy.entry('buy', strategy.long, when=crossoverBull and wasOversold)
strategy.close('buy', when=crossoverBear and wasOverbought)