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; } }
テスターで実行すると下記の画像のようになります。