BB-Arrays haben alle den selben Wert

 

Hallo, ich stehe gerade aufm Schlauch, weil meine BB-Arrays alle den selben Wert haben und ich finde den Fehler nicht:

ArraySetAsSeries(buBBUpper,true);
ArraySetAsSeries(buBBMiddle,true);
ArraySetAsSeries(buBBLower,true);

bbHandle = iBands(_Symbol,inpTimeframe,inpBBPeriod,inpBBShift,inpBBDeviation,inpAppliedPrice);

if(CopyBuffer(bbHandle,0,0,toCopy,buBBUpper) != toCopy) return;
if(CopyBuffer(bbHandle,1,0,toCopy,buBBLower) != toCopy) return;
if(CopyBuffer(bbHandle,2,0,toCopy,buBBMiddle) != toCopy) return;

Comment("Upper: " + buBBUpper[1] + "\nMiddle: " + buBBMiddle[1] + "\nLower: " + buBBLower[1]);
 
Eigentlich ist das zu wenig Code, aber schau Dir mal die Werte an von ToCopy-1, ToCopy-2, ...
 
Carl Schreiber:
Eigentlich ist das zu wenig Code, aber schau Dir mal die Werte an von ToCopy-1, ToCopy-2, ...

Ich verstehe nicht ganz, sagt dieser Wert nicht einfach aus, wie viele Werte kopiert werden sollen?

 
UnknownInnocent:

Ich verstehe nicht ganz, sagt dieser Wert nicht einfach aus, wie viele Werte kopiert werden sollen?

In den Docs steht, in welcher Richtung die Werte sind, daher nicht nur das 0-Ende testen sondern auch das andere.

Dokumentation zu MQL5: Zugang zu Zeitreihen und Indikatoren / CopyRates
Dokumentation zu MQL5: Zugang zu Zeitreihen und Indikatoren / CopyRates
  • www.mql5.com
Abzählen der Elemente von der Startposition wird von der Gegenwart zur Vergangenheit durchgeführt, d. h. Startposition, 0, bedeutet die laufende Bar. Beim Kopieren der im voraus unbekannten Anzahl der Daten ist es empfehlenswert, als Feld-Rezipient ein dynamisches Feld zu verwenden, denn wenn die Anzahl der Daten weniger (oder mehr) ist als ein...
 
Bin mir ja nicht sicher, aber müsste es nicht tocopy + 1 sein, das 0te element wird ja auch kopiert
 
amando:
Bin mir ja nicht sicher, aber müsste es nicht tocopy + 1 sein, das 0te element wird ja auch kopiert

Ein Array mit Größe n läuft von 0 .. (n-1). Ein [n] würde zu einem Array-Fehler führen.

 

Etwas mehr Code wäre hilfreich gewesen. ich sehe absolut kein Problem:

#define TFRAME ENUM_TIMEFRAMES
#define APRICE ENUM_APPLIED_PRICE

input TFRAME   inpTimeframe   =  PERIOD_CURRENT; //BB Timeframe
input int      inpBBPeriod    =              20; //BB Period
input double   inpBBDeviation =               2; //BB Deviation
input int      inpBBShift     =               0; //BB Shift
input APRICE   inpAppliedPrice=     PRICE_CLOSE; //BB Price

double buBBUpper[];
double buBBMiddle[];
double buBBLower[];
int    bbHandle;
int    toCopy=2;
int    toDisp=0;

int OnInit()
{
   bbHandle = iBands(_Symbol,inpTimeframe,inpBBPeriod,inpBBShift,inpBBDeviation,inpAppliedPrice);
   if(bbHandle==INVALID_HANDLE)
      return(INIT_FAILED);

   ArraySetAsSeries(buBBUpper, true);
   ArraySetAsSeries(buBBMiddle,true);
   ArraySetAsSeries(buBBLower, true);

   return(INIT_SUCCEEDED);
}

void OnTick()
{
   if(CopyBuffer(bbHandle,0,0,toCopy,buBBUpper ) != toCopy) return;
   if(CopyBuffer(bbHandle,1,0,toCopy,buBBLower ) != toCopy) return;
   if(CopyBuffer(bbHandle,2,0,toCopy,buBBMiddle) != toCopy) return;

   Comment("\nUpper: "  + DoubleToString(buBBUpper [toDisp],_Digits) + 
           "\nMiddle: " + DoubleToString(buBBMiddle[toDisp],_Digits) + 
           "\nLower: "  + DoubleToString(buBBLower [toDisp],_Digits)
          );
}
 
Otto Pauser:

Etwas mehr Code wäre hilfreich gewesen. ich sehe absolut kein Problem:

Well... es gab auch kein Problem, es war einfach nur n dummer Fehler: Ich habe den Wert von Shift und Deviation vertauscht, also war Deviation = 0 und somit konnte es ja nicht gehen.

Zu deinem Code hätte ich noch ne Frage:

Wieso schreibst du 

#define TFRAME ENUM_TIMEFRAMES
#define APRICE ENUM_APPLIED_PRICE

input TFRAME   inpTimeframe   =  PERIOD_CURRENT; //BB Timeframe
input APRICE   inpAppliedPrice=     PRICE_CLOSE; //BB Price

und nicht einfach

input ENUM_TIMEFRAMES      inpTimeframe               =   PERIOD_CURRENT;    // timeframe
input ENUM_APPLIED_PRICE   inpAppliedPrice            =      PRICE_CLOSE;    // type of price
 
UnknownInnocent:

Well... es gab auch kein Problem, es war einfach nur n dummer Fehler: Ich habe den Wert von Shift und Deviation vertauscht, also war Deviation = 0 und somit konnte es ja nicht gehen.

Zu deinem Code hätte ich noch ne Frage:

Die #define sind bei mir in einer separaten mqh definiert, die ich immer mit #include einbinde.

Sind einfach simple Abkürzungen, bin halt als alter Progger schreibfaul.

Klar geht

input ENUM_TIMEFRAMES      inpTimeframe               =   PERIOD_CURRENT;    // timeframe
input ENUM_APPLIED_PRICE   inpAppliedPrice            =      PRICE_CLOSE;    // type of price

braucht halt mehr Platz bei den Eingabevariablen.

Wichtig ist das Erzeugen des Handles in der OnInit(). Ist sonst eine enorme Bremse falls du das in der OnTick() immer wieder neu erstellst!
Grund der Beschwerde: