이것은 SSL 채널 지표에 기반을 둔 백테스팅 전략이며, SSL 채널 전략에 대한 보다 포괄적 인 테스트를 촉진하기 위해 ATR 스톱 로스, ATR 영업 수익 및 돈 관리와 같은 기능과 통합됩니다.
SSL 채널 지표는 채널 중선과 채널 대역으로 구성됩니다. 채널 중선은 상위 트랙과 하위 트랙을 포함하며, 일반적으로 룩백 기간 동안 높은 가격과 낮은 가격의 간단한 이동 평균입니다. 채널 대역은 상위 트랙과 하위 트랙 사이에 형성됩니다.
가격 이 상위 범위에 접근 할 때, 그것은 과잉 구매 상태를 나타냅니다. 가격이 하위 범위에 접근 할 때, 그것은 과잉 판매 상태를 신호합니다. 채널 범위를 깨는 것은 트렌드 반전을 의미합니다.
SSL 채널 매개 변수는ssl_period=16
이 전략에서.
평균 실제 범위 (ATR) 는 시장의 변동성을 측정하고 스톱 로스 및 수익 수준을 결정하는 데 사용할 수 있습니다.
이 전략은 14주기 ATR (atr_period=14
) 및 동적 곱셈atr_stop_factor=1.5
그리고atr_target_factor=1.0
변동성 기준으로 적응식 스톱 로스를 설정하고 수익을 취합니다.
또한 기기의 2초 정밀도를 확인합니다 (two_digit
금과 JPY와 같은 쌍에 대한 정지 및 목표를 적절히 조정합니다.
자금관리는position_size
(결정 위치 크기) 및risk
(거래당 위험 비율) 매개 변수.use_mm=true
.
목표는 각 거래에 대한 최적의 위치 크기를 결정하는 것입니다. 거래 당 고정 리스크 %를 사용하여 허용 된 위치 크기는 각 거래에서 손실을 제한하기 위해 계정 자본을 기반으로 동적으로 계산됩니다.
이러한 위험은 다음과 같이 완화 될 수 있습니다.
이 전략은 다음과 같은 측면에서 개선될 수 있습니다.
체계적인 최적화로 이 전략은 강력한 알고리즘 거래 시스템으로 변할 수 있습니다.
이 전략은 트렌드를 위한 SSL 채널, 리스크 통제를 위한 ATR, 포지션 사이징을 위한 화폐 관리를 결합한다. 포괄적인 백테스팅은 전략을 평가하고 자동화된 거래 시스템으로 향상시키는 것을 용이하게 한다. 또한 필터 추가, 매개 변수 최적화, 기능 확장 등의 개선이 가능하다. 전반적으로 이것은 알고리즘 거래 전략을 구축하는 데 탄탄한 기초를 형성한다.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © comiclysm //@version=4 strategy("SSL Backtester", overlay=false) //--This strategy will simply test the effectiveness of the SSL using //--money management and an ATR-derived stop loss //--USER INPUTS two_digit = input(false, "Check this for 2-digit pairs (JPY, Gold, Etc)") ssl_period = input(16, "SSL Period") atr_period = input(14, "ATR Period") atr_stop_factor = input(1.5, "ATR Stop Loss Factor") atr_target_factor = input(1.0, "ATR Target Factor") use_mm = input(true, "Check this to use Money Management") position_size = input(1000, "Position size (for Fixed Risk)") risk = input(0.01, "Risk % in Decimal Form") //--INDICATORS------------------------------------------------------------ //--SSL sma_high = sma(high, ssl_period) sma_low = sma(low, ssl_period) ssl_value = 0 ssl_value := close > sma_high ? 1 : close < sma_low ? -1 : ssl_value[1] ssl_low = ssl_value < 0 ? sma_high : sma_low ssl_high = ssl_value < 0 ? sma_low : sma_high //--Average True Range atr = atr(atr_period) //--TRADE LOGIC---------------------------------------------------------- signal_long = ssl_value > 0 and ssl_value[1] < 0 signal_short = ssl_value < 0 and ssl_value[1] > 0 //--RISK MANAGMENT------------------------------------------------------- strategy.initial_capital = 50000 balance = strategy.netprofit + strategy.initial_capital risk_pips = atr*10000*atr_stop_factor if(two_digit) risk_pips := risk_pips / 100 risk_in_value = balance * risk point_value = syminfo.pointvalue risk_lots = risk_in_value / point_value / risk_pips final_risk = use_mm ? risk_lots * 10000 : position_size //--TRADE EXECUTION----------------------------------------------------- if (signal_long) stop_loss = close - atr * atr_stop_factor target = close + atr * atr_target_factor strategy.entry("Long", strategy.long, final_risk) strategy.exit("X", "Long", stop=stop_loss, limit=target) if (signal_short) stop_loss = close + atr * atr_stop_factor target = close - atr * atr_target_factor strategy.entry("Short", strategy.short, final_risk) strategy.exit("X", "Short", stop=stop_loss, limit=target) //--PLOTTING----------------------------------------------------------- plot(ssl_low, "SSL", color.red, linewidth=1) plot(ssl_high, "SSL", color.lime, linewidth=1)