【無料】メールマガジン配布します!

真実!しか流さないメールマガジン《不定期》

メルマガのお申し込みはコチラ

チャートに文字を表示してみる?

 

私もMT4は、難しい難しいと思っておりました。

(いまも常に四苦八苦しています^^;)

 

要は、気合?かもしれませんw

といっても諸先輩方の遺産のお陰で私自身も、そこそこMQLをいじれるようになってきたのでちょっとだけ後に続ければと思っている感じです。

 

で、頂いたのが

いきなりで恐縮ですが、
ちょっとお伺いしたいことがございます。

MQLで、「comment」を使って、
チャート上にパラメータなどを表示させることができると思います。

それとはちょっと違うんですが、
例えば、次のようなものをチャート上に表示する方法を
教えていただきたいです。

「5日移動平均線が25日移動平均線より上にある=上昇トレンドと定義=買いト
レードOK!」

「5日移動平均線が25日移動平均線より下にある=下降トレンドと定義=売りト
レードOK!」

ちょっと分かりにくいでしょうか?(^_^;)

つまり、自分が、
「5日移動平均線が25日移動平均線より上にある状態」を「上昇トレンドと定
義」し、
その場合は、「買いトレード」しか行わないようにする為、
上昇トレンドの場合は、「買いトレードOK!」とチャート上に表示させたいのです。

tomoさんクラスの方では簡単だと思いますが、
MQL初心者の私にはできません。(ToT)

MQLファイルで、ご回答をいただけたら幸いに思います。^^

ということですが、さすがにはいっとMQLファイルはお渡しできませんがブログのネタということで

 

ここでは、移動平均線を例に言われていますのでサンプルは、をつくってみます。

 

MA_Colorのソースは、これです。

//+------------------------------------------------------------------+
//|                                                 MA_In_Color.mq4   |
//|                 Copyright © 2004, MetaQuotes Software Corp. |
//| Modified from LSMA_In_Color to use any MA by Robert Hill |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2006, FX Sniper and Robert Hill"
#property  link      "http://www.metaquotes.net/"

//---- indicator settings

#property  indicator_chart_window
#property  indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red

extern int       MAPeriod=14;
extern int       MAType=1;

//---- buffers

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];

//---- variables

int    MAMode;
string strMAType;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                            |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(3);

//---- drawing settings
   SetIndexBuffer(2,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(0,ExtMapBuffer3);

   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

switch (MAType)
   {
      case 1: strMAType="EMA"; MAMode=MODE_EMA; break;
      case 2: strMAType="SMMA"; MAMode=MODE_SMMA; break;
      case 3: strMAType="LWMA"; MAMode=MODE_LWMA; break;
      case 4: strMAType="LSMA"; break;
      default: strMAType="SMA"; MAMode=MODE_SMA; break;
   }
   IndicatorShortName( strMAType+ " (" +MAPeriod + ") ");
//---- initialization done
   return(0);
  }

double LSMA(int Rperiod, int shift)
{
   int i;
   double sum;
   int length;
   double lengthvar;
   double tmp;
   double wt;

   length = Rperiod;

   sum = 0;
   for(i = length; i >= 1  ; i--)
   {
     lengthvar = length + 1;
     lengthvar /= 3;
     tmp = 0;
     tmp = ( i - lengthvar)*Close[length-i+shift];
     sum+=tmp;
    }
    wt = sum*6/(length*(length+1));

    return(wt);
}

int start()

  {

   double MA_Cur, MA_Prev;
   int limit;
   int counted_bars = IndicatorCounted();
   //---- check for possible errors
   if (counted_bars<0) return(-1);
   //---- last counted bar will be recounted
   if (counted_bars>0) counted_bars--;
   limit = Bars - counted_bars;

   for(int i=limit; i>=0; i--)
   {
      if (MAType == 4)
      {
        MA_Cur = LSMA(MAPeriod,i);
        MA_Prev = LSMA(MAPeriod,i+1);
      }
      else
      {
        MA_Cur = iMA(NULL,0,MAPeriod,0,MAMode,PRICE_CLOSE,i);
        MA_Prev = iMA(NULL,0,MAPeriod,0,MAMode,PRICE_CLOSE,i+1);
      }

//========== COLOR CODING ===========================================               

       ExtMapBuffer3[i] = MA_Cur; //red
       ExtMapBuffer2[i] = MA_Cur; //green
       ExtMapBuffer1[i] = MA_Cur; //yellow

        if (MA_Prev > MA_Cur)
        {
        ExtMapBuffer2[i] = EMPTY_VALUE;
        }
       else if (MA_Prev < MA_Cur)
        {
        ExtMapBuffer1[i] = EMPTY_VALUE; //-1 red/greem tight
        }
         else
         {
         ExtMapBuffer1[i]=EMPTY_VALUE;//EMPTY_VALUE;
         ExtMapBuffer2[i]=EMPTY_VALUE;//EMPTY_VALUE;
         }
      }
      return(0);
  }
//+------------------------------------------------------------------+

 

これに単純に条件式と文字表示を準備することになります。

 

string bias;

これと

if(ExtMapBuffer1[i]>Bid)bias="買いトレンドOK"; else bias="売りトレンドOK";

     
ObjectCreate("label_UPDOWN", OBJ_LABEL, 0, 0, 0);

ObjectSetText("label_UPDOWN", "移動平均線より"+bias, 15, "MS UI Gothic", White);

ObjectSet("label_UPDOWN", OBJPROP_XDISTANCE, 20);

ObjectSet("label_UPDOWN", OBJPROP_YDISTANCE, 20);

これをプラスします。

 

エスパーtomoとしては、今回質問で知りたかったことはここ?

文字を表示する部分なんじゃないかと勝手に決めてここだけ簡単に解説

ObjectCreate("label_UPDOWN", OBJ_LABEL, 0, 0, 0);

ラベルを初期化・初期設定します。詳しくは、リファレンスをみましょう。


ObjectSetText("label_UPDOWN", "移動平均線より"+bias, 15, "MS UI Gothic", White);

↑ラベル名 ↑表示するテキスト内容 ↑フォントサイズ


ObjectSet("label_UPDOWN", OBJPROP_XDISTANCE, 20);

ObjectSet("label_UPDOWN", OBJPROP_YDISTANCE, 20);

で、これは、チャートの表示位置の設定です。

 

基本的にこの4つのパターンを覚えてけばチャートに大きな文字を表示可能になります。

Commentって小さいですからね。

 

完成したのがこちら

 

//+——————————————————————+

//|                                                MA_In_Color.mq4   |

//|                      Copyright ゥ 2004, MetaQuotes Software Corp. |

//| Modified from LSMA_In_Color to use any MA by Robert Hill         |    
//+——————————————————————+

#property  copyright "Copyright ゥ 2006, FX Sniper and Robert Hill"

#property  link      "http://www.metaquotes.net/"

//—- indicator settings

#property  indicator_chart_window

#property  indicator_buffers 3

#property indicator_color1 Yellow     
#property indicator_color2 Green

#property indicator_color3 Red

extern int       MAPeriod=14;

extern int       MAType=1;

//—- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

double ExtMapBuffer3[];

//—- variables

int    MAMode;

string strMAType;

string bias;

//+——————————————————————+

//| Custom indicator initialization function                         |

//+——————————————————————+

int init()

  {

   IndicatorBuffers(3);

//—- drawing settings

   SetIndexBuffer(2,ExtMapBuffer1);

   SetIndexBuffer(1,ExtMapBuffer2);

   SetIndexBuffer(0,ExtMapBuffer3);

   SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);

   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);

   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

switch (MAType)

   {

      case 1: strMAType="EMA"; MAMode=MODE_EMA; break;

      case 2: strMAType="SMMA"; MAMode=MODE_SMMA; break;

      case 3: strMAType="LWMA"; MAMode=MODE_LWMA; break;

      case 4: strMAType="LSMA"; break;

      default: strMAType="SMA"; MAMode=MODE_SMA; break;

   }

   IndicatorShortName( strMAType+ " (" +MAPeriod + ") ");

//—- initialization done

   return(0);

  }

double LSMA(int Rperiod, int shift)

{

   int i;

   double sum;

   int length;

   double lengthvar;

   double tmp;

   double wt;

   length = Rperiod;

   sum = 0;

   for(i = length; i >= 1  ; i–)

   {

     lengthvar = length + 1;

     lengthvar /= 3;

     tmp = 0;

     tmp = ( i – lengthvar)*Close[length-i+shift];

     sum+=tmp;

    }

    wt = sum*6/(length*(length+1));

    return(wt);

}

int start()

  {

   double MA_Cur, MA_Prev;

   int limit;

   int counted_bars = IndicatorCounted();

   //—- check for possible errors

   if (counted_bars<0) return(-1);

   //—- last counted bar will be recounted

   if (counted_bars>0) counted_bars–;

   limit = Bars – counted_bars;

   for(int i=limit; i>=0; i–)

   {

      if (MAType == 4)

      {

        MA_Cur = LSMA(MAPeriod,i);

        MA_Prev = LSMA(MAPeriod,i+1);

      }

      else

      {

        MA_Cur = iMA(NULL,0,MAPeriod,0,MAMode,PRICE_CLOSE,i);

        MA_Prev = iMA(NULL,0,MAPeriod,0,MAMode,PRICE_CLOSE,i+1);

      }

//========== COLOR CODING ===========================================              
       ExtMapBuffer3[i] = MA_Cur; //red

       ExtMapBuffer2[i] = MA_Cur; //green

       ExtMapBuffer1[i] = MA_Cur; //yellow

        if (MA_Prev > MA_Cur)

        {

        ExtMapBuffer2[i] = EMPTY_VALUE;

        }

       else if (MA_Prev < MA_Cur)

        {

        ExtMapBuffer1[i] = EMPTY_VALUE; //-1 red/greem tight

        }

         else

         {

         ExtMapBuffer1[i]=EMPTY_VALUE;//EMPTY_VALUE;

         ExtMapBuffer2[i]=EMPTY_VALUE;//EMPTY_VALUE;

         }

   if(ExtMapBuffer1[i]>Bid)bias="買いトレンドOK"; else bias="売りトレンドOK";     
   ObjectCreate("label_UPDOWN", OBJ_LABEL, 0, 0, 0);

   ObjectSetText("label_UPDOWN", "移動平均線より"+bias, 15, "MS UI Gothic", White);

   ObjectSet("label_UPDOWN", OBJPROP_XDISTANCE, 20);

   ObjectSet("label_UPDOWN", OBJPROP_YDISTANCE, 20);

      }

      return(0);

  }

//+——————————————————————+

 

こんな感じでどうでしょうか?

20140516150623

あとは、好みで改造してみてください。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

tomoよりのお願い

参考になったちょっと役に立ったお疲れさんって
少しでもおもったかた(*゜▽゜ノノ゛☆

 

ポッチっとお願いします。その1ポチ!ありがとう

にほんブログ村 為替ブログ FX初心者本人(1年目)へ
にほんブログ村

 

このエントリーをはてなブックマークに追加 はてなで広めてください。この記事が役に立つ人がいると思います。
←左のボタンをクリックして共有してください。

 

 

タグ

2014年5月16日 | コメント/トラックバック(0) |

カテゴリー:インジケーター

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ