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?
Não consigo fazer isso funcionar com a compilação 138
Para o build 138 , precisamos atualizar a linha :
@Override
público duplo computeTradeSize(Estratégia StrategyBase, Símbolo de cadeia de caracteres, byte tipo de pedido, duplo preço, duplo sl, duplo tickSize, duplo pointValue, duplo sizeStep) lançamentos Exceção {
Ótimo, mas seria fantástico se pudesse funcionar com estratégias de seleção de ações
Olá, tive problemas para compilar meu código. Alguma recomendação? Estou trabalhando com a versão 142. package SQ_MoneyManagement; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; import java.util.List; import java.util.Calendar; import java.util.TimeZone; @ClassConfig(name=”GestionRRVariable”, display=”RRVariable Diario: #Lots# lots”) @trdtrd(“Gestão de risco: 0.5% base → x1.5 tras ganancia, reset tras pérdida; pausa si -4%/ +8% diario.”) public class GestionRRVariable extends MoneyManagementMethod { @Parameter(name=”Lots”, defaultValue=”0.1″, minValue=0.01, maxValue=100, step=0.1) @trdtrd(“Número de lotes fijo (solo por compatibilidad con SQX).”) public double Lots; // Parámetros private final double baseRiskPct = 0.5; private final double multiplier = 1.5; private final double maxDailyLossPct = 4.0; private final double maxDailyGainPct = 8.0; private… Leia mais "