Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 991

 
kopeyka2:

Das ist genau das, was ich dachte. Das Problem des Missverständnisses ist das Wort "Parameter". Also habe ich begonnen, ALLE Variablen zu betrachten, die an dem Handle --> CopyBuffer beteiligt sind

1) Meine Frage von Anfang an war, den Zeitrahmen SCREEN zu wechseln, um die Griffdaten zu speichern. Wie in MT4.

Und tatsächlich sieht es so aus:

IMMER und für ALLE Zeitrahmen ergibt sich der gleiche Wert von 10

Da ich hier nichts fand, ging ich weiter.

2) Und ich zitiere:"Holt die Daten des angegebenen Puffers des angegebenen Indikators in der angegebenen Menge in das Puffer-Array".

Das heißt, wenn wirden Zähler von Hand einstellen, sollten wir ein INTERVALL mit den Werten haben . Und da sind sie! BUT!!!!!! Nur wenn die Griffperiode der

PERIOD_H1Zeitrahmen auf dem Bildschirm. Alle Werte werden deutlich übertragen. Wechselt man jedoch zu einem anderen Zeitrahmen, werden KEINE Daten auf dem Bildschirm angezeigt.

Sie werden NICHT in irgendeiner Weise übertragen!!!! Und genau das war meine Frage. Und die Anzahl der Balken ist hier nicht so wichtig, wenn sie NICHT dort sind!!!!


Ich habe mir den vorgeschlagenen IndikatorMTF_LRMA.mq5 angesehen , aber es ist derselbe. Es wird zu einem anderen Zeitrahmen auf dem Bildschirm gewechselt, und die Daten gehen durch den Bildschirmzeitrahmen. Ich brauche es auf einem Handheld.

Zum Beispiel: iClose(NULL, PERIOD_H1, 5); auf allen Timeframes ergibt das den gleichen Wert - 10 Bars auf H1.

Bisher waren alle Beispiele auf CopyBuffer Zählerkorrektur. Aber das Feld ist leer.


Sie irren sich. Die Handhabung gibt Daten in jedem beliebigen Zeitrahmen. Ich werde Ihnen in etwa 10 Stunden ein Beispiel geben. Auf meinem Handy kann ich das nicht tun.
 
Artyom Trishkin:
Sie irren sich. Die Handhabung gibt Daten in jedem beliebigen Zeitrahmen. Ich werde Ihnen in etwa 10 Stunden ein Beispiel geben. Von meinem Handy aus wird das nicht möglich sein.

GUT. Vielen Dank für die Antwort.


Ich habe mich selbst korrigiert.

Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н1. 

Ich dachte, es könnte so sein

MqlParam params[]; 
//--- create iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE); 
   ArrayResize(params,4); 
//--- set ma_period 
   params[0].type         =TYPE_INT; 
   params[0].integer_value=0; 
//--- set ma_shift 
   params[1].type         =TYPE_INT; 
   params[1].integer_value=0; 
//--- set ma_method 
   params[2].type         =TYPE_INT; 
   params[2].integer_value=MODE_EMA; 
//--- set applied_price 
   params[3].type         =TYPE_INT; 
   params[3].integer_value=PRICE_CLOSE; 
//--- create MA 
   h_MA=IndicatorCreate("EURUSD",PERIOD_M15,IND_MA,4,params); 
//--- release indicators (first h_MACD) 
   
  if(h_MA==INVALID_HANDLE)
     {
      Print("The iMA (",string(PERIOD_M15),") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//---
   return(INIT_SUCCEEDED);

Aber wenn Sie meine Meinung ändern, werde ich auf die erste Methode warten, um den Wert des technischen Indikators (iMA) zu erhalten. Aber ich verstehe es immer noch nicht.

 
kopeyka2:

GUT. Vielen Dank für die Antwort.


Ich habe mich selbst korrigiert.

Ich dachte, es könnte so sein

Aber wenn Sie meine Meinung ändern, werde ich auf die erste Methode warten, um den Wert des technischen Indikators (iMA) zu erhalten. Aber jetzt verstehe ich es nicht mehr...

Ich habe oben gezeigt, dass die Anzahl der Balken auf den verschiedenen TFs unterschiedlich ist und somit auch die Anzahl der zu kopierenden Balken, je nach TF, auf der der Indikator berechnet werden soll. Sie sollten die mit BarsCalculated() berechnete Anzahl der Balken überprüfen und als Grundlage verwenden.

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   if(rates_total==prev_calculated) return(rates_total);
//---
   int    i;
   double diff;
//--- check for rates count
   if(rates_total<=ExtPeriodRSI)
      return(0);
//---
   if(TF!=PERIOD_CURRENT)
   {
      if(handle==INVALID_HANDLE)
        {
         handle=iCustom(Symbol(),TF,ind_name,Variant,RSIPeriod,Levl_Up,Levl_Down,PERIOD_CURRENT);
         return(0);
        }
      else
        {
         int bars_calculated=BarsCalculated(handle);
                  //Print("Начнем расчет - " , bars_calculated);
         if(bars_calculated<=0) return(0);
         if(Bars(Symbol(),TF)!=bars_calculated)
           {
            for(i=rates_total-prev_calculated-1;i>=0;i--)
              {
               Delta[i]=0.0;   
              }
            return(prev_calculated);
           } 
        }
 
Aleksey Vyazmikin:

Ich habe oben gezeigt, dass die Anzahl der Balken auf verschiedenen TFs unterschiedlich ist, und daher sollten Sie je nach TF eine unterschiedliche Anzahl von Balken zum Kopieren anfordern, die vom Indikator berechnet werden sollte. Sie sollten die vom Indikator mittels BarsCalculated() berechnete Anzahl der Balken überprüfen und als Basis verwenden, hier ein Beispiel für MTF

Ich danke Ihnen. Ich werde es versuchen. Aber wie bereits erwähnt, ist das Feld insgesamt leer. Ich habe handschriftliche Sdigs auf dem Array gemacht. Es ist alles leer.
 
kopeyka2:
Ich danke Ihnen. Ich werde es ausprobieren. Aber wie bereits erwähnt, ist das Feld insgesamt leer. Ich habe handschriftliche Sdigs auf dem Array gemacht. Es ist alles leer.
Ignorieren Sie, dass wir auf das Laden von Daten aus einem anderen Zeitrahmen warten müssen? Ich habe Ihnen Beispiele genannt. Die Daten im angezeigten Indikator stammen nur aus höheren Zeitrahmen. Wenn der Wert kleiner oder gleich dem aktuellen Zeitrahmen ist, werden die Daten dem aktuellen Zeitrahmen entnommen. All das steht im Code, aber Sie haben sich nicht die Mühe gemacht, es zu überprüfen. Aber Sie geben eine Erklärung ab.
 
Artyom Trishkin:
Ignorieren Sie, dass Sie warten müssen, bis Daten aus einem anderen Zeitrahmen geladen werden? Ich habe Ihnen Beispiele genannt. Die Daten im angezeigten Indikator stammen nur aus höheren Zeitrahmen. Wenn der Wert kleiner oder gleich dem aktuellen Zeitrahmen ist, werden die Daten dem aktuellen Zeitrahmen entnommen. All das steht im Code, aber Sie haben sich nicht die Mühe gemacht, es zu überprüfen. Aber Sie geben eine Erklärung ab.
Ich habe nicht nur geschaut, ich habe Ihren Indikator in seine Einzelteile zerlegt. Die Idee der Datenverzögerung hatte ich von Anfang an. Und sofort, beim ersten Blick, sah ich Ihren Timer. Ich werde mich in dieser Richtung umsehen.
 
kopeyka2:
Ich habe nicht nur nachgesehen, sondern Ihren Indikator Stück für Stück auseinandergenommen. Hier war die Idee mit der Datenverzögerung von Anfang an. Und sofort, beim ersten Blick, sah ich Ihren Timer. Ich werde mich in dieser Richtung umsehen.
Der letzte Zyklus mit der Datenumwandlung in den aktuellen Zeitrahmen kommentiert, und in jedem grafischen Puffer übergeben Sie die Daten aus den berechneten Puffern MAshek, und Sie werden auf dem Diagramm sehen, was Sie sehen wollen.
 

vorläufig

anderer (nicht einheimischer) Zeitrahmen


 
kopeyka2:

vorläufig

anderer (nicht einheimischer) Zeitrahmen


Haben Sie den Rückgabestring absichtlich auskommentiert, falls die Daten nicht empfangen werden? Und warum? Wenn man die Räder abschraubt und sagt, der Motor brummt, das Lenkrad dreht sich, aber das Auto fährt nicht, und deshalb ist es kaputt, dann ist das ziemlich hart.
 
kopeyka2:
Ich werde es versuchen. Ich werde es versuchen. Aber wie ich bereits erwähnt habe, ist das Feld überhaupt leer. Ich benutzte meine Hände, um die Anordnung abzulesen. Es ist alles leer.

Vorhin habe ich Ihnen einen Teil des Codes Ihres Indikators mit Druck gegeben, haben Sie versucht, ihn zu kopieren? Im Protokoll erscheint nichts, keine Fehler oder Zahlen?

Grund der Beschwerde: