Pedido inválido - apenas começou e não se consegue perceber... - página 8

 
papaklass:

Tenho-o implementado da mesma forma, apenas através de funções.


Vejo. O seu código é semelhante ao do MK - entre OrderCheck e OrderSend existe uma camada de manipulação de erros pelo utilizador.

 
papaklass:

Tenho-o implementado desta forma, apenas através de funções.

OrderCheck está implícito e necessariamente verificado dentro de OrderSend.

Assim, se a encomenda não for preenchida correctamente, a resposta será devolvida imediatamente sem a enviar de volta para o servidor.

 
papaklass:

Veja o que o manual diz sobre isto:

Primeira selecção: vemos que a função é para transacções comerciais e nenhuma menção de cheques.

Bem, se eu disser que há verificações, então é verdade.

Nenhuma encomenda sai do terminal sem verificações rigorosas.

Segundo destaque: vemos que as verificações são efectuadas no servidor e os programadores recomendam a utilização de OrderCheck() para verificar o pedido antes de o enviar para o servidor. Mais uma vez, não há menção de que OrderSend() efectua qualquer validação.

Recomendamos especificamente que os comerciantes tenham a oportunidade de descobrir antecipadamente se a encomenda é preenchida correctamente, e tomar as medidas apropriadas.

Quem quiser - pode pré-verificar. Quem não o desejar, verificaremos e devolveremos respostas semelhantes para eles de qualquer forma.

O único local onde é mencionado que a verificação antes do envio do pedido é "Em caso de verificação básica bem sucedida das estruturas (verificação pontual) ....". Mas a verificação de indicações e verificação dos valores dos campos da estrutura de pedidos para erros não é a mesma coisa. E a recomendação dos criadores de utilizar a função OrderCheck() é uma prova indirecta de que OrderSend() não efectua uma verdadeira verificação de erros antes de enviar um pedido ao servidor. Caso contrário, porque devemos fazer "oiled": OrderSend() verifica primeiro, e depois a mesma verificação deve ser efectuada por OrderCheck() novamente?

Assim, a partir da referência segue-se sem ambiguidade que a verificação é realizada apenas no servidor!

Ninguém perderá um fluxo errado ou excessivo de pedidos para o servidor.

A lógica básica é suficiente para compreender isto. E vamos expandir a documentação.

 
sergeev:

Não o tem. Todos os erros são tratados pela lógica empresarial.

Eu tenho um. A lógica empresarial trata de eventos relacionados com a lógica empresarial (por exemplo, falha na colocação de encomendas), mas todo o resto (por exemplo, atraso na resposta do servidor) - um modelo universal, com base no qual qualquer perito pode ser implementado.

Mas o MT5 é muitas vezes mais complicado em termos de tratamento de códigos de retorno + assíncrono.

É disso que estamos a falar, como já escrevi anteriormente, e não há nenhuma informação sobre este assunto. E há anos que os MKs tentam de todas as formas dissociar-se da sua provisão. Isto é o que escrevi - os revendedores beneficiam de um produto onde há pontos que levam a fugas, ou seja, para a MQ é um factor de aumento das vendas. Infelizmente, encontramo-nos num mercado onde os concorrentes (nós e MQ), não os companheiros.

Está a pedir o impossível de um invólucro. A biblioteca padrão não é lógica empresarial. É um invólucro "sobre" as funções do terminal. Um invólucro sobre o recheio do rebuçado.

Então, há pouco sentido numa tal estruturação.

Mas o invólucro não pode garantir nada, pois é você quem age como fiador. A sua lógica empresarial. :)

Tal como a função Imprimir não pode garantir espaço livre no disco. E erros de registo. É necessário utilizar outras funções para o tratamento de erros e elas são específicas para cada caso.

Nem mesmo o invólucro certo pode garantir tudo, mas pode muitas coisas relacionadas com funções relacionadas.

-Alexey-, falemos de falhas específicas e você dá voz a falhas específicas que gostaria de corrigir.

Já foi escrito mais do que uma vez sobre assuntos específicos. Se a MQ não for capaz de fornecer uma solução pronta, deixe-os pelo menos fazer um manual sobre manipulação de erros e códigos de retorno. Desbloqueado de todas as maneiras possíveis. Na documentação para 4 isto estava em parte presente (por exemplo, esperar 30 segundos em tal caso), em parte os utilizadores identificaram por experiência o tratamento de situações não documentadas. Para 5 não há absolutamente nada. E como existe, ninguém o utilizará.

Bem, se é assim que MQ responde porque a infra-estrutura comercial simplesmente criada não o permite em princípio, então o que posso dizer - é um fracasso completo de todo o projecto MT5, dado que há uma massa incrível de outros cardumes também.

Se quiser, pode percorrer cada código de retorno e ver as principais situações possíveis.

Fá-lo-ei de bom grado com um Expert Advisor MQL5 tão experiente como você. Aguardaremos pelo tempo e necessidade. Graças a Deus ainda tenho 4, o que é muito mais confortável em muitos aspectos.

 

-Alexey-:

uma solução já feita, pelo menos um guia para o tratamento de erros e códigos de retorno


que código causa problemas de processamento?


Código

Identificador

Descrição

10004

TRADE_RETCODE_REQUOTE

Requote

10006

TRADE_RETCODE_REJECT

Pedido rejeitado

10007

TRADE_RETCODE_CANCEL

Pedido cancelado pelo comerciante

10008

TRADE_RETCODE_PLACED

Encomenda efectuada

10009

TRADE_RETCODE_DONE

Ordem executada

10010

TRADE_RETCODE_DONE_PARTIAL

Requisição parcialmente executada

10011

TRADE_RETCODE_ERROR

Pedido de erro de processamento

10012

TRADE_RETCODE_TIMEOUT

Pedido cancelado devido à expiração do tempo

10013

TRADE_RETCODE_INVALID

Pedido incorrecto

10014

TRADE_RETCODE_INVALID_VOLUME_INVALID

Volume incorrecto no pedido

10015

TRADE_RETCODE_INVALID_PRICE

Preço incorrecto no pedido

10016

TRADE_RETCODE_INVALID_STOPS

Paragens incorrectas no pedido

10017

TRADE_RETCODE_TRADE_DISABLED

Comércio proibido

10018

TRADE_RETCODE_MARKET_CLOSED

O mercado está fechado

10019

TRADE_RETCODE_NO_MONEY

Insuficiência de fundos para a execução do pedido

10020

TROCA_DE_PREÇO_DE_CÓDIGO_PREÇO

Preços alterados

10021

TRADE_RETCODE_PRICE_OFF

Sem orçamento para processar o pedido

10022

TRADE_RETCODE_INVALID_EXPIRATION

Data de expiração inválida no pedido

10023

TRADE_RETCODE_ORDER_CHANGE

Estado do pedido alterado

10024

TRADE_RETCODE_TOO_MANY_REQUESTS

Pedidos demasiado frequentes

10025

TRADE_RETCODE_NO_CHANGES

Nenhuma alteração no pedido

10026

TRADE_RETCODE_SERVER_DISABLES_AT

Auto-trading negado pelo servidor

10027

TRADE_RETCODE_CLIENT_DISABLES_AT

Autotrading proibido pelo terminal do cliente

10028

TRADE_RETCODE_LOCKED

Pedido bloqueado para processamento

10029

TRADE_RETCODE_FROZEN

Ordem ou posição congelada

10030

TRADE_RETCODE_INVALID_FILL

O tipo de ordem de saldo não suportado é indicado

10031

TRADE_RETCODE_CONNECTION

Sem ligação ao servidor comercial

10032

SÓ_REALIDADE_COMERCIAL

A operação é permitida apenas para contas reais

10033

TRADE_RETCODE_LIMIT_ORDERS

Limite do número de ordens pendentes alcançadas

10034

TRADE_RETCODE_LIMIT_VOLUME_LIMIT_VOLUME ALCANÇADO

Atingido o limite de volume de encomendas e posições para este símbolo


Actualização: 2012.11.14
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Por exemplo, 10004. Onde está escrito o que fazer? E havia pelo menos algo na documentação quádrupla:

Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.

 
sergeev:

que código levanta questões de processamento?

10006 (que razão é rejeitada, que outras razões poderiam existir que não estão indicadas nos outros códigos?)

10011, 10013, 10028

 
A100:

10006 (que razão é rejeitada, que outras razões poderiam existir que não estão indicadas nos outros códigos?)

10011, 10013, 10028

Apoio a pergunta. MQ, um forte pedido para si. Por favor comente estes 4 códigos com o maior detalhe possível.
 

Colegas, já fartos de procurar a verdade. O tema é semelhante ao que eu preciso, por isso estou a escrever aqui, por favor ajudem-me!

Coloco a encomenda com execução imediata, enquanto está pendurada, verifico o preço a cada tique e, se for possível, rastreio-a. Mas por alguma razão, recebo sempre o erro 10013. Procurei em todos os fóruns possíveis e acrescentei quase todas as linhas da ordem inicial (embora a descrição diga que apenas o símbolo, acção e sl e tp são suficientes para este tipo de acção. Nada funciona! Aqui está o código.

// проверяем условие на открытую сделку
if (f_IsDealOpened()>0)
{  
   // здесь надо написать условия для коррекции ордеров
 MqlTradeRequest chrequest={0};
    if (1)//(is_Str2)
   {
    PositionSelect(NULL);
    if(PositionGetInteger(POSITION_TYPE)==0)
    {
        chrequest.symbol=PositionGetSymbol(0);
        chrequest.order=PositionGetInteger(POSITION_IDENTIFIER);
        chrequest.volume=PositionGetDouble(POSITION_VOLUME);
        chrequest.action=TRADE_ACTION_SLTP;
        chrequest.sl = latest_price.bid - TrailingStop;
        chrequest.tp = PositionGetDouble(POSITION_TP);

     }
     else
     {
        chrequest.symbol=PositionGetSymbol(0);
        chrequest.order=PositionGetInteger(POSITION_IDENTIFIER);
        chrequest.volume=PositionGetDouble(POSITION_VOLUME);
        chrequest.action=TRADE_ACTION_SLTP;
        chrequest.sl = latest_price.ask + TrailingStop;
        chrequest.tp = PositionGetDouble(POSITION_TP);
        Alert(PositionSelect(NULL));
     
     }    
    }
     MqlTradeResult chresult;
     if (OrderSend(chrequest,chresult)==0) 
         {
             Alert("Ошибка расчета функции OrderSend!");
             return;
         }    
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер по изменению SL успешно помещен, тикет ордера #: ",mresult.order,"!!");
            open_order_ticket = mresult.order;
            open_order_price = mresult.price;
            return;
           }
         else
           {
            Alert("Запрос на измнение ордера не выполнен - код ошибки: ",GetLastError());
            return;
           }
   
   
   return;
}
Razão: