C
MQL4
MT4
Dialog
4
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

【MQL4 : MT4】GUI で 売買機能を実装した EA を作る。① 【Dialog】

はじめに

ここでは、GUIで売買機能(ワンクリックトレード)を実装します。
作成手順としては、以下の通りです。

  1. GUIの基盤
  2. ロットを表示するEdit部品
  3. ロットを増減させるButton部品
  4. 買い、売りを入れるButton部品
  5. それぞれの部品にイベントを付与

1 の GUIの基盤 に関しては前回の記事をご覧ください。
【MQL4 : MT4】GUI の インジケータ | EA を作る【備忘録】
※前回とは画面サイズを変えています。
if( !AppWindow.Create( ChartID(), "SampleTitle", 0, 50, 50, 500, 400 ) )
                   ↓↓↓↓
if( !AppWindow.Create( ChartID(), "SampleTitle", 0, 0, 0, 250, 100 ) )

いろいろと初心者な為、至らない部分もありますが、宜しくお願いします。

部品を作成する部分は、複雑になるので、別ファイルに分けます。

  • Experts/
    • Sample/
      • guiwindow.mq4    ←前回の記事で...
      • AppWindow.mqh  ←このファイルで作業します。

ロットを表示させるEdit部品を作成

ロットを表示させるEdit部分を作ります。
今回は、バリデーションを「マイナスは受け付けない」のみ実装します。
↓↓ Editを作成するを作成するコード ↓↓

AppWindow.mqh
#include <Controls\Dialog.mqh>
#include <Controls\Edit.mqh>  //--- 1

class CPanelDialog : public CAppDialog
{
   public:
       CPanelDialog();
      ~CPanelDialog();

      /* create */  //--- 2
      virtual bool      Create( const long chart, const string name, const int subwin, const int x1, const int y1, const int x2, const int y2 );

      CEdit             m_editLots; //--- 3

   protected:
      bool              CreateEditLots(); //--- 3
};

CPanelDialog::CPanelDialog(){}
CPanelDialog::~CPanelDialog(){}

bool CPanelDialog::Create( const long chart, const string name, const int subwin, const int x1, const int y1, const int x2, const int y2 )
{
   if( !CAppDialog::Create( chart, name, subwin, x1, y1, x2, y2 ) )
      return false;

   if( !CreateEditLots() )    return false;

   return true;
}

bool CPanelDialog::CreateEditLots()
{
   int widths = ClientAreaWidth() / 5; //--- 4-1
   int x1 = widths;
   int y1 = 0;
   int x2 = widths * 4;
   int y2 = 20;

   if( !m_editLots.Create( m_chart_id, m_name + "Edit", m_subwin, x1, y1, x2, y2 ) ) return false;
   if( !m_editLots.ReadOnly( false ) ) return false; //--- 4-2
   if( !Add( m_editLots ) ) return false;
   m_editLots.TextAlign( ALIGN_CENTER );
   m_editLots.Text( "0.10" ); //--- 4-3

   return true;
}

ソースコード詳細

1. Controlsフォルダの中のEdit.mqhをインクルードする。
#include <Controls\Edit.mqh>
2. create関数を宣言

この関数を使って、いろんな部品を作っていきます。

Create( const long chart, const string name, const int subwin, const int x1, const int y1, const int x2, const int y2 );

Create( ChartID、 部品の名前、 表示ウィンドウ、 表示位置 X軸、 表示位置 Y軸、 部品サイズ X、 部品サイズ Y ) )
3. Editの宣言
      CEdit             m_editLots;

      bool              CreateEditLots();
4-1. Editの表示位置とサイズ
   int widths = ClientAreaWidth() / 5; 
   int x1 = widths;       AppWindowの1/5のサイズ
   int y1 = 0;        高さ0
   int x2 = widths * 4;   AppWindowの4コ文
   int y2 = 20;       20 cm? px?

ClientAreaWidth()でAppWindowの横幅を取得します。
それを5分割して、表示位置などを指定しています。

4-2. Editの読み込み設定

初期設定は、読み込みだけなので、書きこめるようにします。

if( !m_editLots.ReadOnly( false ) ) return false;
4-3. Editの表示文字
m_editLots.Text( "0.10" );

実行結果

Screenshot_3.png

さいごに

今回は、ロットを表示させるところまでを実装しました。
明日は、Buttonを実装します:thumbsup_tone1:

YoutubeでLive配信しながら作ってます。
https://www.youtube.com/channel/UCcTw_iVgpLfrep9f94KxwLg?sub_confirmation=1
チャンネル登録お願いします:relaxed:

Twitterでは毎日呟いています。
https://twitter.com/IceSeed_bz
フォローお願いします:relaxed:

明日は、Buttonを実装します。
お疲れ様。:eye::eye:

新規登録して、もっと便利にQiitaを使ってみよう

  1. ユーザーやタグをフォローできます
  2. 便利な情報をストックできます
  3. 記事の編集提案をすることができます
ログインすると使える機能について
IceSeed
何か始めようとして取りあえず作った。 youtube :【https://www.youtube.com/channel/UCcTw_iVgpLfrep9f94KxwLg?sub_confirmation=1】

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
4
どのような問題がありますか?
新規登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
新規登録ログイン
ストックするカテゴリー