Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 320

 

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.
 
Tapochun:
Depois é preciso olhar para o código... talvez seja só isso... há uma linha como essa nas impressões digitais?
Não. Já foi tudo testado antes, não foram feitas perguntas... Que mais poderia ser?


 
Novikov:

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.


 
R0MAN:
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?
 
Tapochun:
Experimente testar com dados novos. Já tentou executá-lo num terminal diferente?
Não. Instalei hoje uma nova da bx. Tentei testá-lo. Vou tentar outro... Vou afixar aqui os resultados.
 
C-4:

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!

 
C-4:

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:


О! Vasiliy, se está aqui, por favor veja a minha pergunta, obrigado.

 
R0MAN:
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ê.

 
C-4:
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.
Obrigado. Voltarei ao campus... Estou no meu telemóvel neste momento.
 
Novikov:

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.