Como trabalhar corretamente em MT5 com OrderSend - página 3

 
prostotrader:

Aproveite.

Por que você está enviando um pedido vazio para o servidor? Não parece fazer sentido.
E o que você vai fazer em "//ver cause result.retcode" se você disser TRADE_RETCODE_TIMEOUT ou TRADE_RETCODE_FROZEN ?
 
RickD:
Por que você está enviando um pedido vazio para o servidor? Não parece fazer sentido.
E o que você fará em "//ver resultado.retcode" se você receber, digamos, TRADE_RETCODE_TIMEOUT ou TRADE_RETCODE_FROZEN ?
Vou me enforcar :)
 
Andrey Khatimlianskii:

Eu o apoio com ambas as mãos. É como se a MQ não quisesse assumir a responsabilidade por uma função pronta de enviar um pedido e receber uma resposta.

Minha opção também é com muletas:

Por que não fazer algo semelhante (não para todas as ocasiões, pelo menos para a mais simples!) e passar para a SB?

realmente, de que serve a "execução rápida" da OrderSend(...) se nós na EA temos que esperar por

para atualizações ambientais, neste caso, atualizações do histórico... e inventar diferentes algoritmos de espera...

até que a história seja atualizada, não seguiremos adiante... ou seja, esta velocidade não tem utilidade...

 
Denis Sartakov:

realmente, de que serve uma execução "rápida" do OrderSend(...) se nós na EA temos que esperar por

para uma atualização ambiental, neste caso, uma atualização histórica. e inventar diferentes algoritmos de espera...

até que a história seja atualizada, não seguiremos adiante... ou seja, esta velocidade não tem utilidade...

Provavelmente, é implementado desta forma porque o terminal pode executar OrderSendAsync e OrderSendAsync em paralelo, e a sincronização forçada do histórico após OrderSendAsync afetaria de alguma forma a OrderSendAsync, OnTrade, OnTradeTransaction, tornando-as mais lentas.
 
Andrey Khatimlianskii:
Não estou falando das funções da linguagem embutida, estou falando da biblioteca padrão.
Estou falando especificamente das funções da linguagem embutida, que a OrderSend poderia esperar por uma atualização interna do histórico comercial, mas não o faz. :)
Você diz que tem uma muleta, mas que não é tão confiável. Dê-me um exemplo de uma boa muleta confiável.
Estou dizendo que talvez você possa passar sem muletas. Se os desenvolvedores mudassem o comportamento da OrderSend. Faça-o como no MT4.
Ou - ou uma opção alternativa. Adicione a função OrderSendMT4Style. :)
 

Uma sobrecarga muito simples de OrderSend é escrita independentemente: até que a OnTrade devolva uma resposta, todos os OrderSends subseqüentes retornam falsos. Assim que a resposta é recebida - o falso forçado é cancelado.

Esta é exatamente a solução que precisamos acrescentar à SB. E devemos usá-la nós mesmos.

Em SB, adicionarbool CTrade::IsHistoryLoad( const string Symb = NULL ) pelo mesmo princípio.

E sem muletas! Ambas as funções podem ser facilmente escritas por você mesmo.

Se você quiser obter a funcionalidade completa (não para SB), ligue para OnTick e OnTimer independentemente na OnTrade na chegada da sincronização correspondente.

 

Que bando de muletas eles escreveram... Estudar o comportamento da função OnTradeTransaction() nula

/*********************TradeTransaction function*********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
{
      if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
       {
        if(!PositionSelectByTicket(trans.position))
         {
          //Print("********* закрылась позиция ", trans.position);
           closedPosition(trans);
         }
        if(PositionSelectByTicket(trans.position))
         {
          //Print("********* отккрылась позиция ", ", ", EnumToString(trans.deal_type), ", ", trans.position);
           openedPosition(trans);
         }
       }
       
}/*******************************************************************/

Também lidar com erros de abertura de posições e pedidos.

 
Alexey Viktorov:

Que bando de muletas eles escreveram... Estudar o comportamento da função OnTradeTransaction() nula

Também lidar com erros de abertura de posições e pedidos.

Você leu o assunto diagonalmente.
 
fxsaber:
Você leu o tópico diagonalmente.

Não, apenas verticalmente. Apenas a primeira letra de cada linha.

 
Andrey Khatimlianskii:

Como funcionará esta simples sobrecarga com 2 EAs no mesmo instrumento?

Infelizmente, somente através de uma muleta - uma variável global do terminal.