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

 

新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第5部): 取引イベントのクラスとコレクション、プログラムへのイベント送信 はパブリッシュされました:

前の記事では、MetaTrader 5とMetaTrader 4プラットフォーム用のプログラムの開発を単純化するための大規模なクロスプラットフォームライブラリの作成を始めました。第4部では、口座の取引イベントの追跡をテストしました。本稿では、取引イベントクラスを開発してイベントコレクションに配置します。そこからは、これらはエンジンライブラリの基本オブジェクトとコントロールプログラムチャートに送信されます。

これでEAをコンパイルしてテスターで起動できます。 ボタンをクリックすると、発生した口座イベントに関する短い2行のメッセージがテスターの操作ログに表示されます。


EAイベントハンドラからのエントリは、テスタの外部で機能するため、操作ログには表示されません。デモ口座のEAボタンをクリックすると、ターミナルの操作ログには3行が表示されます。そのうち2行はCEventクラスの短いメッセージを表示するメソッドから、もう1行はEAのOnChartEvent()ハンドラからです。

以下は、未決注文を配置して削除したときに操作ログに表示されあるメッセージの例です。

- Pending order placed: 2019.04.05 23:19:55.248 -                                                              
EURUSD 0.10 Sell Limit #375419507 at price 1.14562                                                             
OnChartEvent: id=1001, event=TRADE_EVENT_PENDING_ORDER_PLASED, lparam=375419507, dparam=1.14562, sparam=EURUSD 
- Pending order removed: 2019.04.05 23:19:55.248 -                                                             
EURUSD 0.10 Sell Limit #375419507 at price 1.14562                                                             
OnChartEvent: id=1002, event=TRADE_EVENT_PENDING_ORDER_REMOVED, lparam=375419507, dparam=1.14562, sparam=EURUSD

作者: Artyom Trishkin

 
このライブラリーは、多くのトレードのニュアンスをどのように処理するのだろう。だから、少なくとも最初のテストをやってみる価値はあるだろう。

取引、自動取引システム、取引戦略のテストに関するフォーラム。

より少ないコード、より多くのローリング...EAを書く

fxsaber, 2019.03.12 21:46

このタスクは、MT5の下で取引を書く能力の初期テストと考えることができます。だから、誰もがそれに挑戦することができます。

 
fxsaber:
このライブラリーは、多くのトレードのニュアンスをどのように処理しているのだろう。だから、少なくとも最初のテストに合格してみる価値はあるだろう。

ライブラリにはまだトレーディング・クラスはありません。現時点では、口座の履歴とアクティブな市場の状態に関する作業は終わりに近づいています。ネット口座イベントの追跡は次の記事で公開し、次にMetaTrader 4の口座に関する作業を行い、メッセージ出力用のクラスを準備した後、取引クラスに関する作業を説明します。

 
Artyom Trishkin:

ライブラリにはまだ取引クラスはありません。現時点では、口座履歴とアクティブな市場の状態に関する作業は終わりに近づいています。ネット口座イベントの追跡は次の記事で公開され、次にMetaTrader 4の口座に関する作業、そしてメッセージ出力用のクラスを準備した後、取引クラスに関する作業が説明されます。

なるほど。MT5はこの点で非常に複雑なので、MT5で発生する微妙な取引とそれを考慮する方法について詳しく説明する記事全体が必要だと思います。

 
Artyom Trishkin: ネッティング口座のイベント追跡については、次回の記事で紹介します。
ライブラリはネッティング口座とヘッジ口座の両方のタイプを自動的に検出し、対応するのでしょうか?
 
fxsaber:

ロジャーMT5はこの点で非常に複雑なので、MT5で発生する微妙な取引とそれを考慮する方法について詳しく説明した記事が必要でしょう。

私はそのような状況への対応に追われています。それらすべてに正しく対処できることを願っています。

他にも興味深いことがあります。説明したライブラリに基づいて、ライブラリに収集・保存されたデータに簡単にアクセスできるユーザーケース関数が作成され、取引クラスを使用することができます。
しかし、コレクション・リストへのポインタや、そこから任意のデータへのポインタといった、より低いレベルのアクセスで利用することは可能である。しかしこれは、ライブラリに基づいて独自のプログラムを簡単に作成できるという、冒頭で述べた「主張」とは一致しない。しかし、これはほんの始まりに過ぎない。)

 
Igor Makanu:
ライブラリはネッティング口座とヘッジ口座の両方を自動的に検出して動作しますか?

はい。次の記事で公開します。

 
Artyom Trishkin:

はい、もう。次の記事を掲載する予定だ。

しかし、今のところ、口座履歴と市場の状態でのみ動作します。その後、収集したデータに基づいて、どの口座タイプのどのポジションの履歴も取得できるようになります。それは私の計画に含めるつもりです。
 
 

Artyomさん、こんにちは!本文中の説明に従うと、 CHistoryCollection::OrderSearch(...)関数には ブレークが欠けている 可能性がある ようです。

for ループは 、「失われたオーダー」を見つけるかどうかにかかわらず、 常に start- 1から 0までの すべての反復を完了します

おそらく、 "失われたオーダー "を見つけた後に ブレークを入れた方が効率的でしょう

ulong CHistoryCollection::OrderSearch(const int start,ENUM_ORDER_TYPE &order_type) 
  { 
   ulong order_ticket=0; 
   for(int i=start-1;i>=0;i--) 
     { 
      ulong ticket=::HistoryOrderGetTicket(i); 
      if(ticket==0) 
         continue; 
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)::HistoryOrderGetInteger(ticket,ORDER_TYPE); 
      if(this.IsPresentOrderInList(ticket,type)) 
         continue; 
      order_ticket=ticket; 
      order_type=type; 
      break; 
     } 
   return order_ticket; 
  } 

どう思いますか?

Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Order Properties
Documentation on MQL5: Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Requests to execute trade operations are formalized as orders. Each order has a variety of properties for reading. Information on them can be obtained using functions Position identifier that is set to an order as soon as it is executed. Each executed order results in a deal that opens or modifies an already existing position. The identifier of...
 
Alvaro Arioni :

Artyomさん、こんにちは!本文中の説明に従うと、 CHistoryCollection::OrderSearch(...)関数に ブレークが欠けている 可能性がある ようです

for ループは 、「失われたオーダー」を見つけるかどうかにかかわらず、 常に start- 1から 0までの すべての反復を完了します

おそらく、「 失われた順序」を見つけた後に ブレークを入れた方が効率的だろう

...

どう思う?

失われたオーダーは1つではないかもしれない