作業内容 | 詳細 |
目的 | 日足の高値ラインを表示するインジケータを作成する |
作業内容 | 詳細 |
目的 | 日足の高値ラインを表示するインジケータを作成する |
状況 |
・日足の高値ラインと時間軸を指定しているので、どんな時間軸チャートでも日足のデータを取得する必要がある
・時系列配列から取得出来るのは、始値・高値・安値・終値・オープン時間・tick出来高。 ・時系列配列から値を取得するにはシフト(インデックス)を指定する必要がある。 ・現在表示されているチャートのインデックスに対応した日足のインデックスはどれか? |
作業内容 | 詳細 |
目的 | 日足の高値ラインを表示するインジケータを作成する |
状況 |
・日足の高値ラインと時間軸を指定しているので、どんな時間軸チャートでも日足のデータを取得する必要がある
・時系列配列から取得出来るのは、始値・高値・安値・終値・オープン時間・tick出来高。 ・時系列配列から値を取得するにはシフト(インデックス)を指定する必要がある。 ・現在表示されているチャートのインデックスに対応した日足のインデックスはどれか? |
分析 |
・現在チャートのN番目のインデックスは、日足チャートの何番目のインデックスに対応するか?
・時間を用いて対応するインデックスを判断する ・現在チャートのN番目の日付時間を基準にして、日足のインデックスを全てチェックして対応する日付時間がヒットしたインデックスを取得する (iBarShift()関数で取得可能) ・取得した日足インデックスを使って、対応する日足の高値を取得する |
//+------------------------------------------------------------------+ //| Test_GetTimeSeries_OtherSymbol.mq4 | //| yuki | //| https://yukifx.web.fc2.com/ | //+------------------------------------------------------------------+ #property copyright "yuki" #property link "https://yukifx.web.fc2.com/" #property version "1.00" #property strict // strictは絶対に削除しない事 //+------------------------------------------------------------------+ //| スクリプトプログラムスタート //+------------------------------------------------------------------+ void OnStart() { int get_index = -1; // 取得インデックス datetime check_time; // 現在チャートの時間 check_time = Time[20]; // 現在チャートのオープン時間を設定 get_index = iBarShift( // 指定したオープン時間のバーシフト取得 Symbol(), // 通貨ペア PERIOD_D1, // 時間軸 check_time, // 日時 false // 検索モード(曖昧検索) ); if ( get_index >= 0 ) { // インデックス取得出来た場合 datetime get_time; get_time = iTime( // オープン時間を取得 Symbol(), // 通貨ペア PERIOD_D1, // 時間軸 get_index // シフト ); printf( "チェックする時間 = %s" , TimeToStr( check_time ) ); printf( "取得インデックス = %d" , get_index ); printf( "日足の時間 = %s" , TimeToStr( get_time ) ); } }
Test_iBarShift USDJPY,H1: チェックする時間 = 2020.11.30 20:00 Test_iBarShift USDJPY,H1: 取得インデックス = 1 Test_iBarShift USDJPY,H1: 日足の時間 = 2020.11.30 00:00
//+------------------------------------------------------------------+ //| TestTS_DayHigh.mq4 | //| yuki | //| https://yukifx.web.fc2.com/ | //+------------------------------------------------------------------+ #property copyright "yuki" #property link "https://yukifx.web.fc2.com/" #property version "1.00" #property strict // strictは絶対に削除しない事 #property indicator_chart_window // カスタムインジケータをチャートウインドウに表示する // インジケータプロパティ設定 #property indicator_buffers 1 // カスタムインジケータのバッファ数 #property indicator_color1 clrWhite // インジケータ1の色 #property indicator_width1 1 // インジケータ1の太さ // インジケータ表示用動的配列 double _IndBuffer1[]; // インジケータ1表示用動的配列 //+------------------------------------------------------------------+ //| OnInit(初期化)イベント //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer( 0, _IndBuffer1 ); // インジケータ1表示用動的配列をインジケータ1にバインドする return( INIT_SUCCEEDED ); // 戻り値:初期化成功 } //+------------------------------------------------------------------+ //| OnCalculate(tick受信)イベント //| カスタムインジケータ専用のイベント関数 //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // 入力された時系列のバー数 const int prev_calculated, // 計算済み(前回呼び出し時)のバー数 const datetime &time[], // 時間 const double &open[], // 始値 const double &high[], // 高値 const double &low[], // 安値 const double &close[], // 終値 const long &tick_volume[], // Tick出来高 const long &volume[], // Real出来高 const int &spread[]) // スプレッド { int end_index = Bars; // バー数取得 for( int icount = 0 ; icount < end_index ; icount++ ) { int get_index = -1; // 取得インデックス datetime check_time; // 現在チャートの時間 check_time = Time[icount]; // 現在チャートのオープン時間を設定 get_index = iBarShift( // 指定したオープン時間のバーシフト取得 Symbol(), // 通貨ペア PERIOD_D1, // 時間軸 check_time, // 日時 false // 検索モード(曖昧検索) ); if ( get_index >= 0 ) { // インデックス取得出来た場合 double get_high; get_high = iHigh( // 高値を取得 Symbol(), // 通貨ペア PERIOD_D1, // 時間軸 get_index // シフト ); _IndBuffer1[icount] = get_high; } } return( rates_total ); // 戻り値設定:次回OnCalculate関数が呼ばれた時のprev_calculatedの値に渡される }