Atualização de símbolos personalizados sintético

 

Criei alguns símbolos personalizados com Fórmula de Instrumento Sintético, exemplo PETR4/PETR3, e estou tendo o mesmo problemas com todos os símbolos criados. Se eu deixar o gráfico aberto Antes ou Após o encerramento das negociações, "aparecem" alguns candles a mais fora deste período de negociação.

Candles fora do período de negociação



Acredito que estes "novos" candles são criados devido a manutenção no servidor da corretora ou coisa parecida. Isso se torna um problema para meus indicadores, principalmente para tempos gráficos maiores que 15 Minutos, pois ficará uma barra tracejada com mesmo valor de máximo e mínimo durante muito tempo interferindo nos cálculos dos indicadores.


Se eu for na pasta <Custom> (C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[id da instância]\bases\Custom) e deletar o símbolo criado (ex. Petr4/Petr3) e abrir novamente o gráfico o problema é resolvido.


Problema resolvido deletando símbolo na basta


Para resolver este problema no meu EA, criei a seguinte função (AtualizarGrafico()) para atualizar o gráfico no início das minhas negociações:

void AtualizarGrafico()
{

int ContadordeDias=10*24;
MqlRates Custom[];
MqlTick Totalticks[];
datetime inicio, fim;

inicio=(datetime) MathFloor(TimeCurrent()-(ContadordeDias*3600));
fim=(datetime) MathMax(TimeCurrent(),0);
Print("Atualizar Historico=> Inicio: "+(string)inicio+" Fim: "+(string)fim);

//DELETAR Dados dentro do intervalo de tempo
/*
int deletado=CustomRatesDelete(_Symbol,inicio,fim);
if (deletado <= 0) Print("Erro ao deletar barras ", GetLastError());
*/

// Copiar barras de 1 Minuto do Simbolo Personalizado
int recebido=CopyRates(_Symbol,PERIOD_M1,1,10000,Custom);
if (recebido <= 0) Print("Erro ao copiar dados Simbolo Sintetico ", GetLastError());

Sleep(5000);

// Atualizar Simbolo Personalizado somente com últimos valores negociados
int Update=CustomRatesReplace(_Symbol,inicio,fim,Custom);
if (Update <= 0) Print("Erro ao copiar dados Update ", GetLastError());

Sleep(5000);

Print ("Fim - Atualização Gráfico Custom Update: ",Update);
ZeroMemory(Totalticks);
ZeroMemory(Custom);

}               
   


O problema é que esta função não esta atualizando o gráfico no momento em que as negociações se iniciam. Tenho que abrir e fechar o EA juntamente com o gráfico mais de uma vez para que dê certo. Não sei como resolver este problema, se é erro no código ou se a função não consegue deletar/atualizar o gráfico por ele estar sendo atualizado ao mesmo tempo com as novas cotações.

Por favor, se alguém poder me ajudar.

Obrigado.

 
 Problemas com horários específicos, como este, não podem ser solucionados limitando o horário que o EA funciona?
Se nesse horário ele não for autorizado a entrar em operações, nenhum problema terá.
 
O EA já está com limites de horários para negociação, mas não tenho como controlar como o gráfico é atualizado pela corretora.
 
Robson Vieira:

Criei alguns símbolos personalizados com Fórmula de Instrumento Sintético, exemplo PETR4/PETR3, e estou tendo o mesmo problemas com todos os símbolos criados. Se eu deixar o gráfico aberto Antes ou Após o encerramento das negociações, "aparecem" alguns candles a mais fora deste período de negociação.




Acredito que estes "novos" candles são criados devido a manutenção no servidor da corretora ou coisa parecida. Isso se torna um problema para meus indicadores, principalmente para tempos gráficos maiores que 15 Minutos, pois ficará uma barra tracejada com mesmo valor de máximo e mínimo durante muito tempo interferindo nos cálculos dos indicadores.


Se eu for na pasta <Custom> (C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[id da instância]\bases\Custom) e deletar o símbolo criado (ex. Petr4/Petr3) e abrir novamente o gráfico o problema é resolvido.




Para resolver este problema no meu EA, criei a seguinte função (AtualizarGrafico()) para atualizar o gráfico no início das minhas negociações:


O problema é que esta função não esta atualizando o gráfico no momento em que as negociações se iniciam. Tenho que abrir e fechar o EA juntamente com o gráfico mais de uma vez para que dê certo. Não sei como resolver este problema, se é erro no código ou se a função não consegue deletar/atualizar o gráfico por ele estar sendo atualizado ao mesmo tempo com as novas cotações.

Por favor, se alguém poder me ajudar.

Obrigado.

Você pode tentar a variante de CopyRates com datas.

int  CopyRates( 
   string           symbol_name,       // nome do ativo 
   ENUM_TIMEFRAMES  timeframe,         // período 
   datetime         start_time,        // data e hora de início 
   datetime         stop_time,         // data e hora de término 
   MqlRates         rates_array[]      // array destino para copiar 
   );

no lugar de: int recebido=CopyRates(_Symbol,PERIOD_M1,1,10000,Custom);

seria: int recebido=CopyRates(_Symbol,PERIOD_M1,inicio,fim,Custom);
 

Robson, boa noite, eu estou com o mesmo problema, e não consigo eliminar as barras do gráfico, vc conseguiu eliminar ??!!

grato

 
Brokenbrain:

Robson, boa noite, eu estou com o mesmo problema, e não consigo eliminar as barras do gráfico, vc conseguiu eliminar ??!!

grato

Você ao menos tentou as soluções propostas?

 
Joscelino Celso de Oliveira:

Você ao menos tentou as soluções propostas?

Esses candles ocorrem pq um dos ativos esta em leilão de abertura ou leilao/aftermarket, onde o leilão pode durar tempo indeterminado, e afetam todos os timeframes.

Como os candles (valores) são muito grandes, acabam atrapalhando o resultado do meu indicador. Limitar horário de funcionamento não resolve para mim.

grato

 
Brokenbrain:

Esses candles ocorrem pq um dos ativos esta em leilão de abertura ou leilao/aftermarket, onde o leilão pode durar tempo indeterminado, e afetam todos os timeframes.

Como os candles (valores) são muito grandes, acabam atrapalhando o resultado do meu indicador. Limitar horário de funcionamento não resolve para mim.

grato

Sugiro então que entre em contato com a corretora e entenda de onde vem estes "candles". A partir dai, volte a prancheta e efetue os ajustes no código de seu indicador.

Sendo leilao/aftermarket, a meu ver, você tem três alternativas: a) IGNORAR os mesmos; b) CONSIDERAR os mesmos da forma que vierem e; c) AJUSTAR (seja por diferença, media, ou outra técnica que você entender conveniente).

Esta eh minha opinião em cima de algo obscuro, pois não conheço seu indicador, o objetivo dele, código ou quaisquer limites(exceto o horário, que você descartou). O fato eh que quanto menos informação você colocar, menos a comunidade vai poder contribuir e, assim, você estará mais dependente de sua criatividade e bagagem técnica.

Boa sorte!

 
dvd:

Você pode tentar a variante de CopyRates com datas.

int  CopyRates( 
   string           symbol_name,       // nome do ativo 
   ENUM_TIMEFRAMES  timeframe,         // período 
   datetime         start_time,        // data e hora de início 
   datetime         stop_time,         // data e hora de término 
   MqlRates         rates_array[]      // array destino para copiar 
   );

no lugar de: int recebido=CopyRates(_Symbol,PERIOD_M1,1,10000,Custom);

seria: int recebido=CopyRates(_Symbol,PERIOD_M1,inicio,fim,Custom);

Dvd, Tentei esta solução, mas continua o mesmo problema. Tenho que abrir e fechar o EA juntamente com o gráfico mais de uma vez para que dê certo.

 
Joscelino:

Sugiro então que entre em contato com a corretora e entenda de onde vem estes "candles". A partir dai, volte a prancheta e efetue os ajustes no código de seu indicador.

Sendo leilao/aftermarket, a meu ver, você tem três alternativas: a) IGNORAR os mesmos; b) CONSIDERAR os mesmos da forma que vierem e; c) AJUSTAR (seja por diferença, media, ou outra técnica que você entender conveniente).

Esta eh minha opinião em cima de algo obscuro, pois não conheço seu indicador, o objetivo dele, código ou quaisquer limites(exceto o horário, que você descartou). O fato eh que quanto menos informação você colocar, menos a comunidade vai poder contribuir e, assim, você estará mais dependente de sua criatividade e bagagem técnica.

Boa sorte!

Joscelino, utilizei apenas a ferramenta do próprio MT5 para criar um símbolo, no meu caso, com 2 ativos conhecidos (PETR4/PETR3) utilizando a Fórmula de instrumento sintético (https://www.mql5.com/pt/articles/3540). O problema pode ser verificado deixando este símbolo aberto antes e depois do início das negociações, como disse o nosso amigo Brokenbrain.

Com esse novo símbolo criado, utilizo indicadores em qualquer tempo gráfico como se fosse um símbolo negociado normalmente.

Agradeço suas alternativas, mas infelizmente não resolve o meu problema. Testei em 4 corretoras diferentes. Não tenho como ignorar e considerar eles porque mudaria, por exemplo, o cálculo de uma média móvel. Como o problema sempre varia em quantidades, fica muito difícil ajustar por diferença.

Criação e teste de símbolos personalizados na MetaTrader 5
Criação e teste de símbolos personalizados na MetaTrader 5
  • www.mql5.com
Vamos criar um símbolo personalizado baseado no que já está presente na Observação do Mercado. Abra a janela Símbolos pelo botão direito do mouse e selecione o que você gostaria de usar para criar um símbolo personalizado. Após clicar em "Criar Símbolo Personalizado", defina o seu nome e altere os parâmetros necessários na especificação do...
 
Brokenbrain:

Robson, boa noite, eu estou com o mesmo problema, e não consigo eliminar as barras do gráfico, vc conseguiu eliminar ??!!

grato

Tentei fazer um indicador para visualizar a minha estratégia em back test,  mas ainda esta com muito erro e não esta confiável. Minha solução foi pegar o preço de fechamento e/ou o preço do tick, armazenar num buffer e fazer o cálculo dos indicadores "manualmente". Só não consigo visualizar os candles. Por enquanto, a melhor maneira que encontrei de fazer um símbolo sintético é utilizar a própria ferramenta do MT5, infelizmente este erro pode interferir muito dependendo do indicador que você utiliza ou do tempo gráfico.