Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 320
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Caros programadores, por favor aconselhem quem sabe!
Tenho um consultor especializado para o MT4 que fecha um monte de encomendas (500-2500) ao atingir um lucro total. Como reparei, fecha as encomendas uma a uma, ordenando-as de acordo com a magia - de menor a maior.
Então, eis a questão: é possível acrescentar ao seu Consultor Especialista a função de lançar um guião no fecho da encomenda, que fecharia as encomendas, mas ordenando-as por mágico a partir do fim - do maior para o mais pequeno?
Irá esta ideia acelerar a velocidade de fecho das encomendas?
Em algum lugar foi-me dito que até 4 pedidos podem ser enviados simultaneamente para o servidor.Depois é preciso olhar para o código... talvez seja só isso... há uma linha como essa nas impressões digitais?
Caros programadores, por favor aconselhem quem sabe!
Tenho um consultor especializado para o MT4 que fecha um monte de encomendas (500-2500) ao atingir um lucro total. Como reparei, fecha as encomendas uma a uma, ordenando-as de acordo com a magia - de menor a maior.
Então, a questão é se é possível acrescentar ao Expert Advisor uma função para lançar um guião no fecho de encomendas que fecha as encomendas mas as ordena por mágico a partir do fim - do maior para o mais pequeno?
E esta ideia irá acelerar a velocidade de fecho das encomendas?
Em algum lugar foi-me dito que até 4 pedidos podem ser enviados simultaneamente para o servidor.Não é possível executar o guião a partir do Expert Advisor. Pode realmente enviar para o servidor vários pedidos de diferentes EAs ao mesmo tempo. Se sincronizar vários EAs, poderá de facto obter algum ganho de desempenho.
Mas se eu fosse a si, não batia com a cabeça contra a porta aberta. Prefiro mudar para MetaTrader5. A função OrderSendAsync permite fechar posições em lotes a uma velocidade incrível de 100-200 pedidos em poucos segundos:
Fórum sobre Comércio, Sistemas de Comércio Automatizados e Testes de Estratégia
Desenvolvedores! Erro 10024 (Demasiados pedidos)
C-4, 2014.11.07 15:55
De qualquer modo, resumindo a minha pequena pesquisa.
Consegui fazer 50 pedidos em 50 milisegundos; 100 pedidos em 180msec; 200 em 2100msec; 500 pedidos em 9000msec; 1000 pedidos em 23000msec. (o tempo é uma média). Isto é, quanto mais tempo for preciso para empurrar, mais tempo é necessário. Pode ser uma questão de codificação analfabeta.
O tempo real de execução de um pacote de pedidos é, evidentemente, mais longo. Este tempo parece ser igual ao pior cenário - tempo de envio do pedido + tempo de execução do pedido. Em qualquer caso, no limite tende ao tempo médio de execução da ordem pela bolsa + tempo gasto em comunicação com o servidor da bolsa. Se o número de pedidos for inferior a 60, não precisamos de comunicar com o servidor comercial, enviar todos os pedidos e esperar pelo seu cumprimento. O próprio envio leva 40-60 milissegundos. Se houver mais pedidos, é mais difícil. Tem de esperar pela resposta do servidor, ligar novamente o envio de ordens, esperar pela rejeição, etc. Portanto, há esta troca de mensagens através da rede. Quando há muitos pedidos, a piscina é libertada gradualmente à medida que os pedidos são satisfeitos. Os despachos subsequentes vêm em pequenas porções, um ou dois pedidos de cada vez, e esta é a rede. Consequentemente, o tempo cresce. De qualquer modo, o código parece funcionar correctamente, basta compreender o mecanismo de envio/recepção de pedidos.
Anexei o código que testa tal envio.
p.s. Para resumir, 60 pedidos é mais do que suficiente mesmo para o comércio HFT. De facto, é necessária uma análise consciente das acções comerciais - envia-se uma encomenda, obtém-se o resultado, analisa-se o ambiente comercial, envia-se uma nova, se necessário. O ciclo inteiro excederá claramente a escala de 40-60 milissegundos + tempo médio de execução de 1 ordem.
Não. Tudo usado para testar sem fazer perguntas... alguma dica sobre o que mais poderia ser?
Experimente testar com dados novos. Já tentou executá-lo num terminal diferente?
Não é possível executar um guião de uma EA. É de facto possível enviar vários pedidos de diferentes EAs ao mesmo tempo para o servidor. Se sincronizar vários EAs, é de facto possível obter algum ganho de desempenho.
Mas se eu fosse a si, não batia com a cabeça contra a porta aberta. Prefiro mudar para MetaTrader5. A função OrderSendAsync permite fechar posições em lotes a uma velocidade incrível de 100-200 encomendas num par de segundos:
O que é que o MT5 e mais 100-200 encomendas têm a ver com isto? E que 100-200 encomendas em MT5? Estes são 100-200 instrumentos comerciais em MT5! Afinal, apenas 1 encomenda pode ser aberta em 1 símbolo - se não estou enganado!
E tenho uma acumulação de um grande número de encomendas em 28 instrumentos, e ao mesmo tempo, em parte com lotes!
Se tem algo a sugerir no assunto da pergunta, ficar-lhe-ia grato, e dar conselhos que não estejam relacionados com a pergunta é desnecessário e não construtivo!
Não é possível executar um guião de uma EA. É de facto possível enviar vários pedidos de diferentes EAs ao servidor ao mesmo tempo. Se sincronizar vários EAs, é de facto possível obter algum ganho de desempenho.
Mas se eu fosse a si, não batia com a cabeça contra a porta aberta. Prefiro mudar para MetaTrader5. A função OrderSendAsync permite fechar posições em lotes a uma velocidade incrível de 100-200 encomendas num par de segundos:
Oh! Vasily, se aqui, por favor, olha para a minha pergunta, obrigado.
Olá! Infelizmente, nunca encontrei tal erro antes. A única coisa que me vem à mente é verificar a pasta de história do testador, por exemplo aqui y:MetaTrader 5`tester`bases\\AdmiralMarkets-MT5`history Se não houver ficheiros para o símbolo requerido, tentar copiar os dados manualmente da pasta principal y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ e reiniciar o testador. Nenhuma outra ideia até agora.
s.e. Embora seja estranho. O testador deve copiar automaticamente o histórico. Mas não há como saber o quê.
Olá! Infelizmente, nunca tinha encontrado tal erro antes. A única coisa que me vem à mente é verificar a pasta de história no testador, por exemplo aqui y:MetaTrader 5`testerbases AdmiralMarkets-MT5history Se não houver ficheiros para o símbolo requerido, tentar copiar os dados manualmente da pasta principal y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ e reiniciar o testador. Até agora não tenho outras ideias.
O que é que o MT5 tem a ver com isto, e especialmente 100-200 encomendas? E o que são essas 100-200 encomendas em MT5? Estes são 100-200 instrumentos comerciais em MT5! Afinal, apenas 1 encomenda pode ser aberta para 1 símbolo - se não estou enganado!
E tenho uma acumulação de um grande número de encomendas em 28 instrumentos e, ao mesmo tempo, em parte com lotes!
Se tem algo a sugerir neste assunto, ficar-lhe-ia grato, e dar conselhos que não estejam relacionados com a questão é inútil e pouco construtivo!
Mais uma vez (ler atentamente):
No MetaTrader4 só se pode fechar ordens sequencialmente: enviar uma ordem para fechar uma ordem, esperar pela sua execução, passar para a ordem seguinte, etc. Por esta razão, o tempo para fechar um lote de encomendas em MetaTrader4 é substancial e não pode ser reduzido por meios triviais. No entanto, pode carregar vários Conselheiros Peritos nas suas próprias cartas e fazê-los trocar informações uns com os outros e fechar ordens através de um comando comum. Cada perito fecha as encomendas apenas com o seu símbolo. Uma vez que existem vários fios comerciais no MetaTrader4, eles não se bloqueariam uns aos outros e enviariam ordens uns aos outros. No entanto, a organização de um tal grupo de peritos é complicada, e a julgar pelo vosso nível de conhecimentos, não vos aconselharia nada do género.
Se ainda acha que escrevi demasiadas palavras, aqui está um breve resumo:
1. a resposta à sua pergunta é não, não pode executar um guião de um consultor especializado.
2. Não é possível aumentar a velocidade de execução das ordens de negociação no MetaTrader4 sem utilizar métodos complexos.
A única forma de resolver a sua questão normalmente é utilizando a função OrderSendAsync, que não existe no MetaTrader4.