EA não abre negociação

 

Olá,

Construi um EA a partir de algumas análises para operar minicontratos do índice no tempo gráfico de 5 minutos. O EA funciona perfeitamente no testador de estratégia, realizando entradas "long" e "short". No entanto, em operações reais ele não abre operações (não emite ordens). Alguma ideia do que pode estar ocorrendo?

P.S.: tudo Ok com a corretora, com a conta, com a margem e com a quantidade de contratos.

Edilson 

 
Edilson Santos:

Olá,

Construi um EA a partir de algumas análises para operar minicontratos do índice no tempo gráfico de 5 minutos. O EA funciona perfeitamente no testador de estratégia, realizando entradas "long" e "short". No entanto, em operações reais ele não abre operações (não emite ordens). Alguma ideia do que pode estar ocorrendo?

P.S.: tudo Ok com a corretora, com a conta, com a margem e com a quantidade de contratos.

Edilson 

Olá Edilson Santos,

Fica um pouco difícil tentar ajudá-lo sem maiores evidências do que está ocorrendo...

Seria alguma coisa no código do EA? Caso sim, você poderia postar eventuais mensagens de erro / log para que possamos ajudá-lo?

Com relação à corretora, você alega que está tudo certo. Nesse caso, você já tentou enviar ordens por essa conta usando a boleta nativa do MT5? Tudo certo nesse caso?

Enfim, como dito, com maiores informações podemos tentar ajudá-lo de alguma maneira!

Abraços,
Malacarne 

 
Rodrigo Malacarne:

Olá Edilson Santos,

Fica um pouco difícil tentar ajudá-lo sem maiores evidências do que está ocorrendo...

Seria alguma coisa no código do EA? Caso sim, você poderia postar eventuais mensagens de erro / log para que possamos ajudá-lo?

Com relação à corretora, você alega que está tudo certo. Nesse caso, você já tentou enviar ordens por essa conta usando a boleta nativa do MT5? Tudo certo nesse caso?

Enfim, como dito, com maiores informações podemos tentar ajudá-lo de alguma maneira!

Abraços,
Malacarne 

Caro Malacarne,

Eu realizei algumas operações utilizando a boleta nativa do MT5. Todas sem problemas.

Abaixo uma cópia da aba "Diário":

2017.01.17 08:16:30.845 Terminal Rico MetaTrader 5 x64 build 1495 started (Rico Corretora de Títulos e Valores Mobiliários S.A)

2017.01.17 08:16:30.846 Terminal Windows 10 Home Single Language (x64 based PC), IE 11.00, UAC, Intel Core i5-4690T  @ 2.50GHz, RAM: 5515 / 8082 Mb, HDD: 762170 / 937372 Mb, GMT-03:00

2017.01.17 08:16:30.846 Terminal C:\Users\Edilson\AppData\Roaming\MetaQuotes\Terminal\B26B53CEDCB454B17969DD1FD1C50D1F

2017.01.17 08:16:32.262 Experts expert DirAbeFiltro (WING17,M5) loaded successfully

2017.01.17 08:16:32.428 Network '9078': authorized on Rico-Metatrader-PROD through Metatrader 5 Access Server (ping: 16.39 ms)

2017.01.17 08:16:32.428 Network '9078': previous successful authorization performed from 186.205.3.213 on 2017.01.17 06:57:39

2017.01.17 08:16:32.497 Network '9078': terminal synchronized with Rico Corretora de Títulos e Valores Mobiliários S.A

2017.01.17 08:16:32.497 Network '9078': trading has been enabled - netting mode

2017.01.17 08:16:42.998 Experts automated trading is enabled

------------------------------------------------------------------------------------------------------------------------------------------------

Vou solicitar a ativação minha conta demo na corretora para testar o EA e ver se o problema persiste.

Grande abraço.

Edilson 

 

Caro Malacarne,

A regra de entrada é definida pelo código abaixo:

-------------------------------

//----Compra

         if (Filtro == 1 && EqRet > 0 && candle[0].close > Sinal_ma)  { MarketOrder(_Symbol, POSITION_TYPE_BUY, NumContratos, 0, 0, 0, Magic, Slippage); }

         if (Filtro == 0 && EqRet > 0) {MarketOrder(_Symbol, POSITION_TYPE_BUY, NumContratos, 0, 0, 0, Magic, Slippage);}

//----Venda

         if (Filtro == 1 && EqRet < 0 && candle[0].close < Sinal_ma) { MarketOrder(_Symbol, POSITION_TYPE_SELL, NumContratos, 0, 0, 0, Magic, Slippage);}

         if (Filtro == 0 && EqRet < 0) {MarketOrder(_Symbol, POSITION_TYPE_SELL, NumContratos, 0, 0, 0, Magic, Slippage);}

---------------------------------

A função MarketOrder() é chamada e faz as verificações necessárias para efetuar a entrada.

Durante a depuração do código os sinais de entrada são identificados, a função é chamada. E no Testador de Estratégias (Backtest) as operações são realizadas corretamente.

Grande abraço.

Edilson 

 

Edilson, boa noite!

 Recomendo postar os logs da aba "Experts"  também.

 Abraço,

 Daniel 

 
Daniel Andrejczuk:

Edilson, boa noite!

 Recomendo postar os logs da aba "Experts"  também.

 Abraço,

 Daniel 

Caro Daniel,

Aparece uma única linha nessa aba:

2017.01.18 08:16:46.827 DirAbeFiltro (WING17,M5) Copiado 100barras

Grande abraço,

Edilson 

 
Edilson Santos:

Caro Daniel,

Aparece uma única linha nessa aba:

2017.01.18 08:16:46.827 DirAbeFiltro (WING17,M5) Copiado 100barras

Grande abraço,

Edilson 

Olá Edilson,

Um problema que pode estar ocorrendo, em comparação ao backtesting e conta real na Rico, é o teste de saldo/margem em conta, pois nessa corretora ele vai começar com saldo/margem em zero (apenas para o MT5, independentemente do seu Net e margem na corretora).

Tem certeza que não está fazendo nenhum teste de saldo/margem que bloqueie as operações?

Se não for isso, recomendo colocar Prints para testes de erros, usando a função GetLastError(), por exemplo, para poderes comparar os logs de backtesting e reais.

Sds.,

Rogério Figurelli

 
Rogerio Figurelli:

Olá Edilson,

Um problema que pode estar ocorrendo, em comparação ao backtesting e conta real na Rico, é o teste de saldo/margem em conta, pois nessa corretora ele vai começar com saldo/margem em zero (apenas para o MT5, independentemente do seu Net e margem na corretora).

Tem certeza que não está fazendo nenhum teste de saldo/margem que bloqueie as operações?

Se não for isso, recomendo colocar Prints para testes de erros, usando a função GetLastError(), por exemplo, para poderes comparar os logs de backtesting e reais.

Sds.,

Rogério Figurelli

Caro Rogério,

Realmente, eu observo que no MT5 o saldo da conta começa com zero (Na aba "Negociação": Saldo: 0.00 BRL Capital Líquido: 0.00 Margem Livre: 0.00), independente dos valores que estão na minha conta real. Mas eu consigo realizar operações utilizando o MT5 fora do robô.

Com relação ao "teste de saldo/margem que bloqueie as operações" eu, com toda sinceridade, não sei como é realizado. Se o teste está sendo feito pelo EA, realmente não saberia responder. Não fiz nenhuma programação com essa intenção.

Vou tentar os "Prints" que você recomendou.

Grande abraço.

Edilson 

 
Edilson Santos:

Caro Rogério,

Realmente, eu observo que no MT5 o saldo da conta começa com zero (Na aba "Negociação": Saldo: 0.00 BRL Capital Líquido: 0.00 Margem Livre: 0.00), independente dos valores que estão na minha conta real. Mas eu consigo realizar operações utilizando o MT5 fora do robô.

Com relação ao "teste de saldo/margem que bloqueie as operações" eu, com toda sinceridade, não sei como é realizado. Se o teste está sendo feito pelo EA, realmente não saberia responder. Não fiz nenhuma programação com essa intenção.

Vou tentar os "Prints" que você recomendou.

Grande abraço.

Edilson 

Caro Rogério,

Modifiquei o código da entrada das operações para verificar a margem.

-----------------------------------------------------------

//----Compra

         if (Filtro == 1 && candle[0].open < candle[0].close && EqRet > 0) {

            if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,NumContratos,candle[0].close,margin) == 0) {

            Print("Não tem margem", GetLastError());return;}

         MarketOrder(_Symbol, POSITION_TYPE_BUY, NumContratos, 0, 0, 0, Magic, Slippage);}

         if (Filtro == 0 && EqRet > 0) {

            if(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,NumContratos,candle[0].close,margin) == 0){

            Print("Não tem margem", GetLastError());return;}

         MarketOrder(_Symbol, POSITION_TYPE_BUY, NumContratos, 0, 0, 0, Magic, Slippage);}

//----Venda

         if (Filtro == 1 && candle[0].open > candle[0].close && EqRet < 0) {

            if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,NumContratos,candle[0].close,margin) == 0){

            Print("Não tem margem", GetLastError());return;}

         MarketOrder(_Symbol, POSITION_TYPE_SELL, NumContratos, 0, 0, 0, Magic, Slippage);}

         if (Filtro == 0 && EqRet < 0) {

            if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,NumContratos,candle[0].close,margin) == 0){

            Print("Não tem margem", GetLastError());return;}

         MarketOrder(_Symbol, POSITION_TYPE_SELL, NumContratos, 0, 0, 0, Magic, Slippage);}

-----------------------------------------------------------------------------------------------------------------

Grande abraço,

Edilson 

 

Olá Edilson,

Perfeitamente, mas note que o que comentei é o contrário dessa lógica, pois na corretora Rico você não consegue testar a margem, e a hipótese seria que estivesse sendo feito esse teste no seu código original, travando o robô.

Sds.,

Rogério Figurelli 

Razão: