
Sebuah strategi perdagangan yang didasarkan pada penembusan harga dan indeks moving average (EMA). Strategi ini menggunakan harga tertinggi dalam periode tertentu sebagai sinyal beli dan EMA sebagai sinyal jual. Strategi ini menghasilkan sinyal beli ketika harga close out menembus harga tertinggi dalam periode tertentu; Strategi ini menghasilkan sinyal jual ketika harga close out jatuh di bawah EMA. Strategi ini juga menetapkan harga stop loss untuk mengendalikan risiko.
Prinsip inti dari strategi EMA crossing breakout adalah menggunakan harga breakout dan EMA crossing untuk menangkap tren pasar. Ketika harga memecahkan harga tertinggi dalam periode yang ditentukan, menunjukkan bahwa pasar mungkin masuk ke tren naik, sehingga strategi akan menghasilkan sinyal beli. Sementara itu, EMA sebagai indikator pelacakan tren, ketika harga turun EMA, menunjukkan bahwa tren naik mungkin berakhir, sehingga strategi akan menghasilkan sinyal jual.
Strategi ini menggunakan langkah-langkah berikut untuk melakukan transaksi:
Dengan langkah-langkah di atas, strategi ini dapat mengambil keuntungan dari tren naik pasar, sementara menggunakan stop loss untuk mengendalikan risiko turun.
Strategi penembusan EMA tertinggi memiliki keuntungan sebagai berikut:
Meskipun ada beberapa keuntungan dari strategi penembusan EMA tertinggi, namun ada juga risiko berikut:
Untuk mengurangi risiko ini, langkah-langkah berikut dapat dipertimbangkan:
Untuk lebih meningkatkan kinerja strategi penembusan EMA harga tertinggi, optimasi berikut dapat dipertimbangkan:
Dengan langkah-langkah optimasi di atas, dapat meningkatkan stabilitas, adaptasi, dan keuntungan dari strategi EMA lintas batas harga tertinggi yang terobosan, sehingga dapat memperoleh kinerja yang baik di lingkungan pasar yang lebih luas.
Breakout EMA crossover adalah strategi pelacakan tren yang sederhana dan efektif, dengan memanfaatkan breakout harga dan EMA crossover untuk menangkap tren pasar, sementara menggunakan stop loss untuk mengendalikan risiko penurunan. Strategi ini memiliki logika yang jelas, parameter yang fleksibel, mudah dipahami dan diterapkan. Meskipun ada risiko tertentu dalam strategi ini, seperti risiko fluktuasi pasar, risiko pergeseran tren, dan risiko pengaturan parameter, risiko ini dapat diatasi dengan langkah-langkah pengendalian risiko yang tepat, seperti penyesuaian parameter, penggabungan parameter dengan indikator lain, dan pengaturan stop loss yang masuk akal.
/*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))
//****************************************************************************//