MACD逆転戦略のRSI

作者: リン・ハーンチャオチャン,日付: 2024-01-15 12:33:14
タグ:

img

概要

この戦略は,MACD指標のRSI値に基づいて,買い・売るシグナルを決定する.RSIが過買いラインまたは範囲を超えると購入し,RSIが過買い範囲を下回ると売ったり,利益/損失を停止する.

戦略原則

この戦略は,MACDとRSIの両方の利点を組み合わせています.

まず,DIF,DEA,MACD線を含むMACD指標の3つの曲線が計算される.その後,MACD線上でRSI指標が計算され,MACDのRSIを形成する.

MACD指標のRSIが30または35の過剰購入範囲を超えると,MACDラインが過剰販売範囲に入っており,価格傾向が上昇し始めていることを示す買い信号が生成されます.MACD指標のRSIが再び15の過剰購入範囲を下回ると,トレンド逆転が終了したことを示す販売信号が生成されます.

この戦略では,部分的な利益を取ることも設定されています.MACD指標のRSIが80の過剰購入レベルを超えると,ポジションの一部を売却して部分的な利益を得ることができます.

利点分析

  • トレンド逆転点を決定するためにMACD指標を使用する
  • 偽の信号をフィルターするために,過買い/過売りレベルを決定するためにRSI指標を使用します.
  • 正確な買い/売点のための二重指標の組み合わせ
  • 損失拡大を防ぐため,部分的な利益取得

リスク分析

  • MACD パラメータが正しくない場合,傾向の不正確な判断
  • RSI パラメータが不適切である場合,過買い/過売りゾーンの不正確な判断
  • 利回りが激しくなった場合,より大きな上昇を逃す可能性があります.

解決策:

  • 最適な組み合わせを見つけるためにMACDパラメータを最適化
  • 精度を向上させるために RSI パラメータを最適化
  • 利回り率を絞るため 利回り基準を適正に緩和する

オプティマイゼーションの方向性

戦略は,次の側面でも最適化できます.

  1. ダウンサイドリスクをさらに制御するためにストップ損失戦略を追加する
  2. 価格変動に伴い徐々にポジションをアップするポジションサイズ化モジュールを追加する
  3. 購入/販売ポイントの精度をさらに改善するために,歴史的なデータで訓練された機械学習モデルを統合する
  4. 戦略の頻度を向上させるため15mや5mのような短い時間枠で実行する試み

結論

全体的な戦略設計哲学は明確で,MACD逆転をRSIフィルターと組み合わせて購入/販売ポイントを決定するコアアイデアです.パラメータ最適化,ストップ損失管理,リスク管理対策などにより,非常に実践的な量子取引戦略に形作ることができます.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4

strategy(title="RSI of MACD Strategy[Long only]",  shorttitle="RSIofMACD" , overlay=false, pyramiding=1,     default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

	

/////////////////////////////////////////////////////////////////////////////////



// MACD Inputs ///
fastLen = input(12, title="Fast Length")
slowLen = input(21, title="Slow Length")
sigLen  = input(9, title="Signal Length")

rsiLength  = input(14, title="RSI of MACD Length")




riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(3,title="Stop Loss",minval=1)

takeProfit=input(false, title="Take Profit")


[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)

rsiOfMACD = rsi(macdLine, rsiLength)
emaSlow = ema(close, slowLen)



//drawings
/////////////////////////////////////////////////////////////////////////////////


obLevelPlot = hline(80, title="Overbought / Profit taking line",  color=color.blue , linestyle=hline.style_dashed)
osLevelPlot = hline(30, title="Oversold / entry line", color=color.green, linestyle=hline.style_dashed)

exitLinePlot = hline(15, title="Exit line", color=color.red, linestyle=hline.style_dashed)




plot(rsiOfMACD, title = "rsiOfMACD" ,  color=color.purple)


//drawings
/////////////////////////////////////////////////////////////////////////////////




//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////

//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="RSIofMACD", long=true,   qty=qty1,  when =  ( crossover(rsiOfMACD, 30) or crossover(rsiOfMACD, 35)  ) and close>=emaSlow )



bgcolor(abs(strategy.position_size)>=1 ? color.blue : na , transp=70)


barcolor(abs(strategy.position_size)>=1 and  ( crossover(rsiOfMACD, 30) or crossover(rsiOfMACD, 35) ) ? color.purple : abs(strategy.position_size)>=1 ? color.blue : na  )


//partial exit
strategy.close(id="RSIofMACD", comment="PExit Profit is "+tostring(close - strategy.position_avg_price,  "###.##")  ,  qty=strategy.position_size/3, when= takeProfit and abs(strategy.position_size)>=1 and close > strategy.position_avg_price and crossunder(rsiOfMACD,80) )

//Close All
strategy.close(id="RSIofMACD", comment="Close All   Profit is "+tostring(close - strategy.position_avg_price,  "###.##"), when=abs(strategy.position_size)>=1 and crossunder(rsiOfMACD,15) ) //and close > strategy.position_avg_price )


//Strategy Logic 
/////////////////////////////////////////////////////////////////////////////////



もっと