Esta é uma estratégia de backtesting baseada no indicador do canal SSL, integrada com funções como ATR stop loss, ATR take profit e gestão de dinheiro para facilitar um teste mais abrangente da estratégia do canal SSL.
O indicador de canal SSL consiste na linha média do canal e nas bandas do canal. A linha média do canal contém uma pista superior e uma pista inferior, que geralmente são médias móveis simples de preços altos e baixos durante um período de retrospectiva. As bandas do canal são formadas entre as faixas superior e inferior.
Quando o preço se aproxima da faixa superior, indica condições de sobrecompra; quando o preço se aproxima da faixa inferior, sinaliza condições de sobrevenda.
O parâmetro do canal SSL está definido comossl_period=16
Nesta estratégia.
O Intervalo Médio Verdadeiro (ATR) mede a volatilidade do mercado e pode ser utilizado para determinar os níveis de stop loss e take profit.
Esta estratégia utiliza um ATR de 14 períodos (atr_period=14
) e multiplicadores dinâmicosatr_stop_factor=1.5
eatr_target_factor=1.0
Para definir o stop loss adaptativo e obter lucros com base na volatilidade.
Verifica igualmente se o instrumento tem uma precisão de 2 decimais (two_digit
) para ajustar o stop e o target em conformidade para pares como o ouro e o JPY.
A gestão do dinheiro é conseguida através deposition_size
(dimensão de posição fixa) erisk
O módulo de gestão de fundos será habilitado quando:use_mm=true
.
O objetivo é determinar o tamanho ideal da posição para cada negociação. Utilizando o risco fixo % por negociação, o tamanho admissível da posição será calculado dinamicamente com base no patrimônio da conta para limitar a perda em cada negociação.
Estes riscos podem ser mitigados por:
A estratégia pode ser melhorada nos seguintes aspectos:
Com otimização sistemática, esta estratégia pode tornar-se um robusto sistema de negociação algorítmica.
Esta estratégia combina o canal SSL para tendência, ATR para controle de risco e gerenciamento de dinheiro para dimensionamento de posição. O backtesting abrangente facilita a avaliação e melhoria da estratégia em um sistema de negociação automatizado. Também há espaço para melhorias como adicionar filtros, otimizar parâmetros e expandir a funcionalidade.
/*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)