Strategy BreakHigh EMA Crossover adalah strategi dagangan berdasarkan penembusan harga dan penyambungan Exponential Moving Average (EMA). Strategi ini menggunakan harga tertinggi dalam tempoh tertentu sebagai isyarat beli dan EMA sebagai isyarat jual. Apabila harga penutupan melanggar harga tertinggi dalam tempoh tertentu, strategi menghasilkan isyarat beli. Apabila harga penutupan jatuh di bawah EMA, strategi menghasilkan isyarat jual. Strategi ini juga menetapkan harga stop-loss untuk mengawal risiko. Selain itu, strategi ini menyediakan pelbagai parameter untuk pengguna menyesuaikan diri untuk menyesuaikan diri dengan gaya perdagangan dan keadaan pasaran yang berbeza.
Prinsip utama Strategi Crossover BreakHigh EMA adalah untuk menangkap trend pasaran menggunakan harga pecah dan crossover EMA. Apabila harga memecahkan di atas harga tertinggi dalam tempoh tertentu, ia menunjukkan bahawa pasaran mungkin memasuki trend menaik, jadi strategi menghasilkan isyarat beli. Pada masa yang sama, EMA berfungsi sebagai indikator trend-mengikuti. Apabila harga jatuh di bawah EMA, ia menunjukkan bahawa trend menaik mungkin berakhir, jadi strategi menghasilkan isyarat jual.
Strategi ini menggunakan langkah-langkah berikut untuk melaksanakan perdagangan:
Melalui langkah-langkah di atas, strategi boleh mendapat keuntungan daripada trend meningkat di pasaran sambil menggunakan stop-loss untuk mengawal risiko penurunan.
Strategi Crossover EMA BreakHigh mempunyai kelebihan berikut:
Walaupun Strategi Crossover EMA BreakHigh mempunyai kelebihan tertentu, ia juga mempunyai risiko berikut:
Untuk mengurangkan risiko ini, langkah-langkah berikut boleh dipertimbangkan:
Untuk meningkatkan lagi prestasi Strategi Crossover BreakHigh EMA, arah pengoptimuman berikut boleh dipertimbangkan:
Melalui langkah-langkah pengoptimuman di atas, kestabilan, kesesuaian, dan keuntungan Strategi Crossover BreakHigh EMA dapat ditingkatkan, membolehkan ia mencapai prestasi yang baik dalam lebih banyak persekitaran pasaran.
Strategi BreakHigh EMA Crossover adalah strategi trend-mengikuti yang mudah dan berkesan yang menangkap trend pasaran dengan menggunakan harga pecah dan EMA crossover sambil menggunakan stop-loss untuk mengawal risiko penurunan. Logik strategi adalah jelas, parameter fleksibel, dan mudah difahami dan dilaksanakan. Walaupun strategi mempunyai risiko tertentu, seperti risiko turun naik pasaran, risiko pembalikan trend, dan risiko menetapkan parameter, risiko ini boleh dikurangkan melalui langkah-langkah kawalan risiko yang sesuai, seperti menyesuaikan parameter, menggabungkan dengan parameter lain, dan menetapkan stop-loss yang munasabah. Di samping itu, strategi ini mempunyai ruang pengoptimuman lanjut, seperti penyesuaian parameter dinamik, memperkenalkan mekanisme kehilangan pendek panjang, mengoptimumkan stop-dan mengambil keuntungan, dan menggabungkan dengan analisis asas, dan lain-lain, untuk meningkatkan prestasi dan kebolehsesuaian 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)) //****************************************************************************//