任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 638

 

我的问题是给一个新手的。

我最近发现MetaEditor在终端打不开,而且 "改变 "命令在EA和指标中不起作用.............,请帮助我解决这个问题。请帮助我找到它。

 
gnawingmarket:

我的问题是给一个新手的。

我最近发现MetaEditor在终端打不开,而且 "改变 "命令在Expert Advisors和指标中不起作用.............,请帮助我解决这个问题。谢谢你。


我试着回答这个问题。

没有可能再纠正旧的代码。

 
但你有一个王子加冕了。
 
tara:
至少你有一个王子可以加冕。


你什么都知道!今天我抓不住是谁把我的管理员,我也没有得到密码,我也没有想到要问!我明天就去买!你在做什么了?

感谢塔拉的参与!我让街区的邻居把所有东西都还原给我了!计算机科学专家!

 
Top2n:

是的,我明白,有很多愚蠢的问题。说实话,我已经尝试了一整天,但没有结果。

我正在把当前条形上的几条趋势线的价格值写进一个数组。

如果没有对象,我怎样才能从数组中删除一个值?

artmedia70:

如果我们在每个tick上运行趋势线价格的值,初始化数组,并在找到下一个必要的趋势线价格时增加其维度,那么就不需要从数组中删除被删除的趋势线的值。这个数组将是动态的,每次在每个刻度上,它将只包含现有对象的值。


?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
ArrayResize(array,ObjectsTotal(OBJ_TREND));

 for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) 

 {
 string DWnem=ObjectName(i); 
  string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
  string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell")   //первый массив цен на селл
  if(DWnem=DW)//если имя равно "downtrendline"
   if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
   array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy")   //второй массивцен на бай
 if(DWnem=DW2)
 if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
  array[i]=ObjectGetValueByShift(DWnem,1);

  }   return;
   }

	          
 

我试图在一个单独的窗口中从收盘价 中制作一个围绕0的震荡器,但我做不到。也许有人已经做了,你能告诉我公式吗?

例如,我们有Close[i]价格,我需要这个价格像MACD/CCI那样在一个单独的窗口中高于/低于零,但我尽量尝试,如果没有MA等附加值,我无法做到这一点:现在,如果我减去iClose-iMA,我得到类似的东西,但也许有没有平滑的变种?

或者在0.0...1.0的范围内,如果没有办法绕过零...

 
Top2n:

下面这个的搜索方法略有不同。

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))) {
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}

/******************************************************************************/
void FillAndPrint(double &array[], const bool buy) {
  if (MassTrendNumber(array, buy)) {
    const int limit = ArraySize(array);

    Print("Найдено объектов: ", limit);

    for (int i = 0; i < limit; i++) {
      Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
    }
  } else {
    Print("Чёрт!");
  }
}

/******************************************************************************/
void OnStart() {
  double masS[];
  double masB[];

  Print("Sell:");
  FillAndPrint(masS, false);

  Print("Buy:");
  FillAndPrint(masB, true);
}

在图中添加两条白色的趋势线,并加上相应的名称,就可以了。

04:14:34 Script 2 EURUSDm,H1: loaded successfully
04:14:34 2 EURUSDm,H1: initialized
04:14:34 2 EURUSDm,H1: Sell:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.36268
04:14:34 2 EURUSDm,H1: Buy:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.35668
04:14:34 2 EURUSDm,H1: uninit reason 0
04:14:34 Script 2 EURUSDm,H1: removed

不要写一公里长的函数,把程序分成短的 "短语"--"砖块"。小的 "砖头 "制造更大的 "砖头",而大的 "砖头 "制造更大的 "砖头"。你看,这是有可能的。

仅仅通过参数将所有数据传递给函数。

如果被调用的函数失败,一定要处理好错误,如果错误被忽略,进一步的行动将产生严重的后果。绝大多数程序崩溃(一般来说)的发生是因为错误处理没有以任何方式编程。

例如,如果调用ArrayResize()来扩大数组的大小,返回了一个错误,而程序员没有检查,并引用了所谓的扩大的数组,就会发生一个错误,导致MQL4程序后来停止工作。例如,专家顾问通过留下未结头寸来停止交易。这不是很好吗?

尝试在函数MassTrendNumber()的循环之前插入 "array[0] = 0;",并确保脚本在数组超限错误后结束。

 
evillive:

我试图在一个单独的窗口中从收盘价中制作一个围绕0的震荡器,但我做不到。也许有人已经做了,你能告诉我公式吗?

例如,我们有Close[i]价格,我需要这个价格像MACD/CCI那样在一个单独的窗口中高于/低于零,但无论我如何努力,如果没有MA这样的附加值,我无法做到这一点:现在,如果我减去iClose-iMA,我得到类似的东西,但也许有不用平滑的变种?

或者在0.0...1.0的范围内,如果没有办法绕过零...


https://www.mql5.com/ru/code/9340
 

哦,这就对了。在这个世界上,没有什么是新的))))。
 
simpleton:

下面的搜索方法略有不同。

在图表上添加两条白色的趋势线,并加上相应的名称,你就可以了。

不要写一公里长的函数,把程序分成短的 "短语"--"砖块"。小的 "砖头 "制造更大的,大的制造更大的。你看,这是有可能的。

只通过参数向函数传递所有数据。

如果被调用的函数失败,一定要处理好错误,如果错误被忽略,后续的行动将产生严重的后果。绝大多数程序崩溃(一般来说)的发生是因为错误处理没有以任何方式编程。

例如,如果调用ArrayResize()来扩大数组的大小,返回了一个错误,而程序员没有检查,并引用了所谓的扩大的数组,就会发生一个错误,导致MQL4程序后来停止工作。例如,专家顾问通过留下未结头寸来停止交易。这不是很好吗?

尝试在MassTrendNumber()的循环之前插入 "array[0] = 0;",并确保脚本在数组超限错误后终止。


是的,非常感谢你,你简直是无话可说,多么有帮助,如此清晰!你是如何做到的?真棒!!!。