Strategi ini dimodifikasi dari SoftKill21
Strategi ini menggunakan tiga EMA dengan periode yang berbeda: EMA cepat 25 periode, EMA standar 50 periode dan EMA lambat 100 periode. Ketika EMA cepat melintasi EMA standar dan EMA lambat, itu menghasilkan sinyal beli. Ketika EMA cepat melintasi di bawah EMA standar dan EMA lambat, itu menghasilkan sinyal jual. Untuk mengurangi lag, EMA dihitung menggunakan teknik smoothing eksponensial ganda. Strategi ini juga memeriksa apakah waktu pasar terbuka sesi London atau New York sesuai dengan kondisi masuk. Selain itu, ukuran posisi setiap pesanan ditentukan secara dinamis dengan menggunakan persentase tetap ekuitas akun untuk mengendalikan risiko.
Secara khusus, strategi pertama menghitung tiga garis EMA, kemudian memeriksa apakah EMA cepat membentuk salib emas atau salib kematian dengan EMA standar dan EMA lambat. Jika kondisi juga sesuai dengan waktu pasar terbuka London atau New York, sinyal beli atau jual dihasilkan. Saat menentukan ukuran posisi, strategi menghitung persentase tetap ekuitas akun sebagai eksposur risiko, kemudian mengubahnya menjadi ukuran kontrak dan lot bulat untuk menyesuaikan posisi secara dinamis untuk setiap pesanan.
Strategi ini memiliki keuntungan berikut:
EMA triple dapat secara efektif meluruskan data harga dan mengidentifikasi arah tren. EMA cepat sensitif terhadap perubahan harga, EMA standar melacak secara stabil, dan EMA lambat menyaring kebisingan.
Penggunaan perataan eksponensial ganda mengurangi lag dan membuat sinyal lebih sensitif.
Menggabungkan sesi perdagangan utama menghindari sinyal yang menyesatkan selama jam sibuk.
Pendekatan manajemen risiko menyesuaikan ukuran posisi berdasarkan ekuitas akun, menghindari kerugian yang berlebihan pada perdagangan tunggal.
Logikanya sederhana dan jelas, mudah dimengerti dan diterapkan, cocok untuk pemula.
Strategi dapat dioptimalkan dan disesuaikan untuk pasangan mata uang dan kerangka waktu yang berbeda, dengan penerapan yang luas.
Strategi ini juga memiliki beberapa risiko potensial:
EMA tidak dapat secara efektif menyaring pecah palsu jangka pendek yang disebabkan oleh peristiwa mendadak, yang dapat menghasilkan sinyal yang salah. Indikator lain dapat ditambahkan untuk menyaring dan menganalisis.
Ukuran posisi persentase tetap tidak dapat disesuaikan secara dinamis dengan volatilitas pasar, yang menyebabkan posisi terlalu besar atau terlalu kecil. Ukuran posisi dinamis berdasarkan volatilitas dapat dipertimbangkan.
Hanya dua sesi utama yang dipertimbangkan, yang mungkin kehilangan peluang perdagangan di sesi lain.
Kurangnya mekanisme stop loss mengakibatkan ketidakmampuan untuk mengontrol kerugian sepihak secara efektif.
Penyambungan EMA memiliki beberapa keterlambatan dan mungkin tidak memiliki waktu masuk terbaik.
Kinerja dapat dipengaruhi oleh biaya transaksi. Stop loss dan level take profit harus disesuaikan.
Strategi dapat dioptimalkan dalam aspek berikut:
Uji parameter periode EMA yang berbeda untuk menemukan kombinasi optimal.
Tambahkan indikator penyaringan lainnya seperti RSI, Bollinger Bands untuk meningkatkan kualitas sinyal.
Memperkenalkan ukuran posisi dinamis berdasarkan volatilitas pasar dan profitabilitas.
Tambahkan gerakan atau stop loss waktu untuk membatasi kerugian.
Uji sesi perdagangan yang berbeda untuk menemukan waktu yang optimal.
Mengoptimalkan tingkat mengambil keuntungan dan stop loss untuk menyeimbangkan ukuran keuntungan dan tingkat menang.
Cobalah memodifikasi perhitungan EMA seperti EMA tertimbang linier untuk mengurangi lag.
Gunakan pembelajaran mesin untuk menemukan parameter optimal.
Model biaya transaksi dan sistem penyesuaian untuk keuntungan bersih maksimum.
Melalui optimasi di atas, sistem dapat meningkatkan profitabilitas, pengurangan dikendalikan, penerapan diperluas, untuk mendapatkan strategi perdagangan yang lebih kuat dan kuat.
Logika keseluruhan strategi ini jelas, menggunakan EMA tiga untuk mengidentifikasi tren, menggabungkan dengan sesi utama untuk pelaksanaan, dan mengadopsi ukuran posisi berdasarkan persentase akun. Ini termasuk dalam sistem trend berikut yang khas. Ada ruang besar untuk optimasi melalui penyesuaian parameter, perbaikan mekanisme, pengenalan teknologi dll untuk lebih memperluas penerapannya di lebih banyak pasar dan meningkatkan ketahanan. Sebagai pembelajaran
/*backtest start: 2023-09-19 00:00:00 end: 2023-09-26 00:00:00 period: 15m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // original author SoftKill21 //@version=4 //@capam strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true) strategy.initial_capital = 50000 len1 = input(25, minval=1, title="Length") len2 = input(50, minval=1, title="Length") len3 = input(100, minval=1, title="Length") src = input(close, title="Source") tmp1 = ema(src, len1) tmp2 = ema(src, len2) tmp3 = ema(src, len3) fastemaOut = 2*tmp1 - ema(tmp1, len1) standardemaOut = 2*tmp2 - ema(tmp2, len2) slowemaOut = 2*tmp3 - ema(tmp3, len3) //fastemaOut = sma(src, len1) //standardemaOut = sma(src, len2) //slowemaOut = sma(src, len3) plot(fastemaOut, color=color.black, title="First EMA") plot(standardemaOut, color=color.yellow, title="Second EMA") plot(slowemaOut, color=color.blue, title="Third EMA") timeinrange(res, sess) => time(res, sess) != 0 londopen = timeinrange(timeframe.period, "0300-1100") nyopen = timeinrange(timeframe.period, "0800-1600") longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen) shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen) longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen tp = input(50,title="TP") sl = input(100, title="SL") tradeLondon = input(title="Trade london session?", type=input.bool, defval=true) tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true) //MONEY MANAGEMENT-------------------------------------------------------------- balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(1,type=input.float,title="Risk % of equity ")/100 //risk % per trade temp01 = balance * risk //Risk in USD temp02 = temp01/sl //Risk in lots temp03 = temp02*100000 //Convert to contracts size = temp03 - temp03%1000 //Normalize to 1000s (Trade size) if(size < 1000) size := 1000 if(tradeLondon==true) strategy.entry("long",1,when=longCondition) strategy.exit("tp/sl","long",profit=tp,loss=sl) strategy.entry("short",0,when=shortCondition) strategy.exit("tp/sl","short",profit=tp,loss=sl) if(tradeNewyork==true) strategy.entry("long",1,when=longCondition2) strategy.exit("tp/sl","long",profit=tp,loss=sl) strategy.entry("short",0,when=shortCondition2) strategy.exit("tp/sl","short",profit=tp,loss=sl) // strategy.risk.max_intraday_filled_orders(2)