外部指標のためのアラートとコメント
はじめに
経験からすると、開発者は、自身の開発する指標にアラートやコメントの表示機能を盛り込んでいないことがある。それにより、シグナル情報を表示する可能性を付け加えるリクエストが寄せられます。
MQL4プログラミング言語でテクニカル指標の情報を表示する可能性
MQL4言語には、プログラムコード作成の簡易化に役立つであろうコメント・アラート表示機能の追加などの指標バッファ拡張機能がありません。一方では、MQL4言語でだオブジェクトの位置など詳細特徴が取得できます。
この記事では、チャートにドラッグ&ドロップされたテクニカル指標の売買シグナル情報の受信方法や、[コメント]・[アラート]画面の表示方法について説明します。また、EA間でのデータの受け渡し等を提供するグローバル変数を作成する可能性も紹介します。
チャート上に適用する全ての記号は、特殊文字と矢印コードです。そのため、記号情報の取得は難しくありません。ちなみに、指標開発者がOBJ_ARROWオブジェクトの説明を詳細にすることにより、ユーザーはシグナルを容易に識別できるようになります。例としては、古典的なローソク足チャート作成者の記号説明があります。この指標の標準設定では、記号にカーソルを合わせるだけで、適当なヘルプ情報をポップアップウィンドウから得ることができます。
通常のシグナルの表示
MQL4では、詳細情報を提供するために、組込みオプションが利用可能です。
MQL4コマンド中の関数
double ObjectGet (string name, int prop_id)
は、指定されたオブジェクトプロパティの値を返します。GetLastError()関数を呼び出すと、エラー情報を得ることができます。
ObjectSet()も参 照
パラメータ:
name - オブジェクト名
prop_id - オブジェクトプロパティIDプロパティの一覧からどんな値でも一致します。
プロパティ識別子は、ObjectGet() および ObjectSet() の機能に使用されます。以下の一覧からどんな値でも一致します。
定数 | 値 | 型 | 説明 |
---|---|---|---|
OBJPROP_TIME1 | 0 | datetime | 最初の座標の時刻部分の取得および設定 |
OBJPROP_PRICE1 | 1 | double | 最初の座標の価格部分の取得および設定 |
OBJPROP_TIME2 | 2 | datetime | 2 番目の座標の時刻部分の取得および設定 |
OBJPROP_PRICE2 | 3 | double | 2 番目の座標の価格部分の取得および設定 |
OBJPROP_TIME3 | 4 | datetime | 3 番目の座標の時刻部分の取得および設定 |
OBJPROP_PRICE3 | 5 | double | 3 番目の座標の価格部分の取得および設定 |
OBJPROP_COLOR | 6 | color | オブジェクトの色 の取得および設定 |
OBJPROP_STYLE | 7 | int | オブジェクトの線種の取得および設定 |
OBJPROP_WIDTH | 8 | int | オブジェクトの線の幅の取得および設定(1~5) |
OBJPROP_BACK | 9 | bool | オブジェクトの背景(塗潰し)を表示するフラグの取得および設定 |
OBJPROP_RAY | 10 | bool | OBJ_TREND 等のオブジェクトの線(輪郭)フラグの設定/取得 |
OBJPROP_ELLIPSE | 11 | bool | オブジェクト OBJ_FIBOARC の楕円フラグの取得および設定 |
OBJPROP_SCALE | 12 | double | スケール オブジェクトのプロパティの取得および設定 |
OBJPROP_ANGLE | 13 | double | オブジェクト OBJ_TRENDBYANGLE の角度のプロパティの取得および設定 |
OBJPROP_ARROWCODE | 14 | int | |
OBJPROP_TIMEFRAMES | 15 | int | 時間枠オブジェクトのプロパティの所得および設定 オブジェクトの可視定数の1つまたは複数の値の組み合わせ |
OBJPROP_DEVIATION | 16 | double | オブジェクト OBJ_STDDEVCHANNEL の偏差プロパティの取得および設定 |
OBJPROP_FONTSIZE | 100 | int | オブジェクト OBJ_TEXTやOBJ_LABEL のフォント サイズの取得および設定 |
OBJPROP_CORNER | 101 | int | オブジェクト OBJ_LEVEL のアンカー コーナー プロパティの取得および設定 (0~3) |
OBJPROP_XDISTANCE | 102 | int | オブジェクト OBJ_LEVEL のX軸アンカー距離(ピクセル)プロパティの取得および設定 |
OBJPROP_YDISTANCE | 103 | int | オブジェクト OBJ_LEVEL のY軸アンカー距離(ピクセル)プロパティの取得および設定 |
OBJPROP_FIBOLEVELS | 200 | int | フィボナッチオブジェクトのレベル数の取得および設定 (1~32) |
OBJPROP_LEVELCOLOR | 201 | color | オブジェクトレベルの線の色の取得および設定 |
OBJPROP_LEVELSTYLE | 202 | int | オブジェクト レベルの線の種類の取得および設定 |
OBJPROP_LEVELWIDTH | 203 | int | オブジェクトレベルの線の幅の取得および設定 (1~5) |
OBJPROP_FIRSTLEVEL+n | 210+n | int | フィボナッチ オブジェクトレベルのインデックスnの値の取得および設定 (0~31) |
OBJPROP_ARROWCODEプロパティを使ってオブジェクト一覧を取得します。その後一覧から必要なオブジェクトを検索し、リクエストされたフォームに応じてこれらのデータを入力します。
「japan」指標のためのローソク足チャートのデータ取り込みコードを書きましょう。コードは以下のようになります。
int obj_total=ObjectsTotal(); // オブジェクトの総数を設定する for(int i=0;i<obj_total;i++) // 必要なオブジェクトを取得するには全オブジェクト数をループ { if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE) // コード読み取り
まず、どんな特殊文字を使うか決め、それに応じてプログラムコード内のパラメータを設定します。今回は図の中の100から始まる部分を例として使います。
if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE)>100&& ObjectGet(ObjectName(i),OBJPROP_TIME1)>Time[ExtBars])
ExtBars変数は、チャート上の記号を検索するために、最後の足までのバーの数を定義します。
では、[コメント]・[アラート]画面を表示しましょう。
if (ExtAlert==true){ Alert(Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));} if (ExtComment==true){ Comment("\n","\n","\n", Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));}
コメント行
("\n","\n","\n",
は情報を3行目に表示するためのものです。
必要に応じて、EA内で使用するために、グローバル変数によるデータの受け渡しを設定できます。このように、著作権の侵害や開発者への機能追加オーダー等をすることなく、必要なシグナル情報を得ることができます。
上記の方法を用いた結果は以下の通りです。
外部の情報を表示する作業の結果
まとめ
テクニカル指標のシグナル情報を表示するには、以下のコードを実行します。
//+------------------------------------------------------------------+ //| AlertSignal.mq4 | //| Copyright © 2009, WWW.FIBOOK.RU | //| http://fibook.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, FIBOOK.RU" #property link "http://fibook.ru" #property indicator_chart_window extern int ExtBars=10; // 最後の足までのバーの数 extern int ExtArrow=100; // コード番号 extern bool ExtAlert=true; // アラートの表示・非表示 extern bool ExtComment=true; // コメントの表示・非表示 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (per == Time[0]) return; // 期間中一回修正する per = Time[0]; int cod=0; //---- int obj_total=ObjectsTotal(); for(int i=0;i<obj_total;i++) { if (ObjectGet(ObjectName(i),OBJPROP_ARROWCODE)>ExtArrow&& ObjectGet(ObjectName(i),OBJPROP_TIME1)>Time[ExtBars]) { if (ExtAlert==true){ Alert(Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));} if (ExtComment==true){ Comment("\n","\n","\n", Symbol(),Period()," ", TimeYear(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeDay(ObjectGet(ObjectName(i),OBJPROP_TIME1)),".", TimeMonth(ObjectGet(ObjectName(i),OBJPROP_TIME1)),"; ", TimeHour(ObjectGet(ObjectName(i),OBJPROP_TIME1)),":", TimeMinute(ObjectGet(ObjectName(i),OBJPROP_TIME1))," ", ObjectName(i));} } } //---- return(0); } //+------------------------------------------------------------------+
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1568
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索