Documentação

Aplicações

Última atualização em 21. 12. 2021 por clonex / Ivan Hudec

ATR Volatilidade Dimensionamento simples

Em situações onde a volatilidade a curto prazo está subindo ou descendo, pode fazer sentido mudar o tamanho da posição. No tutorial a seguir mostraremos um simples trecho em StrategyQuant X x que lhe permite aumentar/diminuir o tamanho de uma negociação. Snippet que você pode baixar aqui.

Passo 1 - Criar novo snippet de gerenciamento de dinheiro

Aberto CodeEditorclique em Criar novos e escolha Administração do dinheiro  opção na parte inferior. Dê-lhe um nome ATRVolatilitySizing.

Isto criará um novo snippet ATRVolatilitySizing.java em pasta Usuário/Snippets/SQ/MoneyManagement

 

 

Passo 2 - Definir Parâmetros

Neste ponto, definimos os parâmetros que usaremos mais tarde quando implementarmos o snippet. Neste caso, vamos definir o seguinte

  • Tamanho - o valor padrão para o tamanho comercial.
  • Multiplicador - Multiplicador que usaremos para mudar o tamanho do comércio.
  • FastATR- Período Fast ATR
  • SlowATR- Período ATR lento

 

@ClassConfig(name="ATR Volatility Sizing", display="ATR Volatility Sizing: #Size# lotes com multiplicação #Multiplier#")
@Help("<b>Dimensionamento da Volatilidade ATR</b>")
@Description("ATR Volatility Sizing, #Size# e #Multiplier#")
@SortOrder(100)
classe pública ATRVolatilitySizing estende o MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Order size", maxValue=1000000d, step=0.1d, category="Default")
    @Help("Tamanho do pedido (número de lotes para forex)")
    público tamanho duplo;

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Multiplier", maxValue=1000, step=0.1d, category="Default")
    @Help("Multiplicador")
    multiplicador duplo público;

    @Parameter(defaultValue="5", minValue=2, name="Fast ATR Period", maxValue=480, step=1, category="Default")
    @Help("Período ATR rápido")
    público no FastATR;

    @Parameter(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Período ATR lento")
    público int SlowATR;

 

 

Etapa 3 - Implantação do método de duplo cálculo TradeSize

Neste método, você especifica o tamanho do lote. Os parâmetros do método são dignos de menção.

  • StrategyBase estratégia é a classe base da estratégia, dela derivam classes que implementam funções adicionais
    Símbolo de corda - o símbolo com o qual a estratégia foi encomendada
  • Byte OrderType
  • preço duplo - o preço na abertura do comércio
  • dupla sl - stop loss
  • duplo tickSize tamanho tickSize tamanho tick
  • valor do pontoValor duplo - valor do ponto.

Com este método, podemos realizar cálculos mais simples, mas também mais complexos. Em nosso caso, estabelecemos o preço de fechamento anterior e dois valores ATR diferentes. Se o ATR de curto prazo for maior do que o ATR de longo prazo, mudamos o tamanho da posição.

 

@Override
público duplo computeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) lança Exceção {
    
    tamanho duplo de comércio;
    // fechar previamente
    duplo prevClose = strategy.MarketData.Chart(símbolo).Close(1);
    // obter ATR arredondado com período mais lento
    duplo VALOR LENTO = SQUtils.round(strategy.getATRValue(strategy.marketData.Chart(symbol),SlowATR, 1), 5);
    // obter ATR arredondado com período mais rápido
    duplo fastValueATR = SQUtils.round(strategy.getATRValue(strategy.marketData.Chart(symbol),FastATR, 1), 5);
    // se a volatilidade curta subir, então modifique o tamanho do comércio
    if(fastValueATR>slowValueATR){
        tradeSize = Tamanho*Multiplicador;

    }
    // senão não fazer nada
    outro tamanho comercial = tamanho;
    // tamanho do comércio de retorno
    retorno tradeSize;
    
}

Passo 4 - Usando o bocadinho de tamanho ATR Volatility Sizing

Após reiniciar o SQX, você encontrará o novo snippet na aba Money Management.

No quadro abaixo você pode ver as mudanças de tamanho dos ofícios.

 

 

 

Código comentado

 

/*
 * Copyright (c) 2017-2018, StrategyQuant - Todos os direitos reservados.
 *
 * O código neste arquivo foi feito de boa fé de que é correto e faz o que deve ser feito.
 * Se você encontrou um erro neste código OU se você tem uma sugestão de melhoria OU você quer incluir
 * seu próprio trecho de código em nossa biblioteca padrão, por favor entre em contato conosco:
 * https://roadmap.strategyquant.com
 *
 * Este código só pode ser usado dentro dos produtos StrategyQuant.
 * Todo proprietário de licença válida (gratuita, experimental ou comercial) de qualquer produto StrategyQuant
 * é permitido usar livremente, copiar, modificar ou fazer trabalhos derivados deste código sem limitações,
 * para ser usado em todos os produtos StrategyQuant e compartilhar suas modificações ou trabalhos derivados
 * com a comunidade StrategyQuant.
 *
 * O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU IMPLÍCITA,
 * INCLUINDO MAS NÃO LIMITADO ÀS GARANTIAS DE COMERCIABILIDADE, ADEQUAÇÃO A UM DETERMINADO
 * PROPÓSITO E NÃO-INFRAÇÃO. EM NENHUMA HIPÓTESE OS AUTORES SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS
 * OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU OUTRO, DECORRENTE DE,
 * FORA OU EM CONEXÃO COM O SOFTWARE OU COM O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.
 *
 */
pacote SQ.MoneyManagement;

import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;

@ClassConfig(name="ATR Volatility Sizing", display="ATR Volatility Sizing: #Size# lotes com multiplicação #Multiplier#")
@Help("<b>Dimensionamento da Volatilidade ATR</b>")
@Description("ATR Volatility Sizing, #Size# e #Multiplier#")
@SortOrder(100)
classe pública ATRVolatilitySizing estende o MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Order size", maxValue=1000000d, step=0.1d, category="Default")
    @Help("Tamanho do pedido (número de lotes para forex)")
    público tamanho duplo;

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Multiplier", maxValue=1000, step=0.1d, category="Default")
    @Help("Multiplicador")
    multiplicador duplo público;

    @Parameter(defaultValue="5", minValue=2, name="Fast ATR Period", maxValue=480, step=1, category="Default")
    @Help("Período ATR rápido")
    público no período FastATRP;

    @Parameter(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Período ATR lento")
    público no período SlowATRP;



    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    público duplo computeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) lança Exceção {
        
        tamanho duplo de comércio;
        // fechar previamente
        duplo prevClose = strategy.MarketData.Chart(símbolo).Close(1);
        // obter ATR arredondado com período mais lento
        duplo VALOR LENTO = SQUtils.round(strategy.getATRValue(strategy.marketData.Chart(symbol),SlowATRPeriod(symbol),1), 5);
        // obter ATR arredondado com período mais rápido
        duplo fastValueATR = SQUtils.round(strategy.getATRValue(strategy.marketData.Chart(symbol),FastATRPeriod,1), 5);
        // se a volatilidade curta subir, então modifique o tamanho do comércio
        if(fastValueATR&gt;slowValueATR){
            tradeSize = Tamanho*Multiplicador;

        }
        // outro tamanho igual ao tamanho padrão
        outro tamanho comercial = tamanho;
        // tamanho do comércio de retorno
        retorno tradeSize;

 

Este artigo foi útil? O artigo foi útil O artigo não foi útil

Assine
Notificação de
6 Comentários
Mais antigo
Novidades Mais Votados
Feedbacks em linha
Ver todos os comentários
Emmanuel
6. 1. 2022 11:56 am

Excelente !!!!!!!!!!!!!!

binhsir
15. 1. 2022 2:05 pm

Isto é exatamente o que eu preciso. Obrigado clonex

Kaveh Karimi
1. 3. 2022 9:39 pm

COMO POSSO COMPILAR ESTE ARQUIVO NO EDITOR DO CÓDIGO OBRIGA MUITO A SUA ATENÇÃO

Sr. Omi
3. 11. 2023 5:03 am

Obrigado clonex / Ivan Hudec.

Não sei por que não consigo salvar minha estratégia no formato mq5. O erro é "Um ou mais blocos que a estratégia usa não está implementado no código MQL", "Falha na inclusão do modelo (para o valor do parâmetro "MoneyManagement/ATRVolatilitySizing_variables.tpl").

Você poderia me ajudar a corrigi-lo?

Last edited 5 meses atrás by Mr Omi
Emmanuel
13. 2. 2024 1:17 pm

I can not make it work with build 138

Emmanuel
13. 2. 2024 1:27 pm

For build 138 , we need to update the line :
@Override
    public duplo computeTradeSize(StrategyBase strategy, String symbol, byte orderType, duplo preço, duplo sl, duplo tickSize, duplo pointValue, duplo sizeStep) throws Exception {