Documentação
Aplicações
Última atualização em 20. 11. 2021 por clonex / Ivan Hudec
Simulação da média móvel da equidade
Conteúdo da página
Neste tutorial mostraremos a você como criar e simular o controle de curvas de equidade no What If Crosscheck .
Cenários hipotéticos em StrategyQuantx é a ferramenta que lhe permite testar várias hipóteses de negociação de sua estratégia.
A função de simulação de controle patrimonial permite simular a ativação e desativação de uma estratégia com base na curva patrimonial. A hipótese é baseada na hipótese que é melhor para a estratégia comercial se seu desempenho estiver acima de sua média. É possível ler um bom artigo dedicado a este tópico aqui.
Corte acabado que você pode baixar aqui.
Passo 1 - Criar novo E se snippet
Abra CodeEditor, clique em Criar novo e escolha a opção de coluna Lista de negócios - Nomeá-lo EquityMATrading.
Isto criará um novo snippet EquityMATrading.java em pasta Usuário/Snippets/SQ/Whatif
Passo 2 - Definir os parâmetros do snippet
Como queremos calcular a média da equidade, precisamos de incluir um parâmetro - Período MAP que nos permite especificar um período da média móvel.
@ClassConfig(name=""() Equity MA Trading", display="Equity MA(#MAPeriod#) Trading ") @Help("Texto de ajuda") classe pública EquityMATrading estende o WhatIf { logger final estático público = LoggerFactory.getLogger(EquityMATrading.class); @Parameter(name="MAPeriod", defaultValue="10", minValue=2, maxValue=100000, step=1) público no período MAPA;
Etapa 3 - Método de implementação do filtro (OrdensLista de ordens)
O filtro(OrderList ordens) é usado para filtrar a lista original de ordens na estratégia. OrderList é uma classe que armazena a lista de ofícios de uma estratégia e fornece métodos para manipular com a lista de ofícios. Você pode fazer loop troght inteiro OrderList e obtenha dados para muito Ordem usando o método obter(índice int).
Aqui você precisa prestar atenção à forma como você faz o loop através da lista de pedidos. Em nosso exemplo, estamos usando o clássico para loop, de modo que não podemos manipular a lista de pedidos durante o loop.
Em vez disso, criamos um OrderList ol onde armazenamos os ofícios que preencheram nossas condições. Copiamos esta lista de pedidos no final do trecho para a lista de pedidos principal.
Passo 4 - Usando o Whatif snippet EquityMATrading
Para adicionar um trecho no Crosschecks você pode usar este trecho para simular o que aconteceria se você comercializasse sua estratégia se sua curva de patrimônio líquido estivesse acima de sua média móvel.
Código comentado completo do snippet
pacote SQ.WhatIf; importação org.slf4j.Logger; importação org.slf4j.LoggerFactory; import com.strategyquant.lib.SQTime; import com.strategyquant.tradinglib.ClassConfig; import com.strategyquant.tradinglib.Help; importar com.strategyquant.tradinglib.Order; importar com.strategyquant.tradinglib.OrdersList; importar com.strategyquant.tradinglib.Parameter; importar com.strategyquant.tradinglib.WhatIf; importar com.strategyquant.tradinglib.results.stats.comparator.OrderComparatorByOpenTime; importar it.unimi.dsi.fastutil.objects.ObjectListIterator; @ClassConfig(name=""() Equity MA Trading", display="Equity MA Trading (#MAPeriod#)") @Help("Texto de ajuda") classe pública EquityMATrading estende o WhatIf { logger final estático público = LoggerFactory.getLogger(EquityMATrading.class); @Parameter(name="MAPeriod", defaultValue="10", minValue=2, maxValue=100000, step=1) público no período MAPA; @Override filtro público de vazios (Ordens OrdensLista de ordens) lança Exceção { // Nova instância de OrdensLista de pedidos na qual armazenamos negócios que estão acima da média móvel OrderList newOL = nova OrderList("AboveMovingAverage"); // Estamos fazendo looping através de pedidos inteirosLista de pedidos para calcular a Média Móvel for(int i = MAPeriod;i < order.size();i++){ // Último pedido atual estamos decidindo se devemos ou não ir para newOL Order order = ordens.get(i); // obter o equilíbrio da ordem saldo duplo = ordem.AccountBalance; // ordens balanceadas do filtro se(order.isBalanceOrder()) continuar; soma dupla = 0; // calcular a média móvel do patrimônio líquido for(int k =1;k média do patrimônio líquido if(lastOrder.AccountBalance>avg) { // nós adicionamos ordem.get(i) a newOL newOL.add(pedido); } avg =0; // reajusta a variável média soma =0; // variável de soma resetada } // classificação de newOL por posições em aberto newOL.sort(novo OrderComparatorByOpenTime()); //// ordenação de ordens por tempo aberto // estamos substituindo as ordens OrderList por OrdersList newOL e só recebemos negócios acima da média móvel order.replaceWithList(newOL); } }
Este artigo foi útil? O artigo foi útil O artigo não foi útil
muito bom 🙂