1添付ファイルこんにちは私は複数のグラフィックで同じEAを実行し、新しいろうそくを開いたときに条件が満たされたときに実行して注文します。しかし、写真に示すように、複数のペアが同時にシグナルを出し、2つのオープンオーダーがまったく同時に発生する場合があります。
これを修正して、注文の1つが発生しないようにする方法はありますか?
1添付ファイルこんにちは私は複数のグラフィックで同じEAを実行し、新しいろうそくを開いたときに条件が満たされたときに実行して注文します。しかし、写真に示すように、複数のペアが同時にシグナルを出し、2つのオープンオーダーがまったく同時に発生する場合があります。
これを修正して、注文の1つが発生しないようにする方法はありますか?
両方のEAは異なるスレッドで実行され、非同期で実行されます。それらがまったく同時にポジションを開く場合は、ミューテックスを使用して強制的に同期実行する必要があります。ミューテックスを作成します。オープン信号が満たされたら、各EAにミューテックスを取得させます。ミューテックスが取得されたら、未処理の注文がすでに存在するかどうかを確認します。はいの場合、別のものを開かないでください。常に1つのEAのみがミューテックスを取得できるため、取得しようとするEAは、ミューテックスを所有するEAを待機する必要があります。このようにして、EAはもはや並行して機能しなくなります。これは、必要なことを達成するための前提条件です。 実用的な実装はOriginally Posted by ;
https://github.com/rosasurfer/mt4-mq...fLib1.mq4#L315(必要以上に多くのことを実行します)、実際のユースケース
https://github.com/rosasurfer/mt4-mq...ller.mq4#L1030、行1049-1051は、正確に複数のEAによって実行されることはありません(非同期動作ではなく同期動作)。
https://www.mql5.com/en/docs/globals...setonconditionあなたの友達であり、調査の出発点です。
これは、アクセスを管理するための定義された方法を備えたプログラミング言語によってアクセス可能な任意のリソースである可能性があります。非常に簡単に言えば、これはリソースのアクセス数をカウントするカウンターです。このようなリソースはセマフォと呼ばれることもあり、ミューテックスは特別なセマフォです。相互に排他的にアクセスできるものです。これは、同時アクセスの最大数が1のカウンターであることを意味します。1つのコードブロックがリソースを取得する場合、他のコードブロックは(相互に排他的)できません。他のすべての人は、リソースを所有するコードがそれを解放するまで待たなければなりません。必要に応じて、ロックと呼びます。 MQLでは、ウィンドウハンドル、ファイルハンドル、特殊変数を使用できます。または、私のフレームワークの場合は、チャートに格納されている通常のMQL文字列です。 GlobalVariableSetOnCondition()では、アクセスを管理できるリソースとしてグローバル変数を使用して、ロックメカニズムを作成できます。 GlobalVariableSetOnConditionを検索し、MQL5フォーラムでロックします。実装例は、他にもいくつかあります。 GlobalVariableSetOnCondition()は、特にその目的のためにMQLの一部であり、他には何もありません。古いMQL4ドキュメントから:この関数はグローバル変数へのアトミックアクセスを提供するため、1つのクライアント端末内で同時に作業する複数のエキスパートの相互作用のためのセマフォを提供するために使用できます。Originally Posted by ;