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

 
novichok2018: ありがとうございました。規約は理解した、配慮する。しかし、提案されたスクリプトを理解するには、残念ながら私のmcl4に関する知識は十分ではありません。申し訳ありません :( .

私は、実験はすべてスクリプトで行っています。ターミナルでスクリプトを実行します。一部のラインを変更するか、捨てるか。様子を見る

 

インジケータデータのMin Maxを求めたいのですが、「マニュアル通りに全て」やったのですが、インジケータデータが配列に書き込まれない感じがします。MQL proはどこを間違えたか教えてください。

     
int limit=40000;
     
      double ArrayGreen[];  
      ArrayResize(ArrayGreen,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,1);
         }
      int max=ArrayMaximum(ArrayGreen,Quant,0); 
      double iMaximum = ArrayGreen[max];
      Print("Max = ",ArrayGreen[max]," at index=",max); 

      
     
      double ArrayRad[];  
      ArrayResize(ArrayRad,limit);
      for (int i=0;i>=limit;i++)
         {
            ArrayRad[i] = iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,1,1);
         }
     int min=ArrayMinimum(ArrayRad,Quant_Bars,0); 
     double iMinimum = ArrayRad[min];
     Print("Min= ",ArrayRad[min]," at index=",min); 
 
Corvin85:

インジケータデータのMin Maxを求めたいのですが、「マニュアル通りに全て」やったのですが、インジケータデータが配列に書き込まれない感じがします。MQLのプロの方、どこが間違いかアドバイスお願いします。

変数limitが0より大きい値である。そのため、どのループも実行されません。その結果、ArrayGreen と ArrayRad は未充填のままとなります。

limitを0以下に設定すると、プログラムは最初のループに戻ります。

したがって、ループの条件を変更する必要があります。たいていの場合、このようにするはずです。

 for (int i = 0; i < limit; i++)
 
Corvin85:

インジケータデータのMin Maxを求めたいのですが、「マニュアル通りに全て」やったのですが、インジケータデータが配列に書き込まれない感じがします。MQLのプロは優秀なのですが、どこが間違いなのかアドバイスしてください。

また、iCustom(.........) では、最後に渡されたパラメータ i

 for (int i=0;i<limit;i++)
         {
            ArrayGreen[i] =iCustom(NULL,0,"Kolier_SuperTrend_Indi",ATR_Period,ATR_Multiplier,0,i);
         }

というようなものです。

 
ありがとうございます! 動いていますよ
 

こんにちは。


テストの都合上、条件を有効にしたり無効にしたりするボタンを削除して、毎回コードを入力する必要がなく、条件をテキストに変更する必要がないようにしたいのです。

つまり、今はこうやってやっている。

if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{

このようにOFFにすることで

//if ((Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
//{

有効・無効を入力bool Y=True;(Yは条件)の設定に引き込み、Yを条件に代入し、条件が成立した場合と成立しなかった場合にelse ifで分岐させようとしました。しかし、何かがうまくいかなかった。

このような場合、どのようにしたらよいかアドバイスをお願いします。

 
YanSay:

こんにちは。


テストの都合上、条件を有効にしたり無効にしたりするボタンを削除して、毎回コードを入力する必要がなく、条件をテキストに変更する必要がないようにしたいのです。

つまり、今はこうやってやっている。

このようにOFFにすることで

有効・無効を入力bool Y=True;(Yは条件)に引き込み、Yを条件に代入し、else ifで条件が成立しているかいないかを分岐させようとしました。しかし、何かがうまくいかなかった。

このような場合、どうすればよいのかアドバイスをお願いします。

次のようなことが考えられます。

input bool FLAG =True;


if (FLAG && (Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
{
 
Vitaly Muzichenko:

こんなこともできるんですね。

これは、アルゴリズムがFalseの条件を無視して次の条件に進むためである。

input bool FLAG =False;

Falseの時はこの条件を無視して次の条件に進むはずなのに、アルゴリズムは先に進みません。

私の場合、2つのブランチを指定するのが唯一の方法でしょうか。

input bool FLAG =True;

if (FLAG=True)
{(Close[1]<=High[2])&&(Close[1]>=Low[2])&&(Open[1]<=High[2])&&(Open[1]>=Low[2]))
 {//следующие условия
 }
}

if (FLAG=False)
 {//следующие условия
 }

それとも、もっと簡単な方法があるのでしょうか?

 
YanSay:

あなたのバージョンでは、もし値が

Falseの場合はこの条件を無視して次の条件に進むはずだが、アルゴリズムはそれ以上進めない。

私の場合、2つのブランチを書くという選択肢しかないのでしょうか?

それとも、もっと簡単な方法があるのでしょうか?

//+------------------------------------------------------------------+
input bool FLAG =True;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  if(FLAG) {
    if(Close[1]<=High[2]) && (Close[1]>=Low[2]) && (Open[1]<=High[2]) && (Open[1]>=Low[2])
    //...
  } else {
    //следующие условия
  }
//+------------------------------------------------------------------+
 
YanSay:

あなたのバージョンでは、もし値が

Falseの場合はこの条件を無視して次の条件に進むはずだが、アルゴリズムはそれ以上進めない。

私の場合、2つのブランチを書くという選択肢しかないのでしょうか?

それとも、もっと簡単な方法があるのでしょうか?

この方法のみ

if(!FLAG || (Close[1]<=High[2] && Close[1]>=Low[2] && Open[1]<=High[2] && Open[1]>=Low[2]))