初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1290

 
Vitaly Muzichenko:

---

P.S. 一般に、例えば同じ配列でもいろいろと間違っていることがあります。

助けてくれてありがとう、そしてヒントをありがとう!!! これがコンパイル方法です。

//+------------------------------------------------------------------+
//|                                                        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, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
51.20以前はエラーでクラッシュしていたのが、少し修正され、ほぼ正常に動作するようになりました。

関数配列(BRN,W1)範囲外

//+------------------------------------------------------------------+
//|                                                        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]);
        }
     }
  }
//+------------------------------------------------------------------+
それは何でしょう?
 
Kira27:
ちょっといじっただけでちゃんと動くようになった、51.20以前はエラーで落ちるけど

関数配列(BRN, W1)の許容範囲外

それは何でしょう?

配列の次元を設定 しない場合、この方法で試してみてください。

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]);
        }
     }
  }

一般的に、これは良い解決策ではありません

 
Kira27:
51.20以前はエラーでクラッシュしていたのが、少し手を加えてほぼ正常に動作するようになりました。

関数配列(BRN,W1)範囲外

それは何でしょう?

クラッシュを解決したライン

 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]);
        }
     }
  }
//+------------------------------------------------------------------+

今、正しいですか? よろしければ、正しいです。

 
Kira27:
少し手を加えて、51.20まではほぼ正常に動作しているのですが、そこでエラーでクラッシュしてしまいます。

関数配列(BRN, W1)の許容範囲外

それは何でしょう?

同時に、HandleFractalUP_W1 配列に一定数の要素をコピーしますが、その数を正確に制御することはありません。

その後、ループを回すint i=Bars(Symbol(),period); //W1チャートのバーの本数

その結果、再び配列の外側に 出口ができますが、handle[n]

詰め物のロジックを工夫して、じっくりと。

----

Kira27:

クラッシュを解決したライン

今、正しいですか? よろしければ、訂正してください。

とても複雑ですが、きっとうまくいきますよ。

 
Kira27:

クラッシュ問題を解決したライン

今でしょうか? よろしければ訂正してください。

ただ、週足チャートのウィンドウでは、バーよりもフラクタルの数が少なく、配列にフラクタルの価格値を記入する際、90セルしか記入されず、残りのメモリレイアウトは冗長になってしまうのです つまり、まずフラクタル数を計算し、その後にArrayResizeを適用してメモリ確保をすればいいのですね。

 
Vitaly Muzichenko:

同時に、HandleFractalUP_W1 配列に一定数の要素をコピーしますが、その数を正確に制御することはありません。

その後、ループを回すint i=Bars(Symbol(),period); //W1チャートのバーの本数

その結果、再び配列の外側に 出口ができますが、handle[n]

詰め物のロジックを工夫して、じっくりと。

----

とても複雑ですが、きっとうまくいきますよ。

ありがとうございます!!!

 

皆さん、こんにちは。ボリューム履歴が取得できない理由を教えてください。2つの方法でやってみた。

第一の方法

MqlRates mrate5[]。

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

{

Alert("Error inCopying historical data for M5 - error:",GetLastError(),"!");

を返します。

}

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

Print(mrate5[i].real_volume)を実行します。

}

第二の方法

long volumes5[]。

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

{

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

を返します。

}

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

Print(ボリューム5[i])

}

どちらの場合も、ボリュームの配列には常にゼロだけが含まれます。ただ、有意義な情報を得ることはできない...。


 
seleand:

皆さん、こんにちは。ボリューム履歴が取得できない理由を教えてください。2つの方法でやってみた。

第一の方法

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)
}

2つ目の方法。

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])
}

どちらの場合も、ボリュームアレイには常にゼロのみが含まれます。どうしても有意義な情報が得られない...。


  1. コードの挿入 方法について説明します。
  2. FXでは、実際のボリュームは全くありません。
 

ありがとうございます。ティックボリュームが あるという理解で合っていますか?

FXの気配値履歴をfinamサイトからダウンロードしたところ、open, high, low, closeの他にvolがありました。具体的に何巻までとはおっしゃいませんでしたが。これがティックボリューム?

理由: