Ottenere il numero di posizioni decimali di qualsiasi numero (non solo le virgolette) bypassando Digits() in MQL4 e MQL5 - pagina 18

 
Dmitry Fedoseev:

Apparentemente, ma non disperate, non tutto è perduto, io credo in voi.

Beh, a cosa serve questo qui? Vada avanti, per favore.

 
fxsaber:

Senza andare oltre il MQL.

#import "msvcrt.dll"
  long memcpy(MqlTick &dst[], int &src[], uint cnt);
  long memcpy(int &dst[], MqlTick &src[], uint cnt);
#import

int TicksToIntArray_thexpert( MqlTick &Ticks[], int &Array[] )
{
  const int Size1 = ArraySize(Ticks);
  const int Size2 = ArrayResize(Array, Size1 * sizeof(MqlTick) / sizeof(int));

  memcpy(Array, Ticks, Size2 * sizeof(int));
  
  return Size2;
}

// Перевод массива int[] в массив тиков.
int IntArrayToTicks_thexpert( int &Array[], MqlTick &Ticks[] )
{
  const int Size1 = ArraySize(Array);
  const int Size2 = ArrayResize(Ticks, Size1 * sizeof(int) / sizeof(MqlTick));

  memcpy(Ticks, Array, Size2 * sizeof(MqlTick));
  
  return Size2;
}

Time[TicksToIntArray_fxsaber2(TicksIn,Array)] = 140528
Time[IntArrayToTicks_fxsaber2(Array,TicksOut)] = 159885
true
Time[TicksToIntArray_thexpert(TicksIn,Array2)] = 58099
Time[IntArrayToTicks_thexpert(Array2,TicksOut2)] = 65944
true
 
TheXpert:

Grazie, finora tutto bene.

https://www.mql5.com/ru/forum/287618/page18#comment_9813963
TicksToIntArray_thexpert
Time[TicksToIntArray(TicksIn,Array)] = 80994
IntArrayToTicks_thexpert
Time[IntArrayToTicks(Array,TicksOut)] = 80410
true

https://www.mql5.com/ru/forum/287618/page18#comment_9814108
TicksToIntArray_fxsaber4
Time[TicksToIntArray(TicksIn,Array)] = 102718
IntArrayToTicks_fxsaber4
Time[IntArrayToTicks(Array,TicksOut)] = 103835
true


La variante DLL è del 20% più veloce della migliore variante MQL, che probabilmente non può più essere accelerata (non ne è uscita una semplice).

File:
 
Personalmente non userei le DLL, anche per un guadagno del 20%, poiché riduce la sicurezza come minimo, aumenta la complessità d'uso e sembra ambiguo. Quando si usa il software di qualcun altro, è meglio disabilitare del tutto le chiamate dll...
 

fxsaber:

La variante DLL è del 20% più veloce della migliore variante MQL, che probabilmente non può essere più accelerata (non è semplice).

Il vostro codice può essere accelerato se aumentate la dimensione dell'array da 128 a 10000.

Ilya Malev:
Personalmente non userei nessuna DLL, anche per il bene del 20% di accelerazione, perché riduce almeno la sicurezza, aumenta la complessità d'uso e sembra ambiguo. Quando si usa il software di qualcun altro è meglio disabilitare del tutto le chiamate dll...

Ho postato un esempio più per vedere quanto sia più efficiente il lavoro in bare-memory rispetto alle implementazioni native. E per me il 20% di ritardo del codice nativo è un risultato molto, molto buono.

ma sì, meno sicurezza e tutto il resto. Ma se volete la velocità e la volete per voi stessi, potete)

 
TheXpert:

È essenzialmente una singola chiamata di funzione di sistema a basso livello. Il vostro codice può essere accelerato aumentando la dimensione dell'array da 128 a 10000.

Ho provato diverse misure, ovviamente. Per qualche ragione, non influenzano il risultato.

 
fxsaber:

Ne ho bisogno per la libreria HistoryTicks. Grazie per aver partecipato.

A proposito, avete qualcosa nelle vostre librerie per trasferire i gufi da MT4 a MT5 senza cambiare le funzioni di trading per l'identico lavoro di MT4 con gli ordini e lo storico degli ordini? Per favore, mandami il link se ce l'hai.

 
Ilya Malev:

A proposito, ne avete uno nelle vostre librerie per trasferire i gufi da MT4 a MT5 senza cambiare le funzioni di trading per un lavoro identico a MT4 con gli ordini e la cronologia degli ordini? Se avete una tale biblioteca, per favore mandatemi il link.

Ho tutte le biblioteche nel mio profilo nella sezione Pubblicazioni.

 
fxsaber:

Nel mio profilo, sotto Pubblicazioni, tutte le librerie sono in giro.

Ho capito. Speravo di avere una risposta dall'interno, come è completamente implementato e un link, in modo da non dover cercare lì da solo. Comunque, non importa, lo scriverò io stesso comunque, perché mi piacciono le idee degli altri e non tanto il codice degli altri :)

 
Ilya Malev:

Ho capito. Speravo di avere una risposta dall'interno, come è completamente implementato e un link, in modo da non dover cercare lì da solo. Comunque, non importa, lo scriverò io stesso comunque, dato che mi piacciono le idee degli altri e non tanto il codice degli altri :)

https://www.mql5.com/ru/code/16006


Identità totale. Quando ho iniziato a scriverlo, non avevo idea del numero di trappole che avrei dovuto evitare. Non ci avrei più provato.

MT4Orders
MT4Orders
  • www.mql5.com
Данная библиотека позволяет работать с ордерами в MQL5 (MT5-hedge) точно так же, как в MQL4. Т.е. ордерная языковая система (ОЯС) становится идентичной MQL4. При этом сохраняется возможность параллельно использовать MQL5-ордерную систему. В частности, стандартная MQL5-библиотека будет продолжать полноценно работать. Выбор между ордерными...