이 전략은 고정된 리스크-어워드 비율을 통해 최적화 된 이동 평균 크로스오버 신호를 기반으로 한 자동화 거래 시스템입니다. 전략은 포지션 리스크 관리를 위해 미리 설정된 스톱 로스 및 영업 수준을 결합하여 시장 트렌드 방향을 결정하기 위해 빠른 MA와 느린 MA의 크로스오버를 사용합니다.
핵심 논리는 두 개의 이동 평균 (10주기 및 30주기) 에 의해 생성되는 크로스오버 신호에 의존합니다. 빠른 MA가 느린 MA를 넘을 때 시스템은 긴 신호를 생성하고 빠른 MA가 아래를 넘을 때 짧은 신호를 생성합니다. 각 입력 후 시스템은 미리 설정된 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")