
EMA dan RSI bersalin strategi dengan menggabungkan indeks bergerak rata-rata ((EMA) dan indeks yang agak kuat ((RSI) dua petunjuk teknikal untuk mengenal pasti potensi membeli atau menjual isyarat. Apabila EMA dan RSI bersalin, menunjukkan pergerakan pasaran mungkin berubah. Sebagai contoh, apabila EMA yang lebih pendek tempoh EMA melalui EMA yang lebih lama tempoh, dan pada masa yang sama RSI melalui satu titik, menunjukkan kemungkinan trend naik, yang dikenali sebagai penanda aras. Sebaliknya, apabila EMA yang lebih pendek tempoh, dan pada masa yang sama RSI melalui satu titik, menunjukkan kemungkinan trend menurun, yang dikenali sebagai penanda aras.
Strategi EMA dan RSI silang adalah strategi trend yang mudah digunakan, dengan menggabungkan trend dan dinamika dua dimensi, dapat menilai arah pasaran secara menyeluruh. Pada masa yang sama, strategi ini menggunakan beberapa syarat penapisan dan kaedah stop loss dinamik untuk meningkatkan kualiti isyarat dan keupayaan kawalan risiko. Namun, strategi ini juga mempunyai beberapa batasan, seperti masalah metrik yang terlewat, perdagangan yang kerap. Oleh itu, dalam aplikasi sebenar, strategi ini perlu dioptimumkan dan diperbaiki lagi berdasarkan ciri-ciri pasaran tertentu dan pilihan risiko peribadi.
/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © pritom980
//@version=5
strategy("EMA RSI Cross", overlay=true, margin_long=100, margin_short=100)
// add RSI
rsi_period = input.int(7,"RSI Period")
rsi_val = ta.rsi(close[1],rsi_period)
plot(rsi_val, color=color.blue, linewidth=2, title="RSI")
buyRsiFlag = rsi_val < 20
sellRsiFlag = rsi_val > 80
// add EMA
ema = ta.ema(close, 50)
plot(ema, color=color.red, linewidth=2, title="EMA")
// check buy
// buy when the price is below ema
buyFlag = ema > close ? true : false
// sell when the price is above ema
sellFlag = ema < close ? true : false
bgcolor(buyFlag and buyRsiFlag ? color.green : na )
bgcolor(sellFlag and sellRsiFlag ? color.red : na )
// Check if current candle's body is bigger than previous candle's body and of opposite color
is_body_bigger_long = math.abs(close - open) > math.abs(close[1] - open[1]) and close > open != close[1] > open[1]
greenCandle = close > close[1]
redCandle = close < close[1]
// Mark the candle
bgcolor(is_body_bigger_long and greenCandle and buyFlag ? color.blue : na, transp=70)
// ENTRY ---------------------
// Input for ATR period
atr_length = input(14, title="ATR Length")
// Calculate ATR
atr_value = ta.atr(atr_length)
// Calculate stop loss and take profit levels
candleBody = math.abs(close-open)
slDist = atr_value + candleBody
stop_loss_long = close - slDist
take_profit_long = close + (1.2 * slDist)
stop_loss_short = high + slDist
take_profit_short = high - (1.2 * slDist)
// Entry and exit conditions
if (buyFlag and buyRsiFlag and strategy.opentrades >= 0 and greenCandle)
strategy.entry("Long", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_long, limit=take_profit_long)
// Entry and exit conditions
if (sellFlag and sellRsiFlag and strategy.opentrades <= 0 and redCandle)
strategy.entry("Short", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_short, limit=take_profit_short)