MT4のチャート上にボタンやラインを描いて、疑似的な裁量トレードをする機能

記事内に商品プロモーションを含む場合があります
スポンサーリンク

今回は、MT4のEAサンプルソース(FX用)を公開します。

今回はエントリー等は行わない、リアルFX口座でお手軽にダミートレードができる仕組みについて記載しています。

はじめに

リアル口座を使ってMT4でトレードをしていると、デモトレード口座に戻してテスト的にトレードする機会って無くなりますよね。私はよく雇用統計時等の値動きが荒い時等にここでエントリーしたらどうなるんだろう?っていう時があって、しばらくしてから今の動きはとれたかな?とか思ったりしています。

そこで、MT4上に仮想的にエントリーできるボタンを作り仮想的なトレードができるようなEAを作りましたので、解説しています。

MT4でのボタンとかラインの操作をふんだんに使ていますので色々勉強にもなるかと思います。是非皆さんもこの機会に一緒に学びましょう!

機能説明

まず、今回作った簡単な機能説明です。

テキストやボタン説明

EAという形で、上記画像のように画面右下にボタンや情報のオブジェクト(部品)を作りました。

①・・・ロット数を指定します

②・・・SELLボタンです(上がると青色、下がると赤色に変化するようにしています)

③・・・BUYボタンです(上がると青色、下がると赤色に変化するようにしています)

④・・・情報部分です(エントリーしたりすると情報を表示します)

⑤・・・決済ボタンです

⑥・・・トレードしたトータルを表示します

レイアウトについて

MT4のワンクリックトレードと同じようなレイアウトで作ってみました。

エントリーしたら

BUYボタンを押すと、エントリーした価格に青い線が引かれます。
※SELLボタンの場合は赤い線です

情報部分(下部)にはロット数と、価格を表示しています。

ロット数と線の価格を元に、Pipsや円でのリアルタイムでの差益を情報部分(上部)にて随時更新します。

決済するともちろん線は消え、情報部分をクリアしTOTALの部分に差益を反映します。

線が引かれるだけで、実際にエントリーされるわけではありません。
スポンサーリンク

アラートについて

決済ボタンを押すと以下のようにアラートを出力します。(設定で非表示にもできます)

パラメータ設定について

パラメータは2つです。

決済時のアラート表示フラグは、trueでアラート表示/falseでアラート非表示です。

USDJPY_NAMEは、ブローカー(利用しているFX業者の米ドル/円の名前)を設定してください。

この情報は、ユーロ/ドル等のクロス円ではない場合の円損益の計算時に使っています。

ダウンロード

上記のEAファイルになります。

“ダミーエントリーEA” をダウンロード 23_DummyEntry.ex4 – 402 回のダウンロード – 17.41 KB

サンプルソース

以下サンプルソースコードになります。少し長いですがサンプルソースはこんな感じ。
※丸々コピペでコンパイルできます

//+------------------------------------------------------------------+
//|                                                   dummyEntry.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input bool SoundAlert = true;   //決済時のアラート表示フラグ
input string USDJPY_NAME = "USDJPY";
bool KanshiFlg;                  //ポジション管理中はtrue

double view_Ask = 0;

//1ポジション格納配列
int    P_Type = 0;
double P_Rate = 0;
double P_Lots = 0;
double Pips = 0;
double Profit = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---
   KanshiFlg   = false;
   ObjectsDeleteAll();

   ObjectCreate("LBL_BUY", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_BUY", OBJPROP_CORNER, 3);
   ObjectSet   ("LBL_BUY", OBJPROP_XDISTANCE, 70);
   ObjectSet   ("LBL_BUY", OBJPROP_YDISTANCE, 235);
   ObjectSet   ("LBL_BUY", OBJPROP_XSIZE, 60);
   ObjectSet   ("LBL_BUY", OBJPROP_YSIZE, 30);
   ObjectSetInteger(0,"LBL_BUY",OBJPROP_BGCOLOR,clrGray);    // 色設定
   ObjectSetInteger(0,"LBL_BUY",OBJPROP_BACK,false);           // オブジェクトの背景表示設定
   ObjectSetInteger(0,"LBL_BUY",OBJPROP_SELECTABLE,false);     // オブジェクトの選択可否設定
   ObjectSetInteger(0,"LBL_BUY",OBJPROP_SELECTED,false);      // オブジェクトの選択状態
   
   ObjectCreate("LBL_BUY_M", OBJ_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_BUY_M", OBJPROP_CORNER, 3);   
   ObjectSet   ("LBL_BUY_M", OBJPROP_XDISTANCE, 18);
   ObjectSet   ("LBL_BUY_M", OBJPROP_YDISTANCE, 209);   
   ObjectSet   ("LBL_BUY_M", OBJPROP_SELECTABLE, false);  
   ObjectSetString(0,"LBL_BUY_M",OBJPROP_TEXT,"BUY");            // 表示するテキスト
   ObjectSetString(0,"LBL_BUY_M",OBJPROP_FONT,"MS ゴシック");          // フォント
   ObjectSetInteger(0,"LBL_BUY_M",OBJPROP_FONTSIZE,17);    // 色設定   
   ObjectSetInteger(0,"LBL_BUY_M",OBJPROP_COLOR,clrWhite);    // 色設定

   ObjectCreate("LBL_SELL", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_SELL", OBJPROP_CORNER, 3);
   ObjectSet   ("LBL_SELL", OBJPROP_XDISTANCE, 195);
   ObjectSet   ("LBL_SELL", OBJPROP_YDISTANCE, 235);
   ObjectSet   ("LBL_SELL", OBJPROP_XSIZE, 60);
   ObjectSet   ("LBL_SELL", OBJPROP_YSIZE, 30);
   ObjectSetInteger(0,"LBL_SELL",OBJPROP_BGCOLOR,clrGray);    // 色設定
   ObjectSetInteger(0,"LBL_SELL",OBJPROP_BACK,false);           // オブジェクトの背景表示設定
   ObjectSetInteger(0,"LBL_SELL",OBJPROP_SELECTABLE,false);     // オブジェクトの選択可否設定
   ObjectSetInteger(0,"LBL_SELL",OBJPROP_SELECTED,false);      // オブジェクトの選択状態
   
   ObjectCreate("LBL_SELL_M", OBJ_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_SELL_M", OBJPROP_CORNER, 3);   
   ObjectSet   ("LBL_SELL_M", OBJPROP_XDISTANCE, 140);
   ObjectSet   ("LBL_SELL_M", OBJPROP_YDISTANCE, 209);   
   ObjectSet   ("LBL_SELL_M", OBJPROP_SELECTABLE, false);  
   ObjectSetString(0,"LBL_SELL_M",OBJPROP_TEXT,"SELL");            // 表示するテキスト
   ObjectSetString(0,"LBL_SELL_M",OBJPROP_FONT,"MS ゴシック");          // フォント
   ObjectSetInteger(0,"LBL_SELL_M",OBJPROP_FONTSIZE,17);    // 色設定   
   ObjectSetInteger(0,"LBL_SELL_M",OBJPROP_COLOR,clrWhite);    // 色設定
   
   ObjectCreate("BTN_BUY", OBJ_BUTTON, 0, 0, 0);
   ObjectSet   ("BTN_BUY", OBJPROP_CORNER, 3);
   ObjectSet   ("BTN_BUY", OBJPROP_XDISTANCE, 100);
   ObjectSet   ("BTN_BUY", OBJPROP_YDISTANCE, 204);
   ObjectSet   ("BTN_BUY", OBJPROP_XSIZE, 90);
   ObjectSet   ("BTN_BUY", OBJPROP_YSIZE, 50);
   ObjectSet   ("BTN_BUY", OBJPROP_SELECTABLE, false);
   ObjectSetString(0,"BTN_BUY",OBJPROP_TEXT,"BUY");            // 表示するテキスト
   ObjectSetString(0,"BTN_BUY",OBJPROP_FONT,"MS ゴシック");          // フォント
   ObjectSetInteger(0,"BTN_BUY",OBJPROP_FONTSIZE,18);    // 色設定   
   ObjectSetInteger(0,"BTN_BUY",OBJPROP_COLOR,clrWhite);    // 色設定
   
   ObjectCreate("BTN_SELL", OBJ_BUTTON, 0, 0, 0);
   ObjectSet   ("BTN_SELL", OBJPROP_CORNER, 3);
   ObjectSet   ("BTN_SELL", OBJPROP_XDISTANCE, 195);
   ObjectSet   ("BTN_SELL", OBJPROP_YDISTANCE, 204);
   ObjectSet   ("BTN_SELL", OBJPROP_XSIZE, 90);
   ObjectSet   ("BTN_SELL", OBJPROP_YSIZE, 50);
   ObjectSet   ("BTN_SELL", OBJPROP_SELECTABLE, false);
   ObjectSetString(0,"BTN_SELL",OBJPROP_TEXT,"SELL");            // 表示するテキスト
   ObjectSetString(0,"BTN_SELL",OBJPROP_FONT,"MS ゴシック");          // フォント   
   ObjectSetInteger(0,"BTN_SELL",OBJPROP_FONTSIZE,18);    // 色設定   
   ObjectSetInteger(0,"BTN_SELL",OBJPROP_COLOR,clrWhite);    // 色設定
   
   ObjectCreate("TXT_LOT", OBJ_EDIT, 0, 0, 0);
   ObjectSet   ("TXT_LOT", OBJPROP_CORNER, 3);
   ObjectSet   ("TXT_LOT", OBJPROP_XDISTANCE, 133);
   ObjectSet   ("TXT_LOT", OBJPROP_YDISTANCE, 234);
   ObjectSet   ("TXT_LOT", OBJPROP_XSIZE, 60);
   ObjectSet   ("TXT_LOT", OBJPROP_YSIZE, 28);

   ObjectSetInteger(0,"TXT_LOT",OBJPROP_COLOR,clrBlack);    // 色設定
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_BACK,false);           // オブジェクトの背景表示設定
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_SELECTABLE,false);     // オブジェクトの選択可否設定
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_SELECTED,false);      // オブジェクトの選択状態
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_HIDDEN,true);         // オブジェクトリスト表示設定
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_ZORDER,0);     // オブジェクトのチャートクリックイベント優先順位   
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_BGCOLOR,clrWhite);           // ボタン色
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_BORDER_COLOR,clrAqua);     // ボタン枠色
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_ALIGN,ALIGN_RIGHT);        // テキスト整列
   ObjectSetInteger(0,"TXT_LOT",OBJPROP_READONLY,false);            // 読み取り専用設定
   ObjectSetString(0,"TXT_LOT",OBJPROP_TEXT,"1.00");            // 表示するテキスト
   ObjectSetString(0,"TXT_LOT",OBJPROP_FONT,"MS ゴシック");          // フォント  

ObjectCreate("LBL_INFO", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_INFO", OBJPROP_CORNER, 3);
   ObjectSet   ("LBL_INFO", OBJPROP_XDISTANCE, 195);
   ObjectSet   ("LBL_INFO", OBJPROP_YDISTANCE, 126);
   ObjectSet   ("LBL_INFO", OBJPROP_XSIZE, 185);
   ObjectSet   ("LBL_INFO", OBJPROP_YSIZE, 20);
   ObjectSetInteger(0,"LBL_INFO",OBJPROP_BGCOLOR,clrLightGray);    // 色設定
   ObjectSetInteger(0,"LBL_INFO",OBJPROP_BACK,false);           // オブジェクトの背景表示設定
   ObjectSetInteger(0,"LBL_INFO",OBJPROP_SELECTABLE,false);     // オブジェクトの選択可否設定
   ObjectSetInteger(0,"LBL_INFO",OBJPROP_SELECTED,false);      // オブジェクトの選択状態

   ObjectCreate("LBL_BLOCK", OBJ_RECTANGLE_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_BLOCK", OBJPROP_CORNER, 3);
   ObjectSet   ("LBL_BLOCK", OBJPROP_XDISTANCE, 195);
   ObjectSet   ("LBL_BLOCK", OBJPROP_YDISTANCE, 147);
   ObjectSet   ("LBL_BLOCK", OBJPROP_XSIZE, 185);
   ObjectSet   ("LBL_BLOCK", OBJPROP_YSIZE, 20);
   ObjectSetInteger(0,"LBL_BLOCK",OBJPROP_BGCOLOR,clrAntiqueWhite);    // 色設定
   ObjectSetInteger(0,"LBL_BLOCK",OBJPROP_BACK,false);           // オブジェクトの背景表示設定
   ObjectSetInteger(0,"LBL_BLOCK",OBJPROP_SELECTABLE,false);     // オブジェクトの選択可否設定
   ObjectSetInteger(0,"LBL_BLOCK",OBJPROP_SELECTED,false);      // オブジェクトの選択状態

   ObjectCreate("POS_INFO", OBJ_LABEL, 0, 0, 0);
   ObjectSet   ("POS_INFO", OBJPROP_CORNER, 3);
   ObjectSet   ("POS_INFO", OBJPROP_XDISTANCE, 15);
   ObjectSet   ("POS_INFO", OBJPROP_YDISTANCE, 108);
   ObjectSet   ("POS_INFO", OBJPROP_XSIZE, 200);
   ObjectSet   ("POS_INFO", OBJPROP_YSIZE, 10);
   ObjectSet   ("POS_INFO", OBJPROP_SELECTABLE, false);

   
   ObjectCreate("POS_PIPS", OBJ_LABEL, 0, 0, 0);
   ObjectSet   ("POS_PIPS", OBJPROP_CORNER, 3);
   ObjectSet   ("POS_PIPS", OBJPROP_XDISTANCE, 105);
   ObjectSet   ("POS_PIPS", OBJPROP_YDISTANCE, 130);
   ObjectSet   ("POS_PIPS", OBJPROP_XSIZE, 100);
   ObjectSet   ("POS_PIPS", OBJPROP_YSIZE, 10);
   ObjectSet   ("POS_PIPS", OBJPROP_SELECTABLE, false);
      
   ObjectCreate("POS_YEN", OBJ_LABEL, 0, 0, 0);
   ObjectSet   ("POS_YEN", OBJPROP_CORNER, 3);
   ObjectSet   ("POS_YEN", OBJPROP_XDISTANCE, 15);
   ObjectSet   ("POS_YEN", OBJPROP_YDISTANCE, 130);
   ObjectSet   ("POS_YEN", OBJPROP_XSIZE, 100);
   ObjectSet   ("POS_YEN", OBJPROP_YSIZE, 10);
   ObjectSet   ("POS_YEN", OBJPROP_SELECTABLE, false);


   ObjectCreate("BTN_KESSAI", OBJ_BUTTON, 0, 0, 0);
   ObjectSet   ("BTN_KESSAI", OBJPROP_CORNER, 3);
   ObjectSet   ("BTN_KESSAI", OBJPROP_XDISTANCE, 195);
   ObjectSet   ("BTN_KESSAI", OBJPROP_YDISTANCE, 102);
   ObjectSet   ("BTN_KESSAI", OBJPROP_XSIZE, 185);
   ObjectSet   ("BTN_KESSAI", OBJPROP_YSIZE, 30);
   ObjectSet   ("BTN_KESSAI", OBJPROP_SELECTABLE, false);
   ObjectSetString(0,"BTN_KESSAI",OBJPROP_TEXT,"決済");            // 表示するテキスト
   ObjectSetString(0,"BTN_KESSAI",OBJPROP_FONT,"MS ゴシック");          // フォント   
   ObjectSetInteger(0,"BTN_KESSAI",OBJPROP_FONTSIZE,18);    // 色設定   
   ObjectSetInteger(0,"BTN_KESSAI",OBJPROP_COLOR,clrBlack);    // 色設定
   ObjectSetInteger(0,"BTN_KESSAI",OBJPROP_BGCOLOR,clrYellowGreen);    // 色設定


   ObjectCreate("LBL_KEKKA", OBJ_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_KEKKA", OBJPROP_CORNER, 3);
   ObjectSet   ("LBL_KEKKA", OBJPROP_XDISTANCE, 100);
   ObjectSet   ("LBL_KEKKA", OBJPROP_YDISTANCE, 0);
   ObjectSet   ("LBL_KEKKA", OBJPROP_XSIZE, 100);
   ObjectSet   ("LBL_KEKKA", OBJPROP_YSIZE, 10);
   ObjectSet   ("LBL_KEKKA", OBJPROP_SELECTABLE, false);  
   ObjectSetString(0,"LBL_KEKKA",OBJPROP_TEXT,"TOTAL");            // 表示するテキスト
   ObjectSetString(0,"LBL_KEKKA",OBJPROP_FONT,"MS ゴシック");          // フォント
       
   ObjectCreate("LBL_TOTAL", OBJ_LABEL, 0, 0, 0);
   ObjectSet   ("LBL_TOTAL", OBJPROP_CORNER, 3);
   ObjectSet   ("LBL_TOTAL", OBJPROP_XDISTANCE, 10);
   ObjectSet   ("LBL_TOTAL", OBJPROP_YDISTANCE, 0);
   ObjectSet   ("LBL_TOTAL", OBJPROP_XSIZE, 100);
   ObjectSet   ("LBL_TOTAL", OBJPROP_YSIZE, 10);
   ObjectSet   ("LBL_TOTAL", OBJPROP_SELECTABLE, false);   
   ObjectSetString(0,"LBL_TOTAL",OBJPROP_TEXT,"0");            // 表示するテキスト
   ObjectSetString(0,"LBL_TOTAL",OBJPROP_FONT,"MS ゴシック");          // フォント

      
//---
   start();

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
   ObjectsDeleteAll();
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
{
   string Message = "",AltMsg = "";
   int OrderKekka = 0;
   bool rtnFlg = false;


   if(view_Ask <= Ask){   
      ObjectSetInteger(0,"BTN_BUY",OBJPROP_BGCOLOR,clrBlue);    // 色設定      
      ObjectSetInteger(0,"BTN_SELL",OBJPROP_BGCOLOR,clrBlue);    // 色設定   
   }else{
      ObjectSetInteger(0,"BTN_BUY",OBJPROP_BGCOLOR,clrRed);    // 色設定       
      ObjectSetInteger(0,"BTN_SELL",OBJPROP_BGCOLOR,clrRed);    // 色設定          
   }
   view_Ask = Ask;
   ObjectSetText("BTN_BUY",DoubleToStr(Ask, Digits()),18,"Meirio",clrWhite); 
   ObjectSetText("BTN_SELL",DoubleToStr(Bid, Digits()),18,"Meirio",clrWhite); 

   if(KanshiFlg ==true){
   
      if(P_Type == OP_BUY){
         Pips = Bid - P_Rate;
         
         ObjectSetText("POS_INFO", "BUY:" + DoubleToStr(P_Rate, Digits()) + "   Lot:"+ DoubleToStr(P_Lots,2) , 9, "Arial Rounded MT Bold", clrBlack);        

      }else if(P_Type == OP_SELL){
         Pips = P_Rate - Ask;
         
         ObjectSetText("POS_INFO", "SELL:" + DoubleToStr(P_Rate, Digits()) + "   Lot:"+ DoubleToStr(P_Lots,2) , 9, "Arial Rounded MT Bold", clrBlack);            
      }
      
      Pips = NormalizeDouble(Pips,5);
   
      if(Digits==2 || Digits==3){
         Pips *= 100;
         Profit = Pips * 1000 * P_Lots;
         
      }else if(Digits==4 || Digits==5){
         Pips *= 10000;
         Profit = Pips * MarketInfo(USDJPY_NAME,MODE_ASK) * 10 * P_Lots;
         
      }
 
      if(Profit>0){
         ObjectSetText("POS_PIPS", DoubleToStr(Pips, 1) + "Pips", 9, "Arial Rounded MT Bold", clrBlue);
         ObjectSetText("POS_YEN", DoubleToStr(Profit,0) + "円", 9, "Arial Rounded MT Bold", clrBlue);      
      }else{
         ObjectSetText("POS_PIPS", DoubleToStr(Pips, 1)  + "Pips", 9, "Arial Rounded MT Bold", clrRed);
         ObjectSetText("POS_YEN", DoubleToStr(Profit,0) + "円", 9, "Arial Rounded MT Bold", clrRed);      
      }
      
   }else{
         ObjectSetText("POS_PIPS", "", 9, "Arial Rounded MT Bold", clrGray);
         ObjectSetText("POS_YEN", "ポジション無し", 9, "Arial Rounded MT Bold", clrGray);    
   }


  
   
   return(0);    
}




void OnChartEvent(const int id, 
                  const long &lparam, 
                  const double &dparam, 
                  const string &sparam) 
{
double TotalMoney;

 if(id==CHARTEVENT_OBJECT_CLICK) 
 { 


   string clickedChartObject=sparam; 
   if(clickedChartObject=="BTN_BUY") 
   { 
      //ボタンの状態
      bool selected1=ObjectGetInteger(0,"BTN_BUY",OBJPROP_STATE);       

      //--- ボタンが押されたら 
      if(selected1) 
      {
         //ボタンが押された時の処理
         if(KanshiFlg==false){
            ObjectCreate("LINE_ENTRY",OBJ_HLINE,0,0,Ask); 
            ObjectSet("LINE_ENTRY",OBJPROP_COLOR,clrBlue);          
            ObjectSet("LINE_ENTRY",OBJPROP_STYLE,STYLE_SOLID);
            ObjectSet("LINE_ENTRY",OBJPROP_WIDTH,2);              // ラインの幅設定
            
            ObjectSet("LINE_ENTRY",OBJPROP_BACK,true);           // オブジェクトの背景表示設定
            ObjectSet("LINE_ENTRY",OBJPROP_SELECTABLE,false);     // オブジェクトの選択可否設定            
            ObjectSet("LINE_ENTRY",OBJPROP_SELECTED,false);      // オブジェクトの選択状態
            ObjectSet("LINE_ENTRY",OBJPROP_HIDDEN,true);
            ObjectSet("LINE_ENTRY",OBJPROP_ZORDER,0);

            
            ObjectSetInteger(0,"BTN_BUY",OBJPROP_BGCOLOR,clrGray);           // ボタン色

            P_Type = OP_BUY;
            P_Rate = Ask;
            P_Lots = StringToDouble(ObjectDescription("TXT_LOT"));

            KanshiFlg   = true;
            
            start();
                  
          }
         Sleep(100);
         ObjectSetInteger(ChartID(),"BTN_BUY",OBJPROP_STATE,0);
         
      }
   }

   if(clickedChartObject=="BTN_SELL") 
   { 
      //ボタンの状態
      bool selected2=ObjectGetInteger(0,"BTN_SELL",OBJPROP_STATE);       
      
      //--- ボタンが押されたら 
      if(selected2) 
      {
         //ボタンが押された時の処理
         if(KanshiFlg==false){
            ObjectCreate("LINE_ENTRY",OBJ_HLINE,0,0,Bid); 
            ObjectSet("LINE_ENTRY",OBJPROP_COLOR,clrRed);
            ObjectSet("LINE_ENTRY",OBJPROP_STYLE,STYLE_SOLID);
            ObjectSet("LINE_ENTRY",OBJPROP_WIDTH,2);              // ラインの幅設定
            
            ObjectSet("LINE_ENTRY",OBJPROP_BACK,true);           // オブジェクトの背景表示設定
            ObjectSet("LINE_ENTRY",OBJPROP_SELECTABLE,false);     // オブジェクトの選択可否設定            
            ObjectSet("LINE_ENTRY",OBJPROP_SELECTED,false);      // オブジェクトの選択状態
            ObjectSet("LINE_ENTRY",OBJPROP_HIDDEN,true);
            ObjectSet("LINE_ENTRY",OBJPROP_ZORDER,0);
                
            ObjectSetInteger(0,"BTN_SELL",OBJPROP_BGCOLOR,clrGray);           // ボタン色

            P_Type = OP_SELL;
            P_Rate = Bid;
            P_Lots = StringToDouble(ObjectDescription("TXT_LOT"));
            KanshiFlg   = true;
               
            start();
          }
         Sleep(100);
         ObjectSetInteger(ChartID(),"BTN_SELL",OBJPROP_STATE,0);
         
      }
   }
   
   if(clickedChartObject=="BTN_KESSAI") 
   { 
      //ボタンの状態
      bool selected3=ObjectGetInteger(0,"BTN_KESSAI",OBJPROP_STATE);       
      
      //--- ボタンが押されたら 
      if(selected3) 
      {
         //ボタンが押された時の処理
         if(KanshiFlg==true && P_Type == OP_BUY){
          
            ObjectDelete(0,"LINE_ENTRY");
            ObjectSetText("POS_INFO", DoubleToStr(Profit,0), 9, "Arial Rounded MT Bold", clrBlack);
            TotalMoney = Profit + StringToDouble(ObjectDescription("LBL_TOTAL"));
            ObjectSetText("LBL_TOTAL", DoubleToStr(TotalMoney,0), 9, "Arial Rounded MT Bold", clrYellowGreen);
            
            if(SoundAlert == true){
               Alert(DoubleToStr(P_Rate, Digits())  + "→" + DoubleToStr(Bid, Digits()) + " Profit:" + DoubleToStr(Profit,0));
            }
            
            KanshiFlg = false;
            Profit= 0;            
            P_Rate = 0; 
          }
         //ボタンが押された時の処理
         if(KanshiFlg==true && P_Type == OP_SELL){
          
            ObjectDelete(0,"LINE_ENTRY");
            ObjectSetText("POS_INFO", DoubleToStr(Profit,0), 9, "Arial Rounded MT Bold", clrBlack);    
            TotalMoney = Profit + StringToDouble(ObjectDescription("LBL_TOTAL"));
            ObjectSetText("LBL_TOTAL", DoubleToStr(TotalMoney,0), 9, "Arial Rounded MT Bold", clrYellowGreen);
                   
            
            if(SoundAlert == true){
               Alert(DoubleToStr(P_Rate, Digits()) + "→" + DoubleToStr(Ask, Digits()) + " Profit:" + DoubleToStr(Profit,0));
            }
               
            KanshiFlg = false;
            Profit= 0;
            P_Rate = 0;  
         }
         
         Sleep(100);
         ObjectSetInteger(ChartID(),"BTN_KESSAI",OBJPROP_STATE,0);
         
      }
   }



   
 }
}
スポンサーリンク

ソースコードの解説

簡単にソースコードの解説です。

int init()

int init()でオブジェクトの生成を行っています。使っているのはこんな感じ。

  • OBJ_RECTANGLE_LABEL(カスタムラベル)
  • OBJ_LABEL(ラベル)
  • OBJ_BUTTON(ボタン)
  • OBJ_EDIT(エディット)

int start()

値動きがあったら通る処理なので、SELL・BUYの値段のボタンの価格を更新したりしています。

void OnChartEvent()

オブジェクトのボタンが押された際に通る処理です。

if(clickedChartObject==”BTN_BUY”)でBUYボタンが押されたときの処理 、if(clickedChartObject==”BTN_SELL”)でSELLボタンが押されたときの処理 、if(clickedChartObject==”BTN_KESSAI”)で決済ボタンが押されたときの処理を書いています。

さいごに

以上が、『EMT4で疑似的な裁量トレードを行えるようにする機能』です。

今回は線を引いて疑似的に損益を計算しているだけですが、実際にエントリーするように処理を書きかえるとエントリーしてくれるようにもなります。ワンクリックトレードをアレンジしたい場合等は是非今回のように自分でボタンをアレンジして処理を作ってみて下さい。

時間足を変えると、疑似エントリー情報や損益情報が消えちゃうのでそこは注意してください。

※ EAのサンプルソースを一覧表にまとめました

※オンラインレッスンやってます


コメント