Simboli personalizzati. Errori, bug, domande, suggerimenti. - pagina 26

 
Roman:

Grazie, ora so qual è la ragione.
Il passo del timer di sistema è ancora un multiplo di 15,625

Aggiunto.
Ma ho cambiato il periodo del timer di sistema della funzione wine api timeBeginPeriod(1)
cioè il timer di sistema è ora incrementato a 1 millisecondo.
E il passo del timer di sistema dovrebbe essere di 1 millisecondo, giusto?
Perché il contatore nel commento si blocca ancora?
https://rsdn.org/forum/winapi/4159851.1
 
E su Linux sotto Wine, il contatore nel commento funziona senza intoppi, anche con EventSetMillisecondTimer(1);
Ma il carico sul processore cresce fino al 40%, con otto threads di processore.
In generale, chiuso il topic, off topic ))
 
Roman:
E su Linux sotto Wine, il contatore nel commento funziona senza intoppi, anche con EventSetMillisecondTimer(1);
Ma il carico della CPU aumenta fino al 40%, con otto thread della CPU.

È di questo che sto parlando...
Perché 64 volte al secondo?
Penso che in modo da poter visualizzare tutti i tipi di informazioni sullo schermo. La frequenza è sufficiente. Non ha senso esporlo più spesso e sarebbe troppo costoso.
Mi chiedo se ancheOnChartEvent, OnCalculate e OnTick sono attivati 64 volte al secondo. - Credo di sì.

 
Nikolai Semko:

È di questo che sto parlando...
Perché 64 volte al secondo?
Penso che in modo da poter visualizzare tutti i tipi di informazioni sullo schermo. La frequenza è sufficiente. Non ha senso esporlo più spesso e sarebbe troppo costoso.
Mi chiedo se anche OnChartEvent, OnCalculate e OnTick siano generati 64 volte al secondo.

Il punto qui non era nel carico, ma nelle capacità del gestore OnTimer()
Si scopre che Windows limita queste capacità, mentre Linux no.

Domanda, anche OnChartEvent, OnCalculate e OnTick sono generati non più di 64 volte al secondo?
Probabilmente è meglio aspettare una risposta dallo sviluppatore.

 
Roman:

Alla domanda, anche OnChartEvent, OnCalculate e OnTick sono generati non più di 64 volte al secondo?
Probabilmente è meglio aspettare una risposta dallo sviluppatore.

Controllato OnChartEvent con il mouse.
Ho ottenuto la frequenza massima di 124 hertz. Non più. Mi chiedo perché non sia la 128.

 
Nikolai Semko:

Controllato l'OnChartEvent con il mouse.
La frequenza massima è di 124 hertz. Non più di questo. È strano che non sia 128.

Ho cambiato un po' l'algoritmo. Non ha tenuto conto del fatto che il commento mangia molto tempo. Ho 127 Hz.
È già logico. L'errore di 1 Hz può già essere spiegato dal programma stesso, quindi è un po' fuori di 128.

Quindi la frequenza massima di OnChartEvent è di 128 Hz.

 
È possibile ottenere uno spread sintetico usando MQL5?
C'è uno spread sui sintetici nel terminale stesso.
 
Aidas Geguzis:
È possibile ottenere uno spread sintetico usando MQL5?
C'è uno spread sui sintetici nel terminale stesso.

Per i programmi di terzi, i simboli personalizzati sono minimamente diversi da quelli originali. Quindi non dovrebbero esserci ostacoli.

 
Se si crea uno strumento personalizzato attraverso l'interfaccia del terminale e il simbolo personalizzato ha un valore negativo
Nell'interfaccia del simbolo personalizzato è necessario Permettere prezzi negativi.
Se non si specifica questa impostazione, la storia non viene calcolata per il simbolo creato e il grafico viene visualizzato solo dal momento attuale.
Per molto tempo non sono riuscito a capire il motivo per cui la storia non viene calcolata, dato che il giornale non mostra l'avviso che i prezzi negativi devono essere abilitati.
Sarebbe bello avere un tale avvertimento nel registro.
 

L'aggiunta di tick uno a uno (in particolare da EURUSD su MQ Demo) a un nuovo simbolo personalizzato vuoto dà errore 5310 (non immediatamente, ma in un ciclo da una data arbitraria).

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);
}

Cosa c'è che non va? Come faccio a sapere quali zecche specifiche vengono rimproverate? Array di output al log - nessuna violazione della cronologia lì.

Motivazione: