1评论

0收藏

升跌明了指标,更好把握趋势转折点。

avatar linjiangxian | 125 人阅读 | 1 人评论 | 2025-04-12

升跌明了指标,更好把握趋势转折点。
""
还没有人打赏,支持一下

评论|共 1 个

华兰先生

发表于 昨天 19:05 | 显示全部楼层

本帖最后由 华兰先生 于 2025-4-12 19:49 编辑

原代码存在莫名闪退。咱给修改了一下。

#property indicator_chart_window
#property indicator_buffers 5  // 修正缓冲区声明为5个(原值为2)
#property indicator_color1 Red
#property indicator_color2 Lime

double g_ibuf_76[];
double g_ibuf_80[];
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
extern int Pe = 5;

int init() {
   IndicatorBuffers(5);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexBuffer(0, g_ibuf_76);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexBuffer(1, g_ibuf_80);
   SetIndexBuffer(2, g_ibuf_84);  // 非图形缓冲区需声明为5个
   SetIndexBuffer(3, g_ibuf_88);
   SetIndexBuffer(4, g_ibuf_92);
   return (0);
}

int start() {
   int li_4 = 0;
   int li_8 = IndicatorCounted();
   if (li_8 < 0) return (-1);
   if (li_8 > 0) li_8--;
   int li_0 = Bars - li_8;
   
   // 增加数组边界保护
   int array_size = MathMin(Bars, ArraySize(g_ibuf_84));
   for (li_4 = 0; li_4 < li_0 && li_4 < array_size; li_4++) {
      g_ibuf_84[li_4] = iMA(NULL, 0, Pe, 0, MODE_EMA, PRICE_CLOSE, li_4);
   }
   
   array_size = MathMin(Bars, ArraySize(g_ibuf_88));
   for (li_4 = 0; li_4 < li_0 && li_4 < array_size; li_4++) {
      g_ibuf_88[li_4] = iMAOnArray(g_ibuf_84, array_size, Pe, 0, MODE_EMA, li_4);
   }
   
   array_size = MathMin(Bars, ArraySize(g_ibuf_92));
   for (li_4 = 0; li_4 < li_0 && li_4 < array_size; li_4++) {
      g_ibuf_92[li_4] = iMAOnArray(g_ibuf_88, array_size, Pe, 0, MODE_EMA, li_4);
   }
   
   // 防止越界访问:限制li_4+1的范围
   for (li_4 = 0; li_4 < li_0 - 1; li_4++) {  // 修改循环终止条件
      g_ibuf_76[li_4] = 6.0 * MathMax(g_ibuf_92[li_4 + 1], g_ibuf_92[li_4]) - 5.0 * g_ibuf_92[li_4];
      g_ibuf_80[li_4] = 2.0 * g_ibuf_92[li_4] - g_ibuf_76[li_4];
   }
   return (0);
}

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则