Торговый запрос проходит несколько стадий проверок на торговом сервере. В первую очередь проверяется корректность заполнения всех необходимых полей параметра , и при отсутствии ошибок сервер принимает ордер для дальнейшей обработки. При успешном принятии ордера торговым сервером функция OrderSend() возвращает значение true. Рекомендуется...
OrderSend関数が trueを返し、result.orderに注文チケットがある場合(result.order!=0)、その注文はブローカーによって受理され、取引タブにあることを保証するのでしょうか、それともこの段階ではブローカーのサーバーによってのみ受理され、取引所では受理されないのでしょうか。
また、2つ目の質問として、OrderSendがtrueを返し、result.order==0となる状況はあり得ますか?
OrderSend関数が trueを返し、result.orderに注文チケットがある場合(result.order!=0)、注文がブローカーによって受理され、取引タブにあることを保証するのか、それともこの段階ではブローカーのサーバーによってのみリクエストが受理され、取引所では受理されないのかを教えてください。
保証します。
2つ目の質問は、OrderSendがtrueを返し、result.order==0となる状況はあり得ますか?
いいえ。
保証。
いいえ。
つい先日、OrderSend機能についての 説明が追加されましたので、オンラインヘルプをご覧ください。
つい先日、OrderSend関数に関する 説明が追加されました。
これは成行注文に適用されますか?
受け付けられた注文は、約定条件のいずれかが発生するまで、取引サーバーに保存され、処理されるのを待ちます:
取引、自動取引システム、取引戦略のテストに関するフォーラム
取引環境での典型的なエラーとその排除方法
fxsaber, 2018.02.20 12:23 pm.
標準的なOrderSend(タイムアウトなし)の実装の条件付きスキームこのスキームから、同じMetaQuotes-Demo上でOrderSendAsyncを介して成行注文を発注する場合、注文が約定または拒否されるまで、対応する注文を発注するイベントをキャッチすることを保証することは不可能であることが明確にわかります。つまり、MT5には、OrderSendAsyncの中間結果を評価する簡単なメカニズムがありません。
OrderSendは、Result.request_idがOnTradeTransactionのOrderSendAsyncと同じ値になるまで実行されます。またはタイムアウトで終了します。したがって、OrderSend の結果は、対応する request_id を持つ OnTradeTransaction のメッセージのタイプにのみ依存します。
request_id そのものの形成について教えていただけると助かります。私の理解が正しければ、これはターミナル/アカウントを起動/接続した時点からトレードサーバーに送信された注文のカウンターです。ターミナル自体がトレードサーバーからの受信メッセージを分析し、必要なrequest_idを1つだけに割り当てるか(疑わしい)、またはrequest_idを特定のメッセージにリセットします(可能性が高い)。この動作のおかげで、しばらく前に、入札履歴をOrderSendの出力と一致させることができました。しかし、OnTradeTransactionでは正しいrequest_idを持つメッセージが1つしか表示されないため、上の引用文にある非同期モードでの不快な状況が発生します。
こんにちは。MqlTradeResult.dealとMqlTradeResult.orderの矛盾を見つけました。
1) 説明(MQL5リファレンスマニュアル)
2) リアルタイム取引
成行注文(TRADE_ACTION_DEAL)を発注しています。Print関数を使ってMqlTradeResultの値を出力します:
とログに表示されます:
Sleep 関数で数秒間「スリープ」し、再度データを出力してみましたが(取引がすでに正確に行われ、ポジションがオープンされている場合)、取引の数字は表示されませんでした。
3) ストラテジー・テスター
ここではすべてのフィールドが埋まっています:
何がこのような違いを生むのでしょうか?
こんにちは、MqlTradeResult.dealとMqlTradeResult.orderの不整合が見つかりました。
https://www.mql5.com/ja/docs/trading/ordersend
成行注文を送信する場合(MqlTradeRequest.action=TRADE_ACTION_DEAL)、OrderSend()関数の成功結果は、注文が執行された(対応する取引が執行された)ことを意味しません。取引サーバは、 OrderSend()コールに対するレスポンスを形成する時点でこれらのデータが既知である場合、 返された 結果 構造 体に 取引 または 注文 フィールドの値を記入することが できる 。 一般的に、OrderSend()コールの応答が送信された後に、注文に対応する取引の実行イベントが発生することがある。したがって、どのようなタイプの取引要求であっても、OrderSend() の実行結果を受信する際には、まず、 返ってきた結果構造 体で利用可能な取引サーバーの戻りコード retcode と外部取引システムの応答コード retcode_external (必要な場合)を確認する必要がある 。
有益な記事をありがとう。メタクォーツ
クエリ1つのfor()ループで、未決済の注文と未決済のポジションの両方をまとめてループさせるにはどうすればよいでしょうか(MQL4ですべての注文をループさせ、注文が約定済みか未決済かをチェックする方法と同様です)?
有益な記事をありがとう。メタクォーツ
質問です:1つのfor()ループで、未決済の注文と未決済のポジションの両方をまとめてループさせるにはどうすればよいでしょうか(MQL4ですべての注文をループさせ、注文が約定済みか未決済かをチェックする方法と同様です)?
ポジションと未決済注文を計算するには、2つの独立したサイクルを使用する必要があります。1つのサイクルはポジションを列挙し、2つ目のサイクルは保留中の注文を列挙します。例:ポジションとペンディング注文の計算
多くの批判があるにもかかわらず、強力なコミュニティがあるのだから:
翻訳とテキストの言葉遣いが理解を妨げている...私は汗をかきながら、誰が最初に来るべきかを見つけるために遠くまで行かなければならなかった:
履歴から注文に関する情報を取得するには、まず3つの関数のいずれかを使用して注文履歴キャッシュを作成する必要があります:HistorySelect(start, end)、HistorySelectByPosition()、または HistoryOrderSelect(ticket)です。実行に成功すると、HistoryOrdersTotal() 関数によって返された注文数がキャッシュに保存されます。これらのオーダーのプロパティへのアクセスは、適切な関数を使用して、チケットの各要素によって実行されます:
対照的:https://www.mql5.com/ja/docs/trading/historyorderstotal 以下に転記。
ヒストリーオーダー合計履歴内の注文数を返します。HistoryOrdersTotal() を呼び出す前に、まず、HistorySelect() 関数 または HistorySelectByPosition() 関数を使用して、取引と注文の履歴を受け取る必要があります。
int HistoryOrdersTotal();
戻り値
double 型の値。
注意
取引履歴の注文とツールボックスバーの「取引」タブに表示さ れる 未決注文を 混同しないでください。キャンセルさ れた 注文や 取引に至った注文のリストは、クライアント端末のツールボックスの「履歴」タブで確認できます。
以下もご参照ください。
結局のところ、HistoryOrdersTotalと、HistorySelect(start, end) HistorySelectByPosition()またはHistoryOrderSelect(ticket)、あるいは 2番目の文章で言及されているHistorySelectByPosition()の3つの関数のうち、どちらが先なのでしょうか。
難しかったですね、もっと簡単だったかもしれませんが...最初に思いつくのは、2番目のテキストで言及 されている3つのHistorySelect(start, end) HistorySelectByPosition ()か HistoryOrderSelect(ticket)、あるいは HistorySelectByPosition()の どれかだと思うのですが...。
こんにちは、
開発者の方に質問です。履歴キャッシュがどれくらいのメモリーを消費するか、おおよその情報を教えてください。
少ない履歴でスクリプトをターミナルで実行したところ、このような結果になりました:
つまり、数百万件の取引と100万件の注文の履歴がある場合、キャッシュには約1ギガバイトが必要ということですか?
各mqlプログラムに対して?