Resposta

Tenho muitos terminais e EAs funcionando no meu VPS, mas às vezes o SL+TP não é definido no pedido... Por quê?

24 respostas

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #114929

Tenho muitos terminais e EAs funcionando no meu VPS, mas às vezes o SL+TP não é definido no pedido... Por quê?

 

É por causa do atraso do meu VPS ou há algo errado com o código mql4? meu VPS está usando muito a CPU e a memória regularmente por causa dos muitos terminais e EAs em funcionamento,

talvez por causa disso...

 

é muito raro, mas já aconteceu comigo pela terceira vez...

 

 

Isso também aconteceu com alguém aqui? obrigado.

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #136121

Não, estou recebendo o erro 146 de "O contexto comercial está ocupado", nada mais..,

 

Ontem, modifiquei o código mql4 e adicionei o comando para aguardar se o contexto estiver ocupado, mas ainda estou tendo o mesmo erro. Aliás, esse erro só acontece nas contas DEMO, mas na conta real não estou recebendo nenhum erro..,

O que poderia ser?

0

mikeyc

Cliente, bbp_participant, comunidade, 877 respostas.

Perfil da visita

8 anos atrás #136122

O contexto de negociação ocupado é um terminal sobrecarregado ou o corretor que está demorando muito para processar as ordens.

 

Se isso continuar ocorrendo após a reinicialização, eu procuraria outro corretor.

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #136124

Tentei isso também com os mesmos EAs no servidor Global Prime Demo, a mesma coisa..,

Mas eu já modifiquei o código mql4 novamente, então verei o que acontecerá em seguida,

Vou atualizar... e se eu consertar, publicarei a correção,

 

Obrigado por sua participação.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #136155

Essa é simples: NUNCA, NUNCA, execute mais de 8 EAs por instância do MT4 se quiser uma execução de ordens confiável (o que você provavelmente deseja se estiver negociando com dinheiro real)! Essa é uma das muitas limitações do terminal MT4 (há alguns anos, era apenas 1 thread por instância do MT4!) e não tem nada a ver com a corretora (@mikeyc: se a corretora estiver sobrecarregada, você não receberá a mensagem "trade context is busy" (o contexto da negociação está ocupado), mas sim "trade timeout" (tempo limite da negociação), embora eu ainda não tenha visto nenhuma das corretoras sérias apresentando esse erro).

Isso ocorre simplesmente porque só podem ser processadas 8 operações de ordem de uma vez em cada terminal MT4 (abrir uma nova ordem, modificar uma existente, fechar uma existente) e você não pode fazer nada a respeito disso, pois o terminal MT4 foi projetado dessa forma.

 

Certamente há "hacks" para contornar isso e o EA poderia simplesmente tentar modificar novamente a ordem se ela falhou antes por causa de um contexto de negociação ocupado ou o EA poderia verificar se o contexto de negociação está livre ou não e esperar se não estiver antes de passar seu próximo comando para fazer algo com uma ordem. Mas essas soluções não são muito seguras nem aceitáveis em negociações ao vivo, pois sempre atrasam as coisas de uma forma ou de outra. Se o EA tentar novamente após um erro, o preço já pode ter se deslocado muito. Especialmente durante as notícias, sua ordem pode nunca obter o SL necessário porque ele já se moveu além/acima dele e simplesmente não pode mais ser definido para o valor desejado. O mesmo acontece com a espera para que o contexto de negociação fique livre, o que também custa muito tempo e é altamente inseguro por causa disso.

 

A única solução se você leva a sério a negociação em tempo real: execute apenas 8 EAs por instância do MT4! É muito fácil e não há como contornar isso com nenhum tipo de hacks se você quiser uma execução/modificação de ordens confiável e rápida o tempo todo. Se o seu VPS for rápido o suficiente, como você disse, isso não será problema. Pessoalmente, tenho 7 terminais MT4 em execução, cada um com 8 EAs (nem todos são da SQ). Basta copiar sua pasta MT4 existente para uma nova pasta e pronto, você terá sua próxima instância. A única coisa que você precisa ter em mente é outra limitação definida pelo terminal MT4 (sim, de novo!): você só pode executar 32 instâncias do MT4 por máquina. A 33 simplesmente não será iniciada, mesmo que você tenha copiado para outro diretório novamente. A MQ introduziu isso após a arbitragem de latência da BTN Lightning, em que eles estavam "roubando" esses pobres corretores de MT4 em grande escala, executando até 200 instâncias de MT4 em mega-servidores. Eu já tentei quebrar essa limitação, mas não é fácil, pois o próprio MT4 está envolvido em uma máquina virtual por meio do método de proteção contra cópia Themida. Concluindo: o máximo de EAs que você poderá executar de forma CONFIÁVEL sem obter outro VPS é 32 x 8 = 256 EAs.

 

P.S.: Se quiser a solução não confiável (esperar que o contexto de negociação fique livre), use o meu código (também testei isso ao vivo e executei 50 EAs em uma instância do MT4 com ele, sem que nenhuma ordem tenha gerado qualquer erro sobre o contexto de negociação não estar livre):

int CheckTradeContext()
{

uint WaitLimitTradeContext = 120; //segundos

    se (!IsTesting() && !IsTradeAllowed() && !IsStopped())
    {
        int ticks = GetTickCount();
        Imprimir ("O contexto de negociação está ocupado, aguardando até que fique livre...");
        while (true)
        {
            RefreshRates();
            Imprimir ("Aguardando que o contexto de negociação fique livre...");
            se (IsStopped())
            {
                Imprimir ("O especialista foi encerrado pelo usuário!");
                return(-1);
            }
            Se (GetTickCount() - ticks > 1000 * WaitLimitTradeContext)
            {
                Print("The Maximum Waiting Limit Of " + WaitLimitTradeContext + " Seconds Was Exceeded!");
                return(-2);
            }
            se (IsTradeAllowed())
            {
                Print("O contexto de negociação se tornou livre!");
                return(0);
            }
            Sleep(50);
        }
    }
    //Print("O contexto de negociação é gratuito!");

    return(1);
}

Em seguida, antes de qualquer ordem de envio/modificação/fechamento, coloque: if (CheckTradeContext() >= 0) ....


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #136171

Obrigado, geektrader,

No entanto, eu já criei uma função para isso:

void CheckIfBusy()
{
  se(!IsTesting())
  while(IsTradeContextBusy()){//Print("#ERROR! Order ("+OrderType()+") - Delayed.");
  Sleep(50);RefreshRates();}
}

mas o seu é mais sofisticado com um cronômetro, já editei todos os meus EAs com essa sua nova função :),

Obrigado por seu tempo para escrever esse post enorme também,

sobre a coisa de 8 tópicos e o link da atualização oficial de metaquotes: https://forum.mql4.com/54431

portanto, mais uma vez, obrigado por esclarecer e por adicionar mais informações sobre esse assunto!

Portanto, pelo que entendi, não há problema em executar várias instâncias do MT4 na mesma conta de negociação..., basta definir os MagicNumbers de forma diferente entre todos os EAs,

E se os EAs forem muito ativos até certo ponto, devo então dividir a carteira não em 8,8,8,8,8, mas em 4,4,4,4 EAs na mesma instância?

Obrigado, aguardarei sua resposta, amigo.

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #136179

É bom saber que você está a caminho de um contexto que não exige negociações em massa:) É muito fácil, você não precisa fazer nada de especial, basta usar 8 EAs por instância do MT4, configurá-los da mesma forma como se estivessem em um terminal (número mágico diferente etc., é claro). Você pode executar um número ilimitado de conexões com sua corretora para a mesma conta, isso não é problema (pelo menos 32 conexões/terminais para a mesma conta são possíveis, foi o que testei até agora). Se eles forem muito ativos, não importa, cada terminal MT4 pode fazer 8 operações de negociação em paralelo, não importa o quanto os EAs sejam ativos, contanto que você não faça mais de 8 solicitações de uma vez por terminal, isso funcionará muito bem, mesmo que cada EA envie um comando a cada 1ms:)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #136180

É bom saber que você está a caminho de um contexto que não exige negociações em massa:) É muito fácil, você não precisa fazer nada de especial, basta usar 8 EAs por instância do MT4, configurá-los da mesma forma como se estivessem em um terminal (número mágico diferente etc., é claro). Você pode executar um número ilimitado de conexões com sua corretora para a mesma conta, isso não é problema (pelo menos 32 conexões/terminais para a mesma conta são possíveis, foi o que testei até agora). Se eles forem muito ativos, não importa, cada terminal MT4 pode fazer 8 operações de negociação em paralelo, não importa o quanto os EAs sejam ativos, contanto que você não faça mais de 8 solicitações de uma vez por terminal, isso funcionará muito bem, mesmo que cada EA envie um comando a cada 1ms:)

 

Mais uma vez, obrigado, geektrader :),

Tenho 29 EAs, então os distribuí em 5 MT4s, 6x6x6x6x5, eles são EAs ativos e negociam diariamente, então, por precaução, coloquei apenas 6 por terminal,

 

Obrigado, amigo, essa é uma informação muito importante. Eu não sabia dessa questão dos 8 fios, pensei que fosse apenas 1 por terminal, hehe.

Tenha uma ótima semana e muitos pips verdes para você! B)

0

geektrader

Customer, bbp_participant, community, 522 replies.

Perfil da visita

8 anos atrás #136181

Sim, entendo, meus EAs são negociados a cada 15 minutos (modificando ordens pendentes - 8 de uma vez a cada vez). Não há problema algum em usar 8 por terminal, mesmo que eles sejam "scalpers malucos", já que cada EA é processado em série apenas na linguagem MQL4, com 8 EAs você nunca terá um contexto de negociação ocupado - não há necessidade de desperdiçar recursos. Você pode usar com segurança 8 por terminal.

 

Sim, no passado, era apenas uma operação por terminal, mas havia muitos terminais em execução naquela época. O MT4 é uma porcaria!

 

Pips verdes para você também:)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Visualizando 8 respostas - 16 até 23 (de um total de 23)

1 2