記事"MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第23部): 基本取引クラス - パラメータ有効性の検証"についてのディスカッション - ページ 2

 
Artyom Trishkin:

エキスパートの地位」とはどういう意味ですか?

例えば、2つのインジケータを持つTSを持っていて、1つのインジケータでは常に取引し、もう1つのインジケータでは開始後2回だけ取引し、さらに1つ目のインジケータで最後に損失が出た後に注文を出すとします。

どのTSが重要なのではなく、独立した原則に従って注文が発注される特定のTSが重要なのです。

ターミナルに過負荷をかけると、どのTSが最初に動き始めたかわからなくなるため、開始注文を検索するアルゴリズムが複雑になる可能性があります。




あなたの大規模なEAのように、データを保存する必要があるかもしれません、それが私が尋ねている理由です、複雑なデータ形式を保存するためのクラス/関数はありますか、または既に書かれていますか?

 
Artyom Trishkin:

図書館はできる。

同じ情報はMT4の取引履歴にはありません。

 
fxsaber:

同じ情報はMT4の取引履歴にはありません。

はい、ありません。しかし、イベントのリストには(現時点では)あります。Expert Advisorの操作中に記録されます。そして、すべてがその中で利用可能です。

当然、ターミナルをリロードしたり、Expert Advisor を再起動したりすると、Expert Advisor の現在の履歴は失われます。しかし、これは今だけのことで、将来的にはすべてのリストの重要な要素はファイルに保存され、再起動時にそこから読み込まれるようになります。もちろん、テスターではありません。

 
Igor Makanu:

例えば、2つのインジケータを持つTSを持っていて、1つのインジケータでは常に取引し、もう1つのインジケータでは開始後2回だけ取引し、将来的には1つ目のインジケータの最後の損失が発生した後に注文を出すとします。

しかし、2つ目のTSに切り替える瞬間が重要です。つまり、マルチ・エキスパートを呼び出したり、1つのEAで2つのTSを呼び出したりすることができます。

ターミナルに過負荷をかけると、どのTSが最初に動き始めたかわからなくなるため、開始注文を検索するアルゴリズムが複雑になる可能性があります。




あなたの大規模なExpert Advisorのように、データを保存する必要があるかもしれません、私は複雑なデータ形式を保存するためのクラス/関数があるか、または既に書かれているかどうかを聞いている理由です。

正直なところ、私にはよくわかりません。まだ作成されていないEAのロジックを、どうしてライブラリが知ることができるのでしょうか?ライブラリーは端末用のプログラムを作りやすくするためのもので、どんなプログラムが作られるかはまったくわからない。

同時に、プログラムで定義するのが難しいことでも、ライブラリーの助けを借りれば簡単にできる可能性が高い。

よりよく 理解するために抽象的な例は必要ない。

 
Artyom Trishkin:

正直なところ、よく理解できません。どうしてライブラリが、まだ作成されていないExpert Advisorのロジックを知ることができるのでしょうか?ライブラリは端末用のプログラムを作成しやすくするためのものであり、ライブラリの助けを借りてどのようなプログラムが作成されるかはまったく知らない。

同時に、プログラムで定義するのが難しいことでも、ライブラリの助けを借りれば簡単にできる可能性が高い。

より深く 理解するために抽象的な例は必要ない。

あなたが実装すれば十分です:

Artyom Trishkin:

当然ながら、ターミナルをリロードしたり、Expert Advisor を再起動したりすると、Expert Advisor の現在の履歴は失われます。しかし、これは今だけのことで、将来的にはすべてのリストの重要な要素はファイルに保存され、再起動時にそこから読み込まれるようになります。もちろん、テスターではありません。

一見、これは単純な作業だが、多くの問題がある:ファイルとの同期、タイムリーな記録、再起動後のリカバリーのロジック......。複雑なデータ型を 書き込む実装を見てみたいというニュアンスがたくさんある。

 
Igor Makanu:

を理解するのに十分である。

当然ながら、ターミナルをリロードしたり、Expert Advisor を再起動したりすると、Expert Advisor の現在の履歴は失われます。しかしこれは今だけのことで、将来的にはすべてのリストの重要な要素はファイルに保存され、再起動時にそこから読み込まれるようになります。もちろん、テスターではありません。

一見、これは単純な作業だが、多くの問題がある:ファイルとの同期、タイムリーな記録、再起動後のリカバリーのロジック......。複雑なデータ型を 書き込む実装を見てみたいというニュアンスがたくさんある。

だから、これはずっと前から計画していたことなんだ。必要なデータ・コレクションがすべてできた時点で実装するつもりです。

しかし、書かれていたこと、つまり、どのTCがいつ最初に取引したかを理解する必要があるということだが、そのような複雑さは必要ない。結局のところ、ライブラリは、アカウントの補充から現在までの端末の全履歴を参照してください。MetaTrader4では、ターミナルの履歴全体を解決することが重要です。私はdllの助けを借りてそれをしませんでした - 私は標準ツールで可能な可能性(ダジャレ)を提供する予定です。

そのため、各TSのあらゆる期間のすべての取引をいつでも素早く見つけ、それらを比較することができる。どの取引が最初か - そのTSとスリッパ。

 
Igor Makanu:

MQL4はトリガーされた未決注文の 履歴を保存しません:

MQL4でこの機能をテストしてみました。履歴は何の関係もありません。ライブラリーは未決済注文が有効化された事実をキャッチし、この瞬間に未決済ポジションのすべてのプロパティを利用できるようになります。

 
Alexey Viktorov:

このライブラリの機能をmql4でテストしてみました。このライブラリは、未決済の注文がアクティブになったという事実をキャッチし、この瞬間にオープンポジションのすべてのプロパティが利用可能になります。

この瞬間だけではありません。すべてのトリガーされた注文(一般的にはすべての取引イベント)の履歴はライブラリに保存され、作業中ずっと利用可能です。つまり、未決注文の設定から 完全な決済まで、ポジションの全履歴を常に確認することができます。

ただし、Expert Advisorの履歴をファイルに保存する機能はまだ実装されていません。Expert Advisorを再起動すると、すべての取引イベントの履歴は失われ、次の取引イベントの後に再び蓄積され始めます。しかし、この動作は一時的なもので、当初はすべての重要な情報をファイルに保存する予定でした。これは後で、必要なデータコレクションをすべて作成した後で行います。

CEngineにはGetListAllOrdersEvents()というメソッドがあり、ライブラリベースのプログラムの起動以来、口座で発生したすべての取引イベントの完全なリストを制御プログラムに返します。

Expert Advisor (または特定のマジシャンとのポジション) に属する取引イベントの完全なリストを取得するには、必要なマジシャンで取得したリストをフィルタリングする必要があります:

   //--- 口座上のすべての取引イベントの完全なリストを取得する
   CArrayObj *list=engine.GetListAllOrdersEvents();
   //--- Magik 100500を持つエキスパート(またはオーダー)に属するイベントのみをリストに残す。
   list=CSelect::ByOrderProperty(list,ORDER_PROP_MAGIC,100500,EQUAL);

そして、取得したリストをループすることで、リストからすべての取引イベントを1つずつ取得し、作業することができます。

   if(list!=NULL)
     {
      for(int i=0;i<list.Total();i++)
        {
         CEvent *event=list.At(i);
         if(event==NULL)
            continue;
         Print("----------------------");
         event.Print();
        }
     }
 
Artyom Trishkin:

この瞬間だけではありません。すべてのトリガーされた注文の履歴(および一般的にすべての取引イベント)はライブラリに保存され、作業全体を通して利用可能です。つまり、保留中の注文の設定から その完全な決済まで、ポジションの全履歴を常に見つけることができます。

ただし、Expert Advisorの履歴をファイルに保存する機能はまだ実装されていません。Expert Advisorを再起動すると、すべての取引イベントの履歴は失われ、次の取引イベントの後に再び蓄積され始めます。しかし、この動作は一時的なもので、当初はすべての重要な情報をファイルに保存する予定でした。これは後日、必要なデータコレクションをすべて作成した後に行われます。

CEngineにはGetListAllOrdersEvents()というメソッドがあり、ライブラリベースのプログラムの起動以来、口座で発生したすべての取引イベントの完全なリストを制御プログラムに返します。

Expert Advisor (または特定のマジシャンとのポジション) に属する取引イベントの全リストを取得するには、取得したリストを必要なマジシャンでフィルタリングする必要があります:

そして、取得したリストをループさせることで、リストから全ての取引イベントを一つずつ取得し、作業することができます。

今のところ、私にとって重要なことだけを述べました。また、テスト済みのものです。必要なことがあれば、質問であなたを苦しめるでしょう。

 
こんにちは!ライブラリの最新版と Expert Part_23 をダウンロードし、テスターでビジュアルモードを使用したところ、成行注文はオープンされましたが、すべての未決注文はオープンされませんでした。
ジャーナルには「2019.10.27 10:13:32.157 2019.09.23 10:00:02 failedsell stop limit 2.00 RTS-12.19 at 135750 (135800) sl: 135900 tp: 135600 [Invalid expiration]」と書かれています。
取引所シンボル、ブローカーOtkritie、バージョン5.00ビルド2190。
また以前の記事、たしかパート14か15で、シンボルコレクションを操作するためのクラスを作るというお約束がありましたが、なぜでしょうか?
をグラスで操作するためのクラスを作成することを約束されていましたが、なぜか作成されていません。これらは、シンボルやアカウントと並んで、ライブラリの基本的なニーズであり、あなたはすでに

あなたはすでにライブラリーの改善(リソース、サウンドなど)にまで踏み込んでいて、基本的なタスクを見逃しているように思います。

ありがとうございます。ライブラリーはとても必要とされています。