記事"MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第24部): 基本取引クラス - 無効なパラメータの自動修正"についてのディスカッション

 

新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第24部): 基本取引クラス - 無効なパラメータの自動修正 はパブリッシュされました:

本稿では、無効な取引注文パラメータのハンドラを一瞥して、取引イベントクラスを改善します。これによって、すべての取引イベント(単一のイベントと1ティック内で同時に発生したイベントの両方)がプログラムで正しく定義されるようになります。

一般的に、EAは、取引注文のエラーを処理するユーザ定義のロジックに従って、状況に応じて行動できる必要があります。したがって、取引注文のエラーが検出された場合、EAに次の指示を与えることができます。

  1. 単に取引メソッドを終了して、ユーザに自分で誤った注文の無効なパラメータのハンドラを作成させる。
  2. 取引注文の無効な値を修正できる場合は、直ちに修正してサーバに送信する。
  3. 状況とエラーが適切な場合、一時停止後に取引リクエストを繰り返すか、単に同じパラメータでリクエストを繰り返す。

取引注文パラメータのエラーを処理した結果は次のいずれかになる可能性があります。

  • エラーの原因がユーザによって除去される前にEAを使用して取引を続けることができない。
  • 取引注文を送信できないため、取引メソッドを終了する。
  • 無効な値を修正し、固定取引注文を送信する。
  • 初期パラメータを使用した取引注文を直ちに送信する(ここでは、取引条件が改善されたと仮定する)。
  • 待機し、相場データを更新し、初期パラメータを使用した取引注文を送信する。

本稿では、エラーとその原因を確認し、エラー処理メソッドを返す取引注文エラーハンドラを開発します。

  • 取引操作の無効化
  • 取引操作の中断
  • 無効なパラメータの修正
  • 初期パラメータを持つ取引リクエスト
  • 待機後の取引リクエスト(一時的解決法)
  • 未決の取引リクエストの作成(後続の記事で)

作者: Artyom Trishkin

 
負けた注文に関する情報を得る方法を教えてください。例えば、損失額、注文番号、注文数量、開始時間などです。ありがとうございます!
 
hsyhsy863 :
負けた注文に関する情報を得る方法を教えてください。例えば、損失額、注文番号、注文数量、開始時間などです。ありがとうございます!
ご質問はこちらからどうぞ。
 
Artyom Trishkin:
ここでは、あなたの質問をすることができます。
質問なのですが、御社のプログラムを使用して自動売買プログラムを設計する際、負けた注文を決済する必要があるのですが、負けた注文の注文番号は どのように取得できますか?
 
hsyhsy863 :
質問なのですが、御社のプログラムを使用して自動売買プログラムを設計する際、負け注文をクローズする必要があるのですが、負け注文の注文番号は どのように取得するのでしょうか?

アドバイザー

//--- すべてのオープンポジションのリストを取得する
   CArrayObj* list=engine.GetListMarketPosition();
//--- 手数料とスワップを考慮し、利益でリストをソートする。
   list.Sort(SORT_BY_ORDER_PROFIT_FULL);
//--- 最も利益が少ない(最も損失が大きい)ポジションのインデックスを取得する。
   int index=CSelect::FindOrderMin(list,ORDER_PROP_PROFIT_FULL);
   if(index>WRONG_VALUE)
     {
      //--- 最大損失のポジションオブジェクトを取得し、チケットでポジションをクローズする。
      COrder* position=list.At(index);
      if(position!=NULL)
         engine.ClosePosition(position.Ticket());
     }

この記事に添付されているエキスパートの例に従ってライブラリを接続する必要があります。

 
Artyom Trishkin:

アドバイザーに

ライブラリーは、この記事に添付されている専門家の例に従って接続する必要があります。

ライブラリーは、この記事に添付されている専門家の例に従って接続されるべきである!
 
OP_BUYSTOPとOP_SELLSTOPを同時に発注した場合、OP_SELLSTOPのみが発注され、OP_BUYSTOPは発注されません。このステートメントは保留注文の条件を完全に満たしているのですが、保留にすることができません。
 
hsyhsy863 :
こんにちは、自動売買の設計をしていたところ、OP_BUYSTOPとOP_SELLSTOPを同時に発注した場合、OP_SELLSTOPのみが発注され、OP_BUYSTOPは発注されないことがわかりました。このステートメントは保留注文の条件を完全に満たしていますが、注文を保留にすることはできません。
このエラーを再現する例を示してください。
 
Artyom Trishkin:
このエラーを再現する例を示してください。
if(datetimeN5!=iTime(NULL,0,0))
if(datetimeN5!=iTime(NULL,0,0))
if(ASWER(Close Position, "Upper Pending Bid")==0) { if(datetimeN5!=iTime(NULL,0,0))
{
買い建玉(0.382,クローズ); { (datetimeN5!=iTime(NULL,0,0))
datetimeN5 = iTime(NULL, 0, 0);
}}
if(datetimeN6!=iTime(NULL,0,0))
{
if(ASWER(Close Position, "Down Pending Sell Count") == 0)
{
売り待ち(0.382,クローズポジション);
datetimeN6 = iTime(NULL, 0, 0);

}}

これは私の買い保留と売り保留のソースコードで、論理的には同時に2つの保留注文があるはずですが、実際には売り保留注文しかありません。

 
すみません、問題は解決しました!
 
hsyhsy863:
すみません、問題は解決しました!
OK