
Strategi ini adalah strategi pengesanan hentian dinamik berdasarkan garis rata-rata EMA ganda. Ia menggunakan garis 9 dan 20 untuk menentukan arah trend pasaran, digabungkan dengan RSI yang menyaring pecahan palsu. Ia juga menggunakan ATR untuk mengira titik hentian dan hentian dinamik.
Strategi ini menggunakan EMA 9 hari sebagai garis purata jangka pendek, dan EMA 20 hari sebagai garis purata jangka pertengahan, untuk menentukan trend harga. Apabila harga naik melalui garis purata jangka pendek, dan harga penutupan berada di atas harga tertinggi hari sebelumnya, dan RSI lebih tinggi daripada 30, buat lebih banyak; apabila harga turun melalui garis purata jangka pendek, dan harga penutupan berada di bawah harga terendah hari sebelumnya, dan RSI lebih rendah daripada 70, buat kosong.
Stop loss ditetapkan sebagai harga penutupan tolak 1.5 kali nilai ATR, dan stop loss ditetapkan sebagai harga penutupan ditambah ATR dikalikan dengan faktor stop. Pada masa yang sama menggunakan 2 kali ATR untuk menetapkan trend track stop.
Strategi ini secara keseluruhan merupakan strategi memegang kedudukan yang lebih stabil. Ia menggabungkan trend utama pasaran yang dinilai oleh EMA ganda, untuk mengelakkan keputusan yang dipengaruhi oleh kebisingan pasaran jangka pendek. Penambahan indikator RSI juga menapis penembusan palsu hingga ke tahap tertentu.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("CJTrade", overlay=true)
short = ema(close, 9)
medium = ema(close, 20)
long = ema(close, 50)
very_long = ema(close, 200)
plot(short, color=color.gray, linewidth=1)
plot(medium, color=color.red, linewidth=1)
plot(long, color=color.black, linewidth=1)
plot(very_long, color=color.blue, linewidth=1)
rsiValue = rsi(close, 14)
near20EMA = close > medium - atr(14)
longCond = crossover(close[1], short) and close >= high[1] and rsiValue < 70 and near20EMA
shortCond = crossunder(close[1], short) and close <= low[1] and rsiValue > 30 and near20EMA
strategy.entry("Long", strategy.long, when=longCond)
strategy.entry("Short", strategy.short, when=shortCond)
atrValue = atr(14)
stopLossLevel = close - atrValue * 1.5
// Dynamic take profit level based on ATR
takeProfitMultiplier = input(2, title="Take Profit Multiplier", minval=0.1, maxval=10, step=0.1)
takeProfitLevel = close + atrValue * takeProfitMultiplier
// Trailing stop loss for long positions
longTrailingStop = close - atrValue * 2
strategy.exit("LongTrailingStop", from_entry="Long", loss=longTrailingStop)
// Trailing stop loss for short positions
shortTrailingStop = close + atrValue * 2
strategy.exit("ShortTrailingStop", from_entry="Short", loss=shortTrailingStop)
strategy.exit("Take Profit/Stop Loss", from_entry="Long", loss=stopLossLevel, profit=takeProfitLevel)
strategy.exit("Take Profit/Stop Loss", from_entry="Short", loss=stopLossLevel, profit=takeProfitLevel)