MT5とtrans2quik.dll。 - ページ 6

 
prostotrader:

いや、3つのスレッドを同期させる(基本的にはSynchronizerを書く)だけなんだけどね。

どうしたらいいのかわからない。

さて、残るは国旗ですね。旗を立て、他の人が活動を終えるのを待ち、立ち止まって旗を外し、何かをし、旗を外す。まあ、フラグ優先の論理も当然ですが。

DDEを停止せず、バッファに書き込ませることで、何も失われないようにします。

 
Yuriy Asaulenko:

さて、残るは国旗だけです。旗を立てる→他の人が活動を終えるのを待つ→立ち止まって旗を降ろす→用を足す→旗を降ろす。まあ、フラグ優先の論理も当然ですが。

DDEを止めずに、バッファに書き込ませておけば、何も失われることはないのですがね。

言い換えれば、Synchronizerは、優先順位に応じて実行される受信関数をバッファリングする必要があるのでしょうか?

 
prostotrader:

では、Synchronizerは、優先順位に応じて実行される受信関数をバッファリングする必要があるのですか?

いいえ、関連するフラグとその優先順位に従って、スレッドを一時停止するだけです。このバリエーションでは、他のものは全く必要ありません。

第二の選択肢は、スレッドの関数が終了するのを待ち、そのフラグによって停止させることです。これは、例えば、asc-bid、インジケータ、その他必要なものを更新するために必要な場合があります。

例えば、フラグ値。

0 - スレッドはアイドル状態です。

1 - スレッドがオンになっている。

2 - 優先度の低いスレッドを全て停止するよう要求する。

2に設定し、すべてのスレッドが0になるまで待ち、プログラムを実行し、0または1に設定します。このフラグによって、他のすべてのスレッドが作業を再開します。

 
Yuriy Asaulenko:

いいえ、関連するフラグとその優先順位によってスレッド(複数可)を一時停止するだけです。このバリエーションでは、他のものは全く必要ありません。

第二の選択肢は、スレッドの関数が終了するまで待ち、そのフラグによって停止させることです。これは、例えば、asc-bid、インジケータ、その他必要なものを更新するために必要な場合があります。

例えば、フラグ値。

0 - スレッドはアイドル状態です。

1 - スレッドがオンになっている。

2 - 優先度の低いスレッドを全て停止するよう要求する。

2に設定し、すべてのスレッドが0になるまで待ち、プログラムを実行し、0または1に設定します。このフラグによって、他のすべてのスレッドが作業を再開します。

DDEを停止するのは良くないとご自身で書かれていますね。

 
prostotrader:

DDEをサスペンドするのは良くないとご自身で書かれていますね。

あなたが理解できないだけです。

私がやっているのは、こういうことです。

1.サーバー(TCP-serverを使用しています)のスレッドで、コレクションに常にデータを書き込む(Last in First out)。止める必要はないのです。

データは別のスレッドでコレクションから読み取られ、DataTable(データベースのテーブルのようなもの、ただしメモリ上)に書き込まれます。このスレッドは、邪魔になるようなら、一時停止することがあります。

3.別のスレッドでDataTableからデータを読み込んで解析する。このスレッドは、selectによってフェッチされ、2以外の誰もこのテーブルにデータを書き込まないので、スレッド2に干渉しません。また、邪魔になるようならこのスレッドを停止することも可能です。

私は1つのツールで作業し、スレッド3は注文の送信-実行と取引のフォローに切り替えられているので、何も一時停止する必要はありません。

 
Yuriy Asaulenko:

あなたが理解できないだけです。

私がやっているのは、こういうことです。

1.サーバー(TCPサーバー)のスレッドで、常にデータをコレクションに書き込んでいる(Last in First out)。止める必要はないのです。

データは別のスレッドでコレクションから読み取られ、DataTable(データベースのテーブルのようなもの、ただしメモリ上)に書き込まれます。このスレッドは、邪魔になるようなら、一時停止することがあります。

3.別のスレッドでDataTableからデータを読み込んで解析する。このスレッドは、selectによってフェッチされ、2以外の誰もこのテーブルにデータを書き込まないので、スレッド2に干渉しません。また、邪魔になるようならこのスレッドを停止することも可能です。

私は1つのツールで作業し、スレッド3は注文の送信-実行と取引のフォローに切り替えているので、何も一時停止する必要はありません。

ラッキーなことに、私は52本の道具を持っているので、切り替えなければなりません。

 
prostotrader:

運がいいことに、私は52個の楽器を持っているので、切り替えを

52の楽器全ての解析が1つのスレッドで行われるということですね?それとも、そうなのか?

ストレージとして使用されているものは何ですか?私の場合、マルチユーザーアクセスの場合、ロックは不要で、読み込みが書き込みの邪魔になることはありません。

ブロックする必要があるのは、チャイルドがtrans2quikへのアクセスを共有していることだけです。また、スレッドの集合の場合のみ Child.trans2quikを別スレッドで構成し、イベント時に呼び出すと同時に、リクエストが終了するまでイベントハンドラをロックすることで実現できる。残りは到達できない)。

 
prostotrader:

MT5とKvikをリンクさせることを完全に放棄し、Kvikのみ(DEEサーバ+trans2quik.dll)に落ち着きました。

残念です。この決定の理由は何ですか?2つのプログラム間のデータの受信/送信に重大な支障があるのでしょうか?

 
Yuriy Asaulenko:

全52機種の解析は、ひとつの流れで行われているのですね。それとも違うのでしょうか?

ストレージとして使用されているものは何ですか?私の場合、マルチユーザーアクセスの場合、ロックは不要で、読み込みが書き込みの邪魔になることはない。

ブロックするのは、チャイルドのtrans2quikへの共有アクセスだけです。また、スレッドの集合の場合のみ Child.trans2quikを別スレッドで構成し、イベント時に呼び出すと同時に、リクエストが終了するまでイベントハンドラをロックすることで実現できる。残りは届かない)。

いいえ、解析自体はChildで行われます(ツールごとに別々に)。 Selector(1,2)は、どのロボットにデータとコルバックスを送るかを選択します。

ストレージ - メモリに格納されるテーブルのみ

 
Aleksey Vyazmikin:

それは残念です。この決定の理由は何でしょうか。2つのプログラム間でデータを受信/送信することに重大な支障があるのでしょうか。

ただ、ごちゃごちゃ言っても意味がない。

MT5を使用する場合、Expert Advisorのコードと、データを受信するDLLが必要です。

Quickのみを使用し、アプリケーションは1つだけです(図解入り図参照)