クラスのつくり方!OrderCloseをクラスで実行してみた(MQL4)

MQL4でクラスの作成方法

書式

まず、クラスを宣言して、修飾子を宣言してクラス変数とメソッドを宣言します。

class Closer{

	private:
		//クラス変数
		int Close_Ticket;
		double Close_Lots;
		double Close_Price;
		int Close_Slippage;
		color Close_ArrowColor;
		
	public:
		//コンストラクタ(クラス名と同じ名前でメソッドを宣言することをいう)
		void Closer(int ticket, double lots, double price, int slippage, color arrow_color);
		//クラスのメソッド
		bool Settlement();
		
};

クラスのカッコ”};”で閉じてメソッドの内容を記述します。


	Closer::Closer(int ticket, double lots, double price, int slippage, color arrow_color){
		//引数をクラス変数に代入
		Close_Ticket = ticket;
		Close_Lots = lots;
		Close_Price = price;
		Close_Slippage = slippage;
		Close_ArrowColor = arrow_color;
	}
	
	bool Closer::Settlement(){
		//クラス変数を引数に代入
		bool res = OrderClose(Close_Ticket,Close_Lots,Close_Price,Close_Slippage,Close_ArrowColor);
		return (res);
	}

使用方法

クラスのインスタンス(new)を作成してコンストラクタで初期化します。

		//クラス名 *変数を宣言 = new クラス名(コンストラクタ)(引数)
		Closer *close_ticket = new Closer(buyTicket,OrderLots(),OrderOpenPrice(),Slippage,clrNONE);
		//変数.メソッド名
		close_ticket.Settlement();

サンプル

クラスの作成
Includeフォルダにmylibを作成して適当なクラスファイルを作成します。(.mqh)

class Closer{

	private:
		int Close_Ticket;
		double Close_Lots;
		double Close_Price;
		int Close_Slippage;
		color Close_ArrowColor;
		
	public:
		void Closer(int ticket, double lots, double price, int slippage, color arrow_color);
		bool Settlement();
		
};

	Closer::Closer(int ticket, double lots, double price, int slippage, color arrow_color){
		Close_Ticket = ticket;
		Close_Lots = lots;
		Close_Price = price;
		Close_Slippage = slippage;
		Close_ArrowColor = arrow_color;
	}
	
	bool Closer::Settlement(){
		bool res = OrderClose(Close_Ticket,Close_Lots,Close_Price,Close_Slippage,Close_ArrowColor);
		return (res);
	}
//クラスファイルを読み込み
#include < mylib/Order.mqh >

//グローバル変数
extern int MagicNumber = 12345;
int buyTicket = 0;
bool flag = true;
int Slippage = 30;

void OnTick(){
	
	if(flag){
		//エントリー
		buyTicket = OrderSend(Symbol(),OP_BUY,MarketInfo(Symbol(),MODE_MINLOT),MarketInfo(Symbol(),MODE_ASK)
			,Slippage,0,0,"OP_BUY",MagicNumber,0,clrNONE);

		if(buyTicket == -1){
			Print(GetLastError());
		}
		
		OrderSelect(buyTicket,SELECT_BY_TICKET,MODE_TRADES);
		Closer *close_ticket = new Closer(buyTicket,OrderLots(),OrderOpenPrice(),Slippage,clrNONE);

		close_ticket.Settlement();
		flag = false;
	}
}

テスターで実行すると下記の画像のようになります。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする