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

 
fxsaber:

EAの作者は、テスターでの結果がお粗末な場合、自分のEAを取引することを決して勧めません。

しかし、これらはシグナルではありません - Expert Advisorsはブローカーセンターに関係なく販売されています。それなら、どこでそのような結果を得たのかを販売者に明記する義務があるはずで、これはDCの広告のようなものです。

 
Aleksey Vyazmikin:

煽るつもりはないが、これらはシグナルではなく、アドバイザーはDCに関係なく販売されている。それなら、どこでそのような結果を得ているのか、販売者に明示する義務があるはずで、これはDCの宣伝のようなものだ......。

おそらく、理論的な推論が良いこともあるのだろう。しかし、この投稿に 関連する実務にはまだ興味がある。このスレッドに書かれたのには理由がある。

各方面からのフラッディングを止めることを提案する。

 
fxsaber:

マーケットでは、作者が各キャラクターのTCをセットファイルにして添付しているのを何度も見た。従って、買い手はそれを利用する。


私は、マーケットTCに次のロジックを使うことを提案する。

  • 入力パラメータを1つ追加
  • このフォルダがユーザーによって指定された場合、Expert Advisor は自動的にこのフォルダからすべてのセットをピックアップし、対応するバージョンを実行する。
  • ユーザーはセットファイルをこのフォルダに置き、Expert Advisor の起動時にこのフォルダへのパスを指定するだけでよい(Expert Advisor の作成者はこのパスを一度に挿入できる)。
  • もしユーザが間違えて 2 回実行してしまっても、自動的にそれを防ぐことができる。

この方法は、ワンクリックで独自のTSを起動するのにも便利である。

もちろん、この解決策はどちらのプラットフォームにも汎用できる。大雑把に言えば、Expert Advisorのソースコードに1行追加するだけでよい。


おそらく、これが私が今後EAを起動する方法だろう。もしこの方法に欠陥があるとか、改善策があるとかいう人がいたら教えてください。

テスターでの実行はオンラインとは異なるので(結局のところ、フォルダが異なる)、EAの特定のコピーをセットに一致させるには、何か特別なことをする必要があります。

また、独自の視覚化なしでEAの群れを管理するのは難しいようです。

さらに、セットの変更はすべてのEAの再起動を伴います。


個々のMTチャートは「透明ファイル」として機能し、プロファイルの「ハードフォルダ」に保存されます。これにより、各ファイルに必要な情報を入れたり、必要なファイルを簡単に抜き出したり置き換えたりすることができます。また、プロファイルを変更することで、別の「ハードフォルダ」に切り替えることもできる。ちょっと便利だ。

私は、すべてのEAで1つのパラメータを置き換える必要性に直面したことがあります(例えば、リスク)。私はテンプレート・ファイルで一括置換するか、特別なマスター変数を使ってそれを行いました。これを便利な関数にまとめると便利だと思います。

 
Andrey Khatimlianskii:

テスターでの実行はオンラインとは異なり(フォルダが異なる)、EAの特定のコピーをセットに一致させるには、何か特別なことをする必要があります。

違いはありません。

さて、このEAの群れを独自の視覚化なしで管理するのは難しいようです。

今ほど複雑ではない。

プラスセットの変更は、すべてのアドバイザーの再起動を伴います。

EAは普通に起動する。必要な場合のみ、セットのあるフォルダを指定できます。

個々のMTチャートは「透明ファイル」として機能し、プロファイルの「ハードフォルダ」にファイルされます。これにより、各ファイルに必要な情報を入れたり、必要なファイルを簡単に抜き出したり置き換えたりすることができる。また、プロファイルを変更することで、別の「ハードフォルダ」に切り替えることもできる。ちょっと便利だ。

もちろん、MQL5でプロファイルを自動的に読み書きすることもできる。しかし、プロファイルは全く違う。

すべてのEAで1つのパラメータ(例えばリスク)を置き換える必要性に遭遇したことがある。テンプレートファイルで一括置換するか、特別なマスター変数で置換した。それを便利な関数にラップできたら便利だろう。

そのような機能はライブラリの例の中にあります。


ただし、リスタートメソッドによる入力パラメーターの変更と、手でF7を使った変更は区別する必要がある。前者は本格的なリスタートであり、後者はそうではない。後者が必要な場合もある。しかしこれはMQLでは実装できない。

 
fxsaber:

違いはないだろう。

どうやって?好きなセットを選ぶのですか?


fxsaber:

今ほど複雑ではありません。

今現在、稼働中の EA はそれぞれ独自のセットを持っています。

しかし、10個のExpert Advisorを実行している "manager "は、そのうちのいくつかが手動でパラメータを変更した場合、どのように動作するのでしょうか?また、マネージャーを再起動した後はどうなるのでしょうか?元のセットは起動しますか?

 
Andrey Khatimlianskii:

どうやって?必要なセットを1つ選択することで?

MQL_TESTERです。

これで実行中のExpert Advisorはそれぞれ独自のセットを持っている。

しかし、10個のExpert Advisorが稼動している「マネージャー」は、そのうちのいくつかが手動でパラメータを変更した場合、どのように動作するのでしょうか?また、マネージャーを再起動するとどうなるでしょうか?元のセットは起動するのでしょうか?

マネージャーは使用しないことになっています。どうやら、コードによってのみ、私が意味することを示すことができるようです。ご参加ありがとうございました。

 
fxsaber:

MQL_TESTERです。

もう少し詳しくお答えいただけますか?

起動がテスターにあることを判断することはもちろん可能です。しかし、setsフォルダへのアクセスはなく(kamonフォルダへのアクセスがある場合はあります)、これらのセットを読む意味はありません。

そして、テストの後、実行中のExpert Advisorと一致させる必要があります(例えば、Expert Advisorを停止したり、パラメータを変更したりするため)。これを行うには、セットのあるフォルダに行き、必要なセットを見つけて編集する必要がありますか?


それなら、1つのEAからすべてのセットで取引する方が合理的に見えます。1つまたは複数のストラテジー(セット)を選択する可能性があります。

 
Andrey Khatimlianskii:

もう少し詳しい答えをいただけますか?

起動がテスターにあることを判断することはもちろん可能です。しかし、setsフォルダにはアクセスできませんし(kamonの場合はアクセスできます)、これらのセットを読む意味はありません。

テストが終わったら、実行中のExpert Advisorとマッチさせる必要があります(たとえば、Expert Advisorを停止したり、パラメーターを変更したりするため)。これを行うには、セットのあるフォルダに行き、必要なセットを見つけて編集する必要がありますか?

Tester にはカスタム opt ファイルが使用されます。そこからどのセットもワンクリックで起動します。とても便利です。

optファイルがない場合は、昔ながらの方法で作業します。つまり、複雑なことは一切ない。

それなら、1つのEAからすべてのセットを取引する方が合理的に見えます。1つまたは複数の戦略(セット)を選択する可能性があります。

このような選択肢はテスターで常に利用可能です - セットをロードします。

 
このようなチェックをEAに組み込むことをお勧めします。
// EAクローンの誤起動を防ぐためのクロスプラットフォームの例。

#include <fxsaber\Expert.mqh> //https://www.mql5.com/ja/code/19003

string GetExpertData( const ulong Chart = 0 ) 
{ 
  string Str = NULL; 

  MqlParam Parameters[]; 
  string Names[]; 

  if (EXPERT::Parameters(Chart, Parameters, Names)) 
  { 
    Str += "\n" + ::ChartSymbol(Chart) + " " + ::EnumToString(::ChartPeriod(Chart)) + " " + Parameters[0].string_value + "\n"; 

    const int Amount = ::ArraySize(Names); 

    for (int i = 0; i < Amount; i++) 
      Str += (string)i + ": "+ Names[i] + " = " + Parameters[i + 1].string_value + "\n"; 
  } 

  return(Str); 
} 

// 同じアドバイザーが動いているか?
long IsRunning( void )
{ 
  long Res = 0;
  const string Str = GetExpertData();
  long Chart = ::ChartFirst(); 

  while (!Res && (Chart != -1)) 
    if ((Chart != ::ChartID()) && EXPERT::Is() && (Str == GetExpertData(Chart)))
      Res = Chart;
    else
      Chart = ::ChartNext(Chart); 

  return(Res); 
}

input int Range1 = 1;
input int Range2 = 1;

int OnInit()
{
  return(!MQLInfoInteger(MQL_TESTER) && IsRunning() &&
         (MessageBox("This EA is already running." +
                     GetExpertData() + "\nRun?", MQLInfoString(MQL_PROGRAM_NAME), MB_YESNO) == IDNO) ?
         INIT_FAILED : INIT_SUCCEEDED);
}
 

// MT4-advisorは、どのロング/ショートモードで実行されたかを表示する。

#include <fxsaber\Expert.mqh> //https://www.mql5.com/ja/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}