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() | 指定チャートのスクリーンショットを取得します。 |