Olá a todos,
Gostaria de ver com vocês o seguinte:
Fazendo alguns testes as funções OrdersTotal() e PositionsTotal() sempre retornam zero. Alguém já passou por isso?
Para histórico, procure HistoryDealsTotal() e HistoryOrdersTotal()
Testei esses também. Retornou zero. Preciso utilizar o PositionSelect também?
Testei esses também. Retornou zero. Preciso utilizar o PositionSelect também?
Oi Cristiano,
mostra a parte do código que você faz o teste da quantidade ordens pendentes (OrdersTotal() ) e da quantidade de posições em aberto (PositionsTotal());
Oi Cristiano,
mostra a parte do código que você faz o teste da quantidade ordens pendentes (OrdersTotal() ) e da quantidade de posições em aberto (PositionsTotal());
int numOrdensAceitas() { int numOrdens = 0; for(int i = PositionsTotal()-1; i>=0; i--) { string symbol = PositionGetSymbol(i); ulong magic = PositionGetInteger(POSITION_MAGIC); if(symbol == _Symbol && magic==magic_number && OrderGetInteger(ORDER_STATE) == ORDER_STATE_STARTED) { numOrdens++; } } return(numOrdens); }
Oi Cristiano,
bom é o seguinte; se existir uma posição aberta, isto é: uma ordem foi executada e a posição continua aberta o laço do for vai ser executado, não tem erro nenhum no for, porém tem um problema no código, pois o teste do status da ordem está totalmente fora de contexto,
"Não confunda ordens pendentes com posições, que também são exibidos na aba "negócios" da "caixa de ferramentas" do terminal do cliente. Uma ordem é um pedido para conduzir a transação, enquanto que uma posição é um resultado de um ou mais negócios."
Coloca um Print(" Qtd. Posições: ",PositionsTotal()); logo abaixo do for para exibir a quantidade de POSIÇÕES abertas no MT5.
Oi Cristiano,
bom é o seguinte; se existir uma posição aberta, isto é: uma ordem foi executada e a posição continua aberta o laço do for vai ser executado, não tem erro nenhum no for, porém tem um problema no código, pois o teste do status da ordem está totalmente fora de contexto,
"Não confunda ordens pendentes com posições, que também são exibidos na aba "negócios" da "caixa de ferramentas" do terminal do cliente. Uma ordem é um pedido para conduzir a transação, enquanto que uma posição é um resultado de um ou mais negócios."
Coloca um Print(" Qtd. Posições: ",PositionsTotal()); logo abaixo do for para exibir a quantidade de POSIÇÕES abertas no MT5.
Entendi. O que eu quero é limitar o número de ordens executadas no dia. Quando digo executadas me refiro a uma ordem que foi enviada e gerou um negócio.
Entendi. O que eu quero é limitar o número de ordens executadas no dia. Quando digo executadas me refiro a uma ordem que foi enviada e gerou um negócio.
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.
int DoResultadoDia() { 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++) { Ticket = HistoryDealGetTicket(i); if(HistoryDealGetString(Ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_IN ) { acmOrdensExecutadas++; } } return(acmOrdensExecutadas); }
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá a todos,
Gostaria de ver com vocês o seguinte:
Fazendo alguns testes as funções OrdersTotal() e PositionsTotal() sempre retornam zero. Alguém já passou por isso?