Caractéristiques du langage mql5, subtilités et techniques - page 125

 
Nikita Chernyshov:

Merci !

Et ceci est un code plus ancien, mais en images :TrailingStop

 
L'EventSetTimer dans OnInit du Testeur ne décompte pas à partir du début du jour du premier tick, mais à partir de la date de début de l'intervalle de test - la transaction de solde.
 
fxsaber:
EventSetTimer dans OnInit dans Tester compte à rebours non pas à partir du début du jour du premier tick, mais à partir de la date initiale de l'intervalle de test - transaction de solde.
EventSetTimer lance toujours le compte à rebours du minuteur à partir du moment où il est appelé. Tant dans le testeur que dans le terminal
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Caractéristiques du langage mql4, conseils et astuces

fxsaber, 2019.02.12 13:12

Caractéristiques d'ArrayResize pour les tableaux multidimensionnels
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
 

Comme ce serait bien de voir les fonctions de Kim pour les cinq. Pouvez-vous me donner un indice, s'il vous plaît ? Il y avait une fonction comme celle-ci dans le programme de Kim.

//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpClSelfBar(int magik = 0, int bar = 0, int typ = -1,string sy = "",int per = 0){
   if(sy == ""){sy = Symbol();}
   if(per==0){per=Period();}
   for(int i = OrdersTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);}
            }
         }
      }
   }
   for(i = OrdersHistoryTotal(); i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if(OrderSymbol()!=sy){continue;}
         if(OrderType()==typ||typ==-1){
            if(OrderMagicNumber()==magik||magik==0){
               if(OrderOpenTime()>=iTime(sy,per,bar)){return(true);}
            }
         }
      }
   }   
   return(false);
}

J'essaie de le réécrire sur mql5. Mais il ne veut pas fonctionner. Comment la forcer ? :)

//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  Checks whether the opened last the order on the same candle     |
//+------------------------------------------------------------------+
bool IfOrdOpClSelfBar(ENUM_ORDER_TYPE type)
{

   for(int i = OrdersTotal(); i>=0; i--){
      if(OrderSelect(OrderGetTicket(i)) >0)
        {
         if(OrderGetString(ORDER_SYMBOL)!=_Symbol){continue;}
         if(OrderGetInteger(ORDER_TYPE)==type)
           {
            if(OrderGetInteger(ORDER_MAGIC) == magicN)
             {
               if(OrderGetInteger(ORDER_TIME_SETUP) >= iTime(NULL,Period(),0)){return(true);}
             }
           }
        }
      }
      
   for(int i = HistoryOrdersTotal(); i>=0; i--){
     if(HistoryOrderSelect(OrderGetTicket(i)) >0)
          {
         if(OrderGetString(ORDER_SYMBOL)!=_Symbol){continue;}
         if(OrderGetInteger(ORDER_TYPE)==type)
           {
            if(OrderGetInteger(ORDER_MAGIC) == magicN)
             {
               if(OrderGetInteger(ORDER_TIME_SETUP) >= iTime(NULL,Period(),0)){return(true);}
             }
           }
          }
    }
   
   return(false);
}
 
Nikita Chernyshov:

Comme ce serait bien de voir les fonctions de Kim pour les cinq. Pouvez-vous me donner un indice, s'il vous plaît ? Il y avait une fonction comme celle-ci dans le programme de Kim.

J'essaie de le réécrire sur mql5. Mais il ne veut pas fonctionner. Comment la forcer ? :)

Forum sur le trading, les systèmes de trading automatisés et le testeur de stratégie

Bibliothèques : MT4Orders

fxsaber, 2019.01.13 17:23

Les fonctionnalités de Kim sous MT4 sont assez populaires, j'ai donc téléchargé toutes les sources de son site et écrit un simple "convertisseur" pour les utiliser sous MT5.
#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

#include "e-Trailing.mq4" // http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=14

void OnTick() { start(); }
 
fxsaber:

Merci pour la béquille, très bien :) Mais j'en apprends cinq pour comprendre, je m'y mets, donc il est important de le manipuler à la main, en triant fondamentalement les articulations.

 

En analysant des millions de ticks, j'ai décidé d'examiner périodiquement la consommation de mémoire.

J'ai remarqué qu'après avoir effectué des modifications, la vitesse d'exécution a chuté à plusieurs reprises.


Motif : certaines variantes de l'utilisation de TerminalInfoInteger prennent beaucoup de temps à s'exécuter.

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

void OnStart()
{
  BENCH(TerminalInfoInteger(TERMINAL_MEMORY_USED)); // 28220
}
Faites attention.
 
TerminalInfoInteger(TERMINAL_MEMORY_USED)

Une fonction très coûteuse.

Aussi TERMINAL_MEMOIRE_AVAILABLE

TERMINAL_MEMORY_PHYSICAL et TERMINAL_MEMORY_TOTAL sont mis en cache après la première demande. Les requêtes ultérieures renverront les valeurs mises en cache.

 
Certains fichiers (*.bat, etc.) ne sont pas vus par FileIsExists, maisFileFindNext les trouve.