MQL4/MQL5でenumとitemの長さを取得する方法は? - ページ 2

 
Alain Verleyen:
長さが分からないということはなく、このトピックは設計が悪いということに他ならない。
この要件は、AutoTesterのプロジェクトに由来しています。
多くのインジケータ/EAでは、入力パラメータに カスタムenumが含まれており、enum内のどの項目(および相対値)を把握する必要があります。
だから、「設計が悪い」なんて言わないでね。という感じ。
 
Xiangdong Guo:
この要件は、AutoTesterのプロジェクトに由来しています。
多くのインジケータ/EAでは、入力パラメータにカスタムenumが含まれており、enum内のどの項目(および相対値)を把握する必要があります。
だから、「設計が悪い」なんて言わないでね。ということです。
もちろん、設計ミスです。でも、私にとっては問題ではありません。
 
Marco vd Heijden:
enumの長さ」ってどういう意味ですか?
enum fruit
  {
   APPLE=0,//APPLE
   BANANA=1,//BANANA
   GRAPE=2,//GRAPE
   ORANGE=3,//ORANGE
   CARROT=4,//CARROT
  };
  
sinput fruit type;//PICK A FRUIT 

ニンジンは果物ではないのかもしれないが...Xiangdong Guoの 言う「enumの長さ」の意味がまだ理解できていない。

各オプションの文字列名からの文字数?

可能なオプションの数?

オプションの数値?

デザインが悪いだけでなく、何を言っているのかよくわからない。

 
Marco vd Heijden:
値の数、つまり果物の例では5。
 
Alain Verleyen:
値の数なので、果物のあなたの例では5。

これは静的なもので、可変にはできないので、常に既知の固定値で開始されることに同意します。

しかし、Xiangdong Guo が自分で設計も作成もしていない指標をテストしていて、入力パラメータを自動的に知るか検出したい のだとしたら......。

利用可能なオプションの数を知ることがどのように役立つのかよく分かりませんが、おそらく彼は利用可能なすべてのオプションをクロステストしたいので、単に実行するテストの数を探しているのでしょうか?

利用可能なオプションの境界から変換しようとすると、enumが存在しないため、変換できないエラーが発生します。

 
Marco vd Heijden:

MT4/MT5では、enumから項目を取得するためにC++/C#の関数を 使用しています。しかし、MetaQuotesはこれらの関数をMQL4/MQL5に移植していないのです。ハム...ハム...

enum DURATION_INTERVALS  // Enumeration of named constants
   {
    month=1,     // Interval of one month
    two_months,  // Two months
    quarter,     // Three months - quarter
    halfyear=6,  // Half a year
    year=12,     // Year - 12 months
   };

input DURATION_INTERVALS HistoryDuration = month;

 
Xiangdong Guo:

MT4/MT5では、enumから項目を取得するためにC++/C#の関数を使用しています。しかし、MetaQuotesはこれらの関数をMQL4/MQL5に移植していないのです。ハム...ハム...

どの関数 ですか?何が問題なのでしょうか?なぜenumの項目をループさせたいのですか?
 
Alain Verleyen:
どの関数ですか?何が問題なのでしょうか?なぜenumの項目をループさせたいのですか?

MQLでできないことをしたい人がいたとしても、それは必ずしも「設計が悪い」ということではありません。

トピックの始めに:現在のMQLのバージョンでは、あなたが望むことは不可能です。

唯一の方法は、すべての項目を配列にコピーして、その配列を使ってループを作ることです。しかし、それは、コードを修正できる場合にのみ可能です。

 
Andrey Barinov:

MQLでできないことをしたい人がいたとしても、それは必ずしも「設計が悪い」ということではありません。

トピックの始めに:現在のMQLのバージョンでは、あなたが望むことは不可能です。

唯一の方法は、すべての項目を配列にコピーして、その配列を使ってループを作ることです。しかし、それはコードを修正できる場合にのみ可能です。

配列の代わりにenumを使うのは、設計が悪いのです。そうでしょうか?

 
Alain Verleyen:

配列の代わりにenumを使うのは、設計上まずい。そうではありませんか?

いいえ、enumの代わりに配列を使用するのは悪い設計です。

例を挙げましょう。例えば、ある文字列の値があるとします。そして、この文字列がenumの項目名の1つと等しいか、含まれているかを調べる(EnumToString())というタスクがあります。

あなたはこれをどのように解決しますか?