解剖の結果、エラーコード139の使い方が間違っていることが判明しました。実際は「取引コンテキストがビジー状態」であり、何らかの理由で特別なコードが設定されていませんでした。同様の問題は、本日英語フォーラム「Trade Dispatcher: all trade context is busy」で議論されました。 すべてのEAに1つの取引コンテキストしかありません。正しい解決策は、グローバル変数にセマフォの独自のシステムを構築することです。 4つのEAを4分間に走らせたが、10分間に139のエラーが7回発生した。
解剖の結果、エラーコード139の誤用が判明しました。実際は「trade context is busy」であり、なぜか特別なコードはありません。"Trade Dispatcher: all trade context is busy" すべてのEAに1つの取引コンテキストしかありません。正しい解決策は、グローバル変数に独自のセマフォシステムを構築することです。 4つのEAを10分間に7回エラー139回で動かしています。
さて、この事件のロジックについて。おせっかいで申し訳ないんですが...私が正しく理解していれば、セマフォを何とか設定するまで、whileループに座っていることになります。そうだろ?そして、私たち以外誰も取引していないことを知りながら、取引をする。そして、セマフォを元の状態に戻す。質問:while(!IsStopped())はどのように動作するのですか??Allow Live Tradingのチェックかと思った。質問:それらのwhileやsleepは、システムにラグを発生させないのでしょうか?質問:
すべてのEAに1つの取引コンテキストしかありません。正しい解決策は、グローバル変数にセマフォの独自のシステムを構築することです。
4つのEAを4分間に走らせたが、10分間に139のエラーが7回発生した。
すべてのEAに1つの取引コンテキストしかありません。正しい解決策は、グローバル変数に独自のセマフォシステムを構築することです。
4つのEAを10分間に7回エラー139回で動かしています。
このセマフォのシステムはどうあるべきか、少なくとも一般論として教えていただけませんか?
1.特に、他の人の邪魔にならないように、どのように取引を行うべきか。
2.スリップ、チェック、タイムアウト(マルチスレッドMTでは無いと約束されていたのに、さぁ)
そして最後に。これを叱咤激励と受け取らないでください。教科書があるじゃないですか。その中で、専門家の意見が述べられています。そこにあるセマフォを見せてください。
これが私の専門家です。20ルーブルのパンツのようにシンプルです。1時間ごとにポジションを反転させる。もしあなたが本当にトレーダーやブローカーの利益のことを考えるなら(私は人のことはわかりませんが、まず安定して動くEAを手に入れ、それからデモからリアルに切り替えたいと思っています)、私のこのEAの例で、どうすれば正しいのかを示してください。
敬具
クオーク
追伸:時々現れるエラー2、6、138、4109の起源については、まだ未解決です。
英文スレッドを読ませていただきました。ああ...この人たちは、緊急にロシア語を勉強する必要があります。
似ているのではなく、同じ問題なのです。確かに、エラー2、6、138、4109はまだ出てないですね。139の話だけだった。
正直、IsTradeAllowedの意味がわからない。スラバ氏自身が、10個のExpert Advisorにこの機能を使わせて、突然取引を開始すると、最初の1個を除く全員がダメになることを説明しました。
それよりも、リクエストをキューに溜め、しばらく放置し、実行されるか削除されるようにする方がずっと良いだろう。でも、これは全部夢なんです。
そうではなく、例えばグローバル変数 nTrading を作成し、そこに Expert Advisor の名前を格納する必要があります。また、他のEAはどうすればいいのでしょうか?保留中の注文を持つMT3に戻るそれとも、他のアイデアがあるのでしょうか?
ちなみに、グローバル変数がなくても、次のようなことは可能です。
ここで、Buy() と Sell() は、失敗すると OP_BUY / OP_SELL を、成功すると -1 を返します。
デメリットは明らかで、ブローカーは1つの注文ではなく、10個のオープン(クローズ)注文を受け取ることになる。自動であれば、すべて問題ありません。もし、それが人間であれば-怒られるでしょう。さらに悪いことに、オートマトンと人間が異なる論理に従って行動している場合。例えば、オートマトンには待ち行列がない(スラバが説明してくれたように、1つのスレッドで、待ち行列を形成する代わりに命令が競合する)し、人間にはある。そして、そのトレーダーは本番で取引を始めますが、その理由すら理解できません。なぜなら、彼は(私 - アルパリのセミナーでのプレゼンテーションで)デモと本番には違いがないと断言されたからです。
2つ目のオプションは、エキスパートと通貨にそれぞれ独自のMnを割り当て、エキスパートアドバイザーと通貨の組み合わせが一意になるようにします。そして、バーが開いてから1秒後にIM1のEAが、7秒後にIM7のEAが取引されるようにコードを記述します。これにより、システムは1秒間の取引を行うことができます。
Slavaに質問 - 問題を回避するには、2番目でいいのでしょうか?
デメリットは明白で、スキャルパー - ピプサーはそれらについて教えてくれるでしょう :)
開発者の皆様へ(all-all)。分かりやすい説明ありがとうございます。この記事と過去の記事には、まだ未解決の部分があります。答えを待っている。
クオーク
グローバル変数 がある値を持っている場合に、その値を設定 する関数を作る場合、 のような構成はありません。
であれば、100%信頼できる のようなものです。
いいえ、停止はサーバーで実行されます。
また、キューについてですが、ファイルに書かれた 注文を実行するEAを作ろうと思いつきました。そして、他のすべての専門家は、このファイルに命令を書き込むだけです。
でも、私にとっては(有能なインプリメンテーションという意味で)とても簡単なことではないのです......。でも、やってみることは可能です。共通の努力で =))
これは私が理解できなかった一節です:
if(GlobalVariableGet(SemaphoreName)==0.0)
{
GlobalVariableSet(SemaphoreName,1.0);
bSemaphored=true;
break;
}
さて、この事件のロジックについて。おせっかいで申し訳ないんですが...私が正しく理解していれば、セマフォを何とか設定するまで、whileループに座っていることになります。そうだろ?そして、私たち以外誰も取引していないことを知りながら、取引をする。そして、セマフォを元の状態に戻す。質問:while(!IsStopped())はどのように動作するのですか??Allow Live Tradingのチェックかと思った。質問:それらのwhileやsleepは、システムにラグを発生させないのでしょうか?質問:
テスト モードでSleepやセマフォは正しく処理されますか?もうひとつ、論理的な質問をします。セマフォの設定と削除の間に、命令を処理するための2つの(最大)可能性があります。まずBuy()またはSell()、そしてその下にCloseOrder()があります。EA内部ではありますが、この2つの「活動」は、あたかも2つのExpert Advisorがあるかのように競合しないのでしょうか?それとも、処理は線形であることが保証されており、Buy()が戻るまでCloseOrder()に到達しないのでしょうか?よろしくお願いします。クオーク
ストップはサーバーで処理されます。また、当社の場合、お客様の専門的な取引フローに競争があります。
言い間違えました。ShouldOrderSend(OP_BUYSTOP...また、セマフォの設定と削除を行うコードで囲むのですか?バカな質問ですね。もちろん、そうすべきです。
トレード機能を再構築し(ライブラリを接続)、別のeuram - m15に取り付けました。メイジッチはもちろん、変化しています。
どうなったかはまたお知らせします;)