CopyHigh

 

Hallo,


stehe gerade ein wenig auf der Leiter,


wenn ich die CopyHigh() funktion verwende, 

double iHigh(string symbol,ENUM_TIMEFRAMES timeframe,int index) 
  { 
   double high=0; 
   ArraySetAsSeries(High,true); 
   int copied=CopyHigh(symbol,timeframe,0,Bars(symbol,timeframe),High); 
   if(copied>0 && index<copied) high=High[index]; 
   return(high); 
  } 

benötige ich dann auch 


   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(NULL,0,0,16,rates);
   if(copied<=0)
      Print("Fehler des Kopieren von Preisdaten ",GetLastError());


wenn ja warum? 

wenn nein, warum nicht?


danke

amando

 

CopyHigh() füllt ein Array mit higs in der gewünschten Anzahl. Also nur die highs. Die Definition von high ist nicht. richtig muss ein Array sein (dynamisch oder statisch)

CopyRates liefert ein Array von MqlRates, kann auch dynamisch oder statisch definiert sein.

Steht aber alles genau in der Reference.

int to_copy = 10;
double highs[];

if(CopyHigh(symbol,timeframe,0,to_copy,highs)!=to_copy) return;   // hat sich vielfach bewehrt
 
Otto Pauser:

CopyHigh() füllt ein Array mit higs in der gewünschten Anzahl. Also nur die highs. Die Definition von high ist nicht. richtig muss ein Array sein (dynamisch oder statisch)

CopyRates liefert ein Array von MqlRates, kann auch dynamisch oder statisch definiert sein.

Steht aber alles genau in der Reference.

CopyHigh ist ja eine Integer

was bekomme ich da zurück? bekomme ich da die 10 Hochwerte, z.b 1,25000, und fülle die in ein Arry?


Das die 19 Hochwerte könnte ich mir dann in einer Schleife in die Print Funktion geben zur Kontrolle oder?

 
Lies die Definition von CopyHigh(). Zurückgegeben wird die Anzahl der kopierten Werte (quasi Größe des Arrays) und das als Referenz übergebene Array In Ottos Beispiel highs[] - F1, wenn der Kursor auf CopyHigh steht!
 

Die Hüchst und Tiefstwerte bekommst du mit ArrayMaximum(....) und ArrayMinimum(......)

Das ist aber der Index nicht der Wert!

Das Array sollte als Series definiert werden, damit Index 0 die aktuelle Kerze ist.

Ich such mal in meinen Schätzen ....... gefunden:

double GetMaxVal(double const &Array[], int count)
{
   int i = ArrayMaximum(Array, 0, count);
   return(Array[i]);
}

double GetMinVal(double const &Array[], int count)
{
   int i = ArrayMinimum(Array, 0, count);
   return(Array[i]);
}

Das sucht dir von der aktuellen Kerze (in die Vergangenheit) in einer bestimmten Periode das High oder Low.

double high[];
double low[];
int count = 24;

ArraySetAsSeries(high,true);
ArraySetAsSeries(low ,true);

if(CopyHigh(_Symbol,_Period,0,count,high)!=count) return;
if(CopyLow (_Symbol,_Period,0,count,low )!=count) return;

Print("Highest high: ",GetValMax(high, count));
Print("Lowest  low: " ,GetValMin(low , count));

Nicht wirklich getestet, sollte aber funktionieren

Es geht natürlich auch anders:

double GetMaxVal(double const &Array[], int start, int end)
{
   int i;
   double val=DBL_MIN;
   for(i=start; i<=end; i++)
      if(val<Array[i])
         val=Array[i];
   return(val);
}

double GetMinVal(double const &Array[], int start, int end)
{
   int i;
   double val=DBL_MAX;
   for(i=start; i<=end; i++)
      if(val>Array[i])
         val=Array[i];
   return(val);
}

Grund der Beschwerde: