Obtenir le nombre de décimales de n'importe quel nombre (pas seulement les guillemets) en contournant Digits() dans MQL4 et MQL5 - page 18

 
Dmitry Fedoseev:

Apparemment, mais ne désespérez pas, tout n'est pas perdu, je crois en vous.

Eh bien, c'est pour quoi faire ? Continuez, s'il vous plaît.

 
fxsaber:

Sans aller au-delà du 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:

Merci, jusqu'ici tout 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 est 20% plus rapide que la meilleure variante MQL, qui ne peut probablement plus être accélérée (aucune simple n'est sortie).

Dossiers :
 
Personnellement, je n'utiliserais pas les dll, même pour un gain de 20%, car cela réduit la sécurité au minimum, augmente la complexité d'utilisation et semble ambigu. Lorsque vous utilisez le logiciel de quelqu'un d'autre, il est préférable de désactiver complètement les appels de dll...
 

fxsaber:

La variante DLL est 20% plus rapide que la meilleure variante MQL, qui ne peut probablement pas être accélérée davantage (ce n'est pas simple).

Votre code peut être accéléré si vous augmentez la taille du tableau de 128 à 10000.

Ilya Malev:
Personnellement, je n'utiliserais pas de DLL, même pour gagner 20 % de vitesse, car cela diminue au moins la sécurité, augmente la complexité d'utilisation et semble ambigu. Lorsque vous utilisez le logiciel d'un autre utilisateur, il est préférable de désactiver complètement les appels de dll...

J'ai posté un exemple pour montrer à quel point le travail en mémoire nue est plus efficace que les implémentations natives. Et pour moi, un retard de 20% du code natif est un très, très bon résultat.

mais oui -- moins de sécurité et tout le reste. Mais si vous voulez de la vitesse et que vous la voulez pour vous, vous pouvez)

 
TheXpert:

Il s'agit essentiellement d'un simple appel de fonction système de bas niveau. Votre code peut être accéléré en augmentant la taille du tableau de 128 à 10000.

J'ai essayé différentes tailles, bien sûr. Pour une raison quelconque, ils n'affectent pas le résultat.

 
fxsaber:

J'en ai besoin pour la bibliothèque de HistoryTicks. Merci de votre participation.

A propos, avez-vous quelque chose dans vos bibliothèques pour transférer les hiboux de MT4 à MT5 sans changer les fonctions de trading pour un travail identique à MT4 avec les ordres et l'historique des ordres ? Veuillez m'envoyer le lien si vous l'avez.

 
Ilya Malev:

A propos, en avez-vous un dans vos bibliothèques pour transférer les hiboux de MT4 à MT5 sans changer les fonctions de trading pour un travail identique à MT4 avec les ordres et l'historique des ordres ? Si vous disposez d'une telle bibliothèque, veuillez m'envoyer le lien.

J'ai toutes les bibliothèques dans mon profil, dans la section Publications.

 
fxsaber:

Dans mon profil, sous Publications, toutes les bibliothèques traînent.

Je comprends. J'espérais obtenir une réponse d'un initié, savoir dans quelle mesure elle est mise en œuvre et avoir un lien, afin de ne pas avoir à la chercher moi-même. De toute façon, ce n'est pas grave, je l'écrirai moi-même, parce que j'aime les idées des autres et pas tellement le code des autres :)

 
Ilya Malev:

Je comprends. J'espérais obtenir une réponse d'un initié, savoir dans quelle mesure elle est mise en œuvre et avoir un lien, afin de ne pas avoir à la chercher moi-même. De toute façon, ce n'est pas grave, je l'écrirai moi-même, car j'aime les idées des autres et pas tellement le code des autres :)

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


Identité totale. Lorsque j'ai commencé à l'écrire, je n'avais aucune idée du nombre d'écueils que je devais éviter. Je n'aurais pas réessayé.

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