Bibliotecas: MT4Orders - página 72

 
fxsaber #:

Se for o caso de OrderSend, haverá um registro detalhado se houver falha. Se o OrderSend não foi executado, você deve procurar o motivo em seu código.


Veja qual é o valor de ACCOUNT_LIMIT_ORDERS.

Há muitos :-) 10k

e elas são abertas manualmente.

Até agora, parece que, com o limite de 54 posições abertas (em termos de mt5) (ou especificamente nele), o OrderSelect começa a falhar.

   // contar o volume desbloqueado acima e abaixo do preço especificado
   // 
   double volumes[2];
   for(int pos=OrdersTotal()-1;pos>=0;pos--) {
      if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {
         Sleep(50);
         if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {
            PrintFormat("OrderSelect() failed: Pool TRADES not synced");
            continue;
         }
      }

Um pequeno Sleep na repetição é suficiente para fazer o preço "fugir".

Esses palavrões estão presentes no registro. A situação será repetida - mostrarei o registro. Ficará um pouco mais claro onde procurar e no que prestar atenção.

---
acontece em um momento muito ativo do mercado, os sinais são bem-sucedidos - há ticks ativos e, ao mesmo tempo, cópias do robô são abertas em outros instrumentos.

 
Maxim Kuznetsov #:

Até o momento, parece que, com um limite de 54 posições abertas (em termos de mt5) (ou especificamente sobre ele), o OrderSelect começa a falhar

Imprima pos e OrdersTotal() em PrintFormat. Ao mesmo tempo, registre o mesmo estado BEFORE Sleep.


Em uma conta de demonstração, tente reproduzir (de qualquer maneira artificial) essa atividade para obter OrderSelect == false.

Se conseguir, você precisará de todos os dados para a reprodução.

 
fxsaber #:

Imprimir pos e OrdersTotal() em PrintFormat. Ao mesmo tempo, registre o mesmo estado ANTES de dormir.


Em uma conta de demonstração, tente reproduzir (de qualquer maneira artificial) essa atividade para obter OrderSelect == false.

Se conseguir, você precisará de todos os dados para a reprodução.

Ainda não aconteceu exatamente a mesma coisa - afinal, muitas posições são raras.

Mas hoje, novamente, foram mais de 55 e o mesmo erro.


Conhecendo a lógica de funcionamento do Expert Advisor, foi assim: o robô recebeu uma resposta incorreta ao OrderSend - tudo foi executado, mas a função retornou um erro. Então, o robô repetiu assim que o preço retornou e obteve duas negociações pelo mesmo preço (na tela - uma delas já está fechada com as mãos)
Novamente ordens acima de 55 e o instrumento não é o mais popular (na tela CADCHF)
----
Vou reconstruir com novas ordens mt4 atualizadas ao máximo e observar mais de perto.

 
Maxim Kuznetsov #:

a mesma coisa ainda não aconteceu - afinal, muitas posições são raras.

mas hoje ele passou de 55 novamente e o mesmo erro.


Conhecendo a lógica de funcionamento do Expert Advisor, foi assim: o robô recebeu uma resposta incorreta ao OrderSend - tudo foi executado, mas a função retornou um erro. Então, o robô repetiu assim que o preço retornou e obteve duas negociações com o mesmo preço (na tela - uma delas já está fechada com as mãos)
Novamente ordens acima de 55 e o instrumento não é o mais popular (na tela CADCHF)
----
Vou reconstruir com novas ordens mt4 atualizadas ao máximo e observar mais de perto.

Aconteceu a mesma coisa na semana passada, foi ao contrário.

Naquele dia, a internet estava muito ruim, o ping estava alto.

Acho que esse erro é causado por uma longa conexão servidor->terminal->servidor. Mas posso estar errado.

Não vi nada no registro

 
Vitaly Muzichenko #:

Também aconteceu o mesmo na semana passada, houve uma reação negativa.

Permissão para esperar até 10 segundos pelo resultado.

MT4ORDERS::OrderSend_MaxPause = 10000000; // tempo máximo para sincronização em µs.
 
fxsaber #:

Aguarde até 10 segundos para ver o resultado.

Legal!

 
fxsaber #:

Aguarde até 10 segundos para ver o resultado.

Vou tentar, mas isso acontece tão raramente que não tenho nada a informar.

 
prostotrader #:

Legal!

O mais legal é que o Terminal 5 está se comunicando com o servidor dessa forma.

 
Vitaly Muzichenko #:

O que é legal é que o Terminal 5 se comunica com o servidor dessa forma.

Tenho uma espera máxima, se não houver resposta em OnTradeTransaction, de 250 MS.

Em 10 segundos, você pode drenar todo o seu depósito.

 
prostotrader #:

Tenho uma espera máxima, se não houver resposta em OnTradeTransaction, de 250 MCs

E o que você faz depois desse tempo se não houver resposta?