6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-03-17

23/09/22追記
note購入者はDMして下されば続きが読めます!
https://note.com/iceseeds/n/nfdae2c5ac2ef

はじめに

ここでは、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:

6
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?