[MT4][mql4][プログラミング] 全て(複数)のチャートを制御するサンプルコード

MT4のEAや、Indicatorを作成していて、それを追加しているチャート以外も同時に操作したいという場合があると思います。
そんな際に、他のすべてのチャートを同時に操作するためのサンプルコードを紹介します。

また、mql4を実装する上での、フォーマットとなるサンプルコードや、概要に関してはまず、Expert Advisorのフォーマットファイルと概要をご覧ください。

Contents

全て(複数)のチャートを操作するサンプルコード

一つのEAやIndicatorで他のチャートの操作も行う場合のサンプルコードを紹介します。

今回は、プログラムが追加されているチャート以外の全てのチャートのSymbol(通貨ペア)名を表示するサンプルコードを紹介します。

このSymbol名取得する処理を、あなたの要望する他の処理に置き換えれば、全てのチャートへその処理が適用されるようになります。
(他のチャートへの処理は何が出来るかも、後で紹介します。)

サンプルコード

long	id				= ChartNext(0); //最初のChartID
long	currentChartid	= ChartID(); //現在のChartID
string	symbolStr		= "";

//全てのチャートを巡回するループ
for(;;)
{
	if(id != currentChartid)
	{
		symbolStr = ChartSymbol(id);
		Print("ChartSymbol:", symbolStr);
	}
	
	id = ChartNext(id);
	
	if(id < 0) { break; }
}

サンプルコードの説明

サンプルコードの説明です。

MT4に表示されているチャートの内最初のチャートのidを取得

1行目では、MT4に表示されているチャートの内最初のチャートidをChartNext()を使用して取得しています。
引数に0を指定することで、最初のチャートidが取得できます。

プログラムが追加されている現在のチャートidを取得

2行目では、このサンプルプログラムを追加しているチャートのidをChartID()を使用して取得しています。
このidは、現在のチャートを処理の操作対象から外すために取得しています。
もし、このサンプルプログラムを追加しているチャートも操作対象にしたい場合は、ここでのid取得処理は不要です。

全てのチャートの巡回ループ処理

6行目から、17行目までが全てのチャートを巡回するループの処理となります。

現在のチャートは操作対象から除外

8行目の処理は、「このサンプルプログラムが追加されているチャートではない場合」のみ、Symbol(通貨ペア)名を取得するようにするため、プログラムが追加されているチャートを除外しています。

if(id != currentChartid)

もし全てのチャートへの操作を、このプログラムが追加されているチャートも含めて操作したい場合は、ここのif分は削除してください。

他のチャートの操作処理

10,11行目が他のチャートの操作処理になります。

今回は、サンプルとして、他のチャートのSymbol(通貨ペア)名を取得して表示する処理にしていますので、Symbol名を取得する処理を記述しています。

symbolStr = ChartSymbol(id);
Print("ChartSymbol:", symbolStr);

ここにあなたが実装したい、チャート操作処理を記述すれば、それが全てのチャートへ適用されます。
他のチャートに対する処理はなにがあるかは後述します。

次のチャートidを取得

14行目では、次のチャートidを取得しています。
このように、チャートidを最初のチャートidから順に進ませることですべてのチャートidに対して処理を適用するような実装としています。

id = ChartNext(id);

全てのチャートへの処理終了

16行目では、すべてのチャートを巡回し終わったかどうかをチェックしています。
ChartNext()は全ての巡回が終わった場合は、-1を返却する仕様となっているため、そのタイミングでループを終了(break)して、処理を終わらせるようにしています。

if(id < 0) { break; }

ここまででサンプルコードの概要説明は終了です。

各チャートの制御は何が出来るかは下で紹介します。

[お知らせ]MT4使いのあなたへ

日本の金融商品取引業者にも登録されているゴールデンウェイ・ジャパン社が運営するFXTF のご紹介です。

国内FX業者の中でも最狭水準のスプレッドで有名なFXTFでは、口座開設と2つの指定通貨ペアでの取引を行うだけで1万円のキャッシュバックがあります。

1万円キャッシュバックキャンペーンキャッシュバック受け取り方法:

キャッシュバックの受け取り方法は以下の2つの条件をクリアすることで取引口座へ振り込まれます。

条件1:
FXTFでの新規口座開設
※ここまでだけでも、3000円のキャッシュバックが受け取れます。

条件2:
以下の2通貨ペアそれぞれで1取引、合計2取引を口座開設から10日以内に行うこと。
USDJPY(スプレッド : 0.1銭 原則固定)
GBPJPY(スプレッド : 0.6銭 原則固定)
※取引量は問われないようです。
※この条件を達成すると追加で7000円キャッシュバックされます。(条件1と合わせて合計1万円になります)

その他補足情報:

MT4:利用可
関東財務局長(金商)登録番号:第258号

FXTFはMT4が使えて、スプレッドもとても小さいFX国内業者の為、このキャッシュバックキャンペーン期間中にメイン/サブ口座として開設するのもいいかもしれませんね。
※MT4での指定の取引量の取引を行うと、さらに+5万円がキャッシュバックされるキャンペーンもやっていますがこちらは、指定の取引量がかなり大きいので紹介は割愛させていただきます。

他のチャート操作で出来ること

他のチャートに対して実行できる処理を紹介します。

前述のサンプルコードを元に、あなたの実現したい処理を作成する際の参考にご利用ください。
※詳細な関数仕様はリンク先を参照ください。

Function概要
ChartApplyTemplate()チャートへチャートテンプレートファイルの設定を適用する。
ChartSaveTemplate()現在の指定チャートの設定を、テンプレートファイルに保存する。
ChartWindowFind()インジケータが描画されているサブウィンドウの番号を取得する。
ChartTimePriceToXY()チャート上の時間と価格をチャートのXY座標に変換する。
ChartXYToTimePrice()XY座標から、チャートの時間と価格に変換する。
ChartOpen()指定したSymbol/Periodの新規チャートを開きます。
ChartClose()指定したチャートを閉じます。
ChartSymbol()指定したチャートのSymbol(通貨ペア)名を取得します。
ChartPeriod()指定したチャートの時間足を取得します。
ChartRedraw()object propatyを変更した後等に、実施するチャートの再描画を実行します。
ChartSetDouble()指定チャートの指定プロパティの設定値(double型)を設定します。
ChartSetInteger()指定チャートの指定プロパティの設定値(int型)を設定します。
ChartSetString()指定チャートの指定プロパティの設定値(string型)を設定します。
ChartGetDouble()指定チャートの指定プロパティの設定値(double型)を取得します。
ChartGetInteger()指定チャートの指定プロパティの設定値(int型)を取得します。
ChartGetString()指定チャートの指定プロパティの設定値(string型)を取得します。
ChartNavigate()指定チャートの指定位置(時間)を表示します。
ChartIndicatorDelete()指定チャートの指定インジケータを削除します。
ChartIndicatorName()指定チャートに追加されているインジケータのショートネームを取得します。
ChartIndicatorsTotal()指定チャートに追加されているインジケータの数を取得します。
ChartSetSymbolPeriod()指定チャートのSymbol(通貨ペア)とPeriod(時間足)を指定値に変更します。
ChartScreenShot()指定チャートのスクリーンショットを取得します。
チャート操作関数