Strategi Perdagangan Rata-rata Pergerakan Eksponensial Tiga Kali Lipat dan Rata-rata Pergerakan Eksponensial Stokastik


Tanggal Pembuatan: 2024-01-30 16:52:48 Akhirnya memodifikasi: 2024-01-30 16:52:48
menyalin: 3 Jumlah klik: 777
1
fokus pada
1617
Pengikut

Strategi Perdagangan Rata-rata Pergerakan Eksponensial Tiga Kali Lipat dan Rata-rata Pergerakan Eksponensial Stokastik

Ringkasan

Strategi ini adalah strategi pelacakan tren yang menggabungkan indikator moving average indeks tiga kali lipat dan indikator moving average indeks rata-rata untuk menghasilkan sinyal perdagangan. Ketika rata-rata bergerak cepat melewati rata-rata bergerak cepat, rata-rata bergerak cepat melewati rata-rata bergerak lambat lebih banyak; ketika rata-rata bergerak cepat melewati rata-rata bergerak cepat, rata-rata bergerak lambat melewati rata-rata bergerak lambat.

Prinsip

  1. Penggunaan rata-rata bergerak indeks tiga kali lipat pada 8, 14, dan 50 hari. Ketika rata-rata bergerak indeks pada 8 hari melewati rata-rata bergerak indeks pada 14 hari, sinyal melihat lebih banyak dihasilkan ketika rata-rata bergerak indeks pada 14 hari melewati rata-rata bergerak indeks pada 50 hari; sebaliknya, sinyal melihat ke atas.

  2. Menggunakan indikator rata-rata bergerak rata-rata dengan indeks acak ((Stochastic RSI) sebagai indikator penilaian tambahan. Secara khusus: pertama menghitung RSI 14 hari, kemudian menghitung indikator Stokastik berdasarkan indikator RSI, dan akhirnya menghitung indikator Stokastik dengan rata-rata bergerak sederhana 3 hari untuk mendapatkan garis K dan rata-rata bergerak sederhana 3 hari untuk mendapatkan garis D. Ketika K melewati garis D, sebagai sinyal tambahan untuk melihat lebih banyak.

  3. Pada saat menghasilkan sinyal perdagangan, jika harga lebih tinggi dari rata-rata pergerakan indeks 8 hari, masuklah lebih banyak; jika harga lebih rendah dari rata-rata pergerakan indeks 8 hari, masuklah kosong.

  4. Stop loss terletak di bawah harga masuk / di atas 1 kali jarak ATR. Stop stop terletak di atas / di bawah 4 kali jarak ATR.

Keunggulan

  1. Moving average sebagai indikator dasar, dapat secara efektif melacak tren pasar. Triple Index Moving Average menggunakan kombinasi dari beberapa periode, dapat menjamin sensitivitas terhadap tren jangka pendek dan jangka menengah.

  2. Menambahkan Stochastic RSI sebagai indikator penilaian tambahan, dapat memfilter sinyal palsu, meningkatkan akurasi masuk.

  3. Dengan pengaturan stop loss sesuai dengan ATR, Anda dapat secara dinamis melacak tingkat fluktuasi pasar dan menghindari stop loss yang terlalu besar atau terlalu kecil.

  4. Pengaturan parameter strategi ini masuk akal, dan kinerja yang sangat baik di bawah tren besar. Pengembalian kecil, pengembalian yang lebih stabil, cocok untuk operasi garis panjang.

Risiko

  1. Strategi kombinasi multi-indikator meningkatkan risiko reversal. Kesalahan sinyal perdagangan dapat terjadi ketika Moving Average dan Stochastic RSI mengirimkan sinyal yang berlawanan.

  2. Pengaturan stop loss dan stop loss yang lebih konservatif, mungkin akan terobosan ketika pasar berfluktuasi tajam sehingga berhenti, kehilangan peluang tren. Pada saat ini dapat disesuaikan dengan parameter ATR atau meningkatkan kelipatan stop loss.

  3. Karena menggunakan Triple Moving Average, akan ada beberapa lag ketika garis cepat dan garis menengah berbalik. Pada saat ini perlu memperhatikan apakah harga itu sendiri berbalik untuk menentukan apakah masuk.

  4. Strategi ini terutama cocok untuk situasi tren, yang tidak berkinerja baik dalam situasi konsolidasi. Dalam hal ini, pertimbangan dapat diberikan untuk mengoptimalkan parameter periodik rata-rata bergerak atau menggunakan indikator penentuan lainnya.

Pengoptimalan

  1. Anda dapat mempertimbangkan untuk menambahkan indikator lain seperti MACD untuk lebih mengoptimalkan waktu masuk. Anda juga dapat menguji kombinasi moving average dari berbagai parameter.

  2. Parameter yang dapat dioptimalkan untuk pemeriksaan ATR yang berlebihan. Misalnya, stop loss disesuaikan dari 1 ATR menjadi 1.5 ATR, stop loss disesuaikan dari 4 ATR menjadi 3 ATR, untuk melihat apakah hasil yang lebih baik dapat diperoleh.

  3. Anda dapat menguji hanya menggunakan moving averages dan menghapus Stochastic RSI untuk melihat apakah Anda dapat menyaring lebih banyak kebisingan dan mendapatkan keuntungan yang lebih stabil.

  4. Anda dapat mempertimbangkan untuk menambahkan lebih banyak kondisi untuk menilai tren, seperti meningkatkan volume transaksi, untuk memastikan bahwa Anda beroperasi dalam tren skala besar.

Meringkaskan

Strategi ini menggunakan kombinasi dari Triple Index Moving Average dan Stochastic RSI untuk menentukan arah tren. Sinyal masuk lebih ketat dan dapat secara efektif mengurangi perdagangan yang tidak penting. Stop loss set tracking ATR secara dinamis, sehingga parameter strategi dapat beradaptasi. Dari hasil retrospeksi, strategi ini berkinerja baik dalam situasi tren, dengan sedikit mundur, dan keuntungan yang lebih stabil.

Kode Sumber Strategi
/*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")