Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 664

 
Roman Sharanov:

Ich verstehe nicht, wie man Indikatoren schreibt, was ist das Problem?

Ich brauche eine Linie, die den Preisunterschied zwischen active_1 und active_2 anzeigt

es funktioniert

Ich brauche auch eine durchschnittliche ma_period ma_period auf dieser Linie gezeichnet werden, gibt es ein Problem mit ihm - es ist nicht angezeigt

Sie überprüfen das Ergebnis des Kopierens nicht.

Sie kopieren den gesamten Verlauf bei jedem Ticken.

Die Anzahl der Bars(), nicht rates_total, sollte von einem nicht-nativen Symbol (nicht dem Symbol des aktuellen Diagramms) kopiert werden.

Alle zwei Minuten müssen Sie z. B. die aktuelle Barzeit für ein nicht einheimisches Symbol abfragen, um dessen Verlaufsdaten auf dem neuesten Stand zu halten.

Verwendung von SimpleMAOnBuffer() zur Glättung der dataBuffer-Daten

 
Artyom Trishkin:

Sie überprüfen das Ergebnis des Kopierens nicht.

Sie kopieren die gesamte Historie auf jedes Häkchen.

Bei einem nicht einheimischen Symbol (nicht dem aktuellen Diagrammsymbol) sollte die Zahl Bars() kopiert werden, nicht rates_total.

Alle zwei Minuten müssen Sie z. B. die aktuelle Taktzeit für ein nicht einheimisches Symbol abfragen, um seine Verlaufsdaten auf dem neuesten Stand zu halten.

Verwendung von SimpleMAOnBuffer() zur Glättung der dataBuffer-Daten

so? funktioniert überhaupt nicht mehr

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   int bars1 = Bars(active_1, timeframe), bars2 = Bars(active_2, timeframe);
   
   if(CopyClose(active_1,timeframe,0,bars1,firstBuffer) < 0) return 0;
   if(CopyClose(active_2,timeframe,0,bars2,secondBuffer) < 0) return 0;
   if(bars1 != bars2) return 0;
   int first, bar;
   
   if(prev_calculated == 0) first = begin; else first = prev_calculated - 1;
   
   for(bar = first; bar<bars1; bar++){
      dataBuffer[bar] = firstBuffer[bar]-secondBuffer[bar];
      maBuffer[bar] = SimpleMA(bar, ma_period, dataBuffer);
   }
   SimpleMAOnBuffer(bars1, prev_calculated, begin, ma_period, dataBuffer, maBuffer);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnTimer(){
   iTime(active_1,timeframe,1);
   iTime(active_2,timeframe,1);
}
void OnDeinit(const int reason){
   EventKillTimer();
}
 

Grüße.

Könnten Sie mir bitte sagen, wie ich einige Werte aufzeichnen kann, wenn ein EA einen Auftrag eröffnet, so dass sie sich auf diesen bestimmten Auftrag beziehen, z. B. auf ein Ticket.

 
Andrey Sokolov:

Grüße.

Könnten Sie mir bitte sagen, wie ich einige Werte aufzeichnen kann, wenn ein EA einen Auftrag eröffnet, so dass sie sich auf diesen bestimmten Auftrag beziehen, z. B. auf ein Ticket.

In dem Kommentar

 

Ich möchte die Volatilität beobachten. Zu diesem Zweck berechne ich die Close-Open-Differenz im Array tmp1 und verwende sie dann, um den SMA für einen bestimmten Zeitraum zu zeichnen.


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[])
  {


int i;
double tmp1[];

      Print("rates_total = ",rates_total);
      for(i=1; i<rates_total; i++)
      {
      tmp1[i]=MathMax(open[i],close[i])-MathMin(open[i],close[i]);      
      ip1Buf[i]=iMA(NULL,0,1,0,0,tmp1[i],0);
      }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }


Beim Kompilieren treten keine Fehler auf, das Terminal zeichnet den Indikator nicht, das Log zeigt CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Dies ist die Zeile, in der die DifferenzMathMax-MathMin berechnet wird, woran kann das liegen?


 
psyman:

Ich möchte die Volatilität beobachten. Zu diesem Zweck berechne ich die Close-Open-Differenz im Array tmp1 und verwende sie dann, um den SMA für einen bestimmten Zeitraum zu zeichnen.



Beim Kompilieren treten keine Fehler auf, das Terminal zeichnet den Indikator nicht, das Log zeigt CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Dies ist die Zeile, in der die DifferenzMathMax-MathMin berechnet wird, woran kann das liegen?


Ich habe den Code nicht verstanden, aber wenn ja:

for(i=1; i<rates_total-1; i++)
 

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen für Anfänger in MQL4, Hilfe und Diskussion über Algorithmen und Codes

Vitaly Muzichenko, 2018.10.16 12:13

Ich habe mich nicht wirklich mit dem Code befasst, aber wenn es so ist:

for(i=1; i<rates_total-1; i++)

Das funktioniert nicht.


UPD

Vereinfachte Zeichenkette auf ein Minimum reduziert tmp1[i]=close[i]; Fehler bleibt derselbe.

 
psyman:

Ich möchte die Volatilität beobachten. Zu diesem Zweck berechne ich die Close-Open-Differenz im Array tmp1 und verwende sie dann, um den SMA für einen bestimmten Zeitraum zu zeichnen.



Beim Kompilieren treten keine Fehler auf, das Terminal zeichnet den Indikator nicht, das Log zeigt CADJPY,H1: array out of range in '_t1.mq4' (65,11)

Dies ist die Zeile, in der die DifferenzMathMax-MathMin berechnet wird.


Das Array tmp[] wird als dynamisches Array deklariert und hat anfangs die Länge Null. Daher der Fehler.

Sie sollten dieses Array als Indikatorpuffer für Berechnungen deklarieren.

 
 

Forum für Handel, automatisierte Handelssysteme und Strategietests

Alle Fragen für Anfänger in MQL4, Hilfe und Diskussion über Algorithmen und Codes

Alexey Viktorov, 2018.10.16 12:31

Das Array tmp[] wird als dynamisches Array deklariert und hat anfangs die Länge Null. Daher der Fehler.

Dieses Array sollte als Indikatorpuffer für Berechnungen deklariert werden.


Warum können wir nicht ein dynamisches Array verwenden?

In diesem Fall habe ich dort den Schlusskurs ohne Berechnungen überschrieben.

Wo kann ich nachlesen, wie man Indikatorpuffer verwendet?