2017年4月14日金曜日

[MT4プログラム]小ネタ 100pips毎に平行線を引くスクリプト

なんとなくドル円とかって、100pips毎のラインを超えると10pipsぐらいは必ず進む気がするんですよね?

確認するのに100pips単位で平行線が引かれているとよいなーということで、ということで、100pips毎に平行線をスクリプトです。

■USDJPY 100pips毎に平行線

なお、EURUSDなどでも100pips毎に引けるようにしてあります。
■EURUSD 100pips毎に平行線

ソースコード上の赤字になっている部分を書き換えると100pips以外にも引けるかと。


//------------------------------------------------------------------
// 100pips単位にラインを引く
#property copyright "Copyright 2017,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict

#define OBJECT_NAME "OBJ_DRAW_HLINE_"

//------------------------------------------------------------------
// 100pips単位にラインを引く
void OnStart()
{
   //Pips計算 小数点桁数が3or5の場合、Point()*10=1pips
   int digit = (int)MarketInfo(NULL, MODE_DIGITS);
   double point = (double)MarketInfo(NULL, MODE_POINT);
   int pipsRate = digit == 3 || digit == 5 ? 10 : 1;

   int pips100 = 100 * pipsRate;

   int high = (int)(iHigh(NULL, PERIOD_MN1, iHighest(NULL, PERIOD_MN1, MODE_HIGH)) / point) + pips100;
   int low = (int)(iLow(NULL, PERIOD_MN1, iLowest(NULL, PERIOD_MN1, MODE_LOW)) / point) - pips100;
   
   high = high - (high % pips100);
   low = low - (low % pips100);
   
   for( int price = low; price <= high; price += pips100)
   {
      string name = OBJECT_NAME + IntegerToString(price);
      if ( ObjectCreate( 0,name , OBJ_HLINE, 0, 0, price * point ))
      {
         ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); 
         ObjectSetInteger(0, name, OBJPROP_STYLE, STYLE_DOT); 
         ObjectSetInteger(0, name, OBJPROP_HIDDEN, true); 
      }
   } 
}

ついでに消すスクリプトです。

//------------------------------------------------------------------
// 100pips単位にラインを引くで引いたラインを削除する
#property copyright "Copyright 2017,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict

#define OBJECT_NAME "OBJ_DRAW_HLINE_"


//------------------------------------------------------------------
// 100pips単位にラインを引くで引いたラインを削除する
void OnStart()
{
   int total = ObjectsTotal();
   //生成したオブジェクトを削除する。
   //0から削除するとインデックス位置がずれて
   //正しく削除できないため、後ろから削除するようにする。
   for( int i = total - 1; i >= 0 ; i--)
   {
      string name = ObjectName(0, i);
      
      // 先頭文字列がRangeRectangleNameと一致する場合、削除する。
      if ( StringFind(name, OBJECT_NAME) == 0 )
      {
         ObjectDelete(0, name);
      }
   }
}


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。