記事「MQL5のインタラクティブGUIで取引チャートを改善する(第3回):シンプルで移動可能な取引GUI」についてのディスカッション

 

新しい記事「MQL5のインタラクティブGUIで取引チャートを改善する(第3回):シンプルで移動可能な取引GUI」はパブリッシュされました:

本連載第3回では、MQL5の移動可能な取引ダッシュボードへのインタラクティブGUIの統合について紹介します。この記事は、第1回と第2回で設定された基礎の上に構築され、静的な取引ダッシュボードを動的で移動可能なものに変えるよう読者を導きます。

こんにちは、「MQL5でインタラクティブGUIを使った取引チャートの改善」の第3回へようこそ。

新たな領域に踏み込む前に、第1回と第2回で取り上げたことを簡単に振り返りましょう。

1.第1回では、チャートイベントの概念を理解することから始め、そこから同じチャート上に2つのシンプルな移動可能なダッシュボードを作成しました。

2.第2回では、さらに一歩踏み込みました。.mqhファイル内のクラスを利用して、コードをより効率的で汎用性のあるものにし、本格的なEA/インジケーターと統合できるようにしました。


そして今、第3回の準備が整いました。この部分では、ダッシュボードにGUIを統合することで、ダッシュボードを強化することに焦点を当てます。GUIがなければ、ダッシュボードは本来の目的を果たせないからです。

作者: Kailash Bai Mina

 

こんにちは、Kalish、


興味深いアプローチで、シリーズ終了おめでとうございます。 OnEventのコーディングは、すべてを実現するものです!あなたの最初の記事に興奮したので、私は可動パネルの私の1つのバージョンを開発しました。 それは、各パネルタイプの個々のクラスによって継承される基本クラスです。次に、MQLのヘルプファイルの例に基づいてコントロールの ヘッダーファイルをすでに作成していたので、継承のためにTextクラスを作成する代わりにそれを使用することにしました。 GUIクラスにはさらに2つのメソッド、SaveとInitializeを作成する予定です。 SaveはCSVファイルを読み込んで更新し、開始位置とデータを設定します。 InitializeはCSVファイルを読み込んで初期位置を設定します。

私の現在のEAの見出しと2つのパネルのスクリーンショットを添付します。 一つは私が使用するアクティブオーダーで、サンプルは追加パネルのテンプレートとして使用する素バージョンです。


今後のご活躍を期待しています。


ケープ・コッダ

ファイル:
 

記事は本当に良かった。教訓的で説明もうまい。気に入った。😁👍

 
CapeCoddah コントロールの ヘッダーファイルをすでに作っていたので、継承のためにTextクラスを作る代わりにそれを使うことにしましたが、うまくいきました。 GUIクラスにはあと2つのメソッド、SaveとInitializeを作ろうと思っています。 SaveはCSVファイルを読み込んで更新し、開始位置の位置とデータを設定します。 InitializeはCSVファイルを読み込んで初期位置を設定します。

私の現在のEAの見出しと2つのパネルのスクリーンショットを添付します。 一つは私が使用するアクティブオーダーで、サンプルは追加パネルのテンプレートとして使用する素バージョンです。


今後のご活躍を期待しています。


ケープ・コッダ

私の記事があなたのためになっていることをうれしく思う。

実は、あなたがこのパート3を書く気にさせてくれたんだ。そうでなければ、やる気がなくてもっと時間がかかっていただろう。

本当にありがとう。

あなたの今後の努力にも幸あれ。

 
Daniel Jose #:

記事は本当に良かった。教訓的で説明もうまい。気に入った。😁👍

こちらこそ。ありがとうございます。

 

こんにちは、カイラシュ、

私的な文章の書き方がわからないので、この記事をモニターしてくださることを願っています。

とにかく、私はあなたのコンセプトをEAを組織化するずっと良い方法に本当に取り入れました。 これは私の古いバージョンと、複数の子クラスを持つあなたのパート2のコンセプトを使った移動可能なパネルのコンセプトのスクリーンショットです。 これはまだ予備的な開発段階ですが、モデルテスト中にもっと適切なデータを表示することができます。

今現在、私はコントローラーを 含む各パネルに別々の子クラスを持っています。

clsGUI  GUI;
clsAO   AO;
clsBOB  BOB;
clsCTL  CTL;
clsXO   XO;
clsATR  ATR;
clsRSI  RSI;
clsMM   MM;
clsTS   TS;

//clsAO Guis[egElements];
//clsGui GuiS[egElements];
//オブジェクトGuis[egElements];

このアプローチは適切ですが、EAパネルのさまざまなタスクを処理するために、多くの別々の関数が必要になります。 より良いアプローチは、子クラスの配列を持ち、それを関数呼び出しの縮小パラメータとして使用することです。 最初の2つのアプローチを使用してみましたが、その固有のパブリック関数を呼び出すために、配列の要素を適切な子クラスにキャストすることができません。オブジェクト宣言でラッパークラスを使用することで、パブリック変数にアクセスすることに成功しました。 このアプローチは、配列のクラス定義ではなく、パラメータ要素の要素クラス定義を使用するようです。

int Wrapper(object &theobject){

return(theobject.aninteger):

}

int i=Wrapper(Guis[5]);

このアプローチはGuis[5].Create_Controls(......)では機能しません;

私が見た中で唯一うまくいく方法は、c_arrayを使用してオブジェクト・ポインタの配列を作成し、配列に追加することです。その後、c_array AT(location)関数を呼び出す関数でアクセスし、配列ポインタをローカルで宣言されたオブジェクトのローカル・ポインタに代入して、子変数にローカルでアクセスします。

この問題を解決する方法をご存知の方、または1つのクラスの配列ではなく子クラスの配列に対応するMQLの記事やドキュメントを参照できる方はいらっしゃいますか?

次の記事を楽しみにしています。

ケープ・コッダ

 

OOPのためにOOPを使った 良い例だ。

面倒で便利ではないことがわかった(IMHO)。でも、うまくいっている。)


OBJPROP_ZORDERを追加しないと、たまにボタンが押されてしまう。

void Button::Create(string name, int xDis = 0, int yDis = 0, int xSize = 0, int ySize = 0)
  {
   ObjectCreate(0, name, OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xDis);
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDis);
   ObjectSetInteger(0, name, OBJPROP_XSIZE, xSize);
   ObjectSetInteger(0, name, OBJPROP_YSIZE, ySize);
   ObjectSetInteger(0, name, OBJPROP_ZORDER, 1);
   _name = name;
  }
//+------------------------------------------------------------------+
 
Alexander Slavskii #:
うまくいった。)

ご指摘ありがとう。

 
Aleksandr Slavskii OOPを使用して いる明確な例である。

それは面倒で便利ではないことが判明した(IMHO)。しかし、うまくいっている。)


OBJPROP_ZORDERを追加しないと、たまにボタンが押されてしまう。

これは全くOOPではない。これはターミナル・メソッドをクラスで再ラッピングしたものだ。

もしプログラマーが別のGUI(他の記事で取り上げたWebSocket経由の派手なhttp)を作りたいと思ったら、何もできないだろう。記事のコードをすべて捨てて、別のコードを書くだけだ。

同じObjectCreate(xx)で、ビジュアル部分を根本的に変更するには、すべてを書き直さなければならない。

GUIを無効にしてVDS-kaのCPUを占有しないようにする方法もある。

再利用性はどこに? なぜGUIが他のコードと混在しているのか......色くらいならまだしも、スタイルについて話すことすらできない。

この記事のライブラリを使えば、典型的なEAのコードが短くなる? でも、そんなことはない。)

 
Maxim Kuznetsov #:

これはまったくOOPではない。これらは末端のメソッドをクラスで包み直したものだ。

もしプログラマーが別のGUI(他の記事で取り上げたWebSocket経由の派手なhttp)を作りたいと思ったら、何もできないだろう。プログラマーは、この記事のコードをすべて捨てて、別のコードを書くだけだ。

同じObjectCreate(xx)で、ビジュアル部分を根本的に変えるには、やはりすべてを書き直さなければならない。

あるいは、VDS-kaでCPUを占有しないようにGUIを無効にする方法。

再利用性はどこに? なぜGUIが他のコードと混在しているのか...少なくとも色については、スタイルについて話すことさえできない。

この記事のライブラリを使えば、典型的なEAのコードが短くなるのか? でも、まさか、そのために書かれたわけではないだろう :-)

まあ、ここで色について議論するのは正しくないとは思います。

しかし、売りと買いのボタンが逆に配置されていることは、ユーザーを惑わせる可能性があります。


マニュアル・トレーディング用のパネルなのに、 なぜGUIを オフにしなければならないのかがよくわからない。しかし、それが取引パネルではなく、情報パネルであるならば、そうです。

私はRectangleLabel::OnEventとRectangleLabel::Add関数の構成方法が好きです。

私のパネルでも同じ原理を使ったが、私のコードは少し野暮ったい。総じて、美しくはなかった。そこで、記事のコードを新しいパネルに使うことにした。

最終的にそのパネルは出来上がったが、ゼロから書いた場合よりも多くの時間を費やした。

一般的に、結論は以下の通りである:記事は興味深く有用であるが、記事のコードは部分的に練られていない。

 
Aleksandr Slavskii #:

さて、色についてだが、ここで色について議論するのは適切ではないと思う。

しかし、買いボタンと売りボタンが逆に配置されていることは、ユーザーに誤解を与えかねない。


マニュアル・トレーディング用のパネルなのに、 なぜGUIを オフにしなければならないのかがわからない。しかし、それが取引パネルではなく、情報パネルであるなら、そうだ、無効にすることを検討したほうがよい。

RectangleLabel::OnEventとRectangleLabel::Add関数の構成は美しく、明快で読みやすい。

私のパネルでも同じ原理を使いましたが、私のコードは少し野暮ったかったというか、なんというか。総じて、美しくはなかった。そこで、記事のコードを新しいパネルに使うことにした。

結局、パネルは出来上がったが、ゼロから書いた場合よりも多くの時間を費やした。

一般的に、結論は以下の通りである:記事は興味深く有用であるが、記事のコードは部分的に練られていない。

どのようにUIを実装すれば苦にならないか」という、美しい矢印のついた凝ったメソッドがたくさんある:-)。MVCと似たようなものだ。そのため、フロントエンド(win,gtk,qt,web)は手を少し動かすだけで変更できることがある。

どれもMQLには実装されていない。すべてが釘付けで、TurboVisionよりもひどい。アダムからのクラスがあるとはいえ、そこにはモデルがある。

個人は何年も(!!)「簡単でシンプル」とか「シンプルなインターフェース」とか書いてきたが、この記事とまったく同じだ。何も簡単にしないコードの数々。唯一の効果は作者のアカウントにボーナスが入ることだ。