この戦略は,MACD,EMAおよびRSIインジケーターを組み合わせ,トレンドフォローおよびリバース取引を実装する.MACDがシグナルラインを通って上昇し,閉じる価格がEMAを超えると購入信号を生成し,MACDがシグナルラインを下回り,閉じる価格がEMAを下回ると販売信号を生成し,トレンドを把握する.一方,RSIが過剰購入または過剰販売レベルに達すると逆転取引を行う.
MACD差とEMAを計算する.
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
ema = ema(close, input(200))
MACD diff (macd - シグナル) は0を超え,閉じる価格はEMAを超えています.
delta = macd - signal
buy_entry= close>ema and delta > 0
売り信号を生成します. MACDディフは0を下回り,閉じる価格はEMAを下回ります.
sell_entry = close<ema and delta<0
RSIが過剰購入または過剰販売レベルに達したときの取引逆転.
if (rsi > 70 or rsi < 30)
reversal := true
解決策:
この戦略は,MACD,EMAおよびRSIを組み合わせて,トレンドフォローと逆転取引を有機的に実施する.MACDはトレンド方向を判断し,EMAはノイズをフィルターし,RSIは逆転点を捕捉する.このようなマルチインジケーターの組み合わせは,市場の動きをより良く決定し,誤った信号を削減しながら収益性を向上させることができます.パラメータ最適化とストップ損失管理は,不必要な損失を減らすためにさらに改善することができます.全体的に,これは安定した利益の可能性のある堅牢な戦略フレームワークです.
/*backtest start: 2023-11-17 00:00:00 end: 2023-12-17 00:00:00 period: 1h basePeriod: 15m 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/ // © mbuthiacharles4 //Good with trending markets //@version=4 strategy("CHARL MACD EMA RSI") fast = 12, slow = 26 fastMA = ema(close, fast) slowMA = ema(close, slow) macd = fastMA - slowMA signal = sma(macd, 9) ema = ema(close, input(200)) rsi = rsi(close, input(14)) //when delta > 0 and close above ema buy delta = macd - signal buy_entry= close>ema and delta > 0 sell_entry = close<ema and delta<0 var bought = false var sold = false var reversal = false if (buy_entry and bought == false and rsi <= 70) strategy.entry("Buy",true , when=buy_entry) bought := true strategy.close("Buy",when= delta<0 or rsi > 70) if (delta<0 and bought==true) bought := false //handle sells if (sell_entry and sold == false and rsi >= 30) strategy.entry("Sell",false , when=sell_entry) sold := true strategy.close("Sell",when= delta>0 or rsi < 30) if (delta>0 and sold==true) sold := false if (rsi > 70 or rsi < 30) reversal := true placing = rsi > 70 ? high :low label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny) if (reversal == true) if (rsi < 70 and sold == false and delta < 0) strategy.entry("Sell",false , when= delta < 0) sold := true reversal := false else if (rsi > 30 and bought == false and delta > 0) strategy.entry("Buy",true , when= delta > 0) bought := true reversal := false