Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 133

 
Alexey Viktorov:
Und warum?
bereits ausprobiert
 
Nikolai Semko:
bereits ausprobiert

Aber hier

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Eigenheiten von mql5, Tipps und Tricks

Nikolai Semko, 2019.04.03 22:33

Ja, danke, Alexey. Ich hatte diese Funktion vergessen. Ich habe es schon einmal gesehen, aber nie benutzt.

Ich habe es ausprobiert. Irgendetwas läuft hier schief. Es wird gelöscht, dann wird es gelöscht, aber nach dem Löschen bleibt alles stehen.

Ich habe einfach eine Codezeile in die Funktion DrawSetup() vor der Berechnung des Indikators mit den folgenden Parametern eingefügt.

IndicatorRelease(handle);
handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
for(int i=0;i<N;i++) handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);

Der Indikator funktioniert einfach nicht mehr, und ich kann den Grund dafür immer noch nicht verstehen.

Ich stimme Ihnen absolut zu. Es ist einfach ein nutzloses Spielzeug.


Das ist überhaupt nicht so.
 
Alexey Viktorov:

Aber hier


Das ist überhaupt nicht der Fall.
Ich habe es schon einmal versucht und den Code von mir selbst als erfolglos gelöscht.
 
Sie könnten auch versuchen, alle Henkel in einer Kette freizugeben, beginnend mit dem am tiefsten vergrabenen.
 
Andrey Khatimlianskii:
Sie können auch versuchen, alle Griffe in einer Kette loszulassen, beginnend mit dem am tiefsten vergrabenen.

Nun, es funktioniert nicht. Oder wenn es doch funktioniert, werden einige Bremsen eingesetzt.

void BuildMaFromMa()
  {
   static int h[];
   for(int i=0;i<ArraySize(h);i++) IndicatorRelease(h[i]);
   handle=iMA(_Symbol,_Period,per1,0,MaMethod,PriceBase);
   ArrayResize(h,N);
   if (N>0) h[0]=handle; 
   for(int i=0;i<N;i++)
     {
      handle=iMA(_Symbol,_Period,per2,0,MaMethod,handle);
      h[i]=handle;
     }
  }

Wenn Sie die Zeile mitIndicatorRelease dokumentieren, funktioniert alles gut, aber ansonsten sind einige Bremsen angezogen und ich verstehe nicht, was passiert.

Dateien:
 

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Indikatoren: MaFromMa

Nikolai Semko, 2019.04.04 01:00

Ich wollte die Leistung von Rekursion und Iteration vergleichen.

Es stellt sich heraus, dass die Rekursion mehr als doppelt so schnell ist...

Wahrscheinlich, weil der Stapel schneller ist...

Das ist eine erstaunliche Sache. Ich hatte den gegenteiligen Effekt erwartet. ))

#define  size 1000000
uint sum1=0,sum2=0;
int i;
int X[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(X,size);
   for(i=0;i<size;i++) X[i]=rand();

   ulong t=GetMicrosecondCount();
   i=0;
   while(i<size) { sum1+=X[i]; i++;}
//Recursion();
   ulong t1=GetMicrosecondCount()-t;

   t=GetMicrosecondCount();
   i=0;
//while(i<size) { sum1+=X[i]; i++;}
   Recursion();
   ulong t2=GetMicrosecondCount()-t;
   Print("время выполнения цикла    = "+string(t1)+" , контрольная сумма = "+string(sum1));
   Print("время выполнения рекурсии = "+string(t2)+" , контрольная сумма = "+string(sum2));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Recursion()
  {
   sum2+=X[i];
   i++;
   if(i<size) Recursion();
  }
//+------------------------------------------------------------------+
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1667 , контрольная сумма = 3510404212
2019.04.03 19:06:40.776 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 697 , контрольная сумма = 3510404212
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1653 , контрольная сумма = 3492310620
2019.04.03 19:06:41.697 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 699 , контрольная сумма = 3492310620
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1529 , контрольная сумма = 3510953577
2019.04.03 19:06:42.549 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 696 , контрольная сумма = 3510953577
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1559 , контрольная сумма = 3512212419
2019.04.03 19:06:43.332 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 698 , контрольная сумма = 3512212419
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1707 , контрольная сумма = 3497178596
2019.04.03 19:06:44.098 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 472 , контрольная сумма = 3497178596
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 2088 , контрольная сумма = 3485051380
2019.04.03 19:06:44.839 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 482 , контрольная сумма = 3485051380
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1612 , контрольная сумма = 3487817581
2019.04.03 19:06:45.538 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 448 , контрольная сумма = 3487817581
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1742 , контрольная сумма = 3475121003
2019.04.03 19:06:46.397 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 497 , контрольная сумма = 3475121003
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения цикла    = 1701 , контрольная сумма = 3485556615
2019.04.03 19:06:47.262 TestLoopVsRecursion (EURUSD,M1) время выполнения рекурсии = 701 , контрольная сумма = 3485556615

 

Habt ihr eine bewährte und zuverlässige Lot-Berechnungsfunktion für MT5, ohne Stop-Loss?

Teilen...

 
Während der Optimierung kann die folgende Meldung im Prüfprotokoll erscheinen
Tester  OnTesterInit failed. Optimization cannot be started.


Es ist fast unmöglich, die Ursache aus dieser Meldung zu verstehen, da es keinerlei Verweis auf das Terminalprotokoll gibt. Hier müssen Sie nach der Ursache suchen.


Hier ist ein Beispiel für einen solchen EA

input int Range = 0; // 1..9

int Tmp = 1 / Range;

void OnTesterDeinit() {}

double OnTester()
{
  return(Tmp);
}


Der Expert Advisor optimiert in einem Bereich, in dem Range nicht Null erreicht. Aber gleichzeitig scheitert die Optimierung.

Der Grund dafür ist, dass der Frame-Modus von Expert Advisors immer mit den in EX5 fest vorgegebenen Eingabeparametern gestartet wird. In diesem Fall führt der Frame-Modus zu einerDivision durch Null.

Wenn OnTesterDeinit aus dem Quellcode entfernt wird, läuft die Optimierung ohne Probleme.


Es wäre schön, wenn das TesterJournal in solchen Situationen einen Verweis auf das TerminalJournal hätte. Andernfalls ist es nicht immer möglich zu verstehen (Debug ist während der Optimierung nicht verfügbar), was vor sich geht.

 

Es kann vorkommen, dass EAs nicht in einem Diagramm starten.

Auf der linken Seite ist der übliche Cursor zu sehen, wenn Sie einen EA auf ein Diagramm ziehen. Auf der rechten Seite ist unser Koffer zu sehen.


Es werden keine Einträge im Protokoll vorgenommen. Im Allgemeinen ist der Balkencursor das einzige visuelle Erkennungsmerkmal für solche Diagramme.


Wenn Sie die tpl-Vorlage speichern, werden diese Diagramme durch eine einzelne Zeile gekennzeichnet

tester=1

Dies ist wahrscheinlich die einzige programmatische Möglichkeit, den Typ des Diagramms zu identifizieren. Es ist ein Rahmendiagramm.


Wenn Sie sich also vor dem automatisierten Handel schützen wollen, können Sie nur mit diesen Charts arbeiten.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

Nikolai Semko:

Synthetische Werkzeugformel gibt Fehler "Unbekannter Parsing-Fehler", wenn der Symbolname mit einem Punkt beginnt (oder einen Punkt enthält).

Slawa, 2019.04.19 06:08

Wenn ein Zeichenname einen Punkt, einen Bindestrich oder etwas anderes enthält, das Sie nicht verstehen (wie wäre es mit "RTS-12.19"?), dann muss der Name von Apostrophen umgeben werden