記事「MQL5でインタラクティブなグラフィカルユーザーインターフェイスを作成する(第1回):パネルの製作」についてのディスカッション

 

新しい記事「MQL5でインタラクティブなグラフィカルユーザーインターフェイスを作成する(第1回):パネルの製作」はパブリッシュされました:

この記事では、MetaQuotes Language 5 (MQL5)を使用して、グラフィカルユーザーインターフェイス(GUI)パネルを作成し、実装するための基本的な手順について説明します。カスタムユーティリティパネルは、一般的なタスクを簡素化し、重要な取引情報を可視化することで、取引におけるユーザーのインタラクションを向上させます。カスタムパネルを作成することで、トレーダーはワークフローを合理化し、取引操作の時間を節約することができます。

本連載では、トレーダーが必要とする最も一般的なユーティリティツールを備えたGUIパネルを作成します。このように、カバーしなければならない要素は多岐にわたりますが、ここでは理解しやすいようにまとめて説明します。GUIの開発には4つの要素を使用し、これを通してGUIを作成します。このパネルでは、取引ボタン、シャープな四角形、ライブアップデート、絵文字の使用、さまざまなフォントスタイル、ラベル、移動可能なパネルパーツ、ホバーエフェクトなどが作成できます。その全体を説明するために、以下に例を挙げます。

作者: Allan Munene Mutiiria

 
素晴らしいチュートリアルだ。
 
Isaac Amo #:
素晴らしいチュートリアルだ。

アイザック・アモ フィードバックと評価には感謝している。光栄です。ありがとう。

 

この記事をシェアしてくれてありがとう。ラッキー

 
Malcolm Campbell #:

この記事をシェアしてくれてありがとう。ラッキー

マルコム・キャンベルさん、ご丁寧なレビューとフィードバックをありがとうございました。

 
バイト。表紙は美しい色のインターフェイスで、これはウィンドウズXPのウィンドウです)
この記事は役に立つ。
 
Petr Zharuk #:
バイト。表紙は美しい色のインターフェイスで、これはウィンドウズXPのウィンドウです)
この記事は役に立つ。
こんにちは。親切なフィードバックをありがとう。本当に感謝しています。こちらこそありがとう。
 

このパネルを自由に動かすことはできますか? 自由に動く?

 
今のところスマホから斜め読みしていますが...。
パソコンでもっと熟読し、あなたの記事をもとにトレーディング・インターフェースも作るつもりです。今のところ、売買ボタンしか作っていません。仕組みはなんとなくわかりました。もっと読み込んで、自分のパソコンでもグラフィカルなインターフェースを作って みます!取引注文を最適化するための非常に便利なユーティリティを使いたいと以前から思っていました。
 

MQL5の初心者として、この記事はとても気に入りました。記事をありがとうございました。しかし、ObjectDeleteが グラフィカル・オブジェクトのすべての作成および保存された名前を通してループで実行されれば、初期化関数を大幅に削減できると思いました。そのためには、グラフィカル・オブジェクトのパラメータを作成・初期化する関数に、文字列の配列、グラフィカル・オブジェクトのカウンタ、配列に名前を渡す演算子を追加する必要があります。私はこのようにした:

#define  ADDOBJ ArrayResize(objectsArray, objectCount+1);\
   objectsArray[objectCount] = objName;\
   objectCount++;

string objectsArray[];
int objectCount = 0;
//+------------------------------------------------------------------+
|エキスパート初期化関数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
// 作成されたグラフィカル・オブジェクトを削除する
   for(int i = 0; i < objectCount; i++)
     {
      if(ObjectFind(0, objectsArray[i]) >= 0)
        {
         ObjectDelete(0, objectsArray[i]);
         // Print("Object deleted: ", objectsArray[i]);
        }
     }
  }

私はまた、次のように追加しました:

input int base_x = 300;  // 左インデント
input int base_y = 100;  // トップ・インデント
input bool Include_DropDown = false; // ドロップダウンを表示する
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreatPanel();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|    Function to create Panel                                      |
//+------------------------------------------------------------------+
void CreatPanel()
  {
   createRecLabel("MAIN_REC",10,30,250,400,clrWhite,1,clrBlack);
   createRecLabel("MAIN_SUB_REC",15,35,240,390,C'245,245,245',1,clrNONE);
   createRecLabel("MAIN_LINE_UP",15,35,240,1,C'245,245,245',1,clrNONE,BORDER_RAISED);
...

   if(Include_DropDown)
     {
      createDropDown();
     }
   ChartRedraw(0);
  }
また、create関数では、このように改良しました:

 

そして、グラフィック・オブジェクトを作成 する機能を少し変更した:

//+------------------------------------------------------------------+
//| テキスト・ラベルを作成する関数|
//+------------------------------------------------------------------+
bool createLabel(string objName, int xD, int yD,
                 string txt, color clrTxt = clrBlack, int fontSize = 12,
                 string font = "Arial Rounded MT Bold")
  {
   ResetLastError();

   if(!ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0))
     {
      Print(__FUNCTION__, ": failed to create the label! Error code = ", _LastError);
      return (false);
     }

   ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, base_x + xD); // base_x +を追加する。
   ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, base_y + yD); // base_y +を追加
   ObjectSetInteger(0, objName, OBJPROP_CORNER, CORNER_LEFT_UPPER); 
   ObjectSetString(0, objName, OBJPROP_TEXT, txt);
   ObjectSetInteger(0, objName, OBJPROP_COLOR, clrTxt);
   ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, fontSize);
   ObjectSetString(0, objName, OBJPROP_FONT, font);
   ObjectSetInteger(0, objName, OBJPROP_BACK, false);
   ObjectSetInteger(0, objName, OBJPROP_STATE, false);
   ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, false);
   ObjectSetInteger(0, objName, OBJPROP_SELECTED, false);

   ADDOBJ 

   return (true);
  }