MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1410

 
Alexey Viktorov:

ドキュメントとサンプルコードをよく読んでください。ループが正しく構成されていません。

forとwhileのループが同じように動作するなんて言わないでください。問題はそこではなく、ハイライトされたラインです。

ありがとうございます、読ませていただきました(そこからスタートです)

私のコードではすべてうまくいくのですが、MT4ではチャート8が7で表示される不具合があります(

2021.03.10 11:59:23.914 Label EURCAD,M15: 9/
2021.03.10 11:59:23.914 Label EURCAD,M15: 8/
2021.03.10 11:59:23.914 Label EURCAD,M15: 7/
2021.03.10 11:59:23.914 Label EURCAD,M15: 6/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 5/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 4/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 3/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 2/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 1/EURUSD
2021.03.10 11:59:23.914 Label EURCAD,M15: 0/EURUSD
 
ありえない。台について何度も罪を犯したが、いつも自分自身が間違っていることが判明している。
 
Aleksei Stepanenko:
ありえない。何度プラットフォームのせいにしてきたことか、いつも自分が間違っていることが判明する。
ある特定のチャートが表示されない。他のチャートはすべて表示され、新しいチャートを追加すると表示される。
 
long currChart=ChartFirst();
int i=0;
while(currChart>=0)
  {
  Print(i,ChartSymbol(currChart)," ID =",currChart);
  currChart=ChartNext(currChart); // на основании предыдущего получим новый график
  i++;// не забудем увеличить счетчик
  }

これを試してみてはいかがでしょうか?

 
Aleksei Stepanenko:

これを試してみてはいかがでしょうか?

同じことです。

2021.03.10 12:45:48.434 Label EURCAD,M15: 8/
2021.03.10 12:45:48.434 Label EURCAD,M15: 7/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 6/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 5/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 4/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 3/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 2/EURUSD
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD
 

なぜ印刷が違うのか?コードが違う?

Print(i,ChartSymbol(currChart)," ID =",currChart);
2021.03.10 12:45:48.434 Label EURCAD,M15: 1/EURUSD

開いているチャートはいくつで、どれが?シンボル、ピリオド。

展開された/展開された?
 
MakarFX:

ありがとうございます、そう読みました(そこがスタート地点)。

私のコードではすべてうまくいくのですが、MT4ではチャート8が7で表示される不具合があります(

非常に悪い読み方です。おそらく、学校で強制的に読まされるようなものでしょう。読んだけど、何も脳に刻み込まれてない。

以下は その一例です。そこでは目的が違うのですが、それでもオープンチャートの列挙は目的によって変わることはないのです。

または、以下のようなコードです。

/********************Script program start function*******************/
void OnStart()
 {
  long prevChart = 0;
  int i = 0;
  do
   {
    prevChart = ChartNext(prevChart);
    ChartSetInteger(prevChart, CHART_BRING_TO_TOP, 0, true);
    Sleep(200);
    i++;
   }
  while(prevChart >= 0);
 }/*******************************************************************/
Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2021.01.15
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Aleksei Stepanenko:

なぜ印刷が違うのか?コードが違う?

開いているチャートはいくつで、どれが?シンボル、ピリオド。

展開された/展開された?
Alexey Viktorov:

非常に悪い読み方です。学校で強制的に読まされるようなものだったのでしょう。というか、読んだけど何も頭に残らなかった。

以下は その一例です。そこでは目的は異なるが、それでもこの列挙の目的によってオープンチャートの列挙が変わることはない。

または、以下のようなコードです。

端末を再起動することで問題が解消されます

 

このコードで配列が範囲外にならないようにするのを助けてください。

double GetExtremumZigZagPriceHigh(string symbol="",ENUM_TIMEFRAMES timeframe=0,int extremum_number=0)//,int depth=12,int deviation=5,int backstep=3)
  {
   if(symbol=="") //Если symbol = "" , то..
      symbol=Symbol(); //Присвоить переменной symbol значение текущего символа на графике.

//Объявить необходимые переменные:
   double price[];                                                 //Цена экстремума выбранная из массива таймсерии.
//datetime time[];
   int    count;                                                   //Счетчик цикла.
int bars_quantity=1000; //Количество баров на графике.
int extremum_count=0;                                           //Счетчик экстремумов.

   ArraySetAsSeries(price,true);                   //Устанавить флаг, чтобы индексация массива производилась как в таймсериях.
   CopyBuffer(handle,1,0,bars_quantity,price);     //Скопировать в динамический массив price[] цены указанного количества баров.

   for(count=1; count<bars_quantity; count++) //Запустить цикл, который будет бежать по каждому бару.
     {
      if(price[count]!=0) //Если Цена Зигзага есть, то есть не равна нулю, то..
        {
         extremum_count++;        //Увеличить счетчик экстремумов на одну единицу.

         if(extremum_count>extremum_number) //Если счетчик экстремумов превысил значение указанного номера экстремума, то..
            return(price[count]);                 //Вернуть эту цену.
        }
     }
//Print("GetExtremumZigZagPrice(): Экстремум ЗигЗага ",extremum_number," не найден"); //А до тех пор, пока ЗигЗаг не показывает цену,
   return(0);                                                                          //Печатать Print, и возвращать ноль.
  }

捨てられるのは、この場所です。

if(price[count]!=0)
 
CopyBuffer

Возвращаемое значение

コピーされた配列の要素数,あるいはエラーの場合は -1.

備考

インジケータにデータを要求する際、要求されたタイムシリーズがまだ構築されていない、またはサーバからダウンロードする必要がある場合、この関数は直ちに-1を返しますが、ロード/構築プロセス自体は開始されます。

Expert Advisorやスクリプトからデータを要求する場合、端末がローカルにこれらのデータを持っていない場合はサーバーからの読み込みが開始され、ローカル履歴からデータを構築できるがまだ準備ができていない場合は必要な時系列の構築が開始されます。この関数は、タイムアウト時に準備できるデータ量を返します。

bars_quantityがあるかどうか確認します。