Fehler, Irrtümer, Fragen - Seite 270

 
Rosh:

Führen Sie einen solchen Indikator aus und Sie werden sich selbst davon überzeugen:

Also in

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

open[] ist auch keine Zeitreihe?

Ich verstehe nichts, bitte geben Sie mir ein Beispiel für eine Zeitreihe.

 
Voodoo_King:

Build 375. Der Fehler ist wirklich schlimm, dadurch habe ich schon einiges an Geld verloren...

Die EA-Parameter werden nach dem Schließen/Öffnen des Terminals nicht auf die Einstellungen zurückgesetzt.

Genauer gesagt, kann ein Teil davon wiederhergestellt werden (z. B. 3 von 6), während der Rest auf die Standardeinstellungen zurückgesetzt wird.


381 bauen. NICHTS HAT SICH GEÄNDERT!!!

Bei jedem Neustart des Terminals werden die EAs mit anderen Parametern initialisiert (was immer sie wollen).

Falsche Initialisierung der Expertenparameter

 
AlexSTAL:

Diese Funktion prüft die Richtung, nicht die Änderung.

1) Ohne Initialisierung

2) Mit Initialisierung

3) Obiger Code, nur mit der Funktion ArrayGetAsSeries Array-Indexierungsrichtung

Ich habe im Service-Desk einfach einen Fehler bei der Funktionsbezeichnung gemacht


Ja, ich habe den Compilerfehler herausgefunden. Vielen Dank für diese Nachricht. Ein Fix wird im nächsten Build enthalten sein.
 
BoraBo:

Also in

open[] ist auch keine Zeitreihe?

Ich verstehe das nicht, bitte geben Sie mir ein Beispiel für eine Zeitreihe.

Es handelt sich also nicht um eine TK, na und? Setzen Sie ihn mit Set auf eine Zeitreihe und er wird zu einem TC. Ist dies das erste Mal, dass Sie das Terminal starten? Dass es für Sie eine so große Neuigkeit ist. Ich denke, jemand hat gerade geschrieben, dass wir selbst entscheiden sollten, wie wir in unseren Programmen arbeiten - mit TS oder nur mit Arrays.
 
joo:


Deshalb mache ich das in OnCalculate():

Können Sie mir helfen, damitArrayGetAsSeries(low) true ausgibt

 
BoraBo:

Können Sie helfen,ArrayGetAsSeries(low) Ausgabe true?

Ich habe es satt :)) stellen Sie es so ein, wie Sie es wollen und hallo. Es gibt nichts zu überprüfen. :))
 
BoraBo:

Also in

open[] ist auch keine Zeitreihe?

Ich verstehe nichts, bitte geben Sie mir ein Beispiel für eine Zeitreihe.

open[] und alle anderen Arrays in OnCalculate sind Zeitreihen. Ganz am Anfang, als die Sprache MQL5 geschrieben wurde, gab ArrayGetAsSeries() für sie true zurück und ihre Indizierung wurde für sie genau wie für Zeitreihen durchgeführt, d.h. rückwärts.

Aber dann stellte sich heraus, dass es sehr unbequem und unnatürlich ist, Indikatorpufferberechnungen im MQL4-Stil zu schreiben, und es gab nur einen Ausweg - die Indizierung der Zeitreihen für eine bequeme Verwendung umzukehren. In diesem Sinne haben wir begonnen, benutzerdefinierte Indikatoren zu schreiben:

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time
                 const double& open[],       // Open
                 const double& high[],       // High
                 const double& low[],        // Low
                 const double& close[],      // Close
                 const long& tick_volume[],  // Tick Volume
                 const long& volume[],       // Real Volume
                 const int& spread[]         // Spread)
{
//---- переворачиваем все таймсерии, чтобы ими было удобно пользоваться, как обычными массивами
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
   ArraySetAsSeries(time,false);
   ArraySetAsSeries(tick_volume,false);
   ArraySetAsSeries(volume,false);
   ArraySetAsSeries(spread,false);
   ArraySetAsSeries(open,false);
.... остальной код
}

Aber jedes Mal, wenn wir ein solches Durcheinander von Umwandlungen schreiben mussten, stellte sich heraus, dass es auch keine gute Idee war. Daher wurde beschlossen, diese Zeitreihen mit Indizierung zu übergeben, wie bei üblichen Arrays. So kommt es zu diesem Paradoxon, wenn Zeitreihen nicht wie Zeitreihen indiziert werden. Deshalb wird in der Hilfe darauf hingewiesen, dass die Indizierungsreihenfolge überprüft und ggf. entsprechend eingestellt werden sollte.

 
BoraBo:

Helfen Sie mirArrayGetAsSeries(low) Ausgabe wahr zu machen

Es ist wahr, aber aufgrund eines Compilerfehlers wird sein Wert fälschlicherweise als Parameter ausgegeben. Prüfen Sie es so:

#property script_show_inputs
input bool isTimeSeria=true;


double Ups[];
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

//--- установим для массивов признак таймсерии
   Print("Установим для массивов признак таймсерии как ",isTimeSeria);
   ArraySetAsSeries(Ups,isTimeSeria);

//--- Проверим таймсерии
   if(ArrayGetAsSeries(Ups))
     {
      Print("1:  ArrayGetAsSeries(Ups)=true");
      Print("2:  ArrayGetAsSeries(Ups)=",ArrayGetAsSeries(Ups));
     }
   else
     {
      Print("ArrayGetAsSeries(Ups)=true!!!");
     }
  }
//+------------------------------------------------------------------+


Ergebnis:


 
Rosh:

Es gibt true, nur wegen eines Compilerfehlers wird sein Wert als Parameter falsch ausgegeben. Prüfen Sie es so:


Ergebnis:


Danke, ich habe es herausgefunden.

ArrayIsSeries() undArrayGetAsSeries() in dem bedingten if()-Operator funktionieren wie beschrieben, aber Print() gibt immer false aus.


 

Die Entwickler.

1. bitte überprüfen Sie das Laden des Verlaufs in den Tester (dies ist das erste Mal, dass ich teste).

Ich teste EURUSD mit einem Standard-MACD-Sample auf H1 mit dem Intervall "letzter Monat".

Ich habe 57 % der heruntergeladenen Daten erreicht und bin erfolgreich eingefroren, mit nur dieser Zeile im Protokoll

2011.01.19 17:16:23	Tester	EURUSD: history preliminary downloading started

2. Ist es möglich, die Hebelwirkung von 1:200 und 1:500 in den neuen Builds im Tester konstant zu machen?

Ich verstehe, dass nicht alle Broker eine solche Hebelwirkung haben, vor allem auf MT5, aber in der Strategie-Tester sollte dies wahrscheinlich gelassen werden, weil es bequemer ist, Strategien auf einer neuen Plattform zu testen.