Com o que substituir a OnTradeTransaction() em mql4? - página 4

 

Apanhando todos os eventos por tick, em comparação com os dados registrados anteriormente.

Tudo em arrays.

Na verdade, às vezes há freios, quando há muitos carrapatos. É por isso que eu fiz um atraso entre as verificações de 1 segundo.

Diz respeito ao monitoramento de muitas posições.

E se você apenas monitorar as posições de um determinado robô, é claro que lá é mais fácil.

 

Tenho uma tarefa simples, e não há mais do que duas ou três dúzias de pedidos em funcionamento.

E, portanto, vou usar um temporizador para verificar o que está em OrdersTotal() e escrever volumes em variáveis novas e antigas com substituição a cada iteração, e se o volume tiver mudado - tomar outras medidas.

 
Aleksandr Volotko:

Tenho uma tarefa simples, e não há mais do que duas ou três dúzias de pedidos em funcionamento.

E, portanto, vou usar um temporizador para verificar o que está em OrdersTotal() e escrever volumes em variáveis novas e antigas com substituição a cada iteração, e se o volume tiver mudado - tomar outras medidas.

O volume não mudará quando uma ordem pendente for acionada.

 
Artyom Trishkin:

O volume não mudará quando o pedido pendente for acionado.

Bem, eu filtro as ordens por tipo no laço e calculo o volume da posição cumulativa aberta.

Entristece-me que eu tenha que desperdiçar recursos e perder meu tempo, quando o MT5 me permite simplesmente esperar por um evento específico sem qualquer estresse.

 
Aleksandr Volotko:

Bem, eu filtro as ordens por tipo no laço e calculo o volume da posição cumulativa aberta.

É triste que você tenha que treinar assim e desperdiçar recursos, quando na MT5 você pode simplesmente esperar por um evento específico sem qualquer estresse.

Bem mt5 é uma ordem de magnitude maior do que mt4.

Isto também se aplica a outras funções.

 
Em minha situação específica, com transações uma vez por dia, e o evento uma vez por dia será comprometido 60*60*24=86.400 gestos extras. E ainda não há outra maneira de fazer isso.

 
Aleksandr Volotko:
Em minha situação específica, se negociarmos uma vez por dia e tivermos um evento uma vez por dia, teremos 60*60*24=86.400 esforços extras. E ainda não há outra maneira.

Depende da tarefa.

Se quisermos capturar a abertura/fechamento (não parcial) de uma posição e o ajuste/eliminação de uma ordem, então não precisamos passar pela lista toda vez em um loop.

Podemos simplesmente verificar os valores atuais e anteriores do OrderTotal(). Se detectarmos uma diferença, temos um evento, e então olhamos para o valor.

Eu fiz tudo usando hash soma de propriedades de ordem e posição. Tão logo tenha mudado - temos algum evento - então olhamos o que exatamente mudou ali.

Mas eu tinha a tarefa de rastrear tudo, e quaisquer mudanças.

 
Aleksandr Volotko:
Em minha situação específica, se as negociações forem executadas uma vez por dia e um evento ocorrer uma vez por dia, teremos que fazer 60*60*24=86.400 esforços extras. E não há outra maneira.

Há também esta abordagem (se o aparecimento de uma nova ordem só for possível a partir do lado da EA):

  1. No início da EA, uma série de suas ordens é gerada por meio da travessia de todas as ordens da lista.
  2. Em cada novo tick, a presença do pedido é verificada usando

if (OrderSelect(nTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0)

Se o pedido estiver lá, atualize seus dados, se necessário. Isto se o monitoramento de SL/TP/volume for necessário. Se não for necessário, não fazemos mais nada.

Se a ordem for encontrada na lista de fechados (OrderCloseTime() > 0), então exclua-a da matriz. O conjunto só será reabastecido quando o pedido for aberto por uma EA.

Como resultado, não teremos que passar por toda a lista de pedidos em cada carrapato. As operações só são possíveis com sua própria matriz.

 

Vou tentar comparar os valores de OrderTotal() por enquanto (graças a @Artyom Trishkin), isso deve ser suficiente. Eu não terei fechamentos parciais.

Durante a inicialização, atribuirei o valor -1 ao antigo, para que no início a verificação completa seja sempre realizada, independentemente da presença de ordens no mercado.

Depois disso, um novo pedido aparecerá (evento) ou o antigo será apagado (evento) e até mesmo o símbolo não importa - podemos verificar tudo completamente, ainda é muitas vezes menos freqüente do que a agitação interminável.

 
Aleksandr Volotko:

Vou tentar comparar os valores de OrderTotal() por enquanto (graças a @Artyom Trishkin), isso deve ser suficiente. Eu não terei fechamentos parciais.

Durante a inicialização, atribuirei o valor -1 ao antigo, para que no início a verificação completa seja sempre realizada, independentemente da presença de ordens no mercado.

Depois disso, a nova ordem aparecerá (evento) ou a antiga será apagada (evento) e mesmo o símbolo não importa - podemos fazer uma verificação completa de todas elas, ainda é muitas vezes menos freqüente do que a batida interminável.

Mas deve ser tratado com cuidado, hoje enfrentei que uma posição fechou e a outra abriu sobre outra, e quase ao mesmo tempo entre carrapatos.

No final das OrdensTotal() permaneceu 8. A lógica do Expert Advisor ficou confusa - ele não recalculou os novos dados

Razão: