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

 

Jacques、このスレッドに関心を持ち続けてくれていることに感謝します。 私はまだ最初の通貨でEAをデバッグしていますが、適切であると判断されれば、いくつかの通貨で使用するつもりです。 その前提で、その考えをどのように実行するか戦略を考えています。 そのため、このスレッドに興味を持ちました。


ご要望にお応えして、さらに3つのペアのグラフを作成したところ、そのうち2つのペアは24時間で32,000ティック以上(Excelのグラフ作成データの上限)あることがわかりました。 その結果、グラフを2つの期間(前半12時間、後半12時間)に分けなければならなくなりました。 比較的一貫性を保つために、私は3つのペアを12時間の期間に分割しました。


注意点として、これらのグラフの縦軸は横軸に比例していますが、横軸は時間に比例していません(つまり、目盛りの12分の1が1時間を表していると仮定することはできません)。


このグラフから読み取れるのは、どのペアも24時間のうち、ティックとティックの間に大きな間隔がある期間がある、ということだと思います。 そのため、複数のペアを1つのEAにまとめる場合は、「While」ループを採用するのが賢明だと思います。 StraightTraderの参考文献https://book.mql4.com/special/index"General Characteristics of Complex Programs "の冒頭にこの手法の説明とグラフが掲載されています。


24時間でGBPJPY 44,834ティック

EURJPY 24時間で37,140ティック

GBPUSD 24時間で29,313ティック

EURUSD 24時間で22,627ティック













乾杯!

 
FXtrader2008:

その結果、もし複数のペアを1つのEAに組み合わせるなら、「While」ループを採用するのが賢明だと思います。 StraightTraderの参考文献https://book.mql4.com/special/index"General Characteristics of Complex Programs "の冒頭にこの手法の説明とグラフが掲載されています。

まさにその通りです。1つのEAに複数のペアがある→incomming ticksによるstart function activationの代わりにwhile loop approachを使用する。


私は1つのEAに1つの通貨ペアに対抗したいと思います。

私の長期的なアプローチは、1つの多通貨多戦略のEAです。私は、これらのアイデアのいくつかを実装したユニバーサル・エキスパート・アドバイザーのスキームを しばらく前に作成しました。

その後、私のポストに含まれていない、私はこのコードを開発することによって続いて、 Universaltraderと 呼ばれるGoogleコードのプロジェクトを開始しました。このプロジェクトは、あなたの期待を満たすことができます。唯一実装されていないのは、While cycle approach(簡単に実装できる)であると指摘されています。


MULTICURRENCY MULTISTRATEGY EAの利点の一部。

  • すべてのストラテジーを一緒に
  • すべてのストラテジーを一緒に、あるいは独立してチューニング/セットアップ可能
  • 異なるストラテジー/通貨ペアのオン/オフを切り替えることができる。
  • 他にも多くの利点があると思います。

デメリット

  • 一度に1つの通貨ペアしかバックテストができない - 取引している通貨ペアの数だけ、他の通貨ペアをオフにしてバックテストを実行しなければならない。
  • パフォーマンスの問題 - 私はバックテストでのみパフォーマンスの問題に気づきましたが、実際の取引でもきっと関連性があると思います。

このプロジェクトはまだ改善する必要があるので、もし誰かが興味を持てば、このGoogleコードプロジェクトに招待することができます。


現在のスクリプトをここに添付します。

ファイル:
 
FXtrader2008 wrote>>

Jacques、このスレッドに関心を持ち続けてくれていることに感謝します。私はまだ最初の通貨でEAをデバッグしていますが、適切であると判断されれば、いくつかの通貨で使用するつもりです。その前提で、その考えをどのように実行するか戦略を考えています。そのため、このスレッドに興味を持ちました。

ご要望にお応えして、さらに3つのペアのグラフを作成したところ、そのうち2つのペアは24時間で32,000ティック以上(Excelのグラフ作成データの上限)あることがわかりました。その結果、グラフを2つの期間(前半12時間、後半12時間)に分けなければならなくなりました。比較的一貫性を保つために、私は3つのペアを12時間の期間に分割しました。

注意点として、これらのグラフの縦軸は横軸に比例していますが、横軸は時間に比例していません(つまり、目盛りの12分の1が1時間を表していると仮定することはできません)。

このグラフから読み取れるのは、どのペアも24時間のうち、ティックとティックの間に大きな間隔がある期間がある、ということだと思います。そのため、複数のペアを1つのEAにまとめる場合は、「While」ループを採用するのが賢明だと思います。StraightTraderの参考文献https://book.mql4.com/special/index"General Characteristics of Complex Programs "の冒頭にこの手法の説明とグラフが掲載されています。

24時間でGBPJPY 44,834ティック

EURJPY 24時間で37,140ティック

GBPUSD 24時間で29,313ティック

EURUSD 24時間で22,627ティック

乾杯!

チャートをありがとうございました。

ティックラン起動の代わりにループを選択しましょう、それは微細な精度を必要とする人々のために、より科学的になりますし、それは実装するために大したことではありません。もう一つの利点は、EAを好きな通貨ペアにアタッチできることです(チャートにオブジェクトを描画するときに便利です)。

乾杯

 
cloudbreaker wrote>>

また、MarketInfo()関数を使えば、現在のチャート以外のシンボルの直近の売値と買値を取得することができます。

そこで、以下のような選択肢があります。

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

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

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

今、私はこれらの戦略のうち最も単純なものを使っています。4つの通貨の3つのタイムフレームにEAがあり、全部で12個あります。これらはすべて時間枠の最初のティックで実行されるように設定されています。しかし、MT4が常にすべてのEAを実行するとは限らないという問題を抱えています。私は何が起こっているのかを見るために、start関数の直後にprint文を置きました。それは、例えばH1の4つのEAのうち3つにしか到達しませんでしたが、それは異なるペアを異なる時間に見逃していました。

質問 - MT4では、複数のEAを同時に実行するように設定している場合、一度に1つのEAしか実行されないのでしょうか? あるEAの実行は他のEAの実行に何らかの形で依存するのでしょうか(トレードコンテキストがビジーであることは別として)、それとも完全に独立したものなのでしょうか?

もしそうなら、私は2番目のオプションを使用することができます。私はEAをできるだけシンプルにしようとしています。

 
joetrader:

今、私はこれらの戦略の中で最もシンプルなものを使っています。4つの通貨の3つのタイムフレーム、つまり全部で12個のEAを持っています。これらはすべて、時間枠の最初のティックで実行されるように設定されています。しかし、MT4が常にすべてのEAを実行するとは限らないという問題を抱えています。私は何が起こっているのかを見るために、start関数の直後にprint文を置きました。それは、例えばH1の4つのEAのうち3つにしか到達しませんでしたが、それは異なるペアを異なる時間に見逃していました。

質問 - MT4では、複数のEAを同時に実行するように設定している場合、一度に1つのEAしか実行されないのでしょうか? あるEAの実行は他のEAの実行に何らかの形で依存するのでしょうか(トレードコンテキストがビジーであることは別として)、それとも完全に独立したものなのでしょうか?

もしそうなら、私は2番目のオプションを使用することができます。私はEAをできるだけシンプルにしようとしています。

私は複数のEAをチャート上で動かしていますが、そのような問題はありません。私が知る限り、それらは同時に実行され、唯一、トレードコンテキストがそれらのうちの1つによって使用されるとき、彼らはお互いに気づくことができます。EA自体は完全に独立しています - それぞれが変数の独自のコピーを持っているなど。つまり、12個のEAを12個のチャートで動かしているわけですね。もしかして、メモリに問題があるのでしょうか?

 
gordon wrote>>

私は複数のEAをチャート上で動かしていますが、そのような問題はありません。私が知る限り、それらは同時に実行され、唯一、トレードコンテキストがそれらのうちの1つによって使用されるとき、彼らはお互いに気づくことができます。EA自体は完全に独立しています - それぞれが変数の独自のコピーを持っているなど。つまり、12個のEAを12個のチャートで動かしているわけですね。メモリに問題があるのでは?

そうです。 12のEAを12のチャートに。 かなり新しいコンピュータで6GBのメモリを搭載しているので、メモリが原因とは思えませんが 、検討する価値はありますし、それを除外するつもりはありません。 でも、私の質問に答えてくれましたね。もしEAが同時に実行できるようになっているのなら、私が何か間違っているだけなのかもしれませんね。 初めてではありません。 コードを確認してもう少し勉強してみます。ありがとうございました。

 
MT4クライアントの別々のインスタンスでチャートを実行していますか?もし、すべてのチャートを1つのインスタンスで開いているならば、それらは単一の取引コンテキストを共有することになり、そのコンテキストを共有するためのロジックをコード化する必要があります - EAの動作が、複数のEAが同時に取引 操作を行う可能性がある場合。CB
 
cloudbreaker wrote>>
MT4クライアントの別々のインスタンスでチャートを実行していますか?もし、すべてのチャートを1つのインスタンスで開いているのであれば、それらは1つの取引コンテキストを共有することになり、そのコンテキストを共有するためのロジックをコーディングする必要があります - EAの動作が、複数のEAが同時に取引操作を行う可能性がある場合。CB

はい - 私は同じMT4クライアント上でそれらを実行しています。 しかし、私はこの記事https://www.mql5.com/en/articles/1412トレードコンテキストビジーソリューションの 1つを使用していますが、トレードコンテキストビジーエラーは 発生しません。

ポジションを開こうとするポイントにさえ到達しないようです。 EAを全く起動しないこともあるようです。 私はstart関数の最初にprint文を置いたので、そう言っています。

以下は私のスタート関数です。

void start()
{
//---- 新しいバーの最初のティックだけ取引に行く
if(Volume[0]>1) return;
Print("ティックチェック");

if(CalculateCurrentOrders(Symbol())==0)(現在の注文を計算する) CheckForOpen();
else CheckForClose();
}.

私はCADJPY, EURCHF, GBPUSD, & USDJPYで取引しています。

そして、私はこれを取得します。

2010.01.22 8:59:45 [EAName]USDJPY,H1:ティックチェック

2010.01.22 8:59:45 [EAName]CADJPY,H1:ティックチェック

2010.01.22 8:59:45 [EAName]GBPUSD,H1:ティックチェック

2010.01.22 9:59:45 [EAName]EURCHF,H1:ティックチェック

2010.01.22 9:59:46 [EAName]GBPUSD,H1:ティックチェック

2010.01.22 9:59:46 [EAName]CADJPY,H1:ティックチェック

4つとも取引される時間もあれば、3つしか取引されない時間もあります。 H4が取引される時間帯なら、3本が取引されるかもしれませんが、H1の3~4本と合わせて4本全部は取引されないのが普通です。

私は、すべてが取引されることを確認するために、ボリュームを3または4ティックに増やす回避策を作りましたが、根本的な問題を解決するために、MetaTraderをもっと理解しようとしています。

私のEAは1ティックしか実行できないので 各EAを同時に実行することになり、おそらくそれがすべて実行されていない理由ではない でしょうか? 私のEAには、ストップロスを見つけるために過去のフラクタルを1500個まで比較するループがあるので、それには時間がかかるかもしれません。

繰り返しになりますが、私のコードのどこかに問題があるだけかもしれません。

 
私はあなたのコードに問題があると推測しており、これは複数のEAの主題とは関係ありません。標準のPrint()/Alert()メソッドを使用して起動しないものについては、何がうまくいかないのか、問題をピンポイントで特定する必要があります。
 
tigersoft:
EURUSDとUSDCHFを1つのチャートに表示する簡単なコードです。別のチャートにEAを追加しても、EURUSDとUSDCHFを開くことができます。

//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+

が動作しない?

バックテスト用
オーダーエンドエラー4106を取得

注文 送信機能でUSDCHFのシンボル名が不明です。

EURUSDのチャートでEURUSDのシンボルを選択した場合、Ordersendは機能します。

他のチャートに変更すると、EURUSDとUSDCHFの両方について不明なシンボルが表示されます。

ありがとうございます。