オフラインチャートに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