Ini adalah strategi trend yang menggabungkan purata bergerak eksponensial tiga (EMA) dan Indeks Kekuatan Relatif Stochastic (Stoch RSI) untuk menjana isyarat perdagangan. Ia menjadi panjang apabila EMA cepat melintasi di atas EMA sederhana dan EMA sederhana melintasi di atas EMA perlahan. Ia menjadi pendek apabila sebaliknya berlaku. Strategi ini juga menggunakan Stoch RSI sebagai penunjuk tambahan.
Gunakan 8, 14, 50 hari EMA. Pergi panjang apabila 8 hari EMA > 14 hari EMA > 50 hari EMA. Pergi pendek apabila ia adalah sebaliknya.
Gunakan RSI Stochastic sebagai penunjuk tambahan. Hitung RSI 14 hari terlebih dahulu, kemudian hitung Stochastics pada RSI, akhirnya hitung 3 hari SMA sebagai garisan K dan 3 hari SMA pada garisan K sebagai garisan D. K melintasi D memberikan isyarat panjang.
Masukkan dagangan panjang apabila penutupan > 8 hari EMA pada isyarat panjang Masukkan dagangan pendek apabila penutupan < 8 hari EMA pada isyarat pendek
Set Stop Loss pada jarak 1 ATR di bawah/di atas harga masuk.
EMA sebagai penunjuk asas boleh mengesan trend dengan berkesan.
Menambah Stoch RSI boleh menapis isyarat palsu dan meningkatkan ketepatan kemasukan.
Stop loss dan mengambil keuntungan berasaskan ATR boleh menjejaki turun naik pasaran secara dinamik, mengelakkan penempatan yang tidak betul.
Strategi ini mempunyai parameter yang disesuaikan dengan baik dan berfungsi dengan baik semasa tempoh trend. Pengeluaran lebih kecil dan keuntungan adalah konsisten untuk perdagangan jangka panjang.
Gabungan beberapa penunjuk meningkatkan risiko whipsaw. Isyarat yang bertentangan antara EMA dan Stoch RSI boleh menyebabkan masuk pada tahap yang buruk. Trend harga itu sendiri memerlukan pemantauan dalam kes sedemikian.
Tetapan Stop Loss dan Take Profit yang konservatif boleh dilanggar oleh perubahan pasaran yang besar, menyebabkan keluar awal tanpa trend lanjut. Penyesuaian parameter ATR atau meningkatkan kelipatan SL / TP boleh membantu.
Setup EMA bertiga mempunyai kelewatan tertentu apabila garis cepat dan sederhana membalikkan.
Strategi ini memihak kepada pasaran trend. Pasaran sampingan tidak akan berfungsi dengan baik. Penyesuaian tempoh MA atau menambah penunjuk tambahan lain boleh membantu.
Tambah penunjuk seperti MACD untuk entri yang lebih baik.
Mengoptimumkan parameter ujian panjang / pendek pada ATR. Seperti menyesuaikan stop loss dari 1 ATR kepada 1.5 ATR, mengambil keuntungan dari 4 ATR kepada 3 ATR untuk hasil yang lebih baik.
Menghapuskan Stoch RSI dan menyimpan hanya MAs untuk menapis bunyi bising dan keuntungan yang lebih stabil.
Menambah lebih banyak kriteria menilai trend, seperti jumlah dagangan, untuk beroperasi di bawah tahap yang ketara.
Strategi ini menggabungkan tiga EMA dan Stoch RSI untuk menentukan trend. Isyarat kemasukan yang ketat mengurangkan perdagangan yang tidak perlu. SL dinamik dan TP berdasarkan ATR menjadikan parameter adaptif. Ujian belakang menunjukkan hasil yang baik semasa tempoh trend dengan penurunan yang lebih kecil dan keuntungan yang konsisten. Pengoptimuman lanjut boleh membawa kepada hasil yang lebih baik.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // 3ESRA // v0.2a // Coded by Vaida Bogdan // 3ESRA consists of a 3 EMA cross + a close above (for longs) the quickest EMA // or below (for shorts). Note that I've deactivated the RSI Cross Over/Under // (you can modify the code and activate it). The strategy also uses a stop loss // that's at 1 ATR distance from the entry price and a take profit that's at // 4 times the ATR distance from the entry price. // Feedback: // Tested BTCUSDT Daily // 1. Stoch-RSI makes you miss opportunities. // 2. Changing RR to 4:1 times ATR works better. //@version=4 strategy(title="3 EMA + Stochastic RSI + ATR", shorttitle="3ESRA", overlay=true, pyramiding=1, process_orders_on_close=true, calc_on_every_tick=true, initial_capital=1000, currency = currency.USD, default_qty_value=10, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.1, slippage=2) startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Backtesting range") startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Backtesting range") startYear = input(title="Start Year", type=input.integer, defval=1900, minval=1800, maxval=2100, group="Backtesting range") endDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31, group="Backtesting range") endMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Backtesting range") endYear = input(title="End Year", type=input.integer, defval=2040, minval=1800, maxval=2100, group="Backtesting range") // Date range filtering inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 23, 59)) fast = input(8, minval=8, title="Fast EMA", group="EMAs") medium = input(14, minval=8, title="Medium EMA", group="EMAs") slow = input(50, minval=8, title="Slow EMA", group="EMAs") src = input(close, title="Source") smoothK = input(3, "K", minval=1, group="Stoch-RSI", inline="K&D") smoothD = input(3, "D", minval=1, group="Stoch-RSI", inline="K&D") lengthRSI = input(14, "RSI Length", minval=1, group="Stoch-RSI", inline="length") lengthStoch = input(14, "Stochastic Length", minval=1, group="Stoch-RSI", inline="length") rsiSrc = input(close, title="RSI Source", group="Stoch-RSI") length = input(title="Length", defval=14, minval=1, group="ATR") smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR") // EMAs fastema = ema(src, fast) mediumema = ema(src, medium) slowema = ema(src, slow) // S-RSI rsi1 = rsi(rsiSrc, lengthRSI) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = sma(k, smoothD) sRsiCrossOver = k[1] < d[1] and k > d sRsiCrossUnder = k[1] > d[1] and k < d // ATR ma_function(source, length) => if smoothing == "RMA" rma(source, length) else if smoothing == "SMA" sma(source, length) else if smoothing == "EMA" ema(source, length) else wma(source, length) atr = ma_function(tr(true), length) // Trading Logic longCond1 = (fastema > mediumema) and (mediumema > slowema) longCond2 = true // longCond2 = sRsiCrossOver longCond3 = close > fastema longCond4 = strategy.position_size <= 0 longCond = longCond1 and longCond2 and longCond3 and longCond4 and inDateRange shortCond1 = (fastema < mediumema) and (mediumema < slowema) shortCond2 = true // shortCond2 = sRsiCrossUnder shortCond3 = close < fastema shortCond4 = strategy.position_size >= 0 shortCond = shortCond1 and shortCond2 and shortCond3 and shortCond4 and inDateRange var takeProfit = float(na), var stopLoss = float(na) if longCond and strategy.position_size <= 0 takeProfit := close + 4*atr stopLoss := close - 1*atr // takeProfit := close + 2*atr // stopLoss := close - 3*atr else if shortCond and strategy.position_size >= 0 takeProfit := close - 4*atr stopLoss := close + 1*atr // takeProfit := close - 2*atr // stopLoss := close + 3*atr // Strategy calls strategy.entry("3ESRA", strategy.long, comment="Long", when=longCond and strategy.position_size <= 0) strategy.entry("3ESRA", strategy.short, comment="Short", when=shortCond and strategy.position_size >= 0) strategy.exit(id="TP-SL", from_entry="3ESRA", limit=takeProfit, stop=stopLoss) if (not inDateRange) strategy.close_all() // Plot EMAs plot(fastema, color=color.purple, linewidth=2, title="Fast EMA") plot(mediumema, color=color.teal, linewidth=2, title="Medium EMA") plot(slowema, color=color.yellow, linewidth=2, title="Slow EMA") // Plot S-RSI // plotshape((strategy.position_size > 0) ? na : sRsiCrossOver, title="StochRSI Cross Over", style=shape.triangleup, location=location.belowbar, color=color.teal, text="SRSI", size=size.small) // Plot trade bgcolor(strategy.position_size > 0 ? color.new(color.green, 75) : strategy.position_size < 0 ? color.new(color.red,75) : color(na)) // Plot Strategy plot((strategy.position_size != 0) ? takeProfit : na, style=plot.style_linebr, color=color.green, title="TP") plot((strategy.position_size != 0) ? stopLoss : na, style=plot.style_linebr, color=color.red, title="SL")