Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)
Olá pessoal!
Por favor, alguém pode analisar meu código para ver se consigo corrigir o erro?
Criação de um indicador de correlação em percentual com dois ativos WINFUT e DI1FUT.
O código/linha para WINFUT está retornando corretíssimo, já do DI1FUT está resultando percentual nada a ver.
Grato!!
Const Win = Asset("WINFUT", feedBMF); Di = Asset("DI1FUT", feedBMF); Var Indice, Juros: Real; Início Indice:=((Win.Close)-CloseD(1))/CloseD(1)*100; Juros :=((Di.Close)-CloseD(1))/CloseD(1)*100; Plot (Indice); Plot2(Juros); SetPlotColor(1,ClVerdeLimão); SetPlotColor(2,ClVermelho); Se (Indice > Juros) então PaintBar(ClVerdeLimão); Se (Indice < Juros) então PaintBar(ClVermelho); Fim;
Não testei, mas tente essa alteração de linha:
Juros :=((Di.Close - Di.Close[1]) / Di.Close[1]) * 100;
@masker , Mudou o resultado mas ainda está incorreto. (Interessante é que para o índice o resultado está correto, utilizando os mesmo código. Obrigado pela atenção!
Experimente reorganizar os parenteses nessa sequência.. se não der sinceramente não sei.. rss
Juros :=((Di.Close-CloseD(1)/CloseD(1))*100;
@masker . Obrigado pela atenção. Não faz sentido, já que para o WINFUT o mesmo código funcionou perfeitamente. Abri um chamado no Suporte Tecnico da Nelógica. Estão analisando.
/////// RESPOSTA OFICIAL DA NELÓGICA ///
Olá Rogerio, bom dia, tudo bem?
Estamos entrando em contato referente a situação envolvendo o editor de estratégias.
Através das nossas analises foi possível identificar que você atualmente utiliza a funcionalidade de Assets em seu código, essa função permite buscar dados de outros ativos para a execução do código, porém esses dados são limitados a dados de série, como abertura, fechamento, máxima, mínima.
Const
Win = Asset("WINFUT",feedBMF);
DiFut = Asset("DI1FUT",feedBMF);
Var
Indice,Juros : Real;
Início
Indice := ((Win.Close) - CloseD(1)) / CloseD(1) * 100;
Juros := ((DiFut.Close) - CloseD(1)) / CloseD(1) * 100;
//Plot (Indice);
Plot2(Juros);
SetPlotColor(1,ClVerdeLimão);
SetPlotColor(2,ClVermelho);
Se (Indice > Juros) então
PaintBar(ClVerdeLimão);
Se (Indice < Juros) então
PaintBar(ClVermelho);
Fim;
Em Win.Close e DiFut.Close, verificamos que são utilizadas essas funções corretamente, porém ao utilizar a função CloseD(1), será buscado o fechamento do ativo em que o código está sendo executado, ou seja, esses cálculos realizados por, somente irão funcionar no ativo visualizado.
Primeiro exemplo, executando no ativo WING23, sua variação diária estará correta, porém a do DI1FUT será calculado com o valor de CloseD do ativo WING23 também, causando esse valor incorreto de -99,99.
Executando no ativo DI1FUT, somente o seu cálculo será realizado corretamente. Atualmente, não é possível utilizar a função CloseD através de Assets, então a lógica que está tentando aplicar não irá funcionar.
Seguimos a disposição.
Atenciosamente,
Bom dia @rogerio-aguiar-da-silva!
A implementação de estratégias baseadas em múltiplos ativos é muito limitada porque existe basicamente acesso a dados OHLCV, se a possibilidade de utilizar indicadores e a maior parte das funções NTSL para a série de dados de outros ativos.
Aproveito para reforçar que votem nas ideias da Comunidade NeoTraderBot no UserVoice que criamos para demandar melhorias na implementação de robôs. Uma delas é refatorar as funções NTSL para poder informar a série de dados.
Link para ideias da NeoTraderBot: https://nelogica.uservoice.com/forums/939783-m%C3%B3dulos-opcionais-profit?category_id=450124&query=neotraderbot
Grande abs!
Esse link nao funcionou para eu apoiar as ideias, mas abri o TraderVoice dentro do Profit e pesquisei NeoTrader e votei nas que eu gostei ou ja tinha sentido falta
a NTSL precisa de muita coisa pra ser considerado um bom mecanismo!
eu tive o mesmo problema e descobri que não é possivel ainda acessar série de dados historicos de um ativo externo a execução do codigo.
Uma alternativa é voce criar um vetor e armazenar os dados do ativo externo, por exemplo para day trade e voce trabalhar com 21 periodos no grafico de 5 minutos voce passaria a ter dados suficientes a partir das 11:05. (eu queria plotar informações do RSI, se maior que 50 verde se menor que 50 vermelho)
para oque eu queria fazer nao valia a pena, mas para swing trade, ou se voce trabalhar com tempos graficos menores é possivel voce resolver desta forma, até que atendam o pedido do Johnathas... que alias facilitaria muito a vida. pois hoje recrio cada função na unha para ativos externos.