
이 전략은 이동평균선 교차 신호를 기반으로 하는 자동화된 거래 시스템으로, 고정된 위험-수익 비율을 설정하여 거래 성과를 최적화합니다. 이 전략은 빠르게 이동 평균선(Fast MA)과 느리게 이동 평균선(Slow MA)의 교차점을 활용하여 시장 추세 방향을 파악하고, 사전 설정된 손절매 지점과 이익 목표를 결합하여 포지션 위험을 관리합니다.
이 전략의 핵심 논리는 서로 다른 기간(10기간과 30기간)의 두 이동평균이 생성하는 교차 신호에 기초합니다. 빠른 선이 느린 선을 교차할 때, 시스템은 긴 신호를 생성하고, 빠른 선이 느린 선을 교차할 때, 시스템은 짧은 신호를 생성합니다. 각 포지션이 개설되면 시스템은 사전 설정된 2% 손실 제한 비율에 따라 손실 제한 포지션을 자동으로 계산하고, 위험-수익 비율의 2.5배에 따라 수익 목표를 설정합니다. 이러한 접근 방식은 각 거래가 고정된 위험-수익 프로필을 갖도록 보장합니다.
이 전략은 고전적인 기술적 분석 방법과 현대적인 위험 관리 개념을 결합하여 완전한 거래 시스템을 구축합니다. 일정한 한계는 있지만, 지속적인 최적화와 개선을 통해 이 전략은 다양한 시장 환경에서 안정적인 성과를 유지할 것으로 기대됩니다. 핵심은 실제 거래 결과에 따라 매개변수 설정을 지속적으로 조정하고 현재 시장 환경에 가장 적합한 구성을 찾는 것입니다.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SOL 15m 2.5 R:R Strategy", overlay=true, margin_long=100, margin_short=100, initial_capital=10000, commission_type=strategy.commission.percent, commission_value=0.1)
//---------------------------------------------------
// User Inputs
//---------------------------------------------------
// sym = input.symbol("swap", "Symbol")
timeframe = input.timeframe("15", "Timeframe")
fastLength = input.int(10, "Fast MA Length")
slowLength = input.int(30, "Slow MA Length")
stopLossPerc = input.float(2.0, "Stop Loss %", step=0.1) // This is an example; adjust to achieve ~45% win rate
RR = input.float(2.5, "Risk to Reward Ratio", step=0.1)
//---------------------------------------------------
// Data Sources
//---------------------------------------------------
price = request.security("swap", timeframe, close)
// Compute moving averages
fastMA = ta.sma(price, fastLength)
slowMA = ta.sma(price, slowLength)
// Entry Conditions
longCondition = ta.crossover(fastMA, slowMA)
shortCondition = ta.crossunder(fastMA, slowMA)
//---------------------------------------------------
// Stop Loss and Take Profit Calculation
//---------------------------------------------------
var entryPrice = 0.0
if (strategy.position_size == 0) // not in a position
if longCondition
// Long entry
entryPrice := price
strategy.entry("Long", strategy.long)
if shortCondition
// Short entry
entryPrice := price
strategy.entry("Short", strategy.short)
if strategy.position_size > 0
// We are in a long position
if strategy.position_avg_price > 0 and strategy.position_size > 0
longStop = strategy.position_avg_price * (1 - stopLossPerc/100)
longTarget = strategy.position_avg_price * (1 + (stopLossPerc/100)*RR)
strategy.exit("Long Exit", "Long", stop=longStop, limit=longTarget)
if strategy.position_size < 0
// We are in a short position
if strategy.position_avg_price > 0 and strategy.position_size < 0
shortStop = strategy.position_avg_price * (1 + stopLossPerc/100)
shortTarget = strategy.position_avg_price * (1 - (stopLossPerc/100)*RR)
strategy.exit("Short Exit", "Short", stop=shortStop, limit=shortTarget)
//---------------------------------------------------
// Plotting
//---------------------------------------------------
plot(fastMA, color=color.new(color.teal, 0), title="Fast MA")
plot(slowMA, color=color.new(color.orange, 0), title="Slow MA")