
이 전략은 쌍 지수 이동 평균 (EMA) 을 기반으로 한 트렌드 추적 거래 시스템이다. 이 전략은 44주기 및 200주기 두 개의 EMA 라인을 사용하여 가격 돌파 신호와 결합하여 거래 방향을 결정한다. 동시에 동적 포지션 계산 및 이동 스톱을 포함한 위험 관리 메커니즘을 통합한다.
전략의 핵심 논리는 가격과 쌍 EMA 선의 상호 작용을 기반으로 한다. 44주기 EMA를 사용하여 각각 최고 가격과 최저 가격을 형성하는 상하 채널, 200주기 EMA를 장기적인 트렌드 필터로 사용한다. 종결 가격이 상하 EMA를 뚫고 200 EMA 필터 조건을 충족하면, 시스템은 여러 신호를 생성한다. 종결 가격이 상하 EMA를 뚫고 200 EMA 필터 조건을 충족하면, 시스템은 공백 신호를 생성한다. 전략은 계정 이익에 기반한 동적 포지션 관리를 채택하고, 각 거래의 위험 비율에 따라 자동으로 포지션 개수를 계산한다.
이것은 구조적으로 완전하고, 논리적으로 명확한 트렌드 추적 전략이다. 이중 EMA 채널과 장기적인 트렌드 필터링을 통해 거래 신호를 제공하며, 완벽한 위험 관리 메커니즘과 함께, 좋은 실용성을 가지고 있다. 전략의 최적화 공간은 주로 신호 확인, 동적 파라미터 조정 및 위험 관리 메커니즘의 개선에 있다. 실제 응용에서, 파라미터의 민감성을 충분히 테스트하고, 특정 거래 품종의 특성에 맞게 타깃 최적화를 수행하는 것이 좋습니다.
/*backtest
start: 2024-02-25 00:00:00
end: 2024-03-17 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("RENTABLE Dual EMA Breakout TSLA ", overlay=true)
// Inputs for EMA lengths and risk per trade
length = input(44, title="EMA Length")
longTermLength = input(200, title="Long-Term EMA Length")
riskPerTrade = input.float(1.0, title="Risk per Trade (%)", minval=0.1, maxval=10.0)
// Additional inputs for strategy customization
useFilter = input.bool(true, title="Use 200 EMA Filter")
tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"])
// EMAs based on the high and low prices and long-term EMA
emaHigh = ta.ema(high, length)
emaLow = ta.ema(low, length)
ema200 = ta.ema(close, longTermLength)
// Plotting EMAs on the chart
plot(emaHigh, color=color.green, title="High EMA")
plot(emaLow, color=color.red, title="Low EMA")
plot(ema200, color=color.blue, title="200 EMA")
// Entry conditions with optional EMA filter
longCondition = close > emaHigh and (useFilter ? close > ema200 : true)
shortCondition = close < emaLow and (useFilter ? close < ema200 : true)
// Calculating stop-loss and position size
longStop = emaLow
shortStop = emaHigh
riskPerShareLong = close - longStop
riskPerShareShort = shortStop - close
equity = strategy.equity
// Ensure risk per share is positive for calculations
riskPerShareLong := riskPerShareLong > 0 ? riskPerShareLong : 0.01
riskPerShareShort := riskPerShareShort > 0 ? riskPerShareShort : 0.01
positionSizeLong = (equity * riskPerTrade / 100) / riskPerShareLong
positionSizeShort = (equity * riskPerTrade / 100) / riskPerShareShort
// Ensure position sizes are positive before entering trades
if (longCondition and (tradeDirection == "Long" or tradeDirection == "Both") and positionSizeLong > 0)
strategy.entry("Long", strategy.long, qty= positionSizeLong)
if (shortCondition and (tradeDirection == "Short" or tradeDirection == "Both") and positionSizeShort > 0)
strategy.entry("Short", strategy.short, qty=positionSizeShort)
// Applying the stop-loss to strategy
strategy.exit("Exit Long", "Long", stop=longStop)
strategy.exit("Exit Short", "Short", stop=shortStop)
////Usar en 1,2 3 4 HRS TSLA