O grande e terrível MT4 para sempre (ou como fazer uma transição estratégica) - página 19

 
fxsaber:

Os termos MT4 e MT5 são os mesmos.

Há tantos anos que todos sabem do remanso, chegando a... Dormir. Porque é MUITO complicado. Muitas das características da API comercial que foram trazidas à tona no fórum, os desenvolvedores não estão cientes ou não comentaram.


Ninguém está criticando o MT5. Eu lhes mostrei por exemplos alguns problemas que ocorrem ao resolver as tarefas básicas.

Por que eles são os mesmos? Você ainda não respondeu à minha pergunta.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

O Grande e Horrível MT4 Para Sempre (ou Como Determinar Eficazmente uma Estratégia Migratória)

Alexey Viktorov, 2021.05.09 09 09:15

... E se eu me conectar à minha conta a partir de outro computador e fizer um par de pedidos ... o que a MQL4 irá abrir?

Ninguém está criticando o MT5. Eu mostrei alguns problemas na solução de problemas elementares com exemplos.

Você só precisa processar corretamente o resultado da função OrderSend() e não pode fugir da simplicidade do mql4. Você tem seu próprio objetivo, pegar microssegundos, não negociar... Um DT tem problemas e você passa esses problemas como bugs de MT. Mostrar a inversão de posição na conta MQ e então os desenvolvedores prestarão atenção a ela. Eu corri seu código na demonstração do Robo e não consegui ver nenhum retrocesso.

Alguns de seus relatos de erros são realmente dignos de respeito, mas alguns... desculpe, que tolice, estou sem palavras.

Isso é tudo... Feliz Dia da Vitória. Paz. Trabalho. Maio.

 
Alexey Viktorov:

Por que eles são os mesmos? Você ainda não respondeu à pergunta.

Mais uma vez, as condições são as mesmas para o MT4/5. Você precisa ter 100 posições abertas em uma conta vazia no final da execução do roteiro. É permitido fechar algumas posições em qualquer terminal durante o tempo de execução do roteiro. Esta "intervenção" é necessária apenas para evitar decisões bobas.

for (int i = 0; i < 100; i += OrderSend(Request, Result))
  ;

O resultado da função OrderSend() deve ser processado corretamente, mas não se pode fugir da simplicidade do mql4. Você tem seu próprio objetivo, pegar microssegundos, não negociar... Uma dtz tem problemas e você passa esses problemas como bugs de MT. Mostrar a inversão de posição na conta MQ e então os desenvolvedores prestarão atenção a ela. Eu corri seu código na demonstração do Robo e não consegui ver nenhum retrocesso.

Alguns de seus relatos de erros são realmente dignos de respeito, mas alguns... desculpe, tais tolices, faltam-lhe palavras decentes.

Só porque você não vê problemas, não significa que não haja nenhum. A demonstração do MQ é um lugar nojento, em termos de depuração. Há um tipo de execução em que a OrderSend retorna verdadeiro para ordens de mercado somente quando uma posição é aberta. Na realidade, não há nada parecido nas contas da ECN. verdade - a ordem de mercado é aceita. O que acontece a seguir é importante para monitorar. Somente os CDs de cozinha utilizam um esquema de execução diferente (como no MQ-Demo).

Isso é tudo... Feliz Dia da Vitória. Paz. Trabalho. Maio.

Da mesma forma.

 
fxsaber:

Preciso escrever um roteiro em um MT5 que abra 100 posições em uma conta vazia.


Na MT4, a situação foi resolvida desta forma.

void OnStart()
{
  while (OrdersTotal() < 100)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);
    
  Print(OrdersTotal());
}

Quem tem uma solução no MT5?

Eu recebi o código mais curto que já escrevi no MT5:

MqlTradeRequest BuyRequest = {0};
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   static bool run = false;
   if(run) return;
   BuyRequest.action = TRADE_ACTION_DEAL;
   BuyRequest.type = ORDER_TYPE_BUY;
   BuyRequest.symbol = _Symbol;
   BuyRequest.volume = 0.1;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   BuyRequest.type_filling = GetFilling();
   MqlTradeResult result;
   run = OrderSend(BuyRequest, result);
}
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
{
   MqlTradeResult result;
   while(PositionsTotal() < 10 &&
         SymbolInfoDouble(_Symbol, SYMBOL_ASK, BuyRequest.price) &&
         OrderSend(BuyRequest, result))
   {}
}
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling(const uint Type = ORDER_FILLING_FOK)
{
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = (ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE);
   const int FillingMode = (int)::SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE);

   return((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN) || ((FillingMode & (Type + 1)) != Type + 1)) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK)) :
          (ENUM_ORDER_TYPE_FILLING)Type);
}
//+------------------------------------------------------------------+

semGetFilling() - não funciona em criptografia(((

Mas mesmo com este código 11 posições abertas:


 
Igor Makanu:

o código mais curto que eu poderia escrever no MT5:

Eu poderia fazer SB por brevidade.

Mas mesmo neste código eu tenho 11 posições em aberto:

Porque a lógica no código é esta.

 
fxsaber:

Você pode usar a SB para a brevidade

Porque a lógica no código é esta.

o problema não é resolvido com PositionsTotal() mesmo assim:

void OnTrade()
{
   if(PositionsTotal() >= 10) return;
   MqlTradeResult result;
   BuyRequest.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   OrderSend(BuyRequest, result);
}

abre quando há 10 posições, quando há até 13

a única maneira de resolvê-lo é memorizar o pedido de ingressos do resultado da MqlTradeResult e esperar pelo aparecimento de uma posição aberta; então o número especificado de posições será aberto

 
Igor Makanu:

PositionsTotal() não é resolvido nem mesmo desta maneira:

abre quando há 10 posições, quando há até 13

não há muita escolha, a não ser lembrar o resultado do pedido de bilhetes da MqlTradeResult e esperar pelo aparecimento de uma posição aberta. Então o número especificado de posições será aberto com certeza

Então espere!!!! Porque o mql4 está esperando, e você não se ressente disso. E na MQL5 você decidiu que pode simplesmente enviar um pedido e assumir que ele tem que ser executado............

 
Igor Makanu:

PositionsTotal() não é resolvido nem mesmo desta maneira:

abre quando há 10 posições, quando há até 13

Não há muita escolha, mas para lembrar o resultado do pedido de bilhetes da MqlTradeResult e esperar pelo aparecimento de uma posição aberta, então o número especificado de posições será aberto com certeza.

Observe que este não é um roteiro/serviço, mas um EA. Mas mesmo com uma EA seria necessário muito esforço para resolver uma tarefa tão simples de duas linhas.

 
Alexey Viktorov:

Então espere!!! Afinal, o mql4 espera e você não se ressente com isso. E na MQL5 você decidiu que pode simplesmente enviar um pedido e assumir que ele tem que ser executado............

Várias pessoas afirmaram aqui que não há dificuldades. No entanto, eles não forneceram uma solução.

 
fxsaber:

Várias pessoas expressaram aqui que não há dificuldades. No entanto, eles não forneceram uma solução.

Eu também não vou fornecer um, pela razão mais simples. Eu não quero ensinar ...codificadores (não você), mas se necessário eu resolverei o problema sem pensar muito. E todos pela mesma razão há muito tempo os códigos têm aparecido na CodeBase exclusivamente da Tumblr. Todos os outros são silenciosos...

 
Alexey Viktorov:

Eu também não vou fornecer, pela razão mais simples. Não quero ensinar ...codificadores (não lhe diz respeito), mas se necessário, resolverei o problema sem pensar muito. E todos pela mesma razão, durante muito tempo, os códigos vieram para CodeBase exclusivamente da Tumblr. Todo o resto é silêncio...

Falar com a língua não é como falar com um saco. Você deveria me ensinar. Eu, por favor.

Há um problema, e não é só neste corretor.
E o problema não está em esperar pela execução de uma ordem específica (essa é outra questão), mas no fato de que enquanto a ordem está sendo executada, ela está desaparecendo de todas as listas (aberta, fechada, comércios, posições) por um tempo.

Poderíamos usar outra muleta, é claro. Mas nós queremos encontrar uma solução humana. E é nisso que o fxsaber está trabalhando publicamente, ouvindo o latido de quem deseja bem passar.

Razão: