Da teoria à prática - página 227

 
Maxim Dmitrievsky:

porque é preciso verificar primeiro o resultado da execução da operação, e depois verificar o total da ordem

O autor tem vários EAs idênticos trabalhando de forma assíncrona, cada um no gráfico de seu próprio par e, aparentemente, não se comunicando um com o outro. Portanto, pode acontecer que uma EA tenha enviado uma ordem para abrir uma posição e a resposta ainda não tenha chegado, ou seja, a posição ainda não foi aberta (OrderTotal()==0). Então outro EA (e talvez mais de um) também envia um pedido comercial, e como resultado, 2 ou mais posições abertas de uma só vez. A idéia é que, para evitar tais sobreposições, devemos colocar uma bandeira (uma variável global do terminal) e lê-la ao enviar a 1ª ordem comercial por outros Conselheiros Especialistas.

Mas tais situações podem ocorrer com bastante freqüência, especialmente nas notícias, quando muitos pares fazem saltos bruscos quase em sincronia.

 
Alexander Sevastyanov:

O autor tem vários EAs do mesmo tipo, cada um deles está no gráfico de seu próprio par e, aparentemente, não se comunicam entre si. Portanto, pode haver momentos em que uma EA enviou uma ordem de abertura de posição e a ordem está em processamento ou a resposta ainda não chegou, ou seja, a posição ainda não foi aberta (OrderTotal()==0). Então outro EA (e talvez mais de um) também envia um pedido comercial, e como resultado, 2 ou mais posições abertas de uma só vez. A idéia é que, para evitar tais sobreposições, devemos colocar uma bandeira (uma variável global do terminal) e lê-la ao enviar a 1ª ordem comercial por outros Conselheiros Especialistas.

Estas situações podem acontecer novamente, especialmente nas notícias, quando muitos pares estão dando saltos bruscos.

Não vi especificado que deveria haver apenas 1 comércio de cada vez, achei que deveria haver várias aberturas para 1 símbolo

 
Alexander Sevastyanov:

O autor tem vários EAs do mesmo tipo, cada um deles está no gráfico de seu próprio par e, aparentemente, não se comunicam entre si. Portanto, pode haver momentos em que uma EA enviou uma ordem de abertura de posição e a ordem está em processamento ou a resposta ainda não chegou, ou seja, a posição ainda não foi aberta (OrderTotal()==0). Então outro EA (e talvez mais de um) também envia um pedido comercial, e como resultado, 2 ou mais posições abertas de uma só vez. A idéia é que, para evitar tais problemas, devemos colocar uma bandeira (uma variável global do terminal) e lê-la ao enviar a 1ª ordem comercial por outros Conselheiros Especialistas.

Isso é exatamente o que é, Alexander.

Estou agora lendo cuidadosamente o ramo e todas as recomendações para a solução deste problema. Porque estou aterrorizado com o que acontecerá se as negociações se abrirem de uma vez em todos os 32 pares. É claro, não deveria ser assim.

 
Alexander_K2:

...lendo o fio agora e todas as recomendações para resolver este problema. Pois tenho medo de pensar no que acontecerá se as negociações abrirem nos 32 pares ao mesmo tempo. É claro, não deveria ser assim.

Se você precisar de ajuda, por favor não hesite em entrar em contato comigo.

A propósito, o atraso na abertura de uma posição é composto principalmente pelo duplo ping (ida e volta) e pelo tempo de processamento de uma ordem comercial pelo servidor. Bons corretores que não sobrecarregam os servidores reais e têm um bom canal de conexão com fornecedores de liquidez têm tempo de processamento de ordens comerciais de unidades de milissegundos. O Ping pode ser significativamente reduzido de centenas de milissegundos para unidades hospedando o Expert Advisor em um servidor VPS. Você pode ver o tempo total necessário para enviar uma ordem de comércio, processá-la e obter uma resposta do servidor no log MT4.

 
Alexander Sevastyanov:

Se você precisar de alguma ajuda, não hesite em nos contatar.

Ah, a propósito, o atraso na abertura de uma posição é composto principalmente de duplo ping (ida e volta) e tempo de processamento do servidor. Bons corretores que não sobrecarregam os servidores reais e têm um bom canal de conexão com fornecedores de liquidez têm tempo de processamento de ordens comerciais de unidades de milissegundos. O Ping pode ser significativamente reduzido de centenas de milissegundos para unidades hospedando o Expert Advisor em um servidor VPS. Você pode ver o tempo total necessário para enviar uma ordem de comércio, processá-la e obter uma resposta do servidor no log MT4.

não há corretores como este em forex, dezenas de milissegundos no mínimo, em média 200, com zero pings

 
Maxim Dmitrievsky:

Não vi especificado que deveria haver apenas 1 comércio de cada vez, achei que deveria haver várias aberturas para 1 instrumento

Este erro pode ocorrer mesmo em um símbolo se a linha anterior não tiver terminado a execução e um novo tick tiver chegado - então há uma situação indefinida de leitura e escrita de dados reais...
 
Andrei:
Este bug pode muito bem ocorrer mesmo para uma única ferramenta se a thread anterior não tiver terminado a execução e um novo tick vier - então há uma situação indefinida de escrita e leitura de dados reais...

Não, não existe tal situação, ela salta carrapatos até que toda a lógica seja processada

 
Maxim Dmitrievsky:

Não, não existem tais situações, o ontic pula carrapatos até que toda a lógica seja processada

Foi o que eu também pensei...

 
Andrei:

Eu estava pensando a mesma coisa...

Eu não sei, nunca aconteceu, negociado com um bando de corretores de escalpe no mt4 e mt5

 
Maxim Dmitrievsky:

Eu não sei, nunca negociei com um bando de corretores de escalpe no mt4 e mt5

Como você verificou? Eu só verifiquei o mt4...