移動平均値とMACDを組み合わせたRSI戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-20 14:28:59
タグ:

img

概要

この戦略は,移動平均値,MACD指標,RSI指標を組み合わせて価格傾向を特定し,低価格で高値で購入する決定を下す.短期間の移動平均値が長期間の移動平均値を超越し,閉じる価格が50日間の移動平均値を超越したときに購入信号を生成する.逆のことが起きたときに販売信号を生成する.また,戦略は,過剰購入と過剰販売ゾーンを避けるためにRSI指標,中期から長期間の傾向を決定するためにMACDヒストグラムを使用する.

戦略の論理

この戦略の核心は,短期間のEMA (3日) が長期間のEMA (30日) を横切ったときに購入・売却信号を生成する二重移動平均クロスオーバーシステムに依存している.これは,価格の短期的および長期的傾向を決定するための一般的な技術である.

さらに,この戦略は,頻繁に取引を避けるために50日間の移動平均線を組み込み,それを貿易信号のフィルターとして使用します.50日間の線以上ではのみ,購入信号がトリガーされ,その逆になります.

さらに,RSI インディケーターは,過買い (70以上) と過売 (30以下) のシナリオを特定します.この戦略は,これらの不合理なゾーンでMAクロスオーバー信号が現れても,ポジションを取ることをスキップします.

最後に,MACDヒストグラムは,市場の中長期トレンドを決定するために使用されます.MACDヒストグラム > 0 の場合,背景は上昇傾向なので,購入信号はより信頼性があります.MACDヒストグラム < 0 の場合,背景は下向きなので,購入信号はすぐに訂正に直面する可能性があります.

利点

この戦略の最大の利点は,複数の指標の組み合わせ使用であり,すべての取引決定を非常に自信と信頼性のあるものにする. 誤った信号は個々の指標にかなり頻繁に起こり得るが,この戦略は,短期的傾向,長期的傾向,過剰購入/過剰販売状態,中間傾向などで信号を確認することによって正確性を向上させる.

トレンドトレードと平均逆転トレードを組み合わせることもまた利点である.トレンドトレーダーにとってトレンドトレードをフォローすることは重要なことだが,高度な戦略はそれについて厳格ではない.合理的なゾーンで逆向きなポジションを取ることは,儲かる過剰なリターンにつながることもある.

リスク

主なリスクは,重要なニュースイベントによる突然の価格ショックから生じ,ストップ損失ポイントに浸透し,大きな損失を伴う可能性があります. 政策の変化は,戦略のパフォーマンスにも障害をもたらす可能性があります.

もう一つのリスクは,中期から長期間の牛市における一時的な引き下げ時に停止することである.戦略は,早めに停止した場合,上向きの可能性を完全に把握できなくなるかもしれない.

改良

戦略は次の次元で最適化できる:

  1. パラメータ最適化により 最適な組み合わせを見つけます

  2. Bollinger BandsやKDJなどの指標をモデルに追加して モデルを豊かにします

  3. 遅延ストップ・ロースや波動ストップ・ロースのような より高度なストップ・ロースメカニズムをテストします

  4. 戦略の一部を最適化し,より多くの種類の市場に対応する.

結論

結論として,移動平均値,RSIとMACDを組み合わせることで,この戦略は高品質の信号を生成し,単一の指標の制限を回避することが可能である.トレンドを確認することによって,すべての取引を自信を持って行う.また,戦略はトレンド取引と逆トレードをバランスさせ,適当なときに勢いを追いかけて反周期的なポジションを取ることに優れている.それは全体的に堅牢で効率的な定量戦略である.


/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('sachin 3.30 ', overlay=true)

// Input parameters
length = input.int(14, title='RSI Length', minval=1)
overbought = input.int(70, title='RSI Overbought Level', minval=0, maxval=100)
oversold = input.int(30, title='RSI Oversold Level', minval=0, maxval=100)
ema3_length = input(3, title='EMA 3 Length')
ema30_length = input(30, title='EMA 30 Length')
ema50_length = input(50, title='EMA 50 Length')

// Calculate EMAs
ema3 = ta.ema(close, ema3_length)
ema30 = ta.ema(close, ema30_length)
ema50 = ta.ema(close, ema50_length)

// Calculate RSI
rsiValue = ta.rsi(close, length)

// Calculate MACD
[macdLine, signalLine, hist] = ta.macd(close, 12, 26, 9)

var float buyPrice = na

// Buy condition: EMA 3 crosses above EMA 30 and price is above EMA 50
buyCondition = ta.crossover(ema3, ema30) and close > ema50
if (buyCondition)
    buyPrice := close
    strategy.entry('Buy', strategy.long)

// Exit long position when close is below EMA30 and below the low of the previous 3 candles after the buy entry
exitLongCondition = close < ema30 and close < ta.lowest(low, 3) and close < buyPrice
if (exitLongCondition)
    strategy.close('BuyExit')

// Sell condition: EMA 3 crosses below EMA 30 and price is below EMA 50
sellCondition = ta.crossunder(ema3, ema30) and close < ema50
if (sellCondition)
    strategy.entry('Sell', strategy.short)

// Exit short position when close is above EMA30 and above the high of the previous 3 candles after the sell entry
exitShortCondition = close > ema30 and close > ta.highest(high, 3)
if (exitShortCondition)
    strategy.close('SellExit')

// Plot EMAs on the chart
plot(ema3, color=color.new(color.blue, 0), title='EMA 3')
plot(ema30, color=color.new(color.red, 0), title='EMA 30')

// Change color of EMA 50 based on MACD histogram
ema50Color = hist > 0 ? color.new(color.blue, 0) : hist < 0 ? color.new(color.black, 0) : color.new(color.blue, 0)
plot(ema50, color=ema50Color, title='EMA 50 Colored')

// Change color of EMA 30 based on RSI trend
ema30Color = rsiValue > oversold ? color.new(color.green, 0) : rsiValue < overbought ? color.new(color.red, 0) : color.new(color.blue, 0)
plot(ema30, color=ema30Color, title='EMA 30 Colored')

// Highlight Buy and Sell signals on the chart
bgcolor(buyCondition ? color.new(color.green, 90) : na)
bgcolor(sellCondition ? color.new(color.red, 90) : na)

// Plotting Buy and Sell Signals on the Chart until strategy exit
barcolor(strategy.position_size > 0 and rsiValue > overbought ? color.new(color.yellow, 0) : strategy.position_size < 0 and rsiValue < oversold ? color.new(color.black, 0) : na)


もっと