
이 전략은 20일과 55일 두 지수 이동 평균 ((EMA) 의 교차를 사용하여 거래 신호를 판단한다. 단기 EMA에서 장기 EMA를 통과할 때 구매 신호를 발송하고, 반대로 판매 신호를 발송한다. 전략은 또한 레버리지 거래를 도입하여 레버리지로 수익을 확대하고 동시에 위험을 확대한다. 또한, 전략은 조건 제한을 추가하고, 두 개의 평행선이 교차한 후에만 가격이 단기 라인 평행선을 만질 때만 포지션을 열고, 가짜 신호의 위험을 줄인다. 마지막으로, 사용자는 간단한 이동 평균 ((MA) 을 EMA 대신 사용 할 수도 있습니다.
이 전략은 평평선 교차와 레버리지 거래를 결합하여 시장 추세를 파악하면서 수익을 증대시킵니다. 그러나 레버리지 또한 높은 위험을 가져오고 신중하게 사용해야합니다. 또한, 이 전략에는 더 많은 지표, 동적 조정 매개 변수 등을 도입하여 전략의 성능을 향상시킬 수있는 최적화 공간이 있습니다.
/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover Strategy with Leverage, Conditional Entry, and MA Option", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Inputs for backtesting period
startDate = input(defval=timestamp("2023-01-01"), title="Start Date")
endDate = input(defval=timestamp("2024-04-028"), title="End Date")
// Input for leverage multiplier
leverage = input.float(3.0, title="Leverage Multiplier", minval=1.0, maxval=10.0, step=0.1)
// Input for choosing between EMA and MA
useEMA = input.bool(true, title="Use EMA (true) or MA (false)?")
// Input source and lengths for MAs
src = close
ema1_length = input.int(20, title='EMA/MA-1 Length')
ema2_length = input.int(55, title='EMA/MA-2 Length')
// Calculate the MAs based on user selection
pema1 = useEMA ? ta.ema(src, ema1_length) : ta.sma(src, ema1_length)
pema2 = useEMA ? ta.ema(src, ema2_length) : ta.sma(src, ema2_length)
// Tracking the crossover condition for strategy entry
crossedAbove = ta.crossover(pema1, pema2)
// Define a variable to track if a valid entry condition has been met
var bool readyToEnter = false
// Check for MA crossover and update readyToEnter
if (crossedAbove)
readyToEnter := true
// Entry condition: Enter when price touches MA-1 after the crossover // and (low <= pema1 and high >= pema1)
entryCondition = readyToEnter
// Reset readyToEnter after entry
if (entryCondition)
readyToEnter := false
// Exit condition: Price crosses under MA-1
exitCondition = ta.crossunder(pema1, pema2)
// Check if the current bar's time is within the specified period
inBacktestPeriod = true
// Execute trade logic only within the specified date range and apply leverage to position sizing
if (inBacktestPeriod)
if (entryCondition)
strategy.entry("Long", strategy.long, qty=strategy.equity * leverage / close)
if (exitCondition)
strategy.close("Long")
// Plotting the MAs for visual reference
ema1_color = pema1 > pema2 ? color.red : color.green
ema2_color = pema1 > pema2 ? color.red : color.green
plot(pema1, color=ema1_color, style=plot.style_line, linewidth=1, title='EMA/MA-1')
plot(pema2, color=ema2_color, style=plot.style_line, linewidth=1, title='EMA/MA-2')