linjiangxian 发表于 2025-4-12 17:01:16

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

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

华兰先生 发表于 2025-4-12 19:05:25

本帖最后由 华兰先生 于 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 = 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 = 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 = 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 = 6.0 * MathMax(g_ibuf_92, g_ibuf_92) - 5.0 * g_ibuf_92;
      g_ibuf_80 = 2.0 * g_ibuf_92 - g_ibuf_76;
   }
   return (0);
}

zhang5306 发表于 2025-4-13 09:43:49

华兰先生 发表于 2025-4-12 19:05
原代码存在莫名闪退。咱给修改了一下。

#property indicator_chart_window


厉害了我的大哥

cch90 发表于 2025-4-13 17:11:25

是指标还是EA?
页: [1]
查看完整版本: 升跌明了指标,更好把握趋势转折点。