Documentação
Aplicações
Última atualização em 21. 12. 2021 por clonex / Ivan Hudec
ATR Volatilidade Dimensionamento simples
Conteúdo da página
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>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
Excelente !!!!!!!!!!!!!!
Isto é exatamente o que eu preciso. Obrigado clonex
COMO POSSO COMPILAR ESTE ARQUIVO NO EDITOR DO CÓDIGO OBRIGA MUITO A SUA ATENÇÃO
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?
I can not make it work with build 138
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 {