Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 76

 
TYRBO:
problema resolvido através da comparação de preços
No testador? Em um mercado real em uma conta de spread flutuante, o preço do breakeven mudará após um tick
 
Artyom Trishkin:

Neste contexto, meu ponto é o seguinte:

  1. Precisamos obter o menor número possível de ciclos por carrapato.
  2. Precisamos ter uma matriz constante com dados de ordens e posições de mercado e uma matriz com dados de ordens e posições apagadas/fechadas
  3. Se tivermos a matriz localmente em uma função, chamá-la repetidamente requer preenchê-la novamente. Sugiro que ele seja preenchido apenas uma vez em um novo tick - assim o array é global, caso contrário o perderíamos ao sair da função.
  4. Para encontrar algo nele (na matriz), precisamos de uma matriz preenchida e funções que retornarão os dados encontrados. Dentro das funções, podemos declarar matrizes auxiliares para os cálculos necessários.

Por esta razão, seria melhor ter matrizes globais - para ordens e posições fechadas e abertas. Uma vez em um novo tick, passamos uma vez a quantidade necessária de pedidos/posições, preenchendo duas matrizes com eles. E então obtemos todos os dados necessários deles no mesmo carrapato. Observe que não apenas a última ordem/posição fechada/aberta e todos os seus dados são calculados, mas também todos os carrapatos de pais e filhos de todas as posições são pesquisados em caso de fechamento parcial. Assim, a qualquer momento posso ver de que posição é este ou aquele bilhete, se ele foi parcialmente fechado mais de uma vez - tudo isso já funciona em uma classe que funciona em um temporizador. Tenho muitos outros dados que preciso com um pequeno número total de ciclos. A profundidade da história necessária para as arrays é definida para o testador.

E assim por diante ...

Desculpe. Mais uma adição (não para contrabalançar, mas como uma adição), eu gostaria de acrescentar que as matrizes locais comestática não se perdem. Isto é, se as condições permitirem que você faça sem declará-las globalmente.

 
P./S.: Estou completando isto, claro, com base em meu próprio interesse "adquirido")))). Porque eu posso aplicar estática local em casos permitidos.
 
Vitaly Muzichenko:

Agora estou reescrevendo-o lentamente por 5. Quero dizer que o preço pode mudar muito rapidamente e o nível pode ser menor que o nível de stop-loss, o que levará a um erro. Quero dizer que o preço pode mudar muito rapidamente e o nível será menor que o nível de parada permitido, o que levará a um erro.

Entendo que esta coisa do"SymbolInfoTick" é necessária para obter o preço atual?

Portanto, para obter o Ask and Bid real em mql4, a atualização deveria ter sido chamada de qualquer forma. E acontece que é pouco provável que a carga mude em comparação com a chamada SymbolInfoTick().

Mas aqui está outra adição: Eu escrevo SymbolInfoTick() no seguinte loop para obter preços precisos

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Se obtivermos preços normais desde a primeira vez, este loop não aumentará o tempo de execução. E se houver algum fracasso, é melhor repetir do que obter o mesmo preço em vez do preço atual.

 
Alexey Viktorov:

Portanto, para obter o Ask and Bid real em mql4, você tem que ligar para a atualização de qualquer maneira. E acontece que é pouco provável que a carga mude em comparação com a chamada SymbolInfoTick().

Mas aqui está outra adição: para obter preços reais sem erros, eu coloquei SymbolInfoTick() neste loop

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Se obtivermos preços normais desde a primeira vez, este loop não aumentará o tempo de execução. E se houver algum fracasso, é melhor repetir do que obter o mesmo preço em vez do preço atual.

Estou vendo, onde devemos colocá-lo, dentro ou antes do loop?
 
Vitaly Muzichenko:
Estou vendo, mas onde devo colocá-lo, dentro do ciclo, ou antes?
Bem, é um ciclo separado até conseguirmos os preços atuais. Já discutimos onde colocá-lo. Se houver uma emboscada com preços não reais, devemos colocá-la no ciclo de avaliação dos pedidos.
 
Alexey Viktorov:

Portanto, para obter o Ask and Bid real em mql4, você tem que ligar para a atualização de qualquer maneira. E acontece que é pouco provável que a carga mude em comparação com a chamada SymbolInfoTick().

Mas aqui está outra adição: para obter preços reais sem erros, eu coloquei SymbolInfoTick() neste loop

        do
         while(!SymbolInfoTick(_Symbol, mqlTick));

Se obtivermos preços normais desde a primeira vez, este loop não aumentará o tempo de execução. E se houver algum fracasso, é melhor repetir do que obter o mesmo preço em vez do preço atual.

E se você não os conseguir de todo? Como você reduz a velocidade do loop?
 
Artyom Trishkin:
E se não o receber de todo? Como se retarda o ciclo?

Sim, logicamente pode ser, por exemplo, que o terminal tenha perdido a conexão - há muitas razões para isso, eu o fiz perder a conexão 50 vezes por dia.

Qual é a melhor maneira de obter preços atualizados, ao mesmo tempo em que é menos intensivo em recursos, pense em você - para a rede de arrasto.

 
Vitaly Muzichenko:

Sim, logicamente pode ser, por exemplo, que o terminal tenha perdido a conexão - há muitas razões para isso, eu o fiz perder a conexão 50 vezes por dia.

Qual é a melhor maneira de obter preços atualizados, ao mesmo tempo em que é menos intensivo em recursos, lembre-se - para a rede de arrasto.

veja 10 páginas atrás, há um bom esquema lá
 
trader781:
Confira 10 páginas atrás, há um esquema muito bom lá.
Não consegui encontrá-lo, e não me lembro dele aqui.
Razão: