OrdersTotal(), PositionsTotal() - página 2

 
Rogerio Giannetti Torres:

Opa Cristiano, entendi o que você quer, então para isso você deve ler o histórico de ordens executadas no dia e não emitir novas ordens quando bater no limite. Essa sugestão já foi dada, então vou anexar um modelo de código para você seguir.



Perfeito. Muito obrigado. Funcionou


Acrescentei mais umas linhas apenas para não considerar as ordens SL e TP.

int numOrdensAceitas()
  {
   int acmOrdensExecutadas=0;
   HistorySelect(StringToTime(TimeToString(TimeTradeServer(), TIME_DATE)), INT_MAX);  // Seleciona histórico do dia
   int total = HistoryDealsTotal();
   for(int i = 0; i < total; i++)
     {
      ulong Ticket = HistoryDealGetTicket(i);
      if(HistoryDealGetString(Ticket, DEAL_SYMBOL) == _Symbol
         && HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_IN
         && HistoryDealGetInteger(Ticket,DEAL_REASON)!=DEAL_REASON_SL
         && HistoryDealGetInteger(Ticket,DEAL_REASON)!=DEAL_REASON_TP
        )
        {
            acmOrdensExecutadas++;
        }
     }
   return(acmOrdensExecutadas+1);
  }
 
Cristiano Santos:

Perfeito. Muito obrigado. Funcionou

Acrescentei mais umas linhas apenas para não considerar as ordens SL e TP.

Oi Cristiano, não vejo necessidade dessas linhas, pois o stoploss e takeprofit  geram ordens de "saída" de posição ou sejam  deal entry tipo  DEAL_ENTRY_OUT, o script que passei só soma o deal entry tipo DEAL_ENTRY_IN.

 
Rogerio Giannetti Torres:

Oi Cristiano, não vejo necessidade dessas linhas, pois o stoploss e takeprofit  geram ordens de "saída" de posição ou sejam  deal entry tipo  DEAL_ENTRY_OUT, o script que passei só soma o deal entry tipo DEAL_ENTRY_IN.

Entendi. Muito Obrigado Mestre.

 

Oi gente, eu sei que o problema foi resolvido, pelo @Rogerio Giannetti Torres  e até melhor do a pergunta original, mas só para esclarecer os incautos que tiveram a mesma duvida: Posições e ordens são coisas diferentes, no caso acredito que o amigo @Cristiano Santos deveria usar posições totais, não Ordens, pois assim que as ordens são acatadas pelo servidor viram posições, basta testar com o codigo:

   Print("Total de ordens ",OrdersTotal());
   Print("Posições totais ",PositionsTotal());

Grande abraço!

Razão: