Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 125

 
Nikita Chernyshov:

Ich danke Ihnen!

Und dies ist ein älterer Code, aber in Bildern:TrailingStop

 
Der EventSetTimer in OnInit im Tester zählt nicht vom Beginn des Tages des ersten Ticks zurück, sondern vom Startdatum des Testintervalls - der Bilanztransaktion.
 
fxsaber:
EventSetTimer in OnInit in Tester zählt nicht vom Beginn des Tages des ersten Ticks, sondern vom Anfangsdatum des Testintervalls - Bilanztransaktion - zurück.
EventSetTimer startet den Timer-Countdown immer ab dem Zeitpunkt des EventSetTimer-Aufrufs. Sowohl im Prüfgerät als auch im Terminal
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql4, Tipps und Tricks

fxsaber, 2019.02.12 13:12

Eigenschaften von ArrayResize für mehrdimensionale Arrays
void OnStart()
{
  int Array[][2];
  
  Print(ArrayResize(Array, 7)); // MQL5 - 7, MQL4 - 14
  Print(ArraySize(Array));      // 14
}
 

Wie schön wäre es, Kims Funktionen für die Fünf zu sehen. Können Sie mir bitte einen Tipp geben? Es gab eine solche Funktion in Kims

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

Ich versuche, es auf mql5 umzuschreiben. Aber es will nicht funktionieren. Wie kann man es erzwingen? :)

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

Wie schön wäre es, Kims Funktionen für die Fünf zu sehen. Können Sie mir bitte einen Tipp geben? Es gab eine solche Funktion in Kims

Ich versuche, es auf mql5 umzuschreiben. Aber es will nicht funktionieren. Wie kann man es erzwingen? :)

Forum zum Thema Handel, automatische Handelssysteme und Strategietester

Bibliotheken: MT4Orders

fxsaber, 2019.01.13 17:23

Kims Funktionen unter MT4 sind recht beliebt, daher habe ich alle Quellen von seiner Website heruntergeladen und einen einfachen "Konverter" für sie unter MT5 geschrieben.
#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:

Danke für die Krücke, sehr gut :) Aber ich lerne einen Fünfer, um ihn zu verstehen, um in ihn hineinzukommen, deshalb ist es wichtig, ihn mit der Hand zu handhaben und die Knöchel grundsätzlich auszusortieren.

 

Während ich Millionen von Ticks analysierte, beschloss ich, den Speicherverbrauch regelmäßig zu überprüfen.

Ich habe festgestellt, dass die Ausführungsgeschwindigkeit nach den Änderungen um ein Vielfaches gesunken ist.


Grund: einige Varianten der TerminalInfoInteger-Verwendung benötigen sehr viel Zeit zur Ausführung

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

void OnStart()
{
  BENCH(TerminalInfoInteger(TERMINAL_MEMORY_USED)); // 28220
}
Seien Sie vorsichtig.
 
TerminalInfoInteger(TERMINAL_MEMORY_USED)

Eine sehr teure Funktion.

Auch TERMINAL_MEMORY_AVAILABLE

TERMINAL_MEMORY_PHYSICAL und TERMINAL_MEMORY_TOTAL werden nach der ersten Anfrage zwischengespeichert. Nachfolgende Abfragen geben die zwischengespeicherten Werte zurück

 
Einige Dateien (*.bat, etc.) werden von FileIsExists nicht erkannt, aberFileFindNext findet sie.
Grund der Beschwerde: