Estratégia de backtester do canal SSL com ATR e gerenciamento de dinheiro

Autora:ChaoZhang, Data: 2023-11-23 10:26:58
Tags:

img

Resumo

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.

Estratégia lógica

Indicador de 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=16Nesta estratégia.

ATR Stop Loss/Take Profit

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.5eatr_target_factor=1.0Para 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.

Gestão do dinheiro

A gestão do dinheiro é conseguida através deposition_size(dimensão de posição fixa) eriskO 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.

Análise das vantagens

  • O canal SSL é eficaz na captura de sinais de inversão de tendência
  • As paradas baseadas em ATR ajustam-se automaticamente com base na volatilidade
  • A gestão do dinheiro ajuda a controlar o risco em todos os negócios

Análise de riscos

  • Os sinais do canal SSL podem não ser completamente confiáveis, podem ocorrer sinais falsos
  • As paradas do ATR podem acabar sendo muito largas ou muito apertadas
  • Configurações inadequadas de gestão de fundos podem levar a posições de grande porte ou baixa eficiência

Estes riscos podem ser mitigados por:

  1. Adicionar filtros para confirmar sinais e evitar entradas falsas
  2. Ajuste do parâmetro do período ATR para níveis ideais de stop loss/take profit
  3. Teste de diferentes parâmetros de gestão de fundos para o dimensionamento ideal das posições

Orientações de otimização

A estratégia pode ser melhorada nos seguintes aspectos:

  1. Otimize os parâmetros do canal SSL para melhor desempenho
  2. Melhorar ou substituir o mecanismo de travagem ATR
  3. Adicionar indicadores de filtragem para evitar negociações desnecessárias
  4. Incorporar o dimensionamento das posições para maximizar os retornos ajustados ao risco
  5. Parâmetros de afinação para diferentes instrumentos
  6. Adicionar ferramentas quantitativas para testes mais abrangentes

Com otimização sistemática, esta estratégia pode tornar-se um robusto sistema de negociação algorítmica.

Conclusão

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)


Mais.