Strategi ini menggunakan RMA jangka panjang dan crossover EMA jangka pendek untuk menentukan arah tren. Ini mengikuti tertinggi terbaru atau terendah terendah untuk stop loss.
Gunakan RMA jangka panjang dan EMA jangka pendek untuk menentukan tren. EMA pendek yang melintasi di bawah RMA panjang menandakan downtrend. Melalui di atas menandakan uptrend.
Ketika harga menembus di atas tertinggi terbaru selama periode tertentu, jejak tertinggi tertinggi sebagai stop loss.
Tetapkan zona no-trade di sekitar RMA. Jangan membuka posisi ketika harga berada di dalam zona untuk menghindari whipsaws. Jangkauan zona didasarkan pada persentase tertentu dari nilai RMA.
Menetapkan harga mengambil keuntungan untuk keluar posisi pada persentase keuntungan setelah masuk.
Crossover rata-rata bergerak ganda dapat diandalkan menentukan arah tren.
Stop loss mengikuti tren.
No-trade zone menyaring sinyal palsu.
Ambil keuntungan memungkinkan strategi untuk secara aktif menutup perdagangan yang menguntungkan.
Penundaan penyeberangan rata-rata bergerak dapat meningkatkan kerugian.
Stop loss yang terlalu dekat dengan harga bisa terhenti oleh kebisingan.
No-trade zone yang terlalu luas dapat kehilangan kesempatan.
Tidak berhenti tepat waktu bisa menyebabkan kerugian lebih lanjut.
Kemungkinan Solusi:
Mengoptimalkan parameter rata-rata bergerak untuk mengurangi keterlambatan.
Meningkatkan stop loss sedikit untuk mencegah sensitivitas berlebihan.
Uji menyesuaikan kisaran zona bebas perdagangan untuk menghindari perdagangan yang hilang.
Tambahkan mekanisme stop loss lainnya untuk membatasi kerugian maksimum.
Uji kombinasi rata-rata bergerak lainnya untuk lebih cocok.
Tambahkan spread, MACD dll untuk meningkatkan stabilitas.
Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara cerdas.
Masukkan kekuatan tren untuk menghindari perdagangan yang bertentangan dengan tren.
Mengoptimalkan manajemen uang untuk tingkat kemenangan yang lebih tinggi.
Strategi ini menggunakan crossover rata-rata bergerak ganda untuk menentukan arah tren dan menggabungkan trailing stop dan no-trade zone untuk mengunci keuntungan tren. Kerangka kerja ini sederhana dan dapat diperluas.
/*backtest start: 2023-08-24 00:00:00 end: 2023-09-12 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © PatrickGwynBuckley //@version=5 //var initialCapital = strategy.equity strategy("PB Trend Scalper", "PB Trend Scalper", overlay = true) shortma = input.int(55, title="quick ma's") longma = input.int(100, title="long ma's") ema55h = ta.ema(high, shortma) ema55l = ta.ema(low, shortma) ema200h = ta.rma(high, longma) ema200l = ta.rma(low, longma) stock = ta.stoch(close, high, low, 14) lev = input.int(3, title="leverage") hhVal = input.int(170, title="Highest high period") llVal = input.int(170, title="Lowest low period") hh = ta.highest(high, hhVal) ll = ta.lowest(low, llVal) //plot(stock) plot(hh, color=color.new(color.green, 50)) plot(ll, color=color.new(color.red, 50)) var float downtrade = 0 p = input.float(3.0, title="no trade zone") l = 3 emadistlong = ema200h + ((ema200h/100)*p) emadistshort = ema200l - ((ema200h/100)*p) plot(ema55h) plot(ema55l) ntl = plot(emadistlong, color=color.new(color.red, 10)) nts = plot(emadistshort, color=color.new(color.red, 10)) fill(ntl, nts, color=color.new(color.red, 90)) //position size EntryPrice = close //positionValue = initialCapital positionSize = (strategy.equity*lev) / EntryPrice //plot(strategy.equity) //standard short if ema55h < ema200l and close[2] < ema55l and close[1] > ema55l and high[1] < ema55h and close < ema55h and ema55h < emadistshort and strategy.opentrades == 0// and stock > 85 strategy.entry("short", strategy.short, qty=positionSize, comment="short") downtrade := 1 //reset count if (ta.crossunder(ema55h, ema200l)) and downtrade == 1 downtrade := 0 //standard long if ema55l > ema200h and close[2] > ema55h and close[1] < ema55h and low[1] > ema55l and close > ema55l and ema55l > emadistlong and strategy.opentrades <= 1// and stock < 15 strategy.entry("long", strategy.long, qty=positionSize, comment="long") downtrade := 0 //RESET COUNT ON MA CROSS if (ta.crossover(ema55l, ema200h)) and downtrade == 0 downtrade := 1 longclose2 = low < ll[1] or low < emadistshort //close < open and open<open[1] and open[2] < open[3] and open[3] < emadistshort//close < ta.lowest(low, 20)// shortclose2 = high > hh[1] or high>emadistlong//close > open and open>open[1] and open[2]>open[3] and open[3] > emadistlong//high > emadistlong//close > ta.highest(high, 20)// sl = 3.5 tp = input.float(6.9, title="take profit %") tp2 = 10 strategy.exit("long exit", "long", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl))) strategy.close("long", when = longclose2, comment = "long exit") //strategy.close("long", when = (downtrade == 1), comment = "long exit") //strategy.exit("long exit", "long2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl))) //strategy.close ("long2", when = longclose2, comment = "long exit") //strategy.close("long", when = (downtrade == 1), comment = "long exit") strategy.exit("short exit", "short", profit = (strategy.position_avg_price*(tp)))//, loss = (strategy.position_avg_price*(sl)))//, loss = 300) strategy.close("short", when = shortclose2, comment = "short exit") //strategy.close("short", when = (downtrade == 0), comment = "short exit") //strategy.exit("short exit", "short2", profit = (strategy.position_avg_price*(tp2)))//, loss = (strategy.position_avg_price*(sl))) //strategy.close ("short2", when = shortclose2, comment = "short exit") //strategy.close("short2", when = (downtrade == 0), comment = "short exit") //if (strategy.exit("long exit", "long")) //downtrade := 1 //else // downtrade := 0