記事"MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第4部): 取引イベント"についてのディスカッション

 

新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第4部): 取引イベント はパブリッシュされました:

前の記事では、MetaTrader 5とMetaTrader 4プラットフォーム用のプログラムの開発を単純化するための大規模なクロスプラットフォームライブラリの作成を始めました。過去の注文と取引のコレクション、成行注文とポジション、そして注文の便利な選択と並び替えのためのクラスはすでに存在します。この記事では、基本オブジェクトの開発を続け、Engineライブラリが口座の取引イベントを追跡できるようにします。

テスターでEAを起動してボタンを試してみましょう。

すべてが正しく活動化され、操作ログは発生したイベントに関するメッセージを受け取ります。

現在、テスタージャーナル内のすべてのイベントメッセージは、ライブラリベースオブジェクトのCEngine::WorkWithHedgeCollections()メソッドに表示されます。口座で発生したことを「理解」するには、カスタムプログラムでイベントコードを知る必要があります。これにより、イベントに応じてプログラムの応答ロジックを作成することができます。それを実現する能力をテストするために、ライブラリのベースオブジェクトに2つのメソッドを作成します。1つは直近のイベントのコードを保存するものであり、もう1つは一連のイベントフラグからなるこのコードをデコードするものです。次回の記事では、口座イベントを処理するための本格的なクラスを作成します。

作者: Artyom Trishkin

 

Artyom Trishkin、あなたの仕事に感謝します。もし難しいことでなければ、注文や履歴を扱うこと以外に、どのような機能をカバーする予定なのか(すでにカバー済みで、出版準備中)、簡単に教えてください。私は今、標準ライブラリをベースに同様のライブラリを書き始めたところですが、テクニカル分析ツールのような機能面から始めました。古典的なTAやRAで使われている分析ツールをすべてライブラリに書き込んで、インジケーターツールなどと相互運用できるようにすることです。CExpertSignal.

おそらく、あなたの機能が私が計画しているものをカバーするのであれば、あなたがすでに書いたものを継続開発するという選択肢を検討すべきです。

 
alex_all:

Artyom Trishkin、あなたの仕事に感謝します。もし難しいことでなければ、注文や履歴を扱うこと以外に、どのような機能をカバーする予定なのか(すでにカバー済みで、出版準備中)、簡単に教えてください。私は今、標準ライブラリをベースに同様のライブラリを書き始めたところですが、テクニカル分析ツールのような機能面から始めました。古典的なTAやRAで使われている分析ツールをすべてライブラリに書き込んで、インジケーターツールなどと相互運用できるようにすることです。CExpertSignalです。

おそらく、あなたの機能が私が計画しているものをカバーするのであれば、あなたがすでに書いたものを継続開発するという選択肢を検討すべきです。

現在記事で説明されていることはすべて始まりにすぎません。ターミナル・オーダー・システムとの連携は非常にシンプルになります。あらゆる注文、取引、ポジション、発生したイベントなどに関するほぼすべてのデータを、オンデマンドでプログラムに提供する。それが注文システムだ。両ターミナルの注文システムに関する作業と記事の出版が完了し、出版されるまでは、他の機能は出版されません - すべて順番に。
しかし、定められた構造に従って、価格データの作業、指標の作業、グラフィカル・オブジェクトの作業が準備され、出版されます。つまり、他のライブラリとドッキングすることなく、1つのライブラリだけをフルに使用することが可能になる。例として、オープンポジションや成立した注文のアイコンをクリックしてデータを取得する、プライスバーをクリックしてデータを取得する、既存のコレクションからデータを検索して処理する、など。

私は、ユーザーが必要なデータの入手方法を考える必要がなく、用意される数多くの機能のいずれかを要求して入手するだけでよいように、迅速で便利なアクセスを整理する予定である。

たくさんの計画があり、たくさんの展開がある。私は資料を準備している。リクエストも含めて(まだありません )。

 
Artyom Trishkin:

今、記事に書かれていることはすべて始まりに過ぎない。端末の注文システムで作業するのは非常に簡単だ。あらゆる注文、取引、ポジション、これまでに発生したイベントなどに関するほぼすべてのデータを、要求に応じてプログラムに提供する。それが注文システムなのだ。両端末の注文システムに関する作業と記事の出版が完了し、出版されるまでは、他の機能は出版されません。
しかし、定められた構造に従って、価格データの作業、指標の作業、グラフィカル・オブジェクトの作業が準備され、出版されます。キャンバス上に本格的なグラフィカル・シェルがあり、最初に設定されたパラダイムに従って、ライブラリーの構造に統合されます。つまり、他のライブラリとドッキングすることなく、1つのライブラリだけをフルに使用することが可能になる。例として、オープンポジションや成立した注文のアイコンをクリックしてデータを取得する、プライスバーをクリックしてデータを取得する、既存のコレクションからデータを検索して処理する、など。

私は、ユーザーが必要なデータをどのように取得するかを考える必要がなく、用意される数多くの機能のいずれかを要求して取得するだけでよいように、迅速で便利なアクセスを整理する予定である。

たくさんの計画があり、たくさんの展開がある。資料を準備中です。リクエストも含めて(まだ利用できない)。

非常に興味深い。私はすでにここでライブラリの2つの類似バージョンを見てきました。ユニバーサルエキスパートアドバイザーとクロスプラットフォームライブラリです。最初のものはクロスプラットフォームとは言い難い。特に、クロスプラットフォームとなるような多くの機能が欠けている。例えば、ポジション/注文の 開始時間や開始 価格などです。MQL版のマクロを自分で使い、コードを別に書かなければならない。しかし、そこには興味深いものがたくさんあります。特に、いくつかのストップがあること、トレイリングが非常に強力でカスタマイズできることが気に入っています。MMの興味深いオプション。これはイタリアからの一連の記事です。とにかく、あなたが得るものを見るのは面白いですし、以前の似たような開発の経験を活用し、最高のものを取ってくれれば最高です。ありがとう。

 
leonerd:

とても興味深い。私はここですでに2つの類似バージョンのライブラリを見たことがある。Universal Expert AdvisorとCross-platform Libraryだ。最初のものはクロスプラットフォームではない。特に、クロスプラットフォームとなるような多くの機能がない。例えば、ポジション/注文の 開始時間や開始 価格などです。MQL版のマクロを自分で使い、コードを別に書かなければならない。しかし、そこには多くの興味深いものがあります。特に、いくつかのストップの存在、トレイリングは非常に強力でカスタマイズ可能なところが気に入っています。MMの興味深いオプション。これはイタリアからの一連の記事です。とにかく、あなたが得るものを見るのは面白いですし、以前の似たような開発の経験を活用し、最高のものを取ってくれれば最高です。ありがとう。

ご意見ありがとうございます。ただ、記事を読んだり、必要なものを探したりする時間はないので、そのようなことはできませんが、将来的な機能のリクエストを受け、それを計画し、実装のためのリストに含めることはいつでも歓迎します。提案もあるだろう。今のところ、私は当初予定していた実装を実行している。

 

このライブラリはMoexの 為替商品で動作しますか?

私の意見では、注文を扱うためのライブラリに資金管理に関係ない他の機能を追加しすぎるべきではありません。

そうですね、ライブラリのマニュアルの詳細な説明が不足しています。

 
Aleksey Vyazmikin:

このライブラリはMoexのストック楽器で使えますか?

私の意見では、注文を操作するためのライブラリに、資金管理に関係ない他の機能を追加しすぎるべきではありません。

そうですね、ライブラリのマニュアルの詳細な説明が不足しています。

テストすればわかる。気づいたことは修正されるだろう。ライブラリのドキュメントができるだろう。すぐにではない。

 

アルテム、願望について-私はそう思う。もしあなたが、この決断やあの決断においてどちらに進むべきか、何が重要で何を捨てるべきかなどを選ぶという点で、何か考えがあるのなら...、

それについてどう思うか、フォーラムのメンバーは喜んでフィードバックするでしょう。

というのも、すでに準備され、文書化されたライブラリであっても、誰もが違った読み方をし、その瞬間に自分に関係するものをそこから取り入れるからです。

だから、君の努力の成功と決意を祈っているよ!:)

 

読んで、まとめて、走る!


5つ星のうち5つ

トップ・アルチョム

 
Christian:

読み、コンパイルし、実行する!


5つ星のうち5つ評価できるとしたら

トップ・アルチョム

ありがとう
 

アルテム、まず第一に。 まずはじめに。 一連の記事とライブラリにとても感謝して います。あなたの記事を読むことで、OOPに関するすべてを理解することができました!あなたの記事は本当に必要な人に教え、助けてくれます。同じことを繰り返すだけのところを、異なるアルゴリズムを使っているのも、とても成功していると思います。

さて、本題に入らせてもらうと、::GetListByTime- このメソッドでは、時間間隔によって注文を選択し、呼び出し元のプログラムにリストを渡します

「もしオープン時間であれば、検索用のプロパティは オープン時間になります。もしクローズ時間であれば、注文はクローズ時間で比較されます。

しかし、 どうやって?- このメソッド自体では、注文リストのソートを変更することはできません。

私が理解しているのは、間違っているかもしれませんが、どのような時間間隔を渡しても(例えば、終値)、SearchGreatOrEqual()SearchLessOrEqual() メソッドは、MT5 の開始時刻と MT4 の終値でソートされたリストを検索するということですか?デフォルトでは、COrder コレクションクラスのコンストラクタ内の注文リストの初期化は、ほとんどの場合、注文の 開始時間またはチケットによって指定されます。

//+------------------------------------------------------------------+
//| コンストラクタ|
//+------------------------------------------------------------------+
CHistoryCollection::CHistoryCollection(void) : m_index_deal(0),m_delta_deal(0),m_index_order(0),m_delta_order(0),m_is_trade_event(false)
  {
   this.m_list_all_orders.Sort(#ifdef __MQL5__ SORT_BY_ORDER_TIME_OPEN #else  SORT_BY_ORDER_TIME_CLOSE #endif );
   this.m_list_all_orders.Clear();
   this.m_list_all_orders.Type(COLLECTION_HISTORY_ID);
  }
//+------------------------------------------------------------------+
//| コンストラクタ|
//+------------------------------------------------------------------+
CMarketCollection::CMarketCollection(void) : m_is_trade_event(false),m_is_change_volume(false),m_change_volume_value(0)
  {
   this.m_list_all_orders.Sort(SORT_BY_ORDER_TIME_OPEN);
   this.m_list_all_orders.Clear();
   this.m_list_all_orders.Type(COLLECTION_MARKET_ID);
   ::ZeroMemory(this.m_struct_prev_market);
   this.m_struct_prev_market.hash_sum=WRONG_VALUE;
   this.m_list_control.Clear();
   this.m_list_control.Sort();
   this.m_list_changed.Clear();
   this.m_list_changed.Sort();
   this.m_k_pow=(ulong)pow(10,6);
  }

そのため、 上記のメソッド (::GetListByTime) は次のように動作し、常に MT5 のオープン時間または MT4 のクローズ時間で検索されます。

//--- COrder オブジェクト同士を、可能なすべてのプロパティで比較します (COrder オブジェクトの指定されたプロパティでリストをソートします)
virtual int Compare(const CObject *node,const int mode=0) const;

テンプレートに従ってオーダーを検索する場合 標準MQLライブラリのオーダー・コレクション・クラスのコンストラクタで選択されたソート・モードが使用されます。そのため、パート3において

//+------------------------------------------------------------------+
||時間の経過とともにコレクションから注文を選択する。
//| begin_timeからend_timeまでの範囲内で。
//+------------------------------------------------------------------+
CArrayObj *CHistoryCollection::GetListByTime(const datetime begin_time=0,const datetime end_time=0,
                                             const ENUM_SELECT_BY_TIME select_time_mode=SELECT_BY_TIME_CLOSE)
  {
   ENUM_ORDER_PROP_INTEGER property=(select_time_mode==SELECT_BY_TIME_CLOSE ? ORDER_PROP_TIME_CLOSE : ORDER_PROP_TIME_OPEN);

   CArrayObj *list=new CArrayObj();
   if(list==NULL)
     {
      ::Print(DFUN+TextByLanguage(「一時的なリスト作成エラー,"Error creating temporary list"));
      return NULL;
     }
   datetime begin=begin_time,end=(end_time==0 ? END_TIME : end_time);
   if(begin_time>end_time) begin=0;
   list.FreeMode(false);
   ListStorage.Add(list);
   //---
   this.m_order_instance.SetProperty(property,begin);
   int index_begin=this.m_list_all_orders.SearchGreatOrEqual(&m_order_instance);
   if(index_begin==WRONG_VALUE)
      return list;
   this.m_order_instance.SetProperty(property,end);
   int index_end=this.m_list_all_orders.SearchLessOrEqual(&m_order_instance);
   if(index_end==WRONG_VALUE)
      return list;
   for(int i=index_begin; i<=index_end; i++)
      list.Add(this.m_list_all_orders.At(i));
   return list;
  }

標準ライブラリ(SearchGreatOrEqual() メソッドとSearchLessOrEqual() メソッド)は、コンストラクタで渡されたソートコードによって検索を行うので、
これらの赤で強調表示された行を削除し、オブジェクトのプロパティを設定する条件付きコンパイル行を追加するだけです:

   COrder            m_order_instance;       // プロパティで検索するための注文オブジェクト

それでもリストは、MT5を開くかMT4を閉じるかの2つの方法でしかソートできませんか?
そうですよね?

P.S.これはOOPロジックを理解するために必要なことです。

Библиотека для простого и быстрого создания программ для MetaTrader (Часть III): Коллекция рыночных ордеров и позиций, поиск и фильтрация
Библиотека для простого и быстрого создания программ для MetaTrader (Часть III): Коллекция рыночных ордеров и позиций, поиск и фильтрация
  • www.mql5.com
В первой части данного цикла статей мы начали создавать большую кроссплатформенную библиотеку, целью которой является облегчение создания программ для платформы MetaTrader 5 и MetaTrader 4. Во второй части продолжили развитие библиотеки и сделали коллекцию исторических ордеров и сделок. В данной части повествования создадим класс для удобного...