WinFut@ - série contínua

Pierangela  

Tenho um robô (EA) que funciona normalmente para os papéis do IBOV, contudo qdo uso para a série contínua "WinFut@" apresenta o erro 10015 (TRADE_RETCODE_INVALID_PRICE). 

Observei que o result.ask e result.bid sempre são apresentados como 0 (zero), após a execução. 

Estou usando uma conta DEMO. Alguém sabe o que pode ser o provável motivo deste erro? Obrigada!

Rodrigo Malacarne  
Pierangela:

Tenho um robô (EA) que funciona normalmente para os papéis do IBOV, contudo qdo uso para a série contínua "WinFut@" apresenta o erro 10015 (TRADE_RETCODE_INVALID_PRICE). 

Observei que o result.ask e result.bid sempre são apresentados como 0 (zero), após a execução. 

Estou usando uma conta DEMO. Alguém sabe o que pode ser o provável motivo deste erro? Obrigada!

Olá Pierangela,

você poderia nos mostrar alguma parte relevante do código? Por exemplo, até onde me consta WINFUT@ é o nome dado à série contínua do mini-índice no servidor MetaBrazil-Demo, correto?

Pela análise que fiz do ativo, o tick size do mesmo é de 5 pontos, logo, qualquer preço que você calcule que não seja múltiplo do tick size, infelizmente dará como retorno o código 10015, que serve justamente para indicar que está ocorrendo um erro dentro do seu expert advisor na hora de calcular o preço de execução da ordem, o preço de stop loss ou ainda o preço de target profit.

Só como exemplo, caso o seu EA esteja calculando preços como 60.003 ou 59.998, infelizmente os mesmos não são múltiplos exatos de 5 (tick size do mini-índice). Logo, qualquer tentativa de envio de ordem irá falhar, caso seu EA não faça ajustes nos preços internamente.

Espero ter ajudado.

Abraços,
Malacarne 

Rodrigo Malacarne  

A propósito, antes que eu me esqueça, é bom checar também essa questão do bid / ask prices, para ver se os mesmos são disponibilizados tanto na conta demo quanto nos seus backtests...

Caso você esteja recebendo bid/ask prices igual a zero, provavelmente quaisquer cálculos baseados nessas informações também irão retornar preços igual a zero.

Nesse caso, obviamente, você não conseguirá enviar ordens pois o preço estaria obviamente errado.

Abraços,
Malacarne

Pierangela  
Malacarne:

A propósito, antes que eu me esqueça, é bom checar também essa questão do bid / ask prices, para ver se os mesmos são disponibilizados tanto na conta demo quanto nos seus backtests...

Caso você esteja recebendo bid/ask prices igual a zero, provavelmente quaisquer cálculos baseados nessas informações também irão retornar preços igual a zero.

Nesse caso, obviamente, você não conseguirá enviar ordens pois o preço estaria obviamente errado.

Abraços,
Malacarne

Oi Malacarne! Tentarei responder no corpo do seu post, para facilitar o entendimento.

"você poderia nos mostrar alguma parte relevante do código? Por exemplo, até onde me consta WINFUT@ é o nome dado à série contínua do mini-índice no servidor MetaBrazil-Demo, correto?" [Pierangela] Isso mesmo! Estou executando os testes no MetaBrazil-Demo.

"Pela análise que fiz do ativo, o tick size do mesmo é de 5 pontos, logo, qualquer preço que você calcule que não seja múltiplo do tick size, infelizmente dará como retorno o código 10015, que serve justamente para indicar que está ocorrendo um erro dentro do seu expert advisor na hora de calcular o preço de execução da ordem, o preço de stop loss ou ainda o preço de target profit. "[Pierangela] Entendi. Muito obrigada :-)

"Só como exemplo, caso o seu EA esteja calculando preços como 60.003 ou 59.998, infelizmente os mesmos não são múltiplos exatos de 5 (tick size do mini-índice). Logo, qualquer tentativa de envio de ordem irá falhar, caso seu EA não faça ajustes nos preços internamente. "[Pierangela]  O meu EA busca os valores de BID e ASK. Postei abaixo a parte do código onde apresenta erro.

Dependendo o período de data (date) que eu faça o backtest, recebo o erro 10015. Por exemplo:

1) execução com sucesso qdo utilizei o período de 01/01/2013 até 16/07/2014. (Periodicidade H1)

2) execução sem sucesso qdo utilizei o período de 01/07/2013 até 16/07/2013. (Periodicidade H1)

Este é meu primeiro EA e somente tenho 2 semanas de estudo. Adorei o MT5... poderoso :-) Tenho longa estrada de estudos. Obrigada pela ajuda!

if (glBuyPlaced == true) 

{  request.action = TRADE_ACTION_DEAL;

   request.type = ORDER_TYPE_BUY;

   request.symbol = _Symbol;

   request.volume =  TradeVolume;

   request.type_filling = ORDER_FILLING_FOK;

   request.price = SymbolInfoDouble(_Symbol , SYMBOL_ASK);

   request.sl = 0;

   request.tp = 0;

   request.deviation = 50;

   bool retorno_ordem = OrderSend(request,result);

   retorno_erro = result.retcode;

   Print("erro " + retorno_erro);

   Print("request.price = ",request.price,"   result.ask = ",  result.ask," result.bid =",result.bid); // para o winfut@ dependendo o período de data  (date) que eu rode o backtest é onde recebo o erro 10015 :-(

   Print("--------------------------comprado por " + result.price);

   nr_order = result.order;

   Vvalores[contador] = nr_order;

   glBuyPlaced = false;

   contador++;

   } 
Rogerio Figurelli  
Pierangela:


Olá Pierangela, o principal problema está justamente na linha abaixo:

request.price = SymbolInfoDouble(_Symbol , SYMBOL_ASK);

Note que você está utilizando diretamente o preço do ativo no momento da ordem, e que esse valor pode variar fora do tick size para esse ativo, como alertou o Malacarne.

Ou seja, você deve fazer um tratamento para ajustar esse valor no tick size antes de atribuir ao request.price.

Esse valor irá se adaptar dentro do teu deviation programado, que parece com uma boa folga.

Obs: quando inserires códigos fontes utlize o botão de source da barra de edição, já fiz a correção do seu post original. 

Pierangela  
figurelli:

Olá Pierangela, o principal problema está justamente na linha abaixo:

Note que você está utilizando diretamente o preço do ativo no momento da ordem, e que esse valor pode variar fora do tick size para esse ativo, como alertou o Malacarne.

Ou seja, você deve fazer um tratamento para ajustar esse valor no tick size antes de atribuir ao request.price.

Esse valor irá se adaptar dentro do teu deviation programado, que parece com uma boa folga.

Obs: quando inserires códigos fontes utlize o botão de source da barra de edição, já fiz a correção do seu post original. 

Figurelli,

Muito obrigada. Irei ajustar o meu EA. No próximo post irei observar a utilização do SRC, valeu a dica.

Obrigada Malacarne também! Até muito em breve ;-)

Um belo dia para todos! 

Quando o meu EA estiver caminhando bem, enviarei para vcs.

Pierangela  
Agora estou executando o meu EA numa conta demo na XP.

Observando o "Market Watch" para o WINFUT@, verificamos que sempre os valores BID e ASK são múltiplos de 5, como citado e alertado pelo Malacarne e Figurelli (tick size de 5 pontos). 

Se no momento que executo o meu EA, informando que estou trabalhando com o Symbol WINFUT@, por que me aparecem valores de ASK e BID que não são múltiplos de 5? Não deveriam aparecer os mesmos valores

que vejo no  "Market Watch"?

O evento OnTick() não deveria apresentar somente os valores BID e ASK para o Symbol que solicitei? Procurei em vários lugares na internet e não consegui entender o motivo.

Ou é necessário de alguma forma eu informar no evento OnTick()  que o tick size é 5? Se sim, não consegui encontrar como fazer isso :-( 

Por favor alguém consegue me ajudar?

Obrigada! 


Rodrigo Malacarne  
Pierangela:
Agora estou executando o meu EA numa conta demo na XP.

Observando o "Market Watch" para o WINFUT@, verificamos que sempre os valores BID e ASK são múltiplos de 5, como citado e alertado pelo Malacarne e Figurelli (tick size de 5 pontos). 

Se no momento que executo o meu EA, informando que estou trabalhando com o Symbol WINFUT@, por que me aparecem valores de ASK e BID que não são múltiplos de 5? Não deveriam aparecer os mesmos valores

que vejo no  "Market Watch"?

O evento OnTick() não deveria apresentar somente os valores BID e ASK para o Symbol que solicitei? Procurei em vários lugares na internet e não consegui entender o motivo.

Ou é necessário de alguma forma eu informar no evento OnTick()  que o tick size é 5? Se sim, não consegui encontrar como fazer isso :-( 

Por favor alguém consegue me ajudar?

Obrigada! 


Olá Pierangela, você poderia descrever melhor o problema? Por exemplo, pelo que estou entendendo esse problema está relacionado apenas com o servidor MetaBrazil-Demo? Você já chegou a rodar esse código em algum outro servidor pra ver se o mesmo persiste ?

Acredito que esse possa ser um problema específico do servidor, logo, se puderes fornecer mais informações, acredito que seria mais fácil replicar o problema e te ajudar na solução.

Abraços,
Malacarne 

Pierangela  
Malacarne:

Olá Pierangela, você poderia descrever melhor o problema? Por exemplo, pelo que estou entendendo esse problema está relacionado apenas com o servidor MetaBrazil-Demo? Você já chegou a rodar esse código em algum outro servidor pra ver se o mesmo persiste ?

Acredito que esse possa ser um problema específico do servidor, logo, se puderes fornecer mais informações, acredito que seria mais fácil replicar o problema e te ajudar na solução.

Abraços,
Malacarne 

Oi Malacarne,

Bom dia! 

O que relatei acontece nos 02 (dois) servidores que efetuei testes, ou seja, XPMT5-Demo e MetaBrazil-Demo.

Embora não tenha um mês usando o MQL5, pelo que li e entendi, o evento OnTick  ocorre qdo um new tick ocorre. E o new tick ocorre qdo o preço é alterado no servidor. Sendo assim, se no EA estou perguntando o preço ASK e BID do symbol WIN@FUT, como ele me é retornado sem ser múltiplo de 5? Visto que,  o tick size deste symbol é de 5, como informado corretamente por vc e eu observei também no "Market Watch".

Obrigada pela ajuda.

abcs, Pierangela 

Rodrigo Malacarne  
Pierangela:

Malacarne,

 Por favor esquece o post acima, pois eu consegui executar para o WINV14 (XPMT5-Demo), no OnTick o tick size funcionou corretamente para o mesmo.

 Agradeço vc e Figurelli pela ajuda ;-)

 abcs, Pierangela 

Ótimo ... foi o que imaginei ... alguns servidores possuem qualidade de dados superior a outros.

Fico feliz que tenha resolvido o problema!

Abraços,
Malacarne