ライブラリ: エキスパート - ページ 10

 

直感的でないのは、パラメータと名前の配列が異なるサイズを返すことです。なぜなら、エキスパートアドバイザーの名前を表す名前にはnullパラメータがないからです。

また、私はパラメータの実際の型を知りたい、今 "文字列 "はどこでも返されます。文字列の内容を分析し、浮動小数点 数または整数に変換する方法がありますが、パラメータに「0」が格納されている場合、その型を特定することはできません。

 
Stanislav Korotky:

直感的でないのは、パラメータ配列と名前配列が異なるサイズを返すことです。これは、名前に Expert Advisor の名前を表す null パラメータがないためです。

そう、これはあまり良いことではありません。おそらく、Names[]のために偽のnull要素を作るべきだったのでしょう。

また、パラメータの本当の型を知りたいのですが、今はどこでも "string "が返されます。文字列の中身を分析し、浮動小数点数や整数への還元性を分析するのですが、パラメータに "0 "が格納されていると、その型を特定することができません。

カスタムENUMが残っているので、ライブラリでは不要だと考えました。さらに、それが必要になりそうなタスクも見当たらなかった。

私は自分でオート・オプティマイザーを作っていた。そこでは役に立たなかった。

 
fxsaber:

そうだね。おそらく、Names[]のために偽のnull要素を作るべきだったのだろう。

カスタムENUMもあるので、ライブラリでは不要だと考えました。しかも、それが必要になるようなタスクは見当たりませんでした。

私は自分でオート・オプティマイザーを作っていた。そこでは役に立たなかった。

ParameterGetRange/ParameterSetRange 関数はlong型と double型に対してのみ 定義されているため、パラメータ・ループでは数値のみを分析して設定を変更する必要がある。

 
Stanislav Korotky:

ParameterGetRange/ParameterSetRange関数は、それぞれlong型と double型に対してのみ 定義されており、パラメータに対するループでは、数値のみを分析し、設定を変更する必要があります。

整数型は bool、enumです。

 
fxsaber:

整数型は bool、enumである。

これは普通のことだ。今やすべてが文字列で表現され、本物の文字列をふるいにかけることが不可能なのは正常ではない。

 
Stanislav Korotky:

それが普通だ。すべてが文字列で表現されるようになり、実際の文字列をふるいにかけることができないのは普通じゃない。

最適化されるパラメータはあらかじめ数字になっている。だからその中に文字列は絶対にない。だからフィルターとして使える。

 

どうも、エキスパートでオーソライズされた取引で オープンする方法がわかりません。

このコードは私が渡した入力で普通にオープンします。

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
// Expert Advisor の最初の入力パラメータ。
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// 新しいチャートでExpert Advisorを実行する。
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

このコードを使用すると

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
   Params[0].string_value += "\nexpertmode=5";
// Expert Advisor の最初の入力パラメータ。
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// 新しいチャートでExpert Advisorを実行する。
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

このコードを使用すると、許可された取引で開きますが、パラメータは渡されません。

課題は新しいチャートで同じExpert Advisorを開くことです。

input group "EA Settings"
input int inpFirst = 1;//最初のインスタンス;

最初のExpert Advisorだけが新しいExpert Advisorを開くことができるように、私は新しいExpert Advisorに0を渡しますが、残念ながら2番目のバリエーション(取引が許可されている場合)ではパラメータが渡されません(または間違って渡されます)。

inpFirst = 0;
 

tplファイルでは、ヘッダーは完璧に作成されているのですが、なぜかパラメータが渡されないのです。

<expert>
name=PullbackEA_v2
path=Experts\Shared Projects\luipaulo89\experts\PullbackEA_v2.ex5
expertmode=5
<inputs>
inpFirst=1

inpFirst=0であることが期待される

   Params[1].type = TYPE_INT;
   Params[1].integer_value = 0;
 
Aleksei Beliakov:

ライブラリを更新する。

Expert Advisorをテストする。

input group "EA Settings"
input int inpFirst = 1;//最初のインスタンス;

void OnInit() {}


例1。

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // カウンセラーへの道
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";

  // 入力グループ "EA設定"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;

  // 入力 int inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;

  EXPERT::Run(ChartOpen(_Symbol, PERIOD_CURRENT), Params); // 独自のチャート上でEAを正しく動作させることができません。
}


例2。

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // カウンセラーへの道
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";
  
  // 入力グループ "EA設定"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;
  EXPERT::AddInputName(Params[1], " "); // 問題

  // 入力 int inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;
  EXPERT::AddInputName(Params[2], "inpFirst");

  EXPERT::Run(0, Params); // Expert Advisor を独自のチャート上で正しく実行できるようになります。
}
 
いつもありがとう!