Problema para pegar o saldo da conta mt5

 

Bom dia pessoal

Estou terminando meu primeiro EA, e está tudo indo bem, mas eu preciso colocar nele um limite de perda diário e um limite de ganho diário, de forma que, quando forem atingidos um ou outro, usarei a função ExpertRemove() para desligá-lo por aquele dia.

Estou operando WIN e WDO, alguém poderia me ajudar? O problema é unicamente pegar o saldo da conta para que possa incluir a condicional de verificação no expert. Não encontrei nenhum tópico nem funções sobre isso na documentação.

Se alguem puder ajudar, ficarei agradecido. Só falta isso e ralei muito pra estruturar esse primeiro EA.

 
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estado de Ambiente / Propriedades da Conta
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estado de Ambiente / Propriedades da Conta
  • www.mql5.com
Propriedades da Conta - Estado de Ambiente - Constantes, Enumeradores e Estruturas - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Lucas Jose Munoz Dentello:

Bom dia pessoal

Estou terminando meu primeiro EA, e está tudo indo bem, mas eu preciso colocar nele um limite de perda diário e um limite de ganho diário, de forma que, quando forem atingidos um ou outro, usarei a função ExpertRemove() para desligá-lo por aquele dia.

Estou operando WIN e WDO, alguém poderia me ajudar? O problema é unicamente pegar o saldo da conta para que possa incluir a condicional de verificação no expert. Não encontrei nenhum tópico nem funções sobre isso na documentação.

Se alguem puder ajudar, ficarei agradecido. Só falta isso e ralei muito pra estruturar esse primeiro EA.

Olá...Eu achei essas funções prontas aqui no fórum e usei elas mesmo. Funcionam muito bem. Dá uma olhada: 


//+------------------------------------------------------------------+

//|Last Profit |

//+------------------------------------------------------------------+

datetime last_profit()

{

// --- determine the time intervals of the required trading history

datetime end=StringToTime(TimeToString(TimeCurrent(), TIME_DATE) + " " + horaInicioFechamento + minutoInicioFechamento );

datetime gi_time = StringToTime(TimeToString(TimeCurrent(), TIME_DATE) + " " + horaInicioAbertura + minutoInicioAbertura );

datetime start=end-/*gi_time;*/ PeriodSeconds(PERIOD_D1);// set the beginning time to 24 hours ago

//--- request in the cache of the program the needed interval of the trading history

HistorySelect(gi_time,end);

//--- obtain the number of deals in the history

int deals=HistoryDealsTotal();



//double result=0;

int returns=0;

double profit=0;

double loss=0;

//--- scan through all of the deals in the history

for(int i=0;i<deals;i++)

{

   //--- obtain the ticket of the deals by its index in the list

   ulong deal_ticket=HistoryDealGetTicket(i);

   if(deal_ticket>0) // obtain into the cache the deal, and work with it

   

      {

         string symbol =HistoryDealGetString(deal_ticket,DEAL_SYMBOL);

         datetime time =(datetime)HistoryDealGetInteger(deal_ticket,DEAL_TIME);

         ulong order =HistoryDealGetInteger(deal_ticket,DEAL_ORDER);

         long order_magic =HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);

         long pos_ID =HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);

         ENUM_DEAL_ENTRY entry_type=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);

         

            if(symbol==_Symbol)

               {

               if(entry_type==DEAL_ENTRY_OUT)

                  {

                  result+=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);

                  }

               }

      }

   }

      return(result);

   }

//---


bool UseLimit()

   {

      if(UseLimit==true)

         {

            double float_profit=last_profit();

            if (float_profit >= MaximumProfit)// 

               {

                  TradeNow = 0;

                  Print("Alcançou o limite de ganho diário, É GAIN PORRA!!! ");

                  Print("SALDO = ",AccountInfoDouble(ACCOUNT_BALANCE));

                  return (false);

               }

            else if ( float_profit <=MaximumLoss)

               {

                  TradeNow = 0;

                  Print("Alcançou o limite de perda diário.");

                  Print("SALDO = ",AccountInfoDouble(ACCOUNT_BALANCE));

                  return (false);

               }

         }

         TradeNow = 1;

         return (true);

   }

 
Lucas Jose Munoz Dentello:

Bom dia pessoal

Estou terminando meu primeiro EA, e está tudo indo bem, mas eu preciso colocar nele um limite de perda diário e um limite de ganho diário, de forma que, quando forem atingidos um ou outro, usarei a função ExpertRemove() para desligá-lo por aquele dia.

Estou operando WIN e WDO, alguém poderia me ajudar? O problema é unicamente pegar o saldo da conta para que possa incluir a condicional de verificação no expert. Não encontrei nenhum tópico nem funções sobre isso na documentação.

Se alguem puder ajudar, ficarei agradecido. Só falta isso e ralei muito pra estruturar esse primeiro EA.

Lembrando so que em todas as corretoras decentes voce precisa alocar a margem para ela chegar no metatrader 5. Entretanto, eu ja vi algumas liberarem e o saldo no mt5 ter que ser operado zerado. Se for um desses casos, dai nao tem como. :'(

 
Ricardo Rodrigues Lucca #:

Lembrando so que em todas as corretoras decentes voce precisa alocar a margem para ela chegar no metatrader 5. Entretanto, eu ja vi algumas liberarem e o saldo no mt5 ter que ser operado zerado. Se for um desses casos, dai nao tem como. :'(

Perfeito alerta.

Todas as corretoras Brazucas tem problema com isso. Jamais contem com esse número.

Eu mesmo tive que esperar por dias para desalocar ações que foram transferidas para outra corretora e figuravam como "saldo" na corretora atual...

A integração de "Saldos" entre os servidores de MT5 e das corretoras Brazucas é COMPLETAMENTE inconsistente!

Razão: