// 日本時間表示インジケータ Build 4
#property indicator_chart_window

// サーバ時刻とのずれ
extern int TimeZone = +9;
// ▲の表示位置。この値を大きくすると上へ、小さくすると下へ移動
extern double ArrowPosition = 0.025;
// 日時の表示位置。この値を大きくすると上へ、小さくすると下へ移動
extern double TimePosition = 0.02;
// チャートをズームイン/ズームアウトしている場合は、この値を8, 16, 32, 64のどれかに変更
extern int BarsPerTime = 32; 

extern string Font = "MS UI Gothic";
extern int ArrowFontSize = 4;
extern int TimeFontSize = 8;
extern color FontColor = White;

int m = 0;

int init() {
    return(0);
}

int deinit() {
    DeleteTimes();
    return(0);
}

int start() {
    DeleteTimes();
    int n = 0;
    for (int i = WindowFirstVisibleBar() - WindowBarsPerChart(); i < WindowFirstVisibleBar(); i++) {
        if (((i - WindowFirstVisibleBar()) % BarsPerTime) == 0) {
            DrawTime(n, i);
            n++;
        }
    }
    m = n;
    return(0);
}

void DeleteTimes() {
    for (int i = 0; i < m; i++) {
      ObjectDelete("Arrow" + i);
      ObjectDelete("Time" + i);
    }
}

void DrawTime(int n, int i) {
    double min = WindowPriceMin();
    double max = WindowPriceMax();
    
    ObjectCreate("Arrow" + n, OBJ_TEXT, 0, Time[i], min + (max - min) * ArrowPosition);
    ObjectSetText("Arrow" + n, "▲", ArrowFontSize, Font, FontColor);
    
    ObjectCreate("Time" + n, OBJ_TEXT, 0, Time[i], min + (max - min) * TimePosition);
    ObjectSetText("Time" + n, Format(Time[i]), TimeFontSize, Font, FontColor);
}

string Format(datetime time) {
    time = time + TimeZone * 3600;
    int month = TimeMonth(time);
    int day = TimeDay(time);
    return(month + "/" + day + " " + TimeToStr(time, TIME_MINUTES));
}