BreakHigh EMA Crossover Strategy adalah strategi perdagangan yang didasarkan pada price breakout dan crossover Exponential Moving Average (EMA). Strategi ini menggunakan harga tertinggi dalam periode tertentu sebagai sinyal beli dan EMA sebagai sinyal jual. Ketika harga penutupan melanggar harga tertinggi dalam periode tertentu, strategi menghasilkan sinyal beli. Ketika harga penutupan jatuh di bawah EMA, strategi menghasilkan sinyal jual. Strategi ini juga menetapkan harga stop-loss untuk mengendalikan risiko. Selain itu, strategi ini menyediakan beberapa parameter bagi pengguna untuk disesuaikan untuk beradaptasi dengan gaya perdagangan dan kondisi pasar yang berbeda.
Prinsip inti dari strategi BreakHigh EMA Crossover adalah untuk menangkap tren pasar menggunakan price breakout dan EMA crossover. Ketika harga pecah di atas harga tertinggi dalam periode tertentu, ini menunjukkan bahwa pasar dapat memasuki tren naik, sehingga strategi menghasilkan sinyal beli. Pada saat yang sama, EMA berfungsi sebagai indikator trend-mengikuti. Ketika harga turun di bawah EMA, ini menunjukkan bahwa tren naik dapat berakhir, sehingga strategi menghasilkan sinyal jual.
Strategi ini menggunakan langkah-langkah berikut untuk menerapkan perdagangan:
Melalui langkah-langkah di atas, strategi dapat mendapatkan keuntungan dari tren naik di pasar sambil menggunakan stop-loss untuk mengendalikan risiko penurunan.
Strategi Crossover BreakHigh EMA memiliki keuntungan berikut:
Meskipun Strategi Crossover EMA BreakHigh memiliki beberapa keuntungan, ia juga memiliki risiko berikut:
Untuk mengurangi risiko ini, langkah-langkah berikut dapat dipertimbangkan:
Untuk lebih meningkatkan kinerja dari BreakHigh EMA Crossover Strategy, arah optimalisasi berikut dapat dipertimbangkan:
Melalui langkah-langkah optimalisasi di atas, stabilitas, kemampuan beradaptasi, dan profitabilitas dari BreakHigh EMA Crossover Strategy dapat ditingkatkan, memungkinkan untuk mencapai kinerja yang baik di lebih banyak lingkungan pasar.
BreakHigh EMA Crossover Strategy adalah strategi trend-following yang sederhana dan efektif yang menangkap tren pasar dengan menggunakan price breakout dan EMA crossover sambil menggunakan stop-loss untuk mengontrol risiko penurunan. Logika strategi jelas, parameternya fleksibel, dan mudah dipahami dan diimplementasikan. Meskipun strategi memiliki risiko tertentu, seperti risiko volatilitas pasar, risiko pembalikan tren, dan risiko pengaturan parameter, risiko ini dapat dikurangi melalui langkah-langkah pengendalian risiko yang tepat, seperti menyesuaikan parameter, menggabungkan dengan indikator lain, dan menetapkan stop-loss yang wajar. Selain itu, strategi memiliki ruang optimasi lebih lanjut, seperti penyesuaian parameter dinamis, memperkenalkan mekanisme long-short loss, mengoptimalkan stop-loss dan take-profit, dan menggabungkan dengan analisis fundamental, dll., untuk meningkatkan kinerja dan kemampuan beradaptasi strategi.
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version = 5 strategy(title="BreakHigh Strategy", overlay=true) Period = input.int(34, "Number of previous bars(34,52 Recommend)") showbg = input(defval = false,title = "Show BackGround Color") showema = input(defval = true ,title = "Show Line") MarkBuySig = input(defval = true ,title = "Show Buy/Sell Signal") Risk_Per_Trade = input(2.5, '% of Risk Per Trade') / 100 // Risk% Per Trade Switch SLDAY = input(title='Lowest price of the previous number of bars', defval=9) Buysig = input(defval=true, title='Start Strategy') UseSl = input(defval=false, title='Use Stoploss Price') Compound = input(defval = false ,title = "Compound Profit") xtf = input.timeframe(title='** Fix chart to which time frame ? **)', defval='D') //BUY float buyLine = na buyLine := ta.highest(high,Period)[1] plot(showema ? buyLine : na, linewidth=1, style=plot.style_linebr, color=color.new(color.green, 0)) //SELL output = ta.ema(close, Period) show = request.security(syminfo.tickerid, xtf, output) FastL = plot(showema ? show : na, color=color.new(color.white, 0), linewidth=2, title='Slow EMA') //Buy-Sell Signal Green = close > buyLine // Buy Red = close < show // Sell buycond = Green and Green[1] == 0 sellcond = Red and Red[1] == 0 bullish = ta.barssince(buycond) < ta.barssince(sellcond) bearish = ta.barssince(sellcond) < ta.barssince(buycond) buy = bearish[1] and buycond sell = bullish[1] and sellcond plotshape(MarkBuySig ? buy : na, style=shape.labelup, text='Buy Next Bar', textcolor=color.new(color.black, 0), location=location.belowbar, color=color.new(color.green, 0)) plotshape(MarkBuySig ? sell : na, style=shape.labeldown, text='Sell Next Bar', textcolor=color.new(color.black, 0), location=location.abovebar, color=color.new(color.red, 0)) bgcolor(showbg ? bullish ? color.new(color.green,90) : color.new(color.red,90) : na ) // === BACKTEST RANGE === // use_date_range = input(true) FromYear = input.int(defval=2012, title='From Year', minval=1950) FromMonth = input.int(defval=1, title='From Month', minval=1) FromDay = input.int(defval=1, title='From Day', minval=1) ToYear = input.int(defval=9999, title='To Year', minval=1950) ToMonth = input.int(defval=1, title='To Month', minval=1) ToDay = input.int(defval=1, title='To Day', minval=1) in_date_range = use_date_range ? time > timestamp(FromYear, FromMonth, FromDay, 00, 00) and time < timestamp(ToYear, ToMonth, ToDay, 23, 59) : true //****************************************************************************// ////////////////////////////////////////////// // define strategy entry / exit // ////////////////////////////////////////////// //****************************************************************************// // LONG CONDITIONS Select_Long_Condition_1 = close > buyLine // Buy when Have Signal Open_Long_Condition = Select_Long_Condition_1 and strategy.opentrades == 0 //****************************************************************************// // STOP LOSS Price float longSL = na longSL := Open_Long_Condition ? ta.lowest(low, SLDAY)[1] : longSL[1] //****************************************************************************// // Cal StopLoss Long_Entry_Price = close Diff_OPEN_to_SL = math.abs(Long_Entry_Price - longSL) // Exit CONDITIONS Exit_Long_Condition = close < show // Sell when Have Signal //****************************************************************************// // POSITION SIZE CAP strategy.initial_capital = 50000 float portSize = Compound ? strategy.netprofit + strategy.initial_capital : strategy.initial_capital float LossAmoutUnit = portSize * Risk_Per_Trade //50 float PercentSL = ( Diff_OPEN_to_SL / Long_Entry_Price ) * 100 float PositionSize = LossAmoutUnit / Diff_OPEN_to_SL //****************************************************************************// // ENTRY/EXIT if Buysig if Open_Long_Condition and in_date_range strategy.entry('LONG', strategy.long, qty=PositionSize) if Exit_Long_Condition and in_date_range strategy.close('LONG') if close < longSL and UseSl strategy.close('LONG') //****************************************************************************// // PLOT STOP LOSS longPlotSL = strategy.opentrades > 0 and strategy.position_size > 0 ? longSL : na // label.new(bar_index, high, text=str.tostring(longPlotSL),color=color.white, textcolor=color.black) plot(longPlotSL, title="", linewidth=2, style=plot.style_linebr, color=color.new(color.red, 0)) //****************************************************************************//