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

 
Vitaly Muzichenko:

---

P.S. Generell ist zum Beispiel mit demselben Array eine Menge falsch.

Danke für die Hilfe und den Tipp!!.. So wird es kompiliert

//+------------------------------------------------------------------+
//|                                                        Funct.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int UP; //Глобальная переменная

//_____________________________________Массивы для Handleлов____________________________________
double HandleFractalDown_W1[],HandleFractalUP_W1[];    // одномерный динамический массив

//_____________________________________Массивы для фракталов____________________________________
double FractalDown_W1[],FractalUP_W1[];    // одномерный динамический массив

//-----------------------------------------------------------------------------------------------
int  Fractal_W1=iFractals(Symbol(),PERIOD_W1); //Хендл индикатора

//----------------------------------------------------------------------
void OnStart()
  {
   CopyBuffer(Fractal_W1,0,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer(Fractal_W1,1,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries(FractalUP_W1,true);  //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

  Search_Fractal(PERIOD_W1, HandleFractalUP_W1, FractalUP_W1); //Пользовательская функция заполнения массива FractalUP_W1 значениями
                                                               //верхних фракталов  

  }
//+------------------------------------------------------------------+

//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике
   
   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
        }
     }
  }
//+------------------------------------------------------------------+
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • 2021.02.13
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Ein bisschen gezwickt, funktioniert fast wie gewünscht, vor 51.20 stürzt es dort mit einem Fehler ab

Funktionsfeld (BRN, W1) außerhalb des Bereichs

//+------------------------------------------------------------------+
//|                                                        Funct.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int UP; //Глобальная переменная

//_____________________________________Массивы для Handleлов____________________________________
double HandleFractalDown_W1[],HandleFractalUP_W1[];    // одномерный динамический массив

//_____________________________________Массивы для фракталов____________________________________
double FractalDown_W1[],FractalUP_W1[];    // одномерный динамический массив

//-----------------------------------------------------------------------------------------------
int  Fractal_W1=iFractals(Symbol(),PERIOD_W1); //Хендл индикатора

//----------------------------------------------------------------------
void OnStart()
  {
   CopyBuffer(Fractal_W1,0,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer(Fractal_W1,1,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries(HandleFractalUP_W1,true);  //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries(HandleFractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

  Search_Fractal(PERIOD_W1, HandleFractalUP_W1, FractalUP_W1); //Пользовательская функция заполнения массива FractalUP_W1 значениями
                                                               //верхних фракталов  
  }
//+------------------------------------------------------------------+



//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике

   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
         Alert("Frakt= ",fract_mass[UP]);
        }
     }
  }
//+------------------------------------------------------------------+
Was kann das sein?
 
Kira27:
Habe es ein wenig optimiert, funktioniert fast wie gewünscht, bis 51.20, da stürzt es mit einem Fehler ab

Funktionsbereich (BRN, W1) außerhalb des zulässigen Bereichs

Was kann das sein?

Versuchen Sie es auf diese Weise, Sie haben die Dimensionalität des Arrays nicht festgelegt

void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике
   ArrayResize(fract_mass,i+1);
   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
         Alert("Frakt= ",fract_mass[UP]);
        }
     }
  }

Im Allgemeinen ist dies keine gute Lösung

 
Kira27:
Habe es ein wenig optimiert, funktioniert fast wie gewünscht, vor 51.20 stürzt es mit einem Fehler ab

Funktionsfeld (BRN, W1) außerhalb des Bereichs

Was kann das sein?

Die Zeile, die den Absturz gelöst hat.

 ArrayResize(handle,i,0);//*------Строчка решившая проблему
//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal(ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике

//***************************
   ArrayResize(handle,i,0);//*------Строчка решившая проблему
//***************************

   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
         Alert("Frakt= ",fract_mass[UP]);
        }
     }
  }
//+------------------------------------------------------------------+

Korrigieren Sie das, wenn es Ihnen nichts ausmacht.

 
Kira27:
Habe es ein wenig optimiert, es funktioniert fast wie es sollte, bis 51.20, da stürzt es mit einem Fehler ab.

Funktionsbereich (BRN, W1) außerhalb des zulässigen Bereichs

Was kann das sein?

Gleichzeitig kopieren Sie eine bestimmte Anzahl von Elementen in das Array HandleFractalUP_W1, aber Sie haben keine Kontrolle über die genaue Anzahl.

Dann Schleife durch int i=Bars(Symbol(),period); //Anzahl der Balken im W1-Diagramm

Als Ergebnis erhalten Sie wieder einen Ausgang außerhalb des Arrays, aber inhandle[n]

Tüfteln Sie ein wenig an der Logik der Füllung, nehmen Sie sich Zeit.

----

Kira27:

Die Zeile, die den Absturz gelöst hat.

Korrigieren Sie es bitte, wenn Sie nichts dagegen haben.

Es ist so kompliziert, aber du wirst es schon richtig machen.

 
Kira27:

Die Zeile, die das Absturzproblem löste

Korrigieren Sie das bitte, wenn es Ihnen nichts ausmacht.

Allerdings gibt es weniger Fraktale als Balken im Wochenschaufenster, und beim Füllen des Arrays mit den Preiswerten der Fraktale werden nur 90 Zellen gefüllt, und der Rest des Speicherlayouts ist überflüssig Bedeutet das, dass zuerst die Anzahl der Fraktale berechnet werden sollte und erst dann ArrayResize für die Speicherreservierung angewendet werden sollte?

 
Vitaly Muzichenko:

Gleichzeitig kopieren Sie eine bestimmte Anzahl von Elementen in das Array HandleFractalUP_W1, aber Sie haben keine Kontrolle über die genaue Anzahl.

Dann Schleife durch int i=Bars(Symbol(),period); //Anzahl der Balken im W1-Diagramm

Als Ergebnis erhalten Sie wieder einen Ausgang außerhalb des Arrays, aber inhandle[n]

Tüfteln Sie ein wenig an der Logik der Füllung, nehmen Sie sich Zeit.

----

Es ist so kompliziert, aber du wirst es schon richtig machen.

Ich danke Ihnen!!!

 

Guten Tag zusammen. Bitte helfen Sie mir zu verstehen, warum ich den Volumenverlauf nicht abrufen kann. Ich habe versucht, es auf 2 Arten zu tun.

Erster Weg:

MqlRates mrate5[];

if(CopyRates(_Symbol,PERIOD_M5,1,bars_used,mrate5)<0)

{

Alert("Fehler beim Kopieren historischer Daten für M5 - Fehler:",GetLastError(),"!!");

Rückkehr;

}

for (int i=0;i<bars_used;i++) {

Drucken(mrate5[i].real_volume)

}

Zweiter Weg:

long volumes5[];

if(CopyRealVolume(_Symbol,PERIOD_M5,1,bars_used,volumes5)<0)

{

Alert("Copy volumes error for M5 - error:",GetLastError(),"!");

Rückkehr;

}

for (int i=0;i<bars_used;i++) {

Drucken(volumes5[i])

}

In beiden Fällen enthält die Anordnung der Datenträger immer nur Nullen. Man bekommt einfach keine sinnvollen Informationen...


 
seleand:

Guten Tag zusammen. Bitte helfen Sie mir zu verstehen, warum ich den Volumenverlauf nicht abrufen kann. Ich habe versucht, es auf 2 Arten zu tun.

Erster Weg:

MqlRates mrate5[];
      if(CopyRates(_Symbol,PERIOD_M5,1,bars_used,mrate5)<0)
        {
            Alert("Ошибка копирования исторических данных для М5 - ошибка:",GetLastError(),"!!");
            return;
        }
for (int i=0;i<bars_used;i++) {
Print(mrate5[i].real_volume)
}

Der zweite Weg:

long volumes5[];
      if(CopyRealVolume(_Symbol,PERIOD_M5,1,bars_used,volumes5)<0)
        {
            Alert("Ошибка копирования объемов для М5 - ошибка:",GetLastError(),"!!");
            return;
        }
for (int i=0;i<bars_used;i++) {
Print(volumes5[i])
}

In beiden Fällen enthält das Volume Array immer nur Nullen. Ich kann einfach keine aussagekräftigen Informationen bekommen...


  1. Lernen Sie, wie man Code einfügt.
  2. Im Devisenhandel gibt es überhaupt keine echten Volumina.
 

Ich danke Ihnen. Verstehe ich das richtig, dass es ein Tickvolumen gibt?

Als ich den Kursverlauf für Forex von der Finam-Website heruntergeladen habe, gab es zusätzlich zu Open, High, Low und Close auch Vol. Sie haben nicht genau gesagt, um welche Menge es sich handelt. Ist das ein Tick-Volumen?

Grund der Beschwerde: