私のEAではダブルエントリーを行います - ページ 8

 
angevoyageur:

1) このトピックの問題とは関係ないと思います。当方が得た問題は、リクエストが正常に満たされ、ポジションがオープンされた場合です。しかし、このポジションは、貿易サーバー上で開かれ、私たちが遭遇した問題は、通常より重要な遅延がある場合、MT5端末は、新しいティックがすでに処理された後に、この新しいポジションを通知されることである。

2)...私の意見では、それは明示的に同期および非同期の取引要求を許可するプラットフォームのために設計された貧しい人々だ...

3) ... ResultRetCodeは同期で、ポジション(取引と注文)に関するMT5データベースの更新が非同期です...

1) 同意できません。無知で申し訳ありませんが、ResultRetcode()をダブルチェック せずに、取引サーバーのPositionOpen()の後にポジションが開かれることをどうやって確認するのでしょうか?

2) 100%同意します。

3) ResultRetCode()が同期であることは確かですが、結果コードを確認するためには、あなた(マスター)はサーバー(スレーブ)にいくつかの「非同期」メッセージで問い合わせをしなければならないということです。

 
figurelli:

1) 同意しません。無知で申し訳ありませんが、ResultRetcode()をダブルチェックせずに、トレードサーバーのPositionOpen()の後にポジションがオープンされたとどうして確信できるのでしょうか?

2) 100%同意します。

3) ResultRetCode()が同期であることは確かですが、結果コードを確認するためには、あなた(マスター)はサーバー(スレーブ)にいくつかの「非同期」メッセージで問い合わせをしなければならないということです。

1) このトピックはダブルエントリーの話なので、オーダーの要求が成功した場合の話です。ResultRetCode()をダブルチェックする必要がないとは書いていませんし、その逆も書いています。しかし、これは、定義上、二重入力とは関係ありません。当たり前でしょう?

3) 細かいことかもしれませんが、あなたの書いたものは意味をなしません。最初のほうでResultRetCode()は同期で、次のほうでResultRetCode()と同じ「結果コード」を非同期で取得すると書いてありますね。この値(Retcode)を取得するために、サーバーと端末の間には全く通信がありません。

CTrade.PositionOpen()のデフォルトは同期で、これは基礎となるクラスがOrderSend()を使用 することを意味します。つまり、基礎となるクラスはOrderSend()を使用し、注文要求を送信し、 サーバーからの応答を待ちます。サーバーは結果を端末に返し、EAコードは(返された値で真または偽)を続行します。これでマスター/スレーブ通信は終了です。この後、ResultRetcodeを確認することができますが、これはすでにローカルで利用可能です。

Documentation on MQL5: Trade Functions / OrderSend
Documentation on MQL5: Trade Functions / OrderSend
  • www.mql5.com
Trade Functions / OrderSend - Documentation on MQL5
 
@figurelli: モデレーター就任おめでとうございます ....
 
ポジションオープンのタイムアウトはありますか?
 
doshur:
ポジションオープン時のタイムアウトはありますか?
こんにちは、doshurさん。タイムアウトとはどういう意味ですか?
 
Malacarne:
doshurさん、こんにちは。タイムアウトとはどういう意味ですか?
サーバーからの応答がないような
 
angevoyageur:

1) このトピックは二重入力に関するものなので、注文要求が成功した場合の話をしています。私はResultRetCode()のダブルチェックは必要ないとは書いておらず、全く逆のことを書いています。しかし、これは、定義上、二重入力とは関係ありません。当たり前でしょう?

3) 細かいことかもしれませんが、あなたの書いたものは意味をなしません。最初のほうでResultRetCode()は同期で、次のほうでResultRetCode()と同じ「結果コード」を非同期で取得すると言っていますね。この値(Retcode)を取得するために、サーバーと端末の間には全く通信がありません。

CTrade.PositionOpen()のデフォルトは同期で、これは基礎となるクラスがOrderSend()を使用 することを意味します。つまり、基礎となるクラスはOrderSend()を使用し、注文要求を送信し、 サーバーからの応答を待ちます。サーバーは結果を端末に返し、EAコードは(返された値で真または偽)を続行します。これでマスター/スレーブ通信は終了です。その後、ResultRetcodeを確認することができます。

アラン

私にとっては、
doshurのオリジナルの コードはResultRetCode()をチェックしておらず、彼は「二重入力」に対する解決策を探しており、私にとっては、彼のコードでこれに対処しなければなりません(Malacarneが提案したように)だから、私にとっては、それほど明白なことではないのです。

3)について、「ResultRetCodeは同期 だが、ポジション(取引・注文)のMT5データベースへの更新は非同期」と書かれていたので、この文章について回答しました。

とにかく、私たちの議論は、半分のコップの水の話のようです。ある人は半分満ちていると見なし、ある人は半分空 だと見なす。)

正直なところ、この議論が有益であるとは思いませんし、(少なくともこのトピックでは)続けなければならないとも 思いません。

 
Ubzen:
@figurelli: モデレーター就任おめでとうございます ... .
Ubzen、どうもありがとう、でもやっぱりこれはmql5.comの重大なバグだと思うんだ ;-))
 

投稿されたすべての回避策は非常に良いものです。私はそれに感謝し、その過程でいくつかのアイデアを学びました。

あなた方は有用です。

私のEAはより回復力があるようです。

 
figurelli:
...

正直なところ、この議論はあまり意味がなく、(少なくともこのトピックでは)続ける必要が ないと思っています

その通りだと思います。ご心配なく、お進みください。