記事"エキスパートアドバイザとインディケータに素早く制御パネルを追加する方法"についてのディスカッション

 

新しい記事 エキスパートアドバイザとインディケータに素早く制御パネルを追加する方法 はパブリッシュされました:

自分のエキスパートアドバイザやインディケータに便利な制御パネルを追加したいけど、何をどうしたら良いかわかりませんか?この記事では、貴方のMQL4/MQL5プログラムに入力パラメータを持つダイアログパネルを『取り付ける方法』をステップバイステップでご紹介します。

次の例では、NewBar.mq5インディケータがどのように新しいバーを検出するかを詳細に分析していきましょう。


図1. インディケータで新しいバーを検出するプロセス

作者: Karputov Vladimir

 
かなり役に立つ。ありがとう。
 
記事をありがとうございました!パネル自体の背景色とボーダー色はどのように変更できますか?標準クラスには ありません。
 
Maxim Dmitrievsky:
記事をありがとうございました!パネル自体の背景色とボーダー色はどのように変更できますか?標準のクラスには ありません。
単純な方法だとできません。複雑な方法は探していません。
 
Maxim Dmitrievsky:
記事をありがとうございました!パネル自体の背景色とボーダー色はどのように変更できますか?標準クラスには ありません。
Defines.mqhのdefinesをオーバーライドしてください。
 
Andrey Khatimlianskii:
Defines.mqhのdefineを再定義する。
  1. 次回のアップデートでは、標準ライブラリが 復元され、それに伴ってDefines.mqhファイルも復元されます。
  2. 標準ライブラリを編集するのはよくない。
 
Karputov Vladimir:
  1. 直近のアップデートでは、標準ライブラリーが 復元され、それに伴いDefines.mqhファイルも復元されます。
  2. 標準ライブラリを編集するのは良くない。
私は編集することを勧めていません。このファイルをインクルードした後、パネルを作成する前に再定義する必要があります。
 
Andrey Khatimlianskii:
編集することは勧めていない。このファイルを有効にした後、パネルを作成する前に上書きする必要があります。
簡単な例でやり方を教えてください。私はライブラリ自体の定義の色を変更しましたが、パネルの色は変わりません。
 
Maxim Dmitrievsky:
簡単な例で教えてください。私はライブラリ自体の定義の色を変更しました - パネルの色は変わりません。

ファイルを変更した後、EAを再コンパイルしてください。アップデート後にバリアントを復元するためにバックアップを取るのを忘れないでください。

オーバーライドは#undefと#defineを使って行います。しかし、正しい場所に置く必要があります;)

 
Andrey Khatimlianskii:

オーバーライドは#undefと#defineで行う。ただし、正しい場所に置く必要がある;)

唯一の違いはと....
 
Andrey Khatimlianskii:

ファイルを変更した後、EAを再コンパイルすれば動くはずです。アップデート後にバリアントをリストアするためにバックアップを取ることを忘れないでください。

オーバーライドは#undefと#defineを使って行います。しかし、正しい場所に置く必要がある;)

さて、そうやってやってみたが、何も動かない。パネルは以前のように白いままだ。

コンパイラはMacro redifinitionを書き出す。

//+------------------------------------------------------------------+
//|マイパネルmqh
//|著作権 © 2013, DeltaTrader|デルタトレーダー
//|http://デルタトレーダー.com.br|http://www.deltatrader.com.br 
//+------------------------------------------------------------------+
#property copyright     「デルタトレーダー © 2013
#property link          "www.deltatrader.com.br"
#property version       "1.000"
#property description   "Test Panel"
#property indicator_plots 0
//+------------------------------------------------------------------+
| 含む|
//+------------------------------------------------------------------+
#include <Controls\Dialog.mqh>
#include <Controls\Label.mqh>
#include <Controls\Panel.mqh>
#include <Controls\Edit.mqh>
#include <Controls\Defines.mqh>

#define  CONTROLS_DIALOG_COLOR_BORDER_LIGHT  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_BORDER_DARK  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_BG            C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CAPTION_TEXT  C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CLIENT_BG     C'0x00,0x00,0xFF'
#define  CONTROLS_DIALOG_COLOR_CLIENT_BORDER C'0x00,0x00,0xFF'

//+------------------------------------------------------------------+
//| グローバルパラメーター|
//+------------------------------------------------------------------+
int      panelXX     =  200;
int      panelYY     =  200;
int      panelWidth  =  600;
int      panelHeight =  400;

CAppDialog m_panel;

//--- 入札オブジェクト
CPanel m_bidcolor;
CLabel m_bidlabel;
 

//--- オブジェクトに尋ねる
CPanel m_askcolor;
CLabel m_asklabel;
CEdit m_edit;
//+------------------------------------------------------------------+
//| 初期設定|
//+------------------------------------------------------------------+
int OnInit() 
  {
//--- パネルの作成
   m_panel.Create(0,"blablabla",0,panelXX,panelYY,panelWidth,panelHeight);
//--- 入札ラベルと色
   m_bidcolor.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
   m_bidcolor.ColorBackground(clrYellow);
   m_panel.Add(m_bidcolor);
   
   m_bidlabel.Create(0,"Bid Text",0,5,5,0,0);
   m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
   m_bidlabel.Color(clrBlue);
   m_panel.Add(m_bidlabel);
//--- ラベルと色を尋ねる
   m_askcolor.Create(0,"Ask Background Color",0,1,1,panelWidth-30,30);
   m_askcolor.ColorBackground(clrAqua);
   m_panel.Add(m_askcolor);
   
   m_asklabel.Create(0,"Ask Text",0,5,30,0,0);
   m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
   m_asklabel.Color(clrRed);
   m_panel.Add(m_asklabel);
   
   m_edit.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30);
   m_panel.Add(m_edit);
//--- パネルの実行
   m_panel.Run();
   return(0);
  }
//+------------------------------------------------------------------+
| 終了時|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- パネルを破壊する
   m_panel.Destroy(reason);
//--- すべてのオブジェクトを削除する
   ObjectsDeleteAll(0,0);
  }
//+------------------------------------------------------------------+
//| 計算時|
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//--- 非常にシンプルな入札ラベル
   m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits));
//--- 非常にシンプルな質問ラベル
   m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits));
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| チャートイベント|
//+------------------------------------------------------------------+

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- マウスでパネルを動かす
   m_panel.ChartEvent(id,lparam,dparam,sparam);
//--- 
  }
//+------------------------------------------------------------------+