新世代のトレーディングソフトの登場。EAのインターフェースはどのようなものでしょうか? - ページ 12

 
Yury Kulikov:
何もかもがメチャクチャだ :)
Expert Advisorに実装されているファイルナビゲーターインジケータを使用してインターフェースを作成する例についてお話しました。しかし、「ファイルナビゲータ」という言葉に固執してはいけません。これはタスクの一例であり、Expert Advisorには、ターミナルウィンドウのナビゲータ、チャート上のオブジェクト、ターミナル内のインジケータなど、多くの類似タスクがあり得ます......そして、これはグローバル変数を通じて インジケータに取得したい文字列のリスト(テーブル)を通じて実装できるタスクの小さなレイヤーに過ぎません。
今ちょっと混乱していて、あなたの書き込みの意味がわからなくなっています。申し訳ございませんでした。もう少し後で、エンジン、スタジオ、インターフェース、EAのコンセプトについて詳しく説明します。その後、話し合えばいいのです。:)
 

1.グラフィックエンジンのコンセプト。

2.グラフィックコアのコンセプト。

3.MTプラットフォームのビジュアルスタジオを作成する段階。

4.EAインタフェース作成機構の説明


1.グラフィックエンジンは、指標として作られたプログラムです。このプログラムは、ユーザーインターフェースの管理のみを目的としたものです。基本的な機能は一通り揃っています。

  • グラフィカルインターフェースの コアをファイルから読み込む。
  • ユーザーインターフェース設定の保存
  • インターフェイスの全プロセスの一元的な管理の実施。ウィンドウの開閉、ウィンドウのサイズ変更、ウィンドウの移動、ウィンドウの結合、ズーム、スクリプトの再生、オブジェクトの状態変更、オブジェクトの結合、コントロールのパラメータ値をそのタイプやプロパティに応じて制御、グローバル変数の作成と削除など、インターフェースの「仕組み」を実装しているのである。

グラフィックエンジンは、他のインジケータと同様にチャートに追加 されます。 以下のウィンドウがセットになっています。

  • タスクバーの右側には、エンジン本体のサービス ウィンドウを呼び出すためのアイコンがいくつか追加されます。
  • ファイルナビゲータ:専用フォルダにあるインターフェース付きファイルの一覧 から起動ファイルを選択するために使用します。
  • オプションの設定画面。この段階では主要な役割を果たしません。

これで原則的に、グラフィカル・エンジンのコンセプトは終了です。重要なのは、これがないとインターフェースが動作しないことです。



2.グラフィカルカーネルとは、インターフェースに含まれるすべてのオブジェクトとウィンドウのデータを配列で記録し、ファイルに保存した情報ブロックのことである。

このブロックは、グラフィカルインターフェースをデジタルで表現したものです。ユーザーの指示により、グラフィックエンジンが読み込む。グラフィックエンジン自体は、独自のウィンドウの動作を保証する独自の内部グラフィックカーネルを持ち、このカーネルの内部には、ユーザーインターフェース(デジタル形式)を統合するための空き領域が割り当てられています。統合は、グラフィカルコアをファイルから読み込む過程で行われます。


3.MTプラットフォームでのビジュアルスタジオの作成は、私の理解では、2つの段階に分かれます。

  • 第一段階では、ファイルベースのインターフェースビルダーが作成されます。その中で、ユーザーはテーブル・テンプレートを使って作業することになります。テーブルには、インターフェース要素の型と名前を書き、そのパラメータのプロパティを設定することになります。ユーザーは、ウィンドウ内の要素の正しい位置を気にすることなく(エンジンがすべて自動的に計算します)、必要な順序で要素を配置するだけで、非常にユーザーフレンドリーなプロセスで作成することができます。
  • 第2段階では、ファイルコンストラクタと同じインターフェース構築方法を実装した、より簡単で便利なビジュアル環境を作成する予定です。また、コントロールの外観を変更する機能も追加される予定です。一般に、ユーザーはより多くのグラフィカルなオプションを持つことになります。


4.ここでは、インターフェイスをつくる仕組みを大まかに説明し、その技術について少しベールを脱いでみたいと思います。ファイル経由のインターフェイスの作りやすさはどこから来るのか、説明してください。

これは、エンジンが特殊な機能を持ち、最小限の読み込み情報で、1つのファイルをもとに完全なグラフィカルカーネルを作成するものです。このファイルのブート情報は自明であり、人間が読むことができる。書きやすく、編集しやすい。例えば、ウィンドウを作成するには「_CREATE_NEW_WINDOW」と書き、チェックボックスの名前を「_CHECKBOX」と書きます(エンジンは要素の名前を、要素自体の名前とそのパラメータの名前として自動的に認識します)。

この関数は "G_CORE_BUILDER() "と呼ばれ、ユーザーが作成した起動ファイルと、ウィンドウプラットフォームとコントロールに含まれるすべての標準オブジェクトグループを保持する "CONTENT[]"配列という2つの主要なソースからデータを取得してグラフィカルコアを構築する。"CONTENT[]"には、オブジェクトの状態やスクリプトも含まれる。すべてを1つの配列に。一般に、「CONTENT[]」のソース素材+ユーザーが作成したローダーファイルを「G_CORE_BUILDER()」が使用して、エンジンが動作するグラフィックコアが構築されます。

 

混乱を避けるために、ブートファイルには2つの形式があることを付け加えておきます。

1.ウィンドウ、コントロール、およびそのパラメータのプロパティを記述する、一連のユーザー定義命令という形式です。この場合、ロードの段階で関数「G_CORE_BUILDER()」が起動し、グラフィカルコアを構築する。

2.エンジンに直接読み込まれるレディグラフィックコアという形で。本バリエーションでは、"G_CORE_BUILDER() "関数を使用する必要がありません。

最初のオプションはインターフェイスのコンストラクタで使用され、2番目は任意のアプリケーションのレディメイドのインターフェイスを実行するために使用されるでしょう。

エンジンの簡易版は、既製のグラフィカルカーネルをロードし、そこからカーネル構築システム(「G_CORE_BUILDER()」と「CONTENT[]」配列が削除されます)を使用します操作の簡略化のため
 
Реter Konow:
絵を描くことはまだインターフェイスではありません。最も重要な問題は、Expert Advisorがどのようにインジケータと相互作用するかということです。
 
Yury Kulikov:
絵を描くことはまだインターフェイスではありません、あなたが逃した最も重要な問題 - EAは、"グローバル変数"を介して、指標と対話する方法は、何とか漠然とした音です。
エキスパートアドバイザーとインジケーターに実装されたグローバル変数によるインターフェースとの連動システムは、現時点では紙面上だけのものであり、私はその作成を経験していません。 私のアイデアをもう少し詳しく書いてみますので、矛盾や間違いを見つけた場合は、コメントをお願いします。

1.誰もが知っていることを思い出してください。各グローバル変数は、チャートにロードされたすべてのプログラムのスコープ内にあります。グローバル変数を作成するには、特殊関数を呼び出して、変数名と値を渡す必要があります。

2.グローバル変数は、インターフェイスをロードする段階で、エンジンがブートファイルを読み込んで作成します。グローバル変数名とその保存値(プリセット値)は、ブートファイル自体に書き込まれます。

3.エンジン内部には、項目タイプ、値タイプ、パラメータプロパティに応じて、コントロールのパラメータ値を制御する役割を担う特別なブロックがあります。ユーザーがチェックボックスにチェックを入れたり、「スピンエディット」要素で値をリマップすると、コントロールのパラメータインタラクションブロックは 、特定の値、特定の変数に対して特定のアクションを実行します。

4.グローバル変数であるため、その値はエキスパートアドバイザーによって常に「観察」され、それに組み込まれたアルゴリズムに従って、各グローバル変数の値の変化に反応することになります。

5.Expert Advisor は、グローバル変数を「観測」するだけでなく、その機能からグローバル変数の値で完全に動作します。この場合、グローバル変数は条件付きで 2種類に分けられることを理解することが重要である:ユーザーによって「制御」される変数、その値はユーザーがインターフェース内のコントロールを通じて設定するもの、およびEA機能によって「制御」される変数、その値はユーザー機能によって設定されるものである。

6.一方、エンジンは、両方の条件付き グローバル変数タイプで動作するようになります。ユーザーの「制御下にある」変数の値を扱う原理を 説明しましたが、EA機能の「制御下にある」値を扱う原理は次のようになります。同じブロックで条件付きでコントロールを「値を制御するもの」と「値を表示するもの(何らかの方法で表示する)」に分けることができるのです。このようなコントロール(入力フィールド、プログレスバーなど)は、それぞれその変数の値変化イベントにサブスクライブされます。変数の値が変化すると、ブロックは対応する要素を参照し、その要素に対して操作を行う。この要素は、デフォルトで要素タイプに用意されている。

このブロックでは、すべてのグローバル変数をタイマーの周波数でループさせ、機能的に制御される変数の値の動作を「追従」させることに注意してください。

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
追伸:ユーザーインターフェースからEAの設定を読み込む方法についての質問ですが、私の考えでは以下のような方法で行う予定です。

EAが動作するすべてのグローバル変数(EAの設定を表すものも含む)の値は、EAのアンロードイベントで破棄される前に、ローディングファイルに保存されます。インターフェイスをロードするたびに、これらの同じグローバル変数が再び作成され、元の値を取得します。Expert Advisor がロードされ、その変数にアクセスします。
 
Реter Konow:

グローバル 変数にテキスト(ファイル名など)を渡すにはどうすればよいのでしょうか?

Expert Advisorでウィンドウをアクティブ/非アクティブにするにはどうしたらいいですか?

Expert Advisorの実行中に新しいウィンドウを作成するにはどうしたらいいですか?

...

 
Yury Kulikov:

1.グローバル 変数にテキスト(ファイル名など)を渡すにはどうしたらいいですか?

2.エキスパートがウィンドウをアクティブ/非アクティブにするにはどうしたらいいですか?

3.Expert Advisorの実行中に新しいウィンドウを作成するにはどうしたらいいですか?

...

1.この課題はまだ解決されていません。推測でいくつかのバリエーションを提案することができます。

a) グローバル変数名そのものを使った文字列の受け渡し。変数にはインデックスが付いているので、エンジンや Expert Advisor は、消去して再度作成するグロブ変数のインデックスを常に「知る」必要があり、その都度名前を変えて文字列を渡している。一見すると、このオプションは雑に見えますが、もしかしたら、改善できるかもしれません...。

b) 1つの変数の値を文字で連続的に表現した文字列を、文字そのものではなく、対応する数字を送信し、n個のタイマー周期で送信する。

2.今のところ、私のコンセプトでは、EA側でウィンドウのアクティベーション/デアクティベーションを行う方法が欠けています。正直なところ、何を言っているのかよくわからないのですが。ウィンドウはユーザーとエンジンのみで処理されます。Expert Advisorは、変数と独自の機能のみを扱います。彼はまだインターフェースにアクセスできない。(とか(笑)。

3. ユーザーが自由に(コンポーネント)ウィンドウのセットをグループ化できる新しい(コンポジット)ウィンドウは、エキスパートではなくエンジンが作成します。例えば、メインメニューの「新しいウィンドウ」をクリックすることで作成できます。グループ化されたウィンドウはすべてインターフェイスにすでに作成されていることが重要であり、ユーザーの必要な情報をグループ化するために使用する複合ウィンドウの数は(条件付きで)無制限とすることができる。ウィンドウセットとその内容は、ファイルに保存されます。

 
Реter Konow: まだインターフェースにアクセスできない。(って、何の意味があるんだろう)。

要は根本的な話です。イベントは、インターフェイスの中だけで発生するわけではありません。

あなたのタイタニック号の行く手を阻む氷山は一つではないだろう。あなたはプロジェクトを間違った方向から始めてしまったので、グローバル 変数はここでは役に立ちません。

 
Yury Kulikov:

要は根本的な話です。イベントは、インターフェイスの中だけで発生するわけではありません。

あなたのタイタニック号の行く手を阻む氷山は1つではないだろう。あなたはプロジェクトを間違った方向から始めてしまい、グローバル 変数は何の役にも立ちません。

さて、どのようなエッジでプロジェクトをスタートさせればよかったのか、何が参考になるのか。
 
Реter Konow:
なるほど、しかし、どこから手をつければよかったのか、何が参考になるのか。

専門家から始めるべきだと思います。専門家に関連するタスクを3種類あげましたが、あなたのインターフェースでは実現不可能であることがわかりました。

何が役に立つのか?おそらく、より深い統合、あるいは「遠隔操作」に限定したプロジェクト なのでしょう。