スポンサーリンク
検索
カスタム検索
MQL4リファレンスツリー
iIchimoku


iIchimoku


一目均衡表インジケータを計算し、その値を返します。


関数書式:
double  iIchimoku(
   string       symbol,         // 通貨ペア
   int          timeframe,      // 時間軸
   int          tenkan_sen,     // 転換線期間
   int          kijun_sen,      // 基準線期間
   int          senkou_span_b,  // 先行スパン期間
   int          mode,           // ラインインデックス
   int          shift           // シフト
   );



■引数
引数名 初期値 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
#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);        // オブジェクトリスト表示設定
}




スポンサーリンク

スポンサーリンク
スポンサーリンク


Copyright ©2015 MT4でEA自作しちゃお〜 All Rights Reserved.


Top

inserted by FC2 system