Obtener el número de decimales de cualquier número (no sólo las comillas) evitando Digits() en MQL4 y MQL5 - página 18

 
Dmitry Fedoseev:

Aparentemente, pero no desesperes, no todo está perdido, creo en ti.

Bueno, ¿para qué está esto aquí? Siga, por favor.

 
fxsaber:

Sin ir más allá del 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:

Gracias, hasta ahora todo va bien.

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 es un 20% más rápida que la mejor variante MQL, que probablemente ya no se puede acelerar (no salió una simple).

Archivos adjuntos:
 
Personalmente no usaría dlls, ni siquiera por una ganancia del 20%, ya que reduce la seguridad como mínimo, aumenta la complejidad de uso y parece ambiguo. Cuando se utiliza el software de otra persona, es mejor desactivar las llamadas dll por completo...
 

fxsaber:

La variante DLL es un 20% más rápida que la mejor variante MQL, que probablemente no se pueda acelerar más (no es sencillo).

Su código puede acelerarse si aumenta el tamaño del array de 128 a 10000.

Ilya Malev:
Yo personalmente no usaría ninguna dll, ni siquiera para aumentar la velocidad en un 20%, porque disminuye la seguridad como mínimo, aumenta la complejidad de uso y parece ambigua. Cuando se utiliza el software de otra persona es mejor desactivar las llamadas dll por completo...

He publicado un ejemplo más para ver cuánto más eficiente es el trabajo en memoria desnuda en comparación con las implementaciones nativas. Y para mí un 20% de retraso del código nativo es un resultado muy, muy bueno.

pero sí... menos seguridad y todo lo demás. Pero si quieres velocidad y la quieres para ti, puedes)

 
TheXpert:

Es esencialmente una única llamada a una función del sistema de bajo nivel. Su código puede acelerarse aumentando el tamaño del array de 128 a 10000.

Probé diferentes tamaños, por supuesto. Por alguna razón, no afectan al resultado.

 
fxsaber:

Lo necesito para la biblioteca de HistoryTicks. Gracias por participar.

Por cierto, ¿tenéis algo en vuestras librerías para transferir los búhos de MT4 a MT5 sin cambiar las funciones de trading para un trabajo idéntico al de MT4 con las órdenes y el historial de órdenes? Por favor, envíame el enlace si lo tienes.

 
Ilya Malev:

Por cierto, ¿tiene uno en sus bibliotecas para transferir búhos de MT4 a MT5 sin cambiar las funciones de negociación para el trabajo idéntico MT4 con órdenes y el historial de pedidos? Si tienes una biblioteca de este tipo, por favor envíame el enlace.

Tengo todas las bibliotecas en mi perfil en la sección de Publicaciones.

 
fxsaber:

En mi perfil, en Publicaciones, están todas las bibliotecas.

Lo entiendo. Esperaba obtener una respuesta interna, cómo se implementa completamente y un enlace, para no tener que buscar allí yo mismo. De todas formas, no importa, lo escribiré yo de todas formas, porque me gustan las ideas de los demás y no tanto el código de los demás :)

 
Ilya Malev:

Lo entiendo. Esperaba obtener una respuesta interna, cómo se implementa completamente y un enlace, para no tener que buscar allí yo mismo. De todos modos, no importa, lo escribiré yo de todos modos, ya que me gustan las ideas de los demás y no tanto el código de los demás :)

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


Identidad total. Cuando empecé a escribirlo, no tenía ni idea de la cantidad de escollos que tendría que evitar. No lo habría vuelto a intentar.

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