브레이크하이 EMA 크로스오버 전략 (BreakHigh EMA Crossover Strategy) 은 가격 브레이크오버와 기하급수적 이동평균 (EMA) 크로스오버를 기반으로 하는 거래 전략이다. 이 전략은 특정 기간 내 가장 높은 가격을 구매 신호로, EMA를 판매 신호로 사용합니다. 종료 가격이 지정 기간 내 가장 높은 가격 이상으로 떨어지면 전략은 구매 신호를 생성합니다. 종료 가격이 EMA 이하로 떨어지면 전략은 판매 신호를 생성합니다. 전략은 또한 위험을 제어하기 위해 스톱-로스 가격을 설정합니다. 또한 전략은 사용자가 다양한 거래 스타일과 시장 조건에 적응하도록 사용자 정의 할 수있는 여러 매개 변수를 제공합니다.
브레이크하이 EMA 크로스오버 전략의 핵심 원칙은 가격 브레이크오버와 EMA 크로스오버를 사용하여 시장 트렌드를 포착하는 것입니다. 가격이 지정된 기간 내에 가장 높은 가격 이상으로 넘어지면 시장이 상승 추세에 들어갈 수 있음을 나타냅니다. 따라서 전략은 구매 신호를 생성합니다. 동시에 EMA는 트렌드를 따르는 지표로 작용합니다. 가격이 EMA 이하로 떨어지면 상승 추세가 끝날 수 있음을 나타냅니다. 따라서 전략은 판매 신호를 생성합니다.
이 전략은 거래를 구현하기 위해 다음 단계를 사용합니다.
위의 단계를 통해 전략은 시장의 상승 추세에서 이익을 얻을 수 있으며, 다운사이드 위험을 제어하기 위해 스톱 로스를 사용할 수 있습니다.
BreakHigh EMA 크로스오버 전략은 다음과 같은 장점을 가지고 있습니다.
BreakHigh EMA 크로스오버 전략은 몇 가지 장점을 가지고 있지만 다음과 같은 위험도 가지고 있습니다.
이러한 위험을 완화하기 위해 다음과 같은 조치를 고려할 수 있습니다.
BreakHigh EMA 크로스오버 전략의 성과를 더 향상시키기 위해 다음 최적화 방향은 고려할 수 있습니다.
위의 최적화 조치는 BreakHigh EMA 크로스오버 전략의 안정성, 적응력 및 수익성을 향상시켜 더 많은 시장 환경에서 좋은 성과를 낼 수 있습니다.
브레이크하이 EMA 크로스오버 전략 (BreakHigh EMA Crossover Strategy) 은 가격 브레이크오버와 EMA 크로스오버를 사용하여 하락 리스크를 제어하는 동시에 스톱 로스를 사용하여 시장 트렌드를 포착하는 간단하고 효과적인 트렌드 추적 전략이다. 전략 논리는 명확하고 매개 변수는 유연하며 이해하기 쉽고 구현하기 쉽습니다. 전략에는 시장 변동성 위험, 트렌드 역전 위험 및 매개 변수 설정 위험과 같은 특정 위험이 있지만, 이러한 위험은 매개 변수 조정, 다른 매개 변수와 결합하고 합리적인 스톱 로스를 설정하는 것과 같은 적절한 리스크 제어 조치를 통해 완화 할 수 있습니다. 또한 전략은 동적 매개 변수 조정, 긴 단 손실 메커니즘을 도입, 스톱 및 취리 수익을 최적화하고 전략의 성과 적응성을 향상시키기 위해 근본 분석과 결합하여 더 많은 최적화 공간을 갖추고 있습니다. 브레이크하이 EMA 크로스오버 전략은 양적 인 전략이며 전반적으로 평가할 가치가 있습니다.
/*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)) //****************************************************************************//