この戦略は,MACDおよびRSI指標のクロスオーバーを計算することによって取引信号を生成する.RSIが過買いまたは過売りされ,MACDクロスオーバーが発生すると購入および売却信号を生成する.この戦略は,価格の動向と過買い/過売り状況の両方を考慮して,2種類の異なる指標の利点を組み合わせ,それによって戦略の有効性を向上させる.
この戦略は,主にMACDとRSIの組み合わせを使用して取引信号を生成する.MACDは一般的に価格動向と動力変化を決定するために使用され,RSIは過買い/過売り条件を決定するために使用されます.
この戦略は,まずMACDの高速線,スローライン,シグナルラインを計算する.高速線がスローラインよりも大きいとき,ゴールデンクロス信号が生成される.高速線がスローラインよりも小さいとき,死亡クロス信号が生成される.これは価格傾向と勢いが変化していることを示す.
RSIは,RSIの値値が値上がりし,値上がりし,値上がりし,値上がりし,値上がりし,値上がりし,値上がりし,値上がりし,値上がりし.
RSIが過買い/過売れになったとき,戦略はMACDの黄金クロスが発生すると購入信号を生成し,MACDの死亡クロスが発生すると販売信号を生成する.つまり価格トレンドが逆転すると,MACDインジケーターは敏感性によりターニングポイントを捕捉するために使用される.RSIインジケーターは過買い/過売れが発生しない場合,間違った取引を避ける.
この戦略は,MACDとRSIの利点を組み合わせて,その有効性を向上させる.
MACDは価格変動を敏感に捉えることができ,RSIは買い過ぎ/売り過ぎの状況を考慮し,互いを補完します.
この2つの指標を組み合わせると 騒々しい取引信号をフィルタリングして 不必要な取引を減らすことができます
MACDは移動平均値の違いを測定し,RSIは価格変動の割合を測定する.この2つの方法は互いに検証できます.
MACDは価格変化に迅速に対応し,RSIの過剰購入/過剰販売の差は明白で,良いコンボ効果です.
この戦略には リスクもあります
MACDとRSIは,突然の出来事に対して脆弱であり,間違った信号を生む可能性があります. 信号をフィルタリングするためにパラメータを調整できます.
個々の株に対する影響は理想的ではない場合もあるが,インデックスやポートフォリオを考慮することができる.
MACDクロスオーバーとRSIの両方を満足させるため,買い過ぎ/売過ぎはいくつかの機会を逃す可能性があります.RSIパラメータの要件は削減されることがあります.
戦略は,次の側面でも最適化できます.
MACD と RSI パラメータを最適化し,異なる取引種に対応します.
ストップ・ロスの戦略を追加して 損失が一定パーセントに達したときに 時間をかけてストップ・ロスをします
ボリンジャー・バンドやKDJなどの他の指標と組み合わせることで,より厳しい取引シグナル条件を設定します.
高周波データで戦略を実行し,MACDの高速/遅い特性を活用し,戦略のパフォーマンスを向上させる.
バックテスト結果に基づいて,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)