オフラインチャートにAskラインを引く。

これまでに、何回かに渡ってオフラインチャートの活用方法を説明していますが、このオフラインチャートには、Askラインが表示できません。そこで、今日はオフラインチャートにAskラインを引くインジケータを紹介したいと思います。


ただ・・・その前に、オフラインチャート自体について説明しておきます。
ファイルメニューのオフラインチャートから開いたチャートだけがオフラインチャート になると思っている人が大半だと思うのですが、実は違います..。


現在リアルタイムに更新されているチャート上で、F8 を押してプロパティを開いて、全般タブの中の「オフラインチャート」にチェックをいれると、そのチャートはオフラインになります。オフラインになると最新の価格の反映もBarの増加も行われません。
チャートとサーバ間の自発的なレートのやりとりが止まっているのがオフラインチャートなのです。

逆に、チャートとサーバ間のやりとりが無いからこそ、自由にカスタマイズした通貨ペア名をつけられるんですねぇ。
(..なので、サーバに無い特殊な通貨ペアのチャートのプロパティのオフラインチャートのチェックを外してはいけません...orz)


さて、本題のオフラインチャートにAskラインを引くインジケータは、Ask_Line.mq4になります。

#property indicator_chart_window

extern string MySymbol = "EURUSD";
extern color AskLineColor = Red;
extern string AskLineName = "Ask_Line";
int init()
{
   SetIndexLabel(0,NULL);
   return(0);
}
int deinit()
{
   ObjectDelete(AskLineName);
   return(0);
}
int start()
{
   if(ObjectFind(AskLineName) == -1){
      ObjectCreate(AskLineName,OBJ_HLINE,0,0,MarketInfo(MySymbol, MODE_ASK));
      ObjectSet(AskLineName,OBJPROP_COLOR,AskLineColor);
   }
   ObjectSet(AskLineName,OBJPROP_PRICE1,MarketInfo(MySymbol, MODE_ASK));
   return(0);
}

単純なコードですが、気になるポイント?を説明しておきます..。

オフラインチャートでは、チャートとサーバ間の自発的なレートのやりとりが無いので、定義済み変数のAsk が使えません。それ故に、MarketInfo(MySymbol, MODE_ASK) を使う必要があります。
この関数は、定義済み変数のAskとは関係無しに、呼ばれた時点でサーバに強制的にAsk値を取得しに行きます。
また、通貨ペア名をカスタマイズしている場合に対応できるように、MySymbol = "EURUSD" を正しく設定する必要があります。


明日からは、また、MQL5 超入門を再開の予定です...zzz