エラー、バグ、質問 - ページ 951

 
MQL5でパラメータ数が可変の関数を書くことは可能ですか?例えば、StringConcatenate(...)やPrint(...)のような感じでしょうか?
 
skteks:

MT5に付属しているストラテジーテスターで、標準のExpertMACD Expert Advisorをテストしたところ、エラーが発生しました。

2013.03.30 19:18:09 Core 2の遺伝子のパス(0, 15)をテストしましたが、エラー「OnInit failed」が46msで発生しました。

2013.03.30 19:18:08 Core 1の遺伝子のパス(0, 13)をテストしましたが、エラー「OnInit failed」が32msで発生しました。

2013.03.30 19:18:07 Core 2の遺伝子のパス(0, 5)をテストしましたが、エラー「OnInit failed」が0msで発生しました。

検索してみると、モジュールにエラーがあることがわかりました。"SignalMACD "のFastとSlow MACDの期間を最適化する場合(ストラテジーテスターのパラメータでチェックを入れる場合)。

このような問題に遭遇した方はいらっしゃいますか、またその対処法は?(ティックが1つしかないときはどうにか動くが、2つのティックを確認するとすぐにエラーが発生する)

スローとファストの変化幅を変えて設定する。エラーが消えます。無視すればいいんです。

 
w1sp:
MQL5でパラメータ数が可変の関数を書くことは可能ですか?例えば、StringConcatenate(...)やPrint(...)のような感じでしょうか?
はい、できます。関数のオーバーロードと 呼ばれるものです。
 
w1sp:
MQL5で、パラメータ数が可変の関数を書くことは可能ですか?例えば、StringConcatenate(...)やPrint(...)のような感じでしょうか?

例えば、パラメータの数と同じ大きさの配列をパラメータとして作ることができます。

 
StringConcatenateの ようにパラメータを可変にすることに興味があります。次のような感じです。 string Concatenate(string s, ...); これは可能でしょうか?
 
w1sp:
StringConcatenateのようにパラメータを可変にすることに興味があります。次のようなものです。 string Concatenate(string s, ...); 可能でしょうか?

同様のことが可能です。関数に渡すことのできるパラメータは最大64個です。

void OnStart()
  {
string s1=Foo("5");
string s2=Foo("5","t");

// string s=Foo(,"5"); // Ошибка
   
  }
//+------------------------------------------------------------------+
string Foo(string i0="", string i1="", string i2="")
{

string rez=i0+i1+i2;

return rez;
} 
 
Snaf:

同様のことが可能です。関数に渡すことのできるパラメータは最大64個です。

そして、オーバーロードすることによってのみ、すべての引数に任意の型を得ることができるのですね。つまり、文字列だけでなく、例えばdoubleも関数に渡すことができる。 string s = Concatenate("abc",2.0, "def");

 
w1sp:

そして、すべての引数の任意の型は、オーバーロードによってのみ達成されるのですか?つまり,文字列だけでなく,例えば double も渡すことができる。 string s = Concatenate("abc",2.0, "def");

void OnStart()
  {
//string s1=Foo("5");  // Это теперь ошибка. Компилятор не знаек какой функцией из двух пользоваться
string s2=Foo("5",3.0);

// string s=Foo(,"5"); // Ошибка
   
  }
//+------------------------------------------------------------------+
string Foo(string i0="", string i1="", string i2="")
{

string rez=i0+i1+i2;

return rez;
}

string Foo(string i0="", double i1=2.0, string i2="")
{
string rez;
if (i1>2.0) {rez=i0+i2;} else rez=i0+"99"+i2;

return rez;
}  
 
Snaf:
ありがとうございます。了解です。文字列型の 64個の引数を持つ関数を作り、最初の引数以外にはデフォルト値を追加すれば十分です。
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
こんにちは。MT5のビルドをアップグレードしたところ、テスターではインジケーターが正常に表示されなくなり、ターミナル自体では正常に表示されるようになりました。このインジケータはかなり複雑でリソースを必要とするため(ZUP)、MT4からMT5へ翻訳しています。テスターでは、Bild 756 ZigZag ラインは、Bild 770 - ZigZag 価格値は正しいですが、タイムフレームは正しくありません(シフト、均等 ではない)ZigZag - 出力バッファの後にテスターで正常に表示されています。同時に、グラフィックオブジェクト(三角形、直線など、ちなみに出力バッファのデータ(ZigZagも))に基づいている)も正常に表示されます。よろしくお願いします。