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

 
Alexey Viktorov:

Nesse caso, seria difícil viver sem a biblioteca da Artem.

A biblioteca aprenderá telepaticamente as informações de que necessita? Serão 86400 vezes o mesmo pedido.

 
Igor Makanu:

o que fazer com "não adicionar à matriz" - quero dizer, apagar dados sobre ordens de mercado em falta?

Mas para evitar sobrecarregar o código com cálculos, devemos pelo menos colocar uma bandeira de eventoOnTradeTransaction, que deve ser hasteada ao colocar ou fechar à força um pedido - você sabe que tipo de operação você quer fazer, não sabe? - Por que não contar diretamente à máquina? em vez de tentar fazer a máquina rodar todos os dados a cada tique / ou a cada 10 ms


ZS: outro tópico com um pedido para resolver um problema na ausência de qualquer base de conhecimento, nada pessoal, mas isso já está se tornando uma ocorrência regular - não importa como você olhe para ele, você precisa estudar material adicional, apenas discutindo o problema com pessoas com o mesmo nível de conhecimento ((((

Com "não acrescente a matriz"... Embora não exista a função ArrayRemove() em mql4, mas seu princípio se baseia na cópia de um array em si mesmo com redução adicional do tamanho pelo número de índices excluídos. E em vez de OnTradeTRansaction() eu tenho dito repetidamente neste tópico que não há alternativa à biblioteca da Artem e não é esperada.
 
Igor Makanu:

Eu deveria ao menos fazer uma bandeira do eventoOnTradeTransaction que deveria ser colocada ao fazer ou fechar um pedido à força

Pensei nisso, mas diferentes EAs têm funções diferentes e ninguém vai combiná-las, é possível escrever um arquivo de bandeira no sammon, talvez mesmo assim, por que não procurar uma alternativa?

 
Aleksandr Volotko:

A biblioteca aprenderá telepaticamente as informações de que necessita? Ele sacudirá as encomendas 86400 vezes sem mais nem menos.

Você pode descobrir isso no tópico de discussão do artigo. E não sou eu que vou responder. Eu só tentei usá-lo... E comece lendo novamente os posts de Artem. Preste atenção a esta mensagem.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Como substituir a OnTradeTransaction() em mql4?

propriedades dos pedidos e posições. O símbolo é codificado na soma dos códigos de caracteres que compõem seu nome. Mas depois apenas o ciclo completo. Quando a soma do hash é alterada - veja o que aconteceu.


 
Aleksandr Volotko:

Sim, eu pensei sobre isso, mas diferentes EAs têm funções diferentes e ninguém vai combiná-las, você pode escrever uma bandeira de arquivo no sammon, posso até fazer isso, por que não procurar uma alternativa?

aqui está uma alternativahttps://www.mql5.com/ru/docs/standardlibrary/datastructures

ou utilizar o material dos artigos da Artem, que, de qualquer forma, ainda contará com a "Coleta de Dados" SB


Não importa como você olhe para ele, mas o novo material terá que ser estudado para ao menos entender as capacidades da MQL, e apenas sentar em uma matriz com 10 anos e reduzir o tempo de análise OrderTotal() .... não resolverá de qualquer forma o problema atual e novos problemas no futuro


Se estamos falando de vários EAs e intercâmbio de dados - bandeira de colocação de pedidos, etc., então não há solução universal - há muitas variações sobre este assunto; em geral este é um ponto doloroso para mim, tenho usado muitas ferramentas prontas mas não tive sucesso, prefiro usar um servidor DB e trocar dados através dele, seria confiável e prático, infelizmente, os desenvolvedores de MT têm ignorado este problema por muitos anos com base em sua compreensão da funcionalidade necessária para os usuários

 
Alexey Viktorov:

Você pode descobrir isso no tópico de discussão do artigo. E não sou eu que vou responder. Eu só tentei usá-lo... E comece lendo novamente os posts de Artem. Preste atenção a esta mensagem.

Tudo isso leva ao excesso de pedidos, e você não quer fazer isso 100500 vezes por dia. E não importa - vou contar o volume agregado da posição em um loop, ou o hash da biblioteca soma das propriedades do pedido.

 
Igor Makanu:

a alternativa éhttps://www.mql5.com/ru/docs/standardlibrary/datastructures

ou utilizar o material dos artigos da Artem, que, a propósito, ainda dependerá de "Coleta de Dados".


Não importa como você olhe para ele, mas o novo material terá que ser estudado para ao menos entender as capacidades da MQL, e apenas sentar em uma matriz com 10 anos e reduzir o tempo de análise OrderTotal() .... não resolverá de qualquer forma o problema atual e novos problemas no futuro

Não pense que sou completamente burro, é que às vezes você só tem que trabalhar com o que está disponível, e há muito pouco disponível para usar

 
Vitaly Muzichenko:

Como assim?

StringToShortArray()
ShortArrayToString()
 
Artyom Trishkin:
StringToShortArray()
ShortArrayToString()

Acho que não sou esperto o suficiente).

Como posso aplicar isto?

static __Total = -1;
int OT=OrdersTotal();
  if(OT!=__Total)
   {
     SetMarket(); // здесь дёргаем текущую ситуацию на счёте и заполняем структуры
     __Total=OrdersTotal(); // запомним количество
   }

Tenho apenas um problema e é muito raro, hoje eu o encontrei pela primeira vez em alguns anos, talvez já o tenha visto antes, apenas não o notei

Fórum para negociação, sistemas automatizados de negociação e testes estratégicos

Como substituir a OnTradeTransaction() em mql4?

Vitaly Muzichenko, 2020.01.27 15:32

Não sei, mas notei que uma posição fechou e a outra abriu em outra e quase ao mesmo tempo entre os carrapatos.

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


 

É isso, a solução é simples: introduza outra verificação de mudança de história, assim nada será perdido e funcionará 100%.

static __OTotal = -1;
static __HTotal = -1;
int OT=OrdersTotal();
int HT=OrdersHistoryTotal();
  if(OT!=__OTotal || HT!=__HTotal) // если изменилось - выполняем
   {
     SetMarket(); // здесь дёргаем текущую ситуацию на счёте и заполняем структуры
     __OTotal=OrdersTotal(); // запомним текущее количество
     __HTotal=OrdersHistoryTotal(); // запомним количество в истории
   }
Razão: