#property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Lime extern int BarsToCount = 2; // Fractal calculation period double ExtMapBuffer1[]; double ExtMapBuffer2[]; void CalculateFractals(int shift) { if (shift < BarsToCount) return; double hi = High[shift]; double lo = Low[shift]; bool fractal_high = true; bool fractal_low = true; for (int i = 1; i <= BarsToCount; i++) { if (High[shift - i] > hi) { fractal_high = false; } if (Low[shift - i] < lo) { fractal_low = false; } } if (fractal_high) { ExtMapBuffer1[shift - BarsToCount] = hi; } else { ExtMapBuffer1[shift - BarsToCount] = 0; } if (fractal_low) { ExtMapBuffer2[shift - BarsToCount] = lo; } else { ExtMapBuffer2[shift - BarsToCount] = 0; } } int init() { SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA); SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA); return(0); } int start() { int limit = Bars - BarsToCount - 1; for(int i = limit; i >= 0; i--) { CalculateFractals(i); } return(0); } 请在每段代码后面做注释
时间: 2024-02-14 12:09:04 浏览: 106
以下是每段代码的注释:
```
#property indicator_chart_window // 指标将在图表窗口中显示
#property indicator_buffers 2 // 指标使用两个缓冲区
#property indicator_color1 Red // 缓冲区1的颜色为红色
#property indicator_color2 Lime // 缓冲区2的颜色为绿色
extern int BarsToCount = 2; // Fractal calculation period,计算分型的周期
double ExtMapBuffer1[]; // 缓冲区1
double ExtMapBuffer2[]; // 缓冲区2
void CalculateFractals(int shift)
{
if (shift < BarsToCount) return; // 如果当前周期小于计算周期,不进行计算
double hi = High[shift]; // 当前周期的最高价
double lo = Low[shift]; // 当前周期的最低价
bool fractal_high = true; // 是否是顶部分型
bool fractal_low = true; // 是否是底部分型
for (int i = 1; i <= BarsToCount; i++) // 遍历计算周期内的价格
{
if (High[shift - i] > hi) // 如果前面周期的最高价大于当前周期的最高价
{
fractal_high = false; // 不是顶部分型
}
if (Low[shift - i] < lo) // 如果前面周期的最低价小于当前周期的最低价
{
fractal_low = false; // 不是底部分型
}
}
if (fractal_high) // 如果是顶部分型
{
ExtMapBuffer1[shift - BarsToCount] = hi; // 在缓冲区1中标记为最高价
}
else
{
ExtMapBuffer1[shift - BarsToCount] = 0; // 不是顶部分型,缓冲区1中标记为0
}
if (fractal_low) // 如果是底部分型
{
ExtMapBuffer2[shift - BarsToCount] = lo; // 在缓冲区2中标记为最低价
}
else
{
ExtMapBuffer2[shift - BarsToCount] = 0; // 不是底部分型,缓冲区2中标记为0
}
}
int init()
{
SetIndexBuffer(0, ExtMapBuffer1, INDICATOR_DATA); // 设置缓冲区1的指标数据类型为数据
SetIndexBuffer(1, ExtMapBuffer2, INDICATOR_DATA); // 设置缓冲区2的指标数据类型为数据
return(0); // 初始化成功
}
int start()
{
int limit = Bars - BarsToCount - 1; // 计算需要遍历的周期数
for(int i = limit; i >= 0; i--)
{
CalculateFractals(i); // 遍历周期并计算分型
}
return(0); // 计算成功
}
```
阅读全文