Símbolos personalizados. Erros, bugs, perguntas, sugestões. - página 26

 
Roman:

Obrigado, agora eu sei qual é a razão.
A etapa do temporizador do sistema ainda é um múltiplo de 15.625

Adicionado.
Mas eu mudei o período de tempo do sistema da função api do vinhoBeginPeriod(1)
ou seja, o temporizador do sistema é agora aumentado para 1 milissegundo.
E a etapa do temporizador do sistema deve ser de 1 milissegundo, certo?
Por que o contador no comentário ainda congela?
https://rsdn.org/forum/winapi/4159851.1
 
E no Linux em Wine, o contador no comentário funciona sem soluços, mesmo com o EventSetMillisecondTimer(1);
Mas a carga sobre o processador cresce até 40%, com oito fios de processador.
Em geral, fechou o assunto, fora do tópico ))
 
Roman:
E no Linux sob Wine, o contador no comentário funciona sem soluços, mesmo com EventSetMillisecondTimer(1);
Mas a carga da CPU aumenta até 40%, com oito roscas de CPU.

É disso que eu estou falando...
Por que 64 vezes por segundo?
Acho que para que você possa exibir todo tipo de informação na tela. Isso é freqüência suficiente. Não faz sentido exibi-la mais vezes, e seria muito cara.
Será queOnChartEvent, OnCalculate e OnTick também são acionados 64 vezes por segundo? - Eu acho que sim.

 
Nikolai Semko:

É disso que eu estou falando...
Por que 64 vezes por segundo?
Acho que para que você possa exibir todo tipo de informação na tela. Isso é freqüência suficiente. Não faz sentido exibi-la mais vezes, e seria muito cara.
Será que o OnChartEvent, OnCalculate e OnTick também são gerados 64 vezes por segundo?

O ponto aqui não estava na carga, mas nas capacidades do manipulador OnTimer()
. Acontece que o Windows limita estas capacidades, enquanto que o Linux não o faz.

Pergunta, OnChartEvent, OnCalculate e OnTick também não são gerados mais de 64 vezes por segundo?
Provavelmente, é melhor esperar por uma resposta do desenvolvedor.

 
Roman:

Para a pergunta, OnChartEvent, OnCalculate e OnTick também são gerados não mais do que 64 vezes por segundo?
Provavelmente, é melhor esperar por uma resposta do desenvolvedor.

Verificado OnChartEvent com o mouse.
Eu tenho a freqüência máxima de 124 hertz. Não mais. Pergunto-me por que não são 128.

Arquivos anexados:
 
Nikolai Semko:

Verifiquei o OnChartEvent com o mouse.
A freqüência máxima é de 124 hertz. Não mais do que isso. É estranho porque não é 128.

Mudou um pouco o algoritmo. Não levei em conta esse comentário, pois ele consome muito tempo. Eu tenho 127 Hz.
Já é lógico. O erro de 1 Hz já pode ser explicado pelo próprio programa, por isso está um pouco fora de 128.

Portanto, a freqüência máxima do OnChartEvent é de 128 Hz.

Arquivos anexados:
 
É possível obter um spread sintético usando MQL5?
Há uma propagação de sintéticos no próprio terminal.
 
Aidas Geguzis:
É possível obter um spread sintético usando MQL5?
Há uma propagação de sintéticos no próprio terminal.

Para programas de terceiros, os símbolos personalizados são minimamente diferentes dos símbolos originais. Portanto, não deve haver obstáculos.

 
Se um instrumento personalizado é criado através da interface do terminal e o símbolo personalizado tem um valor negativo
Na interface do símbolo personalizado você deve permitir preços negativos.
Se você não especificar esta configuração, o histórico não é calculado para o símbolo criado e o gráfico é exibido apenas a partir do momento atual.
Por muito tempo não pude entender a razão pela qual a história não é calculada, pois a revista não mostra o aviso de que preços negativos devem ser habilitados.
Seria bom ter um aviso desse tipo no diário de bordo.
 

A adição de carrapatos um-para-um (em particular do EURUSD na MQ Demo) a um novo símbolo personalizado vazio dá erro 5310 (não imediatamente, mas em um loop a partir de uma data arbitrária).

input int Limit = 10000;
input datetime Start = D'2020.06.01';

int fillArray(ulong &_start)
{
  MqlTick array[];
  int size = CopyTicks(_Symbol, array, COPY_TICKS_ALL, _start, Limit);
  if(size > 0)
  {
    _start = array[size - 1].time_msc + 1;
    if(CustomTicksAdd(symbolName, array) == -1)
    {
      Print("Error:", GetLastError());
      return -1;
    }
  }
  return size;
}

...
{
  ulong startMsc = (ulong)Start * 1000;
  while(fillArray(startMsc) > 0);
}

O que está errado? Como posso saber quais carrapatos específicos estão sendo repreendidos? Matrizes de saída para registro - sem violação de cronologia ali.