// 获取指定周期的K线数据
iOpen(Symbol(), TimeFrame, Shift) // 开盘价
iHigh(Symbol(), TimeFrame, Shift) // 最高价
iLow(Symbol(), TimeFrame, Shift) // 最低价
iClose(Symbol(), TimeFrame, Shift) // 收盘价
// 输入:4小时图数据(假设1天=6根4小时K线)
int barsPerDay = 6;
int startShift = 0; // 从当前K线开始向前取
double newOpen = iOpen(NULL, PERIOD_H4, startShift + barsPerDay - 1);
double newHigh = 0;
double newLow = 1000000; // 初始极大值
double newClose = iClose(NULL, PERIOD_H4, startShift);
// 遍历一天内的6根4小时K线
for(int i = 0; i < barsPerDay; i++) {
int shift = startShift + i;
newHigh = MathMax(newHigh, iHigh(NULL, PERIOD_H4, shift));
newLow = MathMin(newLow, iLow(NULL, PERIOD_H4, shift));
}
// 输出结果
Print("日线竹节图: O=", newOpen, " H=", newHigh, " L=", newLow, " C=", newClose);
void AggregateBars(int targetPeriod, int sourcePeriod) {
int sourceBars = targetPeriod / sourcePeriod;
for(int day = 0; day < 10; day++) { // 处理最近10个周期
int startShift = day * sourceBars;
double aggOpen = iOpen(NULL, sourcePeriod, startShift + sourceBars - 1);
double aggHigh = 0;
double aggLow = 1000000;
double aggClose = iClose(NULL, sourcePeriod, startShift);
for(int i = 0; i < sourceBars; i++) {
int shift = startShift + i;
aggHigh = MathMax(aggHigh, iHigh(NULL, sourcePeriod, shift));
aggLow = MathMin(aggLow, iLow(NULL, sourcePeriod, shift));
}
Print(TimeToStr(iTime(NULL, sourcePeriod, startShift)),
" > O:", aggOpen, " H:", aggHigh, " L:", aggLow, " C:", aggClose);
}
}
|