Array außerhalb der Reichweite in Need of help - Seite 7

 
Valeriy Yastremskiy:

Die täglichen Extrema, und was Sie finden, sind im Wesentlichen Extrema, die Tiefs (oder Hochs) haben ziemlich große Abstände vom aktuellen Preis. Der Unterschied zwischen dem Tiefst- und dem Höchststand von 132 Tagen auf der eu beträgt mehr als 12300 Pips. Preis ab dem nächsten Tiefststand von 2000, ab dem Höchststand von 800.

Ich verstehe das auch nicht.

Entschuldigung, ich werde versuchen, morgen zu erklären, wenn ich heute müde bin.

 
MakarFX:

AUDUSD ist nicht wie das für mich

ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

Was wird kopiert und wohin wird es zurückgeschickt?

 
Алексей Тарабанов:

Was wird wo und an wen kopiert?

Alexej Tarabanow:

Wohin kopiert er und wohin kehrt er zurück?

, diese Funktion aufzurufen:

intArrayCopyRates(
MqlRates&rates_array[],// array of MqlRates passed by reference
stringsymbol=NULL,// das Werkzeug
inttimeframe=0// timeframe
);

Kopiert die Daten der angegebenen Diagrammbalken in ein zweidimensionales Array der Form double RateInfo[][6] und gibt die Anzahl der kopierten Balken zurück.

intArrayCopyRates(
void&dest_array[][],// Array übergeben durch Referenz
stringsymbol=NULL,// Werkzeug
inttimeframe=0// timeframe
);

Parameter

ArrayCopyRates

Bei der zweiten Form des Aufrufs werden die Daten tatsächlich in das Array dest_array[][] kopiert, das Array selbst wird automatisch neu zugewiesen, damit es der Größe des Zeitrahmens entspricht (auch wenn das Array als statisch deklariert wurde).

Die erste Dimension des Arrays enthält die Anzahl der Balken. Die zweite Dimension hat 6 Elemente mit den Werten:

0 - Zeit (time),
1 - Eröffnungskurs (open),
2 - niedrigster Kurs (low),
3 - höchster Kurs (high),
4 - Schlusskurs (close),

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Если некоторое имя, которое не было описано ранее, появляется в выражении и за ним следует левая круглая скобка, то оно по контексту считается именем некоторой функции. Аргументы (формальные параметры) передаются по значению, т. е. каждое выражение x1, . . . , xn вычисляется и значение передается функции. Порядок вычисления выражений и порядок...
 
Dark Kchlyzov:
, diese Funktion aufzurufen:

intArrayCopyRates(
MqlRates&rates_array[],// array of MqlRates passed by reference
stringsymbol=NULL,// das Werkzeug
inttimeframe=0// timeframe
);

Kopiert die Daten der angegebenen Diagrammbalken in ein zweidimensionales Array der Form double RateInfo[][6] und gibt die Anzahl der kopierten Balken zurück.

intArrayCopyRates(
void&dest_array[][],// Array übergeben durch Referenz
stringsymbol=NULL,// Werkzeug
inttimeframe=0// timeframe
);

Parameter

ArrayCopyRates

Bei der zweiten Form des Aufrufs werden die Daten tatsächlich in das Array dest_array[][] kopiert, das Array selbst wird automatisch neu zugewiesen, damit es der Größe des Zeitrahmens entspricht (auch wenn das Array als statisch deklariert wurde).

Die erste Dimension des Arrays enthält die Anzahl der Balken. Die zweite Dimension hat 6 Elemente mit den Werten:

0 - Zeit (time),
1 - Eröffnungskurs (open),
2 - niedrigster Kurs (low),
3 - höchster Kurs (high),
4 - Schlusskurs (close),

Und wo wird der zurückgegebene Wert des int-Typs gespeichert? Sie haben alle Daten an die Funktion übergeben, aber nichts von ihr erhalten.

 
Алексей Тарабанов:

Wo wird der Rückgabewert des Typs int gespeichert? Sie haben alle Daten in die Funktion eingegeben, aber nichts herausbekommen.

Min_D_Level = iLow(_Symbol,PERIOD_D1,i); break;

Es scheint hier gespeichert zu sein

double Min_D_Level ; //Nächster minimaler D-Level

oder verstehe ich etwas nicht?

Und wo wird der zurückgegebene Wert vom Typ int gespeichert?

???

Ich bin wirklich beim Brainstorming.

Ist es möglich, dies auf eine einfachere Weise zu tun?

So wie Sie (Sie) hier einen Fehler gemacht haben, ist der richtige Weg, es zu tun, dieses Code-Beispiel, usw.

 

Ich sitze hier schon eine Weile:

#property version   "1.00"
#property strict

//символ и таймфрейм текущего графика
string symbol;
ENUM_TIMEFRAMES frame;
datetime time;
   

struct BarData
   {
   struct Elem
      {
      int      number;     //порядковый номер периода (дня, месяца или года)
      double   high;       //максимум периода
      double   low;        //минимум периода
      datetime time_high;  //время максимума
      datetime time_low;   //время минимума
      } Arr[];             //массив периода
   int index;              //текущий индекс массива
   double   max;           //последнее максимальное значение периода
   double   min;           //последнее минимальное значение периода
   datetime time_max;      //время максимума
   datetime time_min;      //время минимума

   //при создании структуры указываем, что массив пустой
   BarData(){index=-1;}    
   
   //функция записывает текущие экстремумы
   void WriteBar(int eNumber, string eSymbol, ENUM_TIMEFRAMES eFrame, datetime eTime)
      {
      int eShift=iBarShift(eSymbol,eFrame,eTime);
      double eHigh=iHigh(eSymbol,eFrame,eShift);
      double eLow=iLow(eSymbol,eFrame,eShift);
      //если элементов ещё нет или период сменился
      if(index<0 || eNumber!=Arr[index].number)
         {
         ArrayResize(Arr,++index+1);
         Arr[index].number=eNumber;
         Arr[index].high=eHigh;
         Arr[index].low=eLow;
         Arr[index].time_high=eTime;
         Arr[index].time_low=eTime;
         }
      //если произошло обновление текущего максимума
      if(eHigh-Arr[index].high>0)
         {
         Arr[index].high=eHigh;
         Arr[index].time_high=eTime;
         }
      //если произошло обновление текущего минимума
      if(Arr[index].low-eLow>0)
         {
         Arr[index].low=eLow;
         Arr[index].time_low=eTime;
         }
      //если произошло обновление предыдущего максимума
      if(eHigh-max>0)
         {
         for(int i=index+1; i>=0; i--)
            {
            if(Arr[index].high-eHigh>0)
               {
               max=Arr[index].high;
               time_max=Arr[index].time_high;
               break;
               }
            }
         }
      //если произошло обновление предыдущего минимума
      if(min-eLow>0)
         {
         for(int i=index+1; i>=0; i--)
            {
            if(eLow-Arr[index].low>0)
               {
               min=Arr[index].low;
               time_min=Arr[index].time_low;
               break;
               }
            }
         }
      }
   } day, month, year;

int OnInit()
   {
   symbol=Symbol();
   frame=(ENUM_TIMEFRAMES)Period();
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   //текущее время закрытого бара
   time=iTime(symbol,frame,1);
   
   MqlDateTime date; 
   TimeToStruct(time,date);
   
   //делаем записи каждого периода
   day.WriteBar(date.day,symbol,frame,time);
   month.WriteBar(date.mon,symbol,frame,time);
   year.WriteBar(date.year,symbol,frame,time);
   
   //теперь имеем значения   
   Comment(TimeToString(day.time_max)+" : "+DoubleToString(day.max)+" : "+DoubleToString(day.Arr[day.index].high)+"\n"+TimeToString(day.time_min)+" : "+DoubleToString(day.Arr[day.index].low)+" : "+DoubleToString(day.min));
   }
Wir sollten versuchen, unnötige Zyklen zu vermeiden. Es kommen viele Angebote herein, und Sie müssen sofort die richtigen Einträge machen, damit Sie nicht in der Vergangenheit wühlen und Computerressourcen verschwenden müssen.
 
Dark Kchlyzov:

In etwa so

double Min_D_Level ; //nächster minimaler D-Level

Oder übersehe ich etwas?

Ja, Sie haben etwas nicht verstanden. Das sollte folgendermaßen ablaufen:

Количество_баров=ArrayCopyRates(Bar_data_D1,_Symbol,PERIOD_D1); // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров

Und dann...

 
Алексей Тарабанов:

Ja, es gibt etwas, das Sie nicht verstehen. So muss es auch sein:

Und dann...

Herzlichen Dank!

 
Dark Kchlyzov:

Auch dafür herzlichen Dank!!!

Sehr gerne geschehen.

 

3.47 Ich gehe ins Bett.

Ich werde das alles morgen verdauen, und wenn ich noch Fragen habe, werde ich es Sie wissen lassen!

Vielen Dank an alle !!!