引数名 | 初期値 | I/O | 詳細 |
symbol | - | In | インジケータ計算するデータの通貨ペア名。
NULLは現在の通貨ぺアを意味します。 |
timeframe | - | In | 時間軸。
ENUM_TIMEFRAMES列挙の値を指定します。 0は現在の時間軸を意味します。 |
tenkan_sen | - | In | 転換線期間
|
kijun_sen | - | In | 基準線期間
|
senkou_span_b | - | In | 先行スパン期間
|
mode | - | In | インジケータラインインデックス
iIchimoku()関数用のインジケータラインID列挙の値を指定します。 |
shift | - | In | インジケータバッファから取得する値のインデックス。
(現在バーを基準にして、指定した時間軸のバー数分を過去方向へシフト) |
double result = iIchimoku( NULL, // 通貨ペア 0, // 時間軸 9, // 転換線期間 26, // 基準線期間 52, // 先行スパン期間 MODE_TENKANSEN, // ラインインデックス 1 // シフト );
#property strict // strictは絶対に削除しない事 #property indicator_chart_window // カスタムインジケータをチャートウインドウに表示する // インジケータプロパティ設定 #property indicator_buffers 5 // カスタムインジケータのバッファ数 #property indicator_color1 clrRed // インジケータ1の色 #property indicator_type1 DRAW_LINE // インジケータ1の描画タイプ #property indicator_color2 clrOrange // インジケータ2の色 #property indicator_type2 DRAW_LINE // インジケータ2の描画タイプ #property indicator_color3 clrAqua // インジケータ3の色 #property indicator_type3 DRAW_LINE // インジケータ3の描画タイプ #property indicator_color4 clrThistle // インジケータ4の色 #property indicator_type4 DRAW_LINE // インジケータ4の描画タイプ #property indicator_style4 STYLE_DOT // インジケータ4の描画スタイル #property indicator_color5 clrThistle // インジケータ5の色 #property indicator_type5 DRAW_LINE // インジケータ5の描画タイプ #property indicator_style5 STYLE_DOT // インジケータ5の描画スタイル // インジケータ表示用動的配列 double _IndBuffer1[]; // インジケータ1表示用動的配列 double _IndBuffer2[]; // インジケータ2表示用動的配列 double _IndBuffer3[]; // インジケータ3表示用動的配列 double _IndBuffer4[]; // インジケータ4表示用動的配列 double _IndBuffer5[]; // インジケータ5表示用動的配列 // マクロ定義 #define OBJ_HEAD ( __FILE__ + "_" ) // オブジェクトヘッダ名 //+------------------------------------------------------------------+ //| OnInit(初期化)イベント //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer( 0, _IndBuffer1 ); // インジケータ1表示用動的配列をインジケータ1にバインドする SetIndexBuffer( 1, _IndBuffer2 ); // インジケータ2表示用動的配列をインジケータ2にバインドする SetIndexBuffer( 2, _IndBuffer3 ); // インジケータ3表示用動的配列をインジケータ3にバインドする SetIndexBuffer( 3, _IndBuffer4 ); // インジケータ4表示用動的配列をインジケータ4にバインドする SetIndexBuffer( 4, _IndBuffer5 ); // インジケータ5表示用動的配列をインジケータ5にバインドする return( INIT_SUCCEEDED ); // 戻り値:初期化成功 } //+------------------------------------------------------------------+ //| OnDeinit(アンロード)イベント //+------------------------------------------------------------------+ void OnDeinit( const int reason ) { ObjectsDeleteAll( // 追加したオブジェクトを全削除 0, // チャートID OBJ_HEAD // オブジェクト名の接頭辞 ); } //+------------------------------------------------------------------+ //| 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 - prev_calculated; // バー数取得(未計算分) for( int icount = 0 ; icount < end_index ; icount++ ) { // テクニカルインジケータ算出 double result1 = iIchimoku( NULL, // 通貨ペア 0, // 時間軸 9, // 転換線期間 26, // 基準線期間 52, // 先行スパン期間 MODE_TENKANSEN, // ラインインデックス icount // シフト ); double result2 = iIchimoku( NULL, // 通貨ペア 0, // 時間軸 9, // 転換線期間 26, // 基準線期間 52, // 先行スパン期間 MODE_KIJUNSEN, // ラインインデックス icount // シフト ); double result3 = iIchimoku( NULL, // 通貨ペア 0, // 時間軸 9, // 転換線期間 26, // 基準線期間 52, // 先行スパン期間 MODE_CHIKOUSPAN, // ラインインデックス icount // シフト ); double result4 = iIchimoku( NULL, // 通貨ペア 0, // 時間軸 9, // 転換線期間 26, // 基準線期間 52, // 先行スパン期間 MODE_SENKOUSPANA, // ラインインデックス icount // シフト ); double result5 = iIchimoku( NULL, // 通貨ペア 0, // 時間軸 9, // 転換線期間 26, // 基準線期間 52, // 先行スパン期間 MODE_SENKOUSPANB, // ラインインデックス icount // シフト ); _IndBuffer1[icount] = result1; // インジケータ1に算出結果を設定 _IndBuffer2[icount] = result2; // インジケータ2に算出結果を設定 if ( result3 > 0 ) { _IndBuffer3[icount] = result3; // インジケータ3に算出結果を設定 } _IndBuffer4[icount] = result4; // インジケータ4に算出結果を設定 _IndBuffer5[icount] = result5; // インジケータ5に算出結果を設定 DispObj( icount , result4 , result5); // 雲描画 } return( rates_total ); // 戻り値設定:次回OnCalculate関数が呼ばれた時のprev_calculatedの値に渡される } //+------------------------------------------------------------------+ //| オブジェクト描画 //+------------------------------------------------------------------+ void DispObj( int in_index, // インデックス double in_uprate, // 雲上価格 double in_downrate // 雲下価格 ) { double disp_mod = MathMod( (double)in_index , 2 ); if ( disp_mod != 0 ) { return; } // インデックスが範囲外の場合は描画しない if ( in_index < 0 ) { return; } if ( in_index > Bars ) { return; } string obj_name; // オブジェクト名 obj_name = StringFormat( "%sKumoLine%s" , OBJ_HEAD, TimeToStr( Time[in_index] ) ); if ( ObjectFind( obj_name ) < 0 ) { // オブジェクト名重複チェック // 重複している場合 ObjectDelete( obj_name ); // 指定したオブジェクトを削除する } ObjectCreate( // オブジェクト生成 obj_name, // オブジェクト名 OBJ_TREND, // オブジェクトタイプ 0, // ウインドウインデックス Time[in_index], // 1番目の時間のアンカーポイント in_uprate, // 1番目の価格のアンカーポイント Time[in_index], // 2番目の時間のアンカーポイント in_downrate // 2番目の価格のアンカーポイント ); // オブジェクトプロパティ設定 ObjectSetInteger( 0, obj_name, OBJPROP_RAY_RIGHT, false ); // ラインの延長線 ObjectSetInteger( 0, obj_name, OBJPROP_COLOR, clrThistle); // ラインの色設定 ObjectSetInteger( 0, obj_name, OBJPROP_STYLE, STYLE_DOT); // ラインのスタイル設定 ObjectSetInteger( 0, obj_name, OBJPROP_WIDTH, 1); // ラインの幅設定 ObjectSetInteger( 0, obj_name, OBJPROP_BACK, false); // オブジェクトの背景表示設定 ObjectSetInteger( 0, obj_name, OBJPROP_SELECTABLE, false); // オブジェクトの選択可否設定 ObjectSetInteger( 0, obj_name, OBJPROP_SELECTED, false); // オブジェクトの選択状態 ObjectSetInteger( 0, obj_name, OBJPROP_HIDDEN, true); // オブジェクトリスト表示設定 }