アルチョム・トリシキン さん、素晴らしい有益な仕事をありがとうございます;
イベントのキャプチャを再開し、アドバイザーの閉じた時間の変化を検出するためには、エンジンの状態を保存し、スクリプト/アドバイザーの次回起動時にそれをロードする必要があると思います。
しかし、これには何もしなくてもtrueを返す仮想CObject Save / Load関数があります。
Q: 何を保存し、どのようにアクセスするのですか?
仮想関数を利用するには、オブジェクトの継承者に実装する必要があります。この方法については、口座のコレクションを作成する記事を参照してください。その中で、各アカウント・オブジェクトはファイルに書き込まれ、その後ファイルから読み込まれる。
私は、さまざまなライブラリ・コレクションに保存されているすべてのオブジェクトを徐々にファイルに保存していくつもりだ。しかし、ライブラリーのためのトレード・クラスで忙しくしている間に。
ResetLastTradeEventを使用する際に問題があったので、ここに報告します、
なぜなら、最新のイベントの状態を保存しておき、次のチェックでそれを比較するのは良い解決策ではないからです。なぜなら、最新のイベントの状態を保存しておいて、次のチェックで比較するのは良い解決策ではないからです。保留中の注文が 発注されるイベントを見たい場合を想像してみてください。
そこで、イベントをチェックし、ResetLastTradeEventを実行し、新しい値 != _NO_EVENT を探します。
LastTradeEventを呼び出すと、m_last_trade_eventが返されます。
ENUM_TRADE_EVENT LastTradeEvent(void) const { return this.m_last_trade_event; }
を返しています:
void ResetLastTradeEvent(void) { this.m_events.ResetLastTradeEvent(); this.m_last_trade_event = TRADE_EVENT_NO_EVENT; }
また、Clear()関数がリストや配列でその役割を果たすように、いくつかの修正を加えました。
以下は私の使用例です。
if(engine.LastTradeEvent()!=TRADE_EVENT_NO_EVENT) { CArrayObj* list=engine.GetListAllOrdersEvents(); if(list!=NULL) { int total=list.Total(); for(int i=0; i<total ; i++){ CheckThisEvent(list.At(i)); } } //-- engine.m_events.Clear(); engine.ResetLastTradeEvent(); }
ResetLastTradeEventを使用する際に問題があったので、ここに報告します、
なぜなら、最新のイベントの状態を保存しておき、次のチェックでそれを比較するのは良い解決策ではないからです。なぜなら、最新のイベントの状態を保存しておいて、次のチェックで比較するのは良い解決策ではないからです。
そこで、イベントをチェックし、ResetLastTradeEventを実行し、新しい値 != _NO_EVENT を探します。
LastTradeEventを呼び出すと、m_last_trade_eventが返されます。
ですから
また、リストと配列でClear()関数がその役割を果たすように、いくつかの修正を加えました。
以下は私の使用例です。
Это、к сожалению、неправильное решение.m_eventsはどのようなユースケースですか?どのようなイベントですか?
engine.m_events.Clear();
Тем самым вы разрушаете структуру коллекции событий.m_eventsは、CEngine - CEngineのために開発されました。
В последней версии библиотеки (статья 23), которая уже готова к выходу, возвращается флаг произошедшего торгового события в управляющую программу.И последнее событие всегда можно получить.
А в статье 24 будет доступен список всех событий, произошедших одновременно, например - удаление множества отложенных ордеров.Каждое событие будет отображено в программе.И к каждому из этих событий можно будет получить доступ для работы с ними.
-----------------------------------------------------
これは残念ながら間違った判断だ。m_eventsリストをクラスのパブリックセクションに移動しましたか?イベントのニュース・リストを消去していますか?
engine.m_events.Clear();
このように、イベントのコレクションの構造を壊してしまう。しかし、m_eventsリストがCEngineクラスのprivateセクションにあることは無駄ではない。
すでにリリース準備が整っているライブラリの最新版(第23条)では、発生した取引イベントのフラグが制御プログラムに返される。そして、最後のイベントは常に利用可能である。
そして第24条では、同時に発生したすべてのイベントのリストが利用可能になります。例えば、多くの保留中の注文の削除などです。各イベントはプログラムに表示されます。そして、これらの各イベントにアクセスして作業することができます。
前のコメントで送った最後のコードブロックのforループですべてのイベントを取得しようとしていました。
新しいイベントごとに古いイベントを取得していたので、プライベートを破棄してすべてをパブリックにした。
次回の記事の改善点、ありがとうございます。できるだけ早くチェックします。
Так как в статьях описываются все этапы создания библиотеки, то я, к сожалению, не счёл необходимым дать сразу полный доступ к списку торговых событий, а дал лишь доступ к последнему событию.А последнее событие всегда возвращается то, которое произошло последним - не важно когда - прямо сейчас, или час назад.Оно всё равно является последним событием, и оно же и возвращается.И я упустил из виду, что два одинаковых события по названию, но разные по свойствам, уже потребуется кому-то получать.このような場合、このような邦訳は、邦訳がない場合、邦訳がない場合、邦訳がない場合、邦訳がない場合、邦訳がない場合である。В классах коллекций аккаунтов и символов уже созданы и работают методы получения всех событий аккаунта или символов, их легко получить в своих программах.Точно таким же образом в ближайших двух статьях будет дана возможность получения и торговых событий.
К слову - это ещё не всё, что будет реализовано.Далее будут созданы методы для поиска и получения любых данных и событий в своих программах.И сделано это будет весьма удобным и наглядным способом - не нужно будет получать списки, искать и фильтровать данные, а просто водить префикс с точкой (set、get., find.) и з выпадающего списка (после точки) выбирать нужный метод.Это планировалось ещё на этапе обдумывания концепции библиотеки, но делаться всё будет только тогда, когда будет готов весь базовый функционал библиотеки.
Также будет дана возможность работать с графикой - будет полноценная графическая оболочка, знающая о всех собранных библиотекой данных.Плюс - интерактивные пользовательские графические объекты...
---------------------------------
記事にはライブラリーを作成するすべての段階が記述されているので、残念ながら、トレード・イベントのリストに一度にフルアクセスする必要はないと考えた。そして、最後のイベントは常に最後に起こったものを返す。最後のイベントであることに変わりはない。そして、名前は同じでもプロパティが異なる2つのイベントは、すでに誰かが受信する必要があるという事実を見失っていた。このような理由から、取引イベントの受信は正常に持って来られませんでした。口座やシンボルのコレクションのクラスでは、すでにメソッドが作られ、口座やシンボルのすべてのイベントを取得するために動作しており、それらのプログラムで簡単に取得できます。これとまったく同じように、次の2つの記事では、取引イベントを受信する機会を提供します。
ところで - これが実装されるすべてではない。次に、プログラム内のあらゆるデータやイベントを検索して取得するためのメソッドが作成される。リストを受け取ったり、データを検索したり、フィルターしたりする必要はなく、単にドットの付いた接頭辞(set.、get.、find.)を入力し、(ドットの後の)ドロップダウンリストから希望のメソッドを選択するだけでよい。これはライブラリーのコンセプトを考えている段階で計画されたものですが、ライブラリーの基本的な機能が すべて整ってからすべてが行われることになります。
また、グラフィックで作業 する機会も与えられるだろう - ライブラリによって収集されたすべてのデータについて知っている本格的なグラフィカルシェルがあるだろう。さらに - インタラクティブなカスタムグラフィックオブジェクト ...
前のコメントで送った最後のコードブロックのforループで、すべてのイベントを取得しようとしていました。
新しいイベントを取得するたびに古いイベントを取得していたので、privateを破棄してすべてをpublicにしました。これは正しい方法ではありませんが、とにかくリストがクリアになっていることを確認するために行いました(v13で)。
次回の記事の改善点、ありがとうございます。できるだけ早くチェックします。
В русском сегменте ресурса вышла статья, в которой есть доступ к последнему событию из программы...
---------------------------------------
リソースのロシア語セグメントに、番組からの最後のイベントへのアクセスがある記事が掲載されました:
- www.mql5.com
Artyomさん、ありがとうございます、
バグだと思うのですが、同じ瞬間に複数の取引をオープンまたはクローズした場合、そのうちの1つが検出されないか、1つしか検出 されないのです!
私のログをお見せしましょう
2019.10.14 15:58:14.489 MT4EventsEA EURUSD,M1: uninit reason 4
2019.10.14 15:57:28.424 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:22.000: 口座残高は-0.75 USD (5445.52 USD)減少しました。
2019.10.14 15:57:28.423 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:22.000: 証拠金水準が-16456.49% (0.00%)減少しました。
2019.10.14 15:57:27.895 MT4EventsEA EURUSD,M1:CEventsCollection::CreateNewEvent、767 行目:このイベントはすでにリストにあります。
2019.10.14 15:57:27.474 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:27:13.000 - EURUSD Close Buy#542264335 at price 1.10304, profit -0.14 USD
2019.10.14 15:57:27.472 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:27:12.000 - EURUSD Close Buy#542264333 at price 1.10304, profit -0.14 USD
2019.10.14 15:57:19.095 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:13.000: 証拠金水準が-32915.87% (16456.49%) 減少しました。
2019.10.14 15:57:18.844 MT4EventsEA EURUSD,M1: - Position opened: 2019.10.14 15:27:13.000 - EURUSD Open 0.01 Buy#542264335[0.01 Market order Buy #542264335] at price 1.10304
2019.10.14 15:57:18.002 MT4EventsEA EURUSD,M1: - Position opened: 2019.10.14 15:27:12.000 - EURUSD Open 0.01 Buy#542264333[0.01 成行注文 Buy #542264333] at price 1.10304
2019.10.14 15:57:17.547 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:12.000: 証拠金水準が49372.35% (49372.35%) 増加しました。
2019.10.14 15:57:17.175 MT4EventsEA EURUSD,M1: - Position opened: 2019.10.14 15:27:11.000 - EURUSD Open 0.01 Buy#542264331[0.01 Market order Buy #542264331] at price 1.10301
2019.10.14 15:56:17.144 MT4EventsEA EURUSD,M1: 2019.10.14 15:26:11.000: 証拠金水準が-12343.32% (0.00%)減少しました。
2019.10.14 15:56:16.800 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:40.000 - EURUSD Close Buy#542263747 at price 1.10301, profit -0.07 USD
2019.10.14 15:56:16.798 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:41.000 - EURUSD Close Buy#542263749 at price 1.10301, profit -0.07 USD
2019.10.14 15:56:16.347 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:42.000 - EURUSD Close Buy#542263753 at price 1.10304, profit -0.14 USD
2019.10.14 15:56:15.926 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:42.000 - EURUSD Close Buy#542263753 at price 1.10304, profit -0.14 USD
2019.10.14 15:56:09.140 MT4EventsEA EURUSD,M1: 初期化されました。
MT4口座の取引履歴です:
これは私のコードです:
void OnTick() { DoChecks(); } void OnTimer() { DoChecks(); } //+------------------------------------------------------------------+ //| 私のチェック機能| //+------------------------------------------------------------------+ void DoChecks() { engine.OnTimer(); //\\//\\ 貿易イベント if(engine.LastTradeEvent()!=TRADE_EVENT_NO_EVENT) { //engine.LastTradeEvent()!=last_trade_event CArrayObj* list=engine.GetListAllOrdersEvents(); if(list!=NULL) { int total=list.Total(); for(int i=0; i<total ; i++){ CheckTradeEvent(list.At(i)); } } //-- engine.ResetLastTradeEvent(); } //\\//\\ アカウントイベント if(engine.LastAccountEvent()!=ACCOUNT_EVENT_NO_EVENT){ CArrayInt* list=engine.GetListAccountEvents(); if(list!=NULL){ int total=list.Total(); for(int i=0;i<total;i++){ ENUM_ACCOUNT_EVENT event=(ENUM_ACCOUNT_EVENT)list.At(i); if(event==NULL){ continue; } CheckAccountEvent(event); } } //-- engine.ResetLastAccountEvent(); } }
私の実装に問題はありませんか?
ありがとう、アルチョム、
バグがあると思うのですが、同じ秒数で複数の取引をOpenまたはCloseした場合、そのうちの1つを見逃して しまったり、1つしか検出 しなかったりします!
私のログをお見せしましょう。
2019.10.14 15:58:14.489 MT4EventsEA EURUSD,M1: uninit reason 4
2019.10.14 15:57:28.424 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:22.000: 口座残高は-0.75 USD (5445.52 USD)減少しました。
2019.10.14 15:57:28.423 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:22.000: 証拠金水準が-16456.49% (0.00%)減少しました。
2019.10.14 15:57:27.895 MT4EventsEA EURUSD,M1:CEventsCollection::CreateNewEvent、767 行目:このイベントはすでにリストにあります。
2019.10.14 15:57:27.474 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:27:13.000 - EURUSD Close Buy#542264335 at price 1.10304, profit -0.14 USD
2019.10.14 15:57:27.472 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:27:12.000 - EURUSD Close Buy#542264333 at price 1.10304, profit -0.14 USD
2019.10.14 15:57:19.095 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:13.000: 証拠金水準が-32915.87% (16456.49%) 減少しました。
2019.10.14 15:57:18.844 MT4EventsEA EURUSD,M1: - Position opened: 2019.10.14 15:27:13.000 - EURUSD Open 0.01 Buy#542264335[0.01 Market order Buy #542264335] at price 1.10304
2019.10.14 15:57:18.002 MT4EventsEA EURUSD,M1: - Position opened: 2019.10.14 15:27:12.000 - EURUSD Open 0.01 Buy#542264333[0.01 成行注文 Buy #542264333] at price 1.10304
2019.10.14 15:57:17.547 MT4EventsEA EURUSD,M1: 2019.10.14 15:27:12.000: 証拠金水準が49372.35% (49372.35%) 増加しました。
2019.10.14 15:57:17.175 MT4EventsEA EURUSD,M1: - Position opened: 2019.10.14 15:27:11.000 - EURUSD Open 0.01 Buy#542264331[0.01 Market order Buy #542264331] at price 1.10301
2019.10.14 15:56:17.144 MT4EventsEA EURUSD,M1: 2019.10.14 15:26:11.000: 証拠金水準が-12343.32% (0.00%)減少しました。
2019.10.14 15:56:16.800 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:40.000 - EURUSD Close Buy#542263747 at price 1.10301, profit -0.07 USD
2019.10.14 15:56:16.798 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:41.000 - EURUSD Close Buy#542263749 at price 1.10301, profit -0.07 USD
2019.10.14 15:56:16.347 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:42.000 - EURUSD Close Buy#542263753 at price 1.10304, profit -0.14 USD
2019.10.14 15:56:15.926 MT4EventsEA EURUSD,M1: - Position closed: 2019.10.14 15:22:42.000 - EURUSD Close Buy#542263753 at price 1.10304, profit -0.14 USD
2019.10.14 15:56:09.140 MT4EventsEA EURUSD,M1: initialized
MT4口座の取引履歴です:
私のコードです:
私の実装に何か問題はありますか?
次の記事では、1つのサイクルで同時に発生した取引イベントの 追跡はすでに準備できており、動作している。
また、アドバイザーにおける取引イベントのトラッキングの例も提供します。
次回の記事では、1つのサイクルで同時に発生した取引イベントの追跡はすでに準備できており、動作している。
また、アドバイザーにおける取引イベントのトラッキングの例も提供する。
有益な返信と記事をありがとうございました。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索

新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第13部): 口座オブジェクトイベント はパブリッシュされました:
本稿では、自動取引に影響する口座プロパティの重要な変更を追跡するために、口座イベントの使用について検討しています。口座イベントを追跡するための機能のいくつかは、前の記事で口座オブジェクトコレクションを開発するときに既に実装しています。
テスターでEAを起動してより多くのポジションを開けば、エクイティ増加イベントに続いて最も収益性の高いポジションが決済されるのをすぐに見ることができます。
ご覧のとおり、エクイティが指定値を超えると、最も収益性の高いポジションが自動的に決済されて、操作ログには、追跡された口座イベントに関するメッセージが表示されます。
作者: Artyom Trishkin