無効なリクエスト - 始めたばかりで理解できない... - ページ 8

 
papaklass:

同じように、関数だけで実装しています。


なるほど、MKさんのコードと似ていますね。OrderCheckと OrderSendの 間に、ユーザーによるエラー処理の層があるのですね。

 
papaklass:

私はこのように、関数だけで実装しています。

OrderCheck は暗黙の了解で、OrderSend の内部で必ずチェックされる。

そのため、注文が正しく入力されなかった場合は、サーバーに送り返すことなく、すぐにレスポンスが返されます。

 
papaklass:

ハンドブックに書いてあることを見てください。

最初の選択:貿易 取引のための機能であり、小切手についての言及がないことがわかります。

まあ、チェックがあると言えばそうなんですけどね。

厳しいチェックを受けずにターミナルを離れることはありません。

2つ目のハイライト:サーバー上でチェックが行われていることがわかります。開発者はOrderCheck()を使って、サーバーに送信する前にリクエストをチェックすることを推奨しています。ここでも、OrderSend()が何らかの検証を行うという記述はない。

特にトレーダーには、注文が正しく入力されたかどうかを事前に確認し、適切な対処をする機会を設けることをお勧めします。

希望する人は-事前チェックができる。そのような方は、私たちがチェックし、似たような答えを返します。

リクエスト送信前のチェックについて言及しているのは、「構造体の基本チェック(ポインタチェック)に成功した場合・・・」のみです。しかし、ポインタのチェックと要求構造フィールドの値のエラーチェックは同じではありません。そして、開発者がOrderCheck()関数の使用を推奨しているのは、OrderSend()がサーバーにリクエストを送る前に本当のエラーチェックを行っていないことを間接的に証明しています。そうでなければ、なぜ "バーター "にしなければならないのか。OrderSend()が最初にチェックし、同じチェックをOrderCheck()で再び行わなければならないのか。

つまり、このリファレンスから、チェックはサーバーだけで行われることが明確にわかるのです。

サーバーへのリクエストの誤送信や過剰なフローを見逃すことはない。

基本的な論理で十分理解できる。そして、ドキュメントを充実させる。

 
sergeev:

ありません。 すべてのエラーはビジネスロジックで処理されます。

持っています。ビジネスロジックはビジネスロジックに関連するイベント(例:注文の失敗)を処理するが、それ以外(例:サーバーレスポンスの遅延)は、普遍的なテンプレートであり、これを基にあらゆる専門家が実装することが可能である。

しかし、MT5はリターンコードの処理+非同期という点で何倍も複雑です。

それこそ、以前から同様に書いているように、このテーマに関する情報はゼロです。そして、何年も前からMKは、あらゆる方法で、その提供から自分たちを切り離そうとしている。これは私が書いたことですが、販売店にとっては、漏れにつながるポイントがある製品、つまりMQにとってはそれが売上を伸ばす要因になるのです。残念なことに、私たちは同志ではなく、競争相手(私たちとMQ)がいる市場にいるのです。

ラッパーに不可能を求めるのか。標準ライブラリはビジネスロジックではありません。端末の機能を「覆う」ラッパーなのです。お菓子の詰め物の上にかぶせる包み紙のこと。

そうすると、このような仕組みにする意味はほとんどありません。

しかし、保証人となるのはあなたなので、包装紙は何も保証できません。あなたのビジネスロジック:)

印刷機能がディスクの空き容量を保証できないのと同じです。 また、エラーのログを取ることもできます。エラー処理には他の関数を使用する必要があり、それらはケースバイケースです。

正しいラッパーでもすべてを保証することはできませんが、関連する機能に関連する多くのことを保証することができます。

-Alexey-、 具体的な欠点について話しましょう。あなたは、直したい具体的な 欠点を声に出しています。

すでに何度も具体的に書かれています。MQが既製品を提供できないのなら、せめてエラー処理とリターンコードのマニュアルを作らせてほしい。あ らゆる方法でアンロックされています。4のドキュメントでは、これは部分的に存在していた(例えば、このような場合は30秒待つ)、部分的にユーザーは経験から文書化されていない状況の取り扱いを特定したものである。5は全くありません。そして、それがある以上、誰も使うことはない。

単純に作られた取引インフラが原理的にそれを許さないからMQがそう対応するのだとしたら、なんというか、MT5プロジェクト全体の失敗というか、他にもすごい数の浅瀬があることを考えると、完全に失敗なんですよね。

必要であれば、それぞれのリターンコードを調べて、考えられる主な状況を確認することができます。

このような経験豊富なMQL5 Expert Advisorがあれば、喜んでやります。 時間と必要性を待ちたいと思います。今でも4があるのはありがたいことです。

 

-Alexey-:

既成のソリューション、少なくともエラー処理とリターンコードの手引き


どのコードが処理の問題を引き起こすのか?


コード

識別子

商品説明

10004

トレード_リコード_リクオート

レコート

10006

トレード_リコード_リジェクト

リクエスト拒否

10007

トレード_リコード_キャンセル

トレーダーによるリクエストの取り消し

10008

トレード_レトコード_プレイス

ご注文

10009

トレード_リコード_完了

注文実行

10010

トレード_リコード_ドーン_パーシャル

要求の一部実行

10011

トレード_リコードエラー

要求処理エラー

10012

トレード_レトコードのタイムアウト

時間切れでキャンセルされたリクエスト

10013

トレード_リコード_インバリッド

不正確なリクエスト

10014

trade_retcode_invalid_volume

リクエストのボリュームが正しくない

10015

trade_retcode_invalid_price

リクエストの価格が間違っている

10016

トレード_レトコード_無効なストップ数

リクエストに不正確なストップが含まれている

10017

trade_retcode_trade_disabled

貿易禁止

10018

トレード_レトコード_マーケット_クローズド

市場閉鎖

10019

トレード_レトコード_ノー_マネー

要求の実行に必要な資金が不足している

10020

取引コード価格変更

価格変更

10021

トレード・レコード・プライスオフ

要求の処理に見積もりは不要

10022

trade_retcode_invalid_expiration (トレード・レトコードの無効期限)

リクエストに含まれる無効な有効期限

10023

取引コード順序の変更

注文状況の変更

10024

トレード・レコード・トゥー・マニー・リクエスト

頻繁すぎる要求

10025

トレード_レトコード_ノーチェンジ

要求事項に変更はありません。

10026

trade_retcode_server_disables_at

自動売買がサーバーに拒否される

10027

trade_retcode_client_disables_at

クライアント端末による自動売買の禁止

10028

トレード_レトコード_ロック

リクエストの処理がブロックされている

10029

トレード_レトコード_フローズン

順序または位置の凍結

10030

trade_retcode_invalid_fill

未対応のバランスオーダー タイプが表示される

10031

トレード_リコード_コネクション

トレードサーバーに接続できない

10032

トレード_レトコード_オンリー_リアル

リアルアカウントのみ操作可能

10033

トレードコードリミットオーダー

保留注文数の到達制限

10034

トレードレコードリミットボリュームに到達

このシンボルの注文およびポジションの数量が上限に達しました。


更新日: 2012.11.14
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

例えば10004。どこにどうすればいいのか書いてあるのか?そして、少なくとも4倍速のドキュメントには何かがあった。

Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.

 
sergeev:

どのコードで処理に問題が発生するか?

10006 (どのような理由で拒否されたのか。他のコードに記載されていない理由は何か?)

10011, 10013, 10028

 
A100:

10006 (どのような理由で拒否されたのか。他のコードに記載されていない理由は何か?)

10011, 10013, 10028

質問を支持します。MQ、あなたへの強いお願いです。この4つのコードについて、できるだけ詳しくコメントしてください。
 

同僚たち、すでに真実を探すのにうんざりしている。このトピックは、私が必要としているものと似ているので、ここに助けを求めて書いているのです

即時執行 で注文を出し、ぶら下がっている間は1ティックごとに価格をチェックし、可能であればトレールしています。 しかし、なぜかいつもエラー10013が出ます。可能な限りの掲示板に目を通し、初期オーダーのセリフはほぼ全て追加しました(説明ではシンボルとアクションとslとtpのみで十分とありますが)。何も動かない!?以下はそのコードです。

// проверяем условие на открытую сделку
if (f_IsDealOpened()>0)
{  
   // здесь надо написать условия для коррекции ордеров
 MqlTradeRequest chrequest={0};
    if (1)//(is_Str2)
   {
    PositionSelect(NULL);
    if(PositionGetInteger(POSITION_TYPE)==0)
    {
        chrequest.symbol=PositionGetSymbol(0);
        chrequest.order=PositionGetInteger(POSITION_IDENTIFIER);
        chrequest.volume=PositionGetDouble(POSITION_VOLUME);
        chrequest.action=TRADE_ACTION_SLTP;
        chrequest.sl = latest_price.bid - TrailingStop;
        chrequest.tp = PositionGetDouble(POSITION_TP);

     }
     else
     {
        chrequest.symbol=PositionGetSymbol(0);
        chrequest.order=PositionGetInteger(POSITION_IDENTIFIER);
        chrequest.volume=PositionGetDouble(POSITION_VOLUME);
        chrequest.action=TRADE_ACTION_SLTP;
        chrequest.sl = latest_price.ask + TrailingStop;
        chrequest.tp = PositionGetDouble(POSITION_TP);
        Alert(PositionSelect(NULL));
     
     }    
    }
     MqlTradeResult chresult;
     if (OrderSend(chrequest,chresult)==0) 
         {
             Alert("Ошибка расчета функции OrderSend!");
             return;
         }    
         // анализируем код возврата торгового сервера
         if(mresult.retcode==10009 || mresult.retcode==10008) //запрос выполнен или ордер успешно помещен
           {
            Alert("Ордер по изменению SL успешно помещен, тикет ордера #: ",mresult.order,"!!");
            open_order_ticket = mresult.order;
            open_order_price = mresult.price;
            return;
           }
         else
           {
            Alert("Запрос на измнение ордера не выполнен - код ошибки: ",GetLastError());
            return;
           }
   
   
   return;
}
理由: