Características del lenguaje mql5, sutilezas y técnicas - página 125

 
Nikita Chernyshov:

Gracias.

Y este es un código más antiguo, pero en imágenes:TrailingStop

 
El EventSetTimer en OnInit en el Probador no cuenta desde el inicio del día del primer tick, sino desde la fecha de inicio del intervalo de prueba - la transacción de balance.
 
fxsaber:
EventSetTimer en OnInit en Tester cuenta hacia atrás no desde el principio del día del primer tick, sino desde la fecha inicial del intervalo de prueba - transacción de balance.
EventSetTimer siempre inicia la cuenta atrás del temporizador desde el momento de la llamada a EventSetTimer. Tanto en el probador como en el terminal
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Características del lenguaje mql4, consejos y trucos

fxsaber, 2019.02.12 13:12

Características de ArrayResize para matrices multidimensionales
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
 

Qué bueno sería ver las funciones de Kim para los cinco. ¿Puedes darme una pista, por favor? Hubo una función como esta en Kim's

//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  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);
}

Estoy intentando reescribirlo en mql5. Pero no quiere trabajar. ¿Cómo forzarlo? :)

//+------------------------------------------------------------------+
//|  Проверяет был ли открыт последний ордер на этой же свече        |
//|  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:

Qué bueno sería ver las funciones de Kim para los cinco. ¿Puedes darme una pista, por favor? Hubo una función como esta en Kim's

Estoy intentando reescribirlo en mql5. Pero no quiere trabajar. ¿Cómo forzarlo? :)

Foro sobre trading, sistemas de trading automatizados y comprobador de estrategias

Bibliotecas: MT4Orders

fxsaber, 2019.01.13 17:23

Las características de Kim bajo MT4 son bastante populares, así que descargué todas las fuentes de su sitio y escribí un simple "convertidor" para ellas bajo 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:

Gracias por la muletilla, muy buena :) Pero estoy aprendiendo un billete de cinco libras para entenderlo, para entrar en él, por lo que es importante manejarlo a mano, fundamentalmente ordenando los nudillos.

 

Mientras analizaba millones de ticks, decidí mirar periódicamente el consumo de memoria.

He notado que después de hacer los cambios la velocidad de ejecución ha bajado muchas veces.


Razón: algunas variantes del uso de TerminalInfoInteger tardan mucho tiempo en ejecutarse

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

void OnStart()
{
  BENCH(TerminalInfoInteger(TERMINAL_MEMORY_USED)); // 28220
}
Ten cuidado.
 
TerminalInfoInteger(TERMINAL_MEMORY_USED)

Una función muy cara.

También TERMINAL_MEMORY_AVAILABLE

TERMINAL_MEMORY_PHYSICAL y TERMINAL_MEMORY_TOTAL se almacenan en caché después de la primera solicitud. Las consultas posteriores devolverán los valores almacenados en la caché

 
Algunos archivos (*.bat, etc.) no son vistos por FileIsExists, peroFileFindNext los encuentra.
Razón de la queja: