Como contar quantidade de gains e losses dentro de um mesmo dia

 

Boa tarde, amigos!


Sou novo por aqui e estou aprendendo agora a programar EAs...

Estou esbarrando num problema, preciso limitar a quantidade de operações no dia tanto em quantidade máxima de trades, quanto em quantidade máxima de loss e quantiade máxima de gains.

Ex> quero fazer no máximo 15 trades no dia, sendo que desses 15, se eu tiver 10 gains eu paro (não necessariamente seguidos) ou se eu tiver 5 loss eu paro  (não necessariamente seguidos).

Consegui desenrolar uma função para para limitar a quantidade total de trades no dia, porém não consigo achar função que me traga a quantidade de gains ou losses no dia...

se alguém souber e puder ajudar...segue o que eu consegui até agora

   datetime date = StringToTime(TimeToString(candles[0].time,TIME_DATE));

   HistorySelect(date,TimeCurrent());

   HistoryDealsTotal();

   bool limit_trade = HistoryDealsTotal() < 15;


   if(trade_mode == NORMAL && limit_trade)

      {  

      if(newbar && !PositionSelect(_Symbol))

         {

         int total_orders = OrdersTotal();         

         for(int i=(total_orders-1);i>=0;i--)

           {

            ulong ticket = OrderGetTicket(i);

            Cancel_Order(ticket);

           }

         Pending_buy();

         Pending_sell();

        }

     }

Abraço

 
HSousa89:

Boa tarde, amigos!


Sou novo por aqui e estou aprendendo agora a programar EAs...

Estou esbarrando num problema, preciso limitar a quantidade de operações no dia tanto em quantidade máxima de trades, quanto em quantidade máxima de loss e quantiade máxima de gains.

Ex> quero fazer no máximo 15 trades no dia, sendo que desses 15, se eu tiver 10 gains eu paro (não necessariamente seguidos) ou se eu tiver 5 loss eu paro  (não necessariamente seguidos).

Consegui desenrolar uma função para para limitar a quantidade total de trades no dia, porém não consigo achar função que me traga a quantidade de gains ou losses no dia...

se alguém souber e puder ajudar...segue o que eu consegui até agora

   datetime date = StringToTime(TimeToString(candles[0].time,TIME_DATE));

   HistorySelect(date,TimeCurrent());

   HistoryDealsTotal();

   bool limit_trade = HistoryDealsTotal() < 15;


   if(trade_mode == NORMAL && limit_trade)

      {  

      if(newbar && !PositionSelect(_Symbol))

         {

         int total_orders = OrdersTotal();         

         for(int i=(total_orders-1);i>=0;i--)

           {

            ulong ticket = OrderGetTicket(i);

            Cancel_Order(ticket);

           }

         Pending_buy();

         Pending_sell();

        }

     }

Abraço

Utilizando o OnTradeTransaction você consegue obter trade a trade encerrado se foi positivo ou negativo. Tem vários exemplos de como utilizá-lo aqui no fórum ou lendo https://www.mql5.com/pt/docs/event_handlers/ontradetransaction você saberá como fazer.

Também pode seguir o princípio de: Se SaldoAtual é >= SaldoAnterior, então é uma operação positiva, senão é uma operação negativa. E isso você pode verificar com HistoryDealGetDouble em conjunto com o HistorySelect, podendo chamá-lo a qualquer momento independente do OnTradeTransaction.

Por fim quanto a quantidade de traders você consegue com o HistoryDealsTotal().

Documentação sobre MQL5: Manipulação de eventos / OnTradeTransaction
Documentação sobre MQL5: Manipulação de eventos / OnTradeTransaction
  • www.mql5.com
É chamada em EAs quando ocorre o evento TradeTransaction. A função é projetada para processar os resultados de execução da solicitação de negociação. [in]  Variável do tipo MqlTradeTransaction com descrição da transação feita na conta de negociação. [in]  Variável do tipo MqlTradeRequest com descrição da solicitação que gerou a transação...
 
Ruy Christian Hoffmann:

Utilizando o OnTradeTransaction você consegue obter trade a trade encerrado se foi positivo ou negativo. Tem vários exemplos de como utilizá-lo aqui no fórum ou lendo https://www.mql5.com/pt/docs/event_handlers/ontradetransaction você saberá como fazer.

Também pode seguir o princípio de: Se SaldoAtual é >= SaldoAnterior, então é uma operação positiva, senão é uma operação negativa. E isso você pode verificar com HistoryDealGetDouble em conjunto com o HistorySelect, podendo chamá-lo a qualquer momento independente do OnTradeTransaction.

Por fim quanto a quantidade de traders você consegue com o HistoryDealsTotal().


Muito obrigado...Vou testar mais tarde e passo um retorno...

 
Ruy Christian Hoffmann:

Utilizando o OnTradeTransaction você consegue obter trade a trade encerrado se foi positivo ou negativo. Tem vários exemplos de como utilizá-lo aqui no fórum ou lendo https://www.mql5.com/pt/docs/event_handlers/ontradetransaction você saberá como fazer.

Também pode seguir o princípio de: Se SaldoAtual é >= SaldoAnterior, então é uma operação positiva, senão é uma operação negativa. E isso você pode verificar com HistoryDealGetDouble em conjunto com o HistorySelect, podendo chamá-lo a qualquer momento independente do OnTradeTransaction.

Por fim quanto a quantidade de traders você consegue com o HistoryDealsTotal().

Finalmente consegui rsrs depois de tentar de tudo segui o conceito do saldoAtual e saldoAnterior. Obrigado.
 
HSousa89:
Finalmente consegui rsrs depois de tentar de tudo segui o conceito do saldoAtual e saldoAnterior. Obrigado.

De nada Sousa, que bom que consegui ajudar em algo.

Abraços e sucesso.