複数のペアでEAを動作させるには?

 
こんにちは
私はFXとMetaTraderの初心者で、いくつかの基本的なことを理解しようとしています。
EURUSDのチャートに添付されたEAを持っていると仮定して、しかし私はそのEAから複数のペアでセットアップを見つけたいのです。しかし、EAはEURUSDの新鮮なティックが来たときにのみ実行されます。そうですよね?私のEAは多くのペアを処理することができますが、添付されたペア(この場合はEURUSD)の新鮮なティックでのみ開始されるため、これはMTの制限機能であると私は考えています。これはおそらく、接続されていないペアのティックを見逃す結果となるでしょう。そこで、以下の質問をさせていただきます。

EAは、チャートにアタッチすることなく、複数のペアに対して実行することができるのでしょうか?もしできないのであれば、上記の問題に対する回避策は何でしょうか?アドバイスお願いします。

ありがとうございます。
Pankaj
 

mt4がそうなっているだけです。これに対する回避策はないと思います。しかし、今ひとつ思い浮かんだことがあります。EURUSDのティックを新しいローソクの1-2分前に取得すれば(H1ローソクとします)、他のペアの新しいローソクを探すためにwhileループを実行することができます。この場合、EURUSDの新しいティックが5分以上経っても来なければ、whileループはすでに実行されており、他のペアの新しいローソク足をすべて取得することができます。ご理解いただけたでしょうか。

しかし、問題は、なぜこれが必要なのか、ということです。EURUSD上で動くEAは他のペアの取引を実行することができないので、異なるチャート上でEAを実行する方が良いのです。

 

こんにちは。

私は、私たちはまだリアルタイム処理で動作していることを心に留めておくことを好むので、私はちょうど通信に手を保つためにwhileループまたは待機関数を 使用することを忘れてしまった!あなたのEAをEURUSDのようなペアに取り付けると、他のすべてのペアを管理するのに十分な信号を提供します。

EURUSDのようなペアにEAを取り付けると、他のすべてのペアを管理するために十分な信号を提供し、ティックは非常に頻繁にあります。分単位の問題ではなく、秒単位の問題です(2分間ループを走らせるのは、私には本当にクレイジーに聞こえます)。それは秒の問題ではない場合、ちょうど理由を考えるか、別のブローカーで参照してください。

もし、eurusdにEAをアタッチする以上のものが必要なら、各通貨にアタッチしたEAのインスタンスを別に走らせることも考えてみてください。申し訳ありませんが、私は「あるいはシステムを見直す」と考える傾向があります。

ちょっと唐突な投稿と感じられたら申し訳ありません。私の見解をお伝えしたかったのです。

がんばってください。

 
wrm:

EURUSDで動くEAは他のペアの取引を実行できないので、異なるチャート上でEAを実行するのが良い。

それは正しくありません。OrderSend() 関数は、チャートに関係なく、最初のパラメータとして指定した任意のシンボルに対して実行することができます。

そして、MarketInfo()関数を使えば、現在のチャート以外のシンボルについても、直近のアスク価格とビッド価格を取得することができます。

つまり、以下のようなオプションがあります。

- 同じEAを多くのチャートにアタッチし、各チャートのネイティブシンボルに対して動作させる(AskとBidの組み込み変数を使用する)

- 特定のチャートにEAを取り付け、選択したすべてのシンボルに対して実行する(非ネイティブシンボルにはMarketInfo()関数を使用) - ただ、トリガーデバイスとしてネイティブシンボルのティックを使用します。

- マスターとスレーブのEAを別々のチャートに取り付け、一方が他方によってトリガーされる(例:一方がファイルに値を書き込み、他方はこのデータを見つけるまで常にファイルを読み、その後取引する)。

 
cloudbreaker:

それは正しくありません。OrderSend() 関数は、チャートに関係なく、最初のパラメータとして指定した任意のシンボルに対して実行することができます。

そして、MarketInfo()関数を使えば、現在のチャート以外のシンボルについても、最新のアスク価格とビッド価格を取得することができます。

つまり、以下のようなオプションがあります。

- 同じEAを多くのチャートにアタッチし、各チャートのネイティブシンボルに対して動作させる(AskとBidの組み込み変数を使用する)

- 特定のチャートにEAを取り付け、選択したすべてのシンボルに対して実行する(非ネイティブシンボルにはMarketInfo()関数を使用) - ただ、トリガーデバイスとしてネイティブシンボルのティックを使用します。

- マスターとスレーブのEAを異なるチャートに取り付け、一方が他方によってトリガーされるようにする(例えば、一方がファイルに値を書き込み、他方はそのデータを見つけるまで常にファイルを読み、その後取引する)。


非常に洞察に富んでいます。皆さんに感謝します。2番目のオプションは、私が以前考えていたことと一致しているので、2番目のオプションで行くことにします。


wrm:私は、できるだけ物事を少なくしたいのです。技術的に可能であれば、EAを1つだけにしておきます。別のEAを持つ理由は、グラフを描く必要がある場合だけですが、それは必要ありません。


もちろん、EAが完成したらテストします。もし、思い通りに動かなければ、変更するつもりです。

 
//+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true;
bool wannaBuy1 = true;
extern double LotSize = 0.01;
extern string symbol1 = "EURUSD";
extern string symbol2 = "USDCHF";
extern int MaxDifference = 6;
extern int Slippage = 3;
extern int Magicnumber1 = 786;
extern int Magicnumber2 = 123;
int sendticket = 3;
string pairs[18];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[0] = symbol1;
pairs[1] = symbol2;
wannaBuy = true;
wannaBuy1 = true;

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if ( wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend( symbol1, OP_BUY, LotSize, MarketInfo( symbol1,MODE_ASK), Slippage, 0, 0, 0,0, Magicnumber1,0) & OrderSend( symbol2, OP_BUY, LotSize, MarketInfo( symbol2,MODE_ASK), Slippage, 0, 0, 0,0, Magicnumber2,0);
   if ( ticket1 <0 )
   {
   Print ("OrderSend failed with error #", GetLastError());
   return(0);
   }
   wannaBuy = false;
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+
EURUSDとUSDCHFを1つのチャートで開く簡単なコードを紹介します。別のチャートにeaを追加しても、EURUSDとUSDCHFを開くようにします。
 
tigersoft:
EURUSDとUSDCHFを1つのチャートに表示する簡単なコードです。別のチャートにeaを追加しても、EURUSDとUSDCHFを開くことができます。

かなりいい感じ。ありがとうタイガーソフト

 
cloudbreaker:

それは正しくありません。OrderSend() 関数は、チャートに関係なく、最初のパラメータとして指定した任意のシンボルに対して実行することができます。

そして、MarketInfo()関数を使えば、現在のチャート以外のシンボルについても、最新のアスク価格とビッド価格を取得することができます。

つまり、以下のようなオプションがあります。

- 同じEAを多くのチャートにアタッチし、各チャートのネイティブシンボルに対して動作させる(AskとBidの組み込み変数を使用する)

- 特定のチャートにEAを取り付け、選択したすべてのシンボルに対して実行する(非ネイティブシンボルにはMarketInfo()関数を使用) - ただ、トリガーデバイスとしてネイティブシンボルのティックを使用します。

- マスターとスレーブのEAを別々のチャートに取り付け、一方が他方によってトリガーされる(例:一方がファイルに値を書き込み、他方はこのデータを見つけるまで常にファイルを読み、その後取引する)。


オプション3について詳しく教えてください。


また、オプション#2を使用した非ネイティブシンボルでの価格/指標計算はどのように機能するのでしょうか?非ネイティブシンボルへの注文送信は理解できるのですが、非ネイティブシンボルのエントリー条件をチェック する方法がわかりません。

 
skyhr:

オプション#3について詳しく教えてください。


また、オプション#2を使用した非ネイティブシンボルでの価格/指標計算はどのように行われるのでしょうか?非ネイティブシンボルへの注文送信は理解できますが、非ネイティブシンボルのエントリー条件をチェックする方法がわかりません。

非ネイティブシンボルには、MarketInfo()関数を 使用してください。それは友人です :)

 
skyhr:

オプション#3について詳しく教えてください。


また、オプション#2を使用した非ネイティブシンボルでの価格/指標計算はどのように行われるのでしょうか?非ネイティブシンボルへの注文送信は理解できるのですが、非ネイティブシンボルでのエントリー条件のチェック方法がわかりません。

オプション3 - 特定のシンボルを監視しているEAからファイルに値を書き込むだけです。別のEAにそのファイルを監視させ、その値が存在するときに特定のロジックを実行させる。

オプション 2 - ネイティブシンボルに対してのみ有効なアスクとビッドの変数を使用するのではなく、非ネイティブシンボルのアスクとビッドの価格を取得するために MarketInfo()関数を 使用する。

 
cloudbreaker:

オプション3 - 特定のシンボルを監視しているEAからファイルに値を書き込むだけです。別のEAにそのファイルを監視させ、その値が存在するときに特定のロジックの部分を実行させる。

オプション2 - ネイティブシンボルに対してのみ有効なアスクとビッドの変数を使用するのではなく、非ネイティブシンボルのアスクとビッドの価格を取得するためにMarketInfo()関数を使用する。

どちらのアプローチも良いと思います。

ただ、2番目の方法は、オーバーヘッドが少ないため、パフォーマンス上のメリットがあります。すべてはメモリ上にあり、ファイル操作よりも明らかに高速です。

3.の利点は、MT4ではできないことをするためにファイルデータを使用する場合です。

理由: