EA SÓ FUNCIONA BEM NA DEMO

 

Meu EA rodando na demo executa as ordens certo de acordo com a estratégia, mas na real não. Ele faz poucas entradas. Alguém já passou por isso?

Na imagem abaixo estão as mesmas configurações.



 
northedan:

Meu EA rodando na demo executa as ordens certo de acordo com a estratégia, mas na real não. Ele faz poucas entradas. Alguém já passou por isso?

Na imagem abaixo estão as mesmas configurações.



Falta muita informação. Na conta real seu EA nem chega a enviar ordens? Ou envia e são recusadas?

Postar imagens gráficas não ajudam em nada. Se houver problema no código e não postá-lo, dificilmente obterá ajuda.

Da mesma forma se não enviar as duvidas com informações completas.

[ ]´s

 

Uma possibilidade é que o EA esteja enviando ordens que são rejeitadas na conta real por falta de margem. Em algumas corretoras não basta ter a margem depositada na conta, você precisa também configurar as margens e alocá-las aos ativos e canais de negociação desejados.

Verifique o log do EA (aba "Experts") e o log do MT5 (aba "Journal") para ver se a corretora está rejeitando ordens enviadas pelo EA.

 
Trader_Patinhas:

Uma possibilidade é que o EA esteja enviando ordens que são rejeitadas na conta real por falta de margem. Em algumas corretoras não basta ter a margem depositada na conta, você precisa também configurar as margens e alocá-las aos ativos e canais de negociação desejados.

Verifique o log do EA (aba "Experts") e o log do MT5 (aba "Journal") para ver se a corretora está rejeitando ordens enviadas pelo EA.

Bom... Minha corretora é a modal. Está habilitado 1 contrato. Tem R$140,00 na conta.

Esse é o trecho do código que coloca a ordem limit:

         request.action = TRADE_ACTION_PENDING;
         request.type = ORDER_TYPE_SELL_LIMIT;
         request.symbol = _Symbol;
         request.volume = Contrato;
         request.type_filling = ORDER_FILLING_FOK;
         request.price = NormalizeDouble((maTickCerto + Afastamento),_Digits);
         request.sl = NormalizeDouble(((maTickCerto + Afastamento) + StopLoss),_Digits);
         request.tp = NormalizeDouble((maTickCerto + Afastamento) - TakeProfit,_Digits);
         request.type_time = ORDER_TIME_DAY;
         request.deviation = 0;
         request.magic = MagicNumber;
         
         OrderSend(request,result);
         printf("ordem colocada");
         ordemRealizada = true;

Essa é parte do código que remove a ordem limit se ela não for executada no candle current:

if(LastBar != ThisBar)
      {
         //ZeroMemory(request);
         //ZeroMemory(result);
         int ord_total = OrdersTotal();
         printf(ord_total);
         if(ord_total > 0 && ordemRealizada == true)
         {
            for(int i = ord_total - 1; i >= 0; i--)
            {
               ulong ticket = OrderGetTicket(i);
               printf(ticket);
               if(OrderSelect(ticket) && OrderGetString(ORDER_SYMBOL) == Symbol() 
                  && PositionSelect(_Symbol) == false && OrderGetInteger(ORDER_MAGIC) == MagicNumber)
               {
                  request.action = TRADE_ACTION_REMOVE;
                  request.order = ticket;
                  
                  OrderSend(request,result);
                  printf("ordem removida");
               }
            }    
         }
         LastBar = ThisBar;
         ordemRealizada = false;
         printf("Nova barra");


Acontece que no terminal está aparecendo "ordem colocada", como se a ordem tivesse sido enviada, mas não foi.

 
Joscelino Celso de Oliveira:

Falta muita informação. Na conta real seu EA nem chega a enviar ordens? Ou envia e são recusadas?

Postar imagens gráficas não ajudam em nada. Se houver problema no código e não postá-lo, dificilmente obterá ajuda.

Da mesma forma se não enviar as duvidas com informações completas.

[ ]´s

Postei o código ai em cima amigo. Eu realmente não sei o que está acontecendo.

No log, o horário é 8:41 pq não estou no horário de verão. No gráfico foi no candle das 9:41



Esses log são da conta real. Da pra vê ali no printf que a ordem foi colocada, mas ela não foi executada. Eu coloquei outro printf para "ordem removida". Esse trecho do código deveria ser executado, mas como não existia ordem para ser removida, ele não foi executado. Lembrando que no gráfico não acontece nada. Não aparece a ordem. Já na conta demo essa ordem foi executada normalmente.

Era pra ser executada nessa linha amarela.


 

Bom dia,

altere request.type_filling = ORDER_FILLING_FOK; para request.type_filling = ORDER_FILLING_RETURN;

 
Rogerio Giannetti Torres:

Bom dia,

altere request.type_filling = ORDER_FILLING_FOK; para request.type_filling = ORDER_FILLING_RETURN;

Deu certo, obrigado.

 
Agora parece que está tudo certo. Mas eu não sei pq o EA abre mais operações na demo do que na real. A operações variam de 1 corretora pra outra?. E os resultados de uma conta demo não reflete operações na real?
 
northedan:
Agora parece que está tudo certo. Mas eu não sei pq o EA abre mais operações na demo do que na real. A operações variam de 1 corretora pra outra?. E os resultados de uma conta demo não reflete operações na real?

Bom dia,

acho que você não atentou para o fato que em DEMO o book é uma "simulação" do book real.  Em DEMO as ordens são executadas sem obedecer a fila de execução e nem a quantidade ofertada no preço.  Esqueci de comentar que o SL/TP são executados sem levar em conta o spread.

Razão: