Fehler, Irrtümer, Fragen - Seite 1935

 
Aleksey Vyazmikin:

Ich bin mir also nicht sicher, ob es sich um Handelsfunktionen handelt...

Der dortige Zweig ist ein Beispiel für konstruktive Aussagen, die jeder nachvollziehen kann.
 
fxsaber:
Dieser Zweig ist ein Beispiel für eine konstruktive Aussage, die jeder nachvollziehen kann.

Ich verstehe - ich würde den Code posten, aber er verwendet eine Klasse für Handelsfunktionen, für die ich noch nicht bezahlt habe...

Beim Rendern beobachte ich eine allmähliche Verlangsamung - fast ein paar Sekunden pro Takt bei maximaler Geschwindigkeit - irgendeine Idee, was das sein könnte?

Kein Antivirus-Check, SSD-Laufwerk, Platz darauf...

 
Aleksey Vyazmikin:

Einen EA von MT4 auf MT5umgeschrieben

Der Ablauf ist derselbe: Prüfung durch Kontrollpunkte auf Protokollen.

MT5

2017.07.20 20:01:38.059 Kern 1 Si-9.17,M1: 107509 Ticks, 35385 Balken erzeugt. Die Umgebung wurde um 0:00:00.078 synchronisiert. Test bestanden in 0:03:52.707 (einschließlich Ticks Vorverarbeitung 0:00:00.031).

MT4

2017.07.20 20:02:32.696 RUBRUR,M1: 225314 Tick-Ereignisse (35701 Takte, 231783 Taktzustände) verarbeitet in 0:00:04.259 (Gesamtzeit 0:00:11.310)

Und wo bleibt die gelobte Geschwindigkeit des MT5?
Zeigen Sie mir den Code der beiden Expert Advisors. Sie haben den faulen MQL4-Emulator anstelle des nativen MQL5, richtig?
 
Renat Fatkhullin:
Sie zeigen den Code der beiden EAs. Sie haben den faulen MQL4-Emulator anstelle des nativen MQL5, richtig?

Noch nicht bereit, den Code zu zeigen, wegen

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

Aleksey Vyazmikin, 2017.07.20 23:28


Ich verstehe - ich würde den Code posten, aber er verwendet eine Klasse für Handelsfunktionen, für die ich noch nicht bezahlt habe...

Aber bereit, Profiling-Ergebnisse von MT5 zu zeigen - wie ich verstehe, sind Handelsfunktionen nicht in Frage.



Für die OHLC-Umgebung verwende ich die folgenden Funktionen

//-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open(int index)
  {
   double open=0;
   ArraySetAsSeries(Open,true);
   int copied=CopyOpen(Symbol(),0,0,Bars(Symbol(),0),Open);
   if(copied>0 && index<copied) open=Open[index];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low(int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(Symbol(),0,0,Bars(Symbol(),0),Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High(int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close(int index)
  {
   double close=0;
   ArraySetAsSeries(Close,true);
   int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),Close);
   if(copied>0 && index<copied) close=Close[index];
   return(close);
  }
Vielleicht mache ich etwas falsch?
 
Aleksey Vyazmikin:

Ich kann den Code noch nicht zeigen, weil ich

Aber ich bin bereit, die Profiling-Ergebnisse von MT5 zu zeigen - wie ich verstanden habe, sind Handelsfunktionen nicht möglich.

Für die OHLC-Umgebung verwende ich die folgenden Funktionen

Vielleicht mache ich etwas falsch?
double iOpen(string symbol,ENUM_TIMEFRAMES tf,int index) {
  if(index < 0) return(-1);
   double Arr[];
   if(CopyOpen(symbol,tf, index, 1, Arr)>0)
        return(Arr[0]);
   else return(-1);
 }

double iClose(string symbol,ENUM_TIMEFRAMES tf,int index) {
  if(index < 0) return(-1);
   double Arr[];
   if(CopyClose(symbol,tf, index, 1, Arr)>0)
        return(Arr[0]);
   else return(-1);
 }

double iHigh(string symbol,ENUM_TIMEFRAMES tf,int index) {
  if(index < 0) return(-1);
   double Arr[];
   if(CopyHigh(symbol,tf, index, 1, Arr)>0)
        return(Arr[0]);
   else return(-1);
 }

double iLow(string symbol,ENUM_TIMEFRAMES tf,int index) {
  if(index < 0) return(-1);
   double Arr[];
   if(CopyLow(symbol,tf, index, 1, Arr)>0)
        return(Arr[0]);
   else return(-1);
 }
 

Sie kopieren alle verfügbaren Balken aus der Geschichte, aber Sie brauchen wirklich nur den einenIndex, nach dem Sie suchen

CopyOpen(Symbol(),0,index,Bars(Symbol(),0)1,Open);
 
Vitaly Muzichenko:

Sie kopieren alle verfügbaren Balken aus der Geschichte, aber Sie brauchen wirklich nur den einenIndex, nach dem Sie suchen

Ich habe es nach deinem Rezept geändert und EA hat keine Bestellungen mehr geöffnet... Vielleicht habe ich es wieder vermasselt?


//-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open(int index)
  {
   double open=0;
   ArraySetAsSeries(Open,true);
   int copied=CopyOpen(Symbol(),0,index,1,Open);
   if(copied>0 && index<copied) open=Open[index];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low(int index)
  {
   double low=0;
   ArraySetAsSeries(Low,true);
   int copied=CopyLow(Symbol(),0,index,1,Low);
   if(copied>0 && index<copied) low=Low[index];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High(int index)
  {
   double high=0;
   ArraySetAsSeries(High,true);
   int copied=CopyHigh(Symbol(),0,index,1,High);
   if(copied>0 && index<copied) high=High[index];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close(int index)
  {
   double close=0;
   ArraySetAsSeries(Close,true);
   int copied=CopyHigh(Symbol(),0,index,1,Close);
   if(copied>0 && index<copied) close=Close[index];
   return(close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double open=0;
   ArraySetAsSeries(OpenI,true);
   int copied=CopyOpen(symbol,timeframe,index,1,OpenI);
   if(copied>0 && index<copied) open=OpenI[index];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   ArraySetAsSeries(LowI,true);
   int copied=CopyLow(symbol,timeframe,index,1,LowI);
   if(copied>0 && index<copied) low=LowI[index];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   ArraySetAsSeries(HighI,true);
   int copied=CopyHigh(symbol,timeframe,index,1,HighI);
   if(copied>0 && index<copied) high=HighI[index];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double close=0;
   ArraySetAsSeries(CloseI,true);
   int copied=CopyHigh(symbol,timeframe,index,1,CloseI);
   if(copied>0 && index<copied) close=CloseI[index];
   return(close);
  }
 
Aleksey Vyazmikin:

Sie haben Ihr Rezept geändert und der EA hat keine Aufträge mehr geöffnet... Vielleicht habe ich es wieder vermasselt?


double Close(int index)
  {
   double close=0;
   ArraySetAsSeries(Close,true);
   int copied=CopyHigh(Symbol(),0,index,1,Close);
   if(copied>0 && index<copied) close=Close[index];
   return(close);
  }

Schließen != Hoch


PS. Bitte schreiben Sie hier, es ist nicht das Thema

Ich bitte die Moderatoren, die Beiträge in das richtige Thema zu verschieben und nicht dieses Thema zu vernachlässigen.

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2012.03.12
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 
Vitaly Muzichenko:

Schließen != Hoch

PS. Posten Sie hier, dies ist nicht das richtige Thema.

Ich fordere die Moderatoren auf, die Beiträge in das richtige Thema zu verschieben und nicht dieses Thema zu überladen.

Danke - korrigiert.

Der Code lautet wie folgt.

//-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open(int index)
  {
   double open=0;
   int copied=CopyOpen(Symbol(),0,index,1,Open);
   if(copied>0) open=Open[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low(int index)
  {
   double low=0;
   int copied=CopyLow(Symbol(),0,index,1,Low);
   if(copied>0) low=Low[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High(int index)
  {
   double high=0;
   int copied=CopyHigh(Symbol(),0,index,1,High);
   if(copied>0) high=High[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close(int index)
  {
   double close=0;
   int copied=CopyClose(Symbol(),0,index,1,Close);
   if(copied>0) close=Close[0];
   return(close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double open=0;
   int copied=CopyOpen(symbol,timeframe,index,1,OpenI);
   if(copied>0) open=OpenI[0];
   return(open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double low=0;
   int copied=CopyLow(symbol,timeframe,index,1,LowI);
   if(copied>0) low=LowI[0];
   return(low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double high=0;
   int copied=CopyHigh(symbol,timeframe,index,1,HighI);
   if(copied>0) high=HighI[0];
   return(high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose(string symbol,ENUM_TIMEFRAMES timeframe,int index)
  {
   double close=0;
   int copied=CopyClose(symbol,timeframe,index,1,CloseI);
   if(copied>0) close=CloseI[0];
   return(close);
  }

Zeit im Tester ist gewachsen - müde vom Warten :)

 

Ich zähle die gehandelten Lose in der Historie für den aktuellen Monat.

   double lots=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         if(TimeMonth(OrderCloseTime())==TimeMonth(TimeCurrent()))
            if(OrderType()<2)
               lots+=OrderLots();

Es stellt sich heraus, dass, wenn ich Aufträge für einen bestimmten Zeitraum in der Terminal-Historie anzeige, zum Beispiel für die letzten drei Tage, dannOrdersHistoryTotal() nur die letzten drei Tage sieht.

Ich denke, dass dies nicht korrekt ist.OrdersHistoryTotal() sollte alle Bestellungen für die gesamte Historie anzeigen, aber die Filterung nach Datum und Zeitraum sollte von einem Entwickler durchgeführt werden.

Andernfalls kann ein falsches Ausblenden des Verlaufs durch den Benutzer zu Problemen führen ....