EA conta Real não executa mesmo com saldo em Garantia.

 

Pessoal, bom dia,

Mais uma vez preciso de ajuda de vocês...

Tenho conta na Clear-PRD (conta real). Ocorre que antes de ontem tive uma perda, ficou lá negativo, alguns reais aparecem no meu MT5 como pode ver na figura abaixo.

Porém na corretora já cobri o saldo, já coloquei uma grana bem acima do que o necessário, já aloquei em Garantia Plataforma, consigo abrir ordem no MT5 manualmente, enfim, parece tudo ok. Mas o EA não roda, toda vez que vai abrir ordem é como se ele ainda estivesse considerando essa margem de 2 dias atrás, ele dá a mensagem:

Não sei mais onde procurar, já fui no google, já liguei para a corretora, to batendo cabeça a 2 dias sem saber o que é.

Alguém tem uma ajudinha?

Obrigado,

 

Ruy,

Acredito que tem que ter Margem Livre positiva no saldo do MT5.

CheckMoneyForTrade usa AccountInfoDouble(ACCOUNT_MARGIN_FREE) para validar e apresentar a mensagem "Not enough money for...."

Ivan

 
Ruy Christian Hoffmann:


Bom dia Ruy,

o Sr. já ligou para corretora e eles não resolveram ou não te orientaram o que fazer? 

Tá falando sério, foi isso mesmo?  Que absurdo...

 
Rogerio Giannetti Torres:

Bom dia Ruy,

o Sr. já ligou para corretora e eles não resolveram ou não te orientaram o que fazer? 

Tá falando sério, foi isso mesmo?  Que absurdo...

Rogério, acabei de ligar e lá está tudo ok.


Parece que no EA preciso colocar a solução do Ivan, alguma coisa para ler o saldo novamente. Vou tentar aqui. Obrigado.

 

Melhor colocar a validação antes de cada nova compra/venda.

 
Ivan Ronchi:

Melhor colocar a validação antes de cada nova compra/venda.

Ivan, acabei de colocar somente essa única linha antes da compra. To achando fácil demais, é só isso mesmo? rsrsrs


 double free_margin=AccountInfoDouble(ACCOUNT_FREEMARGIN);
 
Ruy Christian Hoffmann:

Ivan, acabei de colocar somente essa única linha antes da compra. To achando fácil demais, é só isso mesmo? rsrsrs


Eu mudei meu código, coloquei isso abaixo. Compilou mas ainda não sei se está funcionando, estou esperando ele tentar entrar numa operação para saber se vai continuar o erro ou não:

bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type)
  {
//--- obtemos o preço de abertura
   MqlTick mqltick;
   SymbolInfoTick(symb,mqltick);
   double price=mqltick.ask;
   if(type==ORDER_TYPE_SELL)
      price=mqltick.bid;
//--- valores da margem necessária e livre
   double margin,free_margin=AccountInfoDouble(ACCOUNT_FREEMARGIN);
   //--- chamamos a função de verificação
   if(!OrderCalcMargin(type,symb,lots,price,margin))
     {
      //--- algo deu errado, informamos e retornamos false
      Print("Error in ",__FUNCTION__," code=",GetLastError());
      return(false);
     }
   //--- se não houver fundos suficientes para realizar a operação
   if(margin>free_margin)
     {
      //--- informamos sobre o erro e retornamos false
      Print("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
      return(false);
     }
//--- a verificação foi realizada com sucesso
   return(true);
  }
  
  double CheckQtdAberto()
  {
   double vQtd = PositionGetDouble(POSITION_VOLUME);
//   Print("Quantidade Ruy: ",vQtd);
   return vQtd;
  }

... e lá na hora de comprar eu faço a checagem:


void Venda()
  {
      if(CheckMoneyForTrade(_Symbol,1,ORDER_TYPE_SELL))
      {
//         double free_margin=AccountInfoDouble(ACCOUNT_FREEMARGIN);
         double price=simbolo.Ask();
         double stoploss = simbolo.NormalizePrice(price + SL);
         double takeprofit = simbolo.NormalizePrice(price - TP);
         negocio.Sell(Volume, NULL, price, stoploss, takeprofit, "Venda Cruzamento");
      }
  }


Dai falo para vocês se deu certo ou não :)


 

Não deu certo... :( meu código ainda está pegando em algum lugar o saldo errado ou não está conseguindo ver o saldo :( ... vou desativar essa checagem até descobrir o que é.

Se alguém conseguir ver o erro nesse código acima, me ajude aeeeeê por favor :)

 

Primeiro agradecer mais uma vez Ivan :) :) :) Você tava certo amigo!!!

Segundo agradecer Rogério que deu atenção ao meu post e tentou me ajudar :) :) Obrigado também :) :)

O meu código acima estava com erro, no meu ... OrderCalcMargin ... estava buscando o saldo acumulado e não o saldo do dia apenas. 

Corrigido, então não era problema com a corretora nem falta de saldo, é meu código que conferia o saldo que tava errado mesmo.


Obrigado e grande abraço. 

 
Ruy Christian Hoffmann:


Opa Ruy, que bom que resolveu o problema eu respondi sem saber que estava testando o saldo antes de fazer a operação, mas repare bem num fato, para não ter surpresas depois.  Cada corretora tem suas próprias regras de risco para operações com derivativos e operações alavancadas, tanto daytrade como swing trade!  

Sugiro você conhecer as regras da sua corretora, pois para algumas, o que impede de você operar 1000 contratos de mini índice não é o saldo apresentado do MT5 mas sim são os limites que foram alocados para  sua conta.

 

Rogério, 

Obrigado pela dica. Mas sim, está alocado em Garantia para Plataformas, no caso como exige a Clear.

Mas resolvi em partes... resolvi uma parte do código que estava com erro, agora estou com outro problema.

Por acaso a guia Negociação não deveria ser o mesmo saldo da Corretora? Pois olhe o que me apresenta

E não deveria ser "Margem Livre: " = Saldo em Garantia ainda não utilizado na Corretora?

É eu que atualizo isso por código ou é automático?