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

 
angevoyageur: あなたの言っていることがよくわからないのですが。このトピックで話しているこの問題は、コーディングが悪いのではなく、mql5の設計が悪いのです(これは私の意見ですが、単にバグかも しれませんね)。複数の取引スレッド」とはどういう意味ですか?

あなたが悪いデザイン だと思うものをもう一度読み直しました。

古いmt4では、このクラスは 存在しません。Successful_Ordersのチェックは、Ticket#==(-1) && GetLastError()が普通です。注文が有効なチケット#を返してGLE=0になるケースは見たことがありませんが、次のティックではOrdersTotal()は0を返します。

mql5のドキュメントを全部見ているわけではないことを念頭に置いてください。しかし、もしPositionSelect_Informationが後まで更新されないと書いてあるのならそして、誰かがPositionSelectを使ってエントリーロジックを評価しているとします。その場合、その人はPositionSelect_Informationが更新されるまでOrderSend Logicを終了する前に待たなければなりません。

スレッドの件ですが...複数スレッドと単一スレッドでの注文送信の話をしたんです。同時に開く注文のように。それはここと関係があるかもしれないし、ないかもしれない。

 
Ubzen:

あなたが悪いデザイン だと思うものをもう一度読み直しました。

old-mt4内では、これらのクラスは 存在しません。Successful_Ordersの通常のチェック方法は、Ticket#==(-1) && GetLastError()です。注文が有効なチケット#を返してGLE=0になるケースは見たことがありませんが、次のティックでOrdersTotal()はまだ0を返します。

mql5のドキュメントを全部見ているわけではないことを念頭に置いてください。しかし、もしPositionSelect_Informationが後まで更新されないと書いてあるのならそして、誰かがPositionSelectを使ってエントリーロジックを評価しているとします。その場合、その人はPositionSelect_Informationが更新されるまでOrderSend Logicを終了する前に待たなければなりません。

スレッドの件ですが...複数スレッドと単一スレッドでの注文送信の話をしたんです。同時に開く注文のように。ここでは関係ないかもしれませんが。

PositionSelectのドキュメントには「後まで更新されない」なんてことは書いてない。 PositionSelectがtrueでもPositionの情報が古くなる可能性があると書いてあるだけで、今回の問題とは関係ありません。

この問題とは関係ないのですが 念の ため、マーケットが開いて いるときに テストして みます。

 
angevoyageur:

PositionSelectに関するドキュメントには、「後まで更新されない」なんてことは書いてありません。 PositionSelectが真であっても、ポジションに関する情報が古くなることがある、とだけ書いてあり、今回のあなたの問題とは関係ありません。

この問題とは関係ありません。馬鹿な ことを言わない ように 市場が開いて いるときに 時間をかけて テストして みることにします

K...... そして、btwは、ドキュメントが何も言っていない場合、私はあなたに完全に同意する。

最終的にService_Deskに質問するのは、"なぜtrade.PositionOpen()==trueのときにPosition_Informationを更新できないのか?"ということです。

おそらく彼らは私たちのために良い答えを持っているでしょう.

 
angevoyageur:

この問題について、関係者全員がServiceDeskにチケットを書いてくれれば、おそらく役に立つでしょう。しかし、MQがこの設計を変更する気があるかどうか、私は非常に懐疑的です。しかし、私たちは試すことができます。

人々はServiceDeskに 手紙を書いて、そのチケット番号をここで報告することができます。私のは

エラーMetaTrader 5 MQLOpenStart。2013.12.23 19:08,#916435


サービスデスクにも連絡しました、#9331922014.01.19 14:44

 

MQは、実際には簡単にタイムアウト機能を 持つようにこれを再設計することができますか?

応答がない場合は、エラーが発生するような、そんな感じですか?

 
doshur:

MQは、実際には簡単にタイムアウト機能を持つようにこれを再設計することができますか?

応答がない場合はエラーになるとか、そんな感じ?


まさにその逆を行ったのです。mql5が作られたとき、PositionSelectのような関数にタイムアウトパラメータが ありました。

しかし、彼らは後でそれを削除しました。こちらのポイント9を参照してくださいhttps://www.mql5.com/en/forum/53/page5#comment_14479

 

しかし、私が思うに、MQL5の主な問題は、成功したFXベースのコードを株式市場(これは本当に素晴らしいものです)に適応させることでした。

例えば、いくつかの株式市場はFIXプロトコルを標準として使用していますが、私にとってこの通信プロトコルは、どんなコードやアーキテクチャも適合させるのが簡単ではありません。

いずれにせよ、MQの開発者は、MQL4をベースにMQL5を作るというタイムチャレンジをしていたのだと思います。その年のチャンピオンシップは、時間的余裕を持つために中断されたと記憶しています。

ですから、このトピックは、将来の MQL6や、ゼロからの本当に新しいアーキテクチャ、主にトランザクションの回復力やどの市場でも動作する不可知論的なソリューションについて、素晴らしいアドバイスになるかもしれません。

 
doshur:

MQは、実際には簡単にタイムアウト機能を持つようにこれを再設計することができますか?

応答がないとエラーになるとか、そんな感じでしょうか?

伝統的に、TimeOutは注文がポジションにならないことを意味するものではありません。ポジションになったかどうか確認するのに長時間待たされたり、注文が執行されないと取引停止になったりします。

これはプログラマーのミスであると、MQはfiglli さんと同じ意見だと思います。なぜなら、trade.PositionOpenの基になっている関数には、他のものをチェックする必要があることが明記されているからです。


****** (個人的な議題を追加・・・この時点で読むのをやめるかもしれません) ******

これが、私がmql_forumで新米プログラマーをサポートする際に、関数とその戻り値についてしつこく質問しない理由です。次のようなことをしても意味がないと思います。

if( OrderSend()<0 )){ Print( GetLastError() ); }.

これは、自動トレーダーであると仮定しています...あなたは離れている可能性があります...そして、それは何をすることはPrint()なのですか?

私の考えでは、Error_HandlingとError_Reportingは2つの全く異なるモンスターです。エラー処理の適切な方法を説明しようとすると、何ページもかかり、何回再試行すべきか、あるいは取引を終了すべきか、トレーダーにとって非常に個人的なものとなります。

**** 初心者がEAをコーディングして、それが取引に問題がある場合、私は言っていません...。Print( GetLastError(); ) <- これは明らかなことです。しかし、もし私が常にGet_Errorするように言うのであれば、常にHandle_Errorするようにも言うべきでしょう。*** アジェンダを終了します。****

 
angevoyageur:


全く逆のことをしたのである。mql5が作られたとき、PositionSelectのような関数にタイムアウトのパラメータが ありました。

しかし、後でそれを削除しました。こちらのポイント9を参照してくださいhttps://www.mql5.com/en/forum/53/page5#comment_14479

そろそろ復活させるか?
 
doshur:
それを復活させる時が来たのか?

私はそうは思いません。同期取引要求は、すべての面で同期的でなければならない。それはとてもシンプルなことです。

ここでは、リクエストは同期ですが、その後、非同期のものを管理する必要があります。それについては何も文書化されていません。