Erros, bugs, perguntas - página 1851

 
kaus_bonus:

Obrigado pela sua resposta.

Globalmente, os resultados são os que mostrei nos meus cargos.

Tenho estado a testar regularmente.

Não é uma fraude, são as mesmas condições para ambos os sistemas.


E ainda assim os resultados entre MT4 e MT5 são quase 200 vezes diferentes (devido a -deve controlar a sincronização total com os dados do servidor?? e ping? ).

Cerca de 0,6ms em MT4 ainda vou descobrir. Aparentemente, os dados existentes já estão pré-preparados e, portanto, este número não mostra os custos reais.

O MT4 tem uma ideologia bastante diferente e na realidade o terminal copia uma enorme quantidade de dados para cada script/especialista ao nível do sistema a partir do código MQL4. Portanto, as medições feitas na MQL4 não demonstram normalmente o consumo real de recursos para a recepção de dados. As despesas, claro, existem, mas estão a outro nível - o sistema é responsável por elas.

É evidente que o mecanismo MT4 (criação de cópias de dados de mercado para cada robô) não pode ser aplicado quando a sua tarefa é dimensionada para infinitos fluxos de dados (história profunda, dezenas de milhares de instrumentos). Portanto, tive de mudar e melhorar drasticamente o MQL5, livrando-me dos acessos directos Aberto/Alto/Baixo/Fecho e mudando para as funções CopyXXX. Considerando o tamanho dos dados MT5, é demasiado caro para um consultor especializado construir a cópia EURUSD M1 para 6 milhões de barras.

MT5/MQL5 utiliza a estratégia de carregar dados a pedido sem copiar antecipadamente, o que significa uma melhor oportunidade para medir os custos reais a partir do código MQL5.

É aceitável trazer a base de dados para a memória, verificar a sincronização e preparar caches de um objecto complexo em MT5 em 113 milissegundos.

 
kaus_bonus:

Por exemplo, como a MT não tem um screener do mercado, escrevi um pequeno guião que acrescenta símbolos ao relógio do mercado, mas os preços só estão disponíveis via CopyClose, não estão disponíveis via SymbolInfoDouble ou via MqlTick até que um símbolo seja acrescentado ao relógio do mercado, pelo que este guião tem uma duração infinita quando é executado com uma quantidade muito grande de símbolos. Isto é apenas como um exemplo.

Os instrumentos não têm de ser acrescentados à visão geral do mercado a fim de se obter um historial sobre eles. Qualquer referência aos dados do símbolo desencadeia a sincronização dos dados de fundo.

Agora há um problema com a utilização de um nível excessivo de cache com toda a base de dados gráfica elevada a toda a sua profundidade, mesmo que os dados mais recentes sejam solicitados. Isto resulta numa grande sobrecarga de memória para os screeners que verificam centenas de gráficos.

A tarefa já foi definida para alterar esta estratégia e recolher os dados não mais profundos do que 500 barras a partir da data mais distante do pedido. Isto permitirá uma escrita indolor dos screeners do mercado.

 
fxsaber:

Qual é o caminho certo?


Perguntou, respondeu:) Bem, sim, é.
 
Алексей Тарабанов:

Perguntou, respondeu:) Bem, sim, é isso mesmo.
Nunca vi a chamada do operador modelo abreviado.
 
fxsaber:
Ainda não vi uma chamada de operador de modelos reduzidos.

Já não trabalho com estruturas há séculos. Se precisar de iniciar um elemento inteiro da estrutura, será uma operação de cordel. E o elemento inteiro dessa cadeia convertida que iniciou correctamente, que é o que o compilador relatou. Se quiser iniciar, comparar ou de outra forma manusear conjuntos de estruturas, pergunte como são representados/armazenados em MQL. Não é nada de complicado e acelera muito o trabalho.
 
Алексей Тарабанов:
Preciso de saber que entrada de sintaxe é a versão abreviada desta
Struct.operator[]<int>(0);
 
fxsaber:
Preciso de saber que entrada de sintaxe é a versão abreviada desta
Estruturas[0]
 
Комбинатор:
Estruturas[0].

A quem como
 
Комбинатор:
Estruturas[0].
Para não navegar através das páginas, copiarei o código

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

Insectos, insectos, perguntas

fxsaber, 2017.04.12 14:27

struct STRUCT
{
  template <typename T>
  void operator []( int ) {}
};

void OnStart()
{
  STRUCT Struct;
  
  Struct.operator[]<int>(0); // Нормально
  Struct[0]<int>;            // Ошибка
}

Estas duas chamadas são diferentes.

Struct.operator[]<int>(0);
Struct.operator[]<MqlTick>(0);

Deve haver uma entrada abreviada correspondente para cada um. Qual deles?

 
fxsaber:
Preciso de saber que entrada de sintaxe é uma versão abreviada desta

Nenhuma entrada pode fornecer o que se deseja. Fundamentalmente. Semanticamente.
Razão: