Fehler, Irrtümer, Fragen - Seite 1190

 
Entschuldigung, es ist in MT4
 
Luckhuman:
Entschuldigung, es ist in MT4.
Versuchen Sie, die Richtlinie #property strict hinzuzufügen. Möglicherweise wird ein Fehler in das Protokoll geschrieben.
 
Luckhuman:
Entschuldigung, dies ist in MT4
Leider wird die Funktion CopySpread() in MetaTrader 4 nicht unterstützt (es gab einen Fehler in der Hilfe).
 
Automated-Trading:
Leider wird die Funktion CopySpread() in MetaTrader 4 nicht unterstützt (es gab einen Fehler in der Hilfe).
Wie viele Indikatorpuffer unterstützt der MT4? Ich habe nur 17 Puffer binden können.
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <Object.mqh>

class CDoubleDynArray : public CObject
  {
public:
   double            Buffer[];

                     CDoubleDynArray(void){}
                    ~CDoubleDynArray(void){}
  };

CDoubleDynArray *buffers[];

int OnInit()
  {
//--- indicator buffers mapping
   ArrayResize(buffers,24);
   int i;
   for(i=0;i<ArraySize(buffers);i++)
      buffers[i]=new CDoubleDynArray;

   IndicatorBuffers(ArraySize(buffers));
   SetIndexBuffer(0,buffers[0].Buffer);
   for(i=1;i<ArraySize(buffers);i++)
     {
      if(!SetIndexBuffer(i,buffers[i].Buffer,INDICATOR_CALCULATIONS))
         Print(i," ",GetLastError());
      else
         Print(i," ",ArraySize(buffers[i].Buffer));
     }
//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   IndicatorBuffers(1);
   for(int i=1;i<ArraySize(buffers);i++)
     {
      delete buffers[i];
      buffers[i]=NULL;
     }
   delete buffers[0]; 
   ArrayResize(buffers,0); 
  }

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

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


 
Luckhuman:


Wo im Code sehen Sie, dass nur 17? Sie erstellen 24, nicht wahr?

Zeigen Sie mir, was im Protokoll steht.

 
Luckhuman:
Wie viele Indikatorpuffer unterstützt der MT4? Ich habe nur 17 Puffer binden können.

Im MT4 sind 512 Puffer verfügbar:

Die Anzahl der Puffer darf 512 nicht überschreiten und nicht kleiner sein als der in der Eigenschaft indicator_buffers angegebene Wert. Wenn Ihr benutzerdefinierter Indikator zusätzliche Puffer für die Zählung benötigt, sollten Sie diese Funktion verwenden, um die Gesamtzahl der Puffer anzugeben.

In diesem Beispiel müssen Sie eine Zeile hinzufügen:

#property indicator_buffers 24
IndicatorBuffers - Документация на MQL4
  • docs.mql4.com
IndicatorBuffers - Документация на MQL4
 
Automated-Trading:


In diesem Beispiel müssen Sie eine Zeile hinzufügen:

Können wir eine Warnung wie in MT5 über fehlende Grundstücke ausgeben?
 
Automated-Trading:

Im MT4 sind 512 Puffer verfügbar:

In diesem Beispiel müssen wir eine Zeile hinzufügen:

In dieser Zeile gebe ich die Anzahl der Puffer an

IndicatorBuffers(ArraySize(buffers));

Hier ist ein Screenshot des Ergebnisses

 
Automated-Trading:

Im MT4 sind 512 Puffer verfügbar:

Das Beispiel sollte um eine Zeile ergänzt werden:

#property indicator_buffers 24

Mit dieser Linie funktioniert es. Aber dann funktioniert die Funktion IndicatorBuffers() nicht, weil sie im Code mit dem Wert 24 verwendet wird

Bitte entschuldigen Sie mich. Ich habe den Code auf ein Testbeispiel reduziert, ausgehend von einem Vorlagenindikator. Der Indikator enthielt die folgende Zeile

#property indicator_buffers 1
#property indicator_plots   1