Обсуждение статьи "Переход с MQL4 на MQL5" - страница 11

 

Привет всем,

знаете ли вы, как использовать ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value) в MQL5? Я пытался искать OBJPROP_FIRSTLEVEL, но не нашел его в MQL5

mql4:

void _SetFibLevel(string objname, int level, double value, string description)

//+------------------------------------------------------------------+

{

ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);

ObjectSetFiboDescription(objname,level,description);

}

-----------------------------------

 
vietlh216:

Вы знаете, как использовать ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value) в MQL5? Я пытался искать OBJPROP_FIRSTLEVEL, но не нашел его в MQL5.

mql4:

void _SetFibLevel(string objname, int level, double value, string description)

//+------------------------------------------------------------------+

{

ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value);

ObjectSetFiboDescription(objname,level,description);

}

-----------------------------------


Готовое решение вы можете прочитать в моем блоге.

 
Stanislav Korotky:

Вы можете прочитать мой блогпост о готовом решении.


Очень полезно, спасибо :)

 
Stanislav Korotky:

Вы можете прочитать мой пост в блоге для готового решения.


Спасибо Станислав Короткий за ваше решение, но я не очень хорошо разбираюсь в MQL5 и до сих пор не знаю, как преобразовать OBJPROP_FIRSTLEVEL для использования в MQL5. Я не нахожу такого же свойства объекта для преобразования

в mql4:

OBJPROP_FIRSTLEVEL+n

210+n

int

Целочисленное значение для установки/получения значения уровня объекта Фибоначчи с индексом n. Индекс n может быть от 0 (количество уровней -1), но не больше 31

но я не нашел этого в MQL5

например: MQL4 : ObjectSetFiboDescription(objname,level,description);->MQL5: ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description);

MQL4: ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value); -> MQL5: ???

 
vietlh216:

Спасибо Станислав Короткий за ваше решение, но я не очень хорошо разбираюсь в MQL5 и до сих пор не знаю, как преобразовать OBJPROP_FIRSTLEVEL для использования в MQL5. Я не нахожу такого же свойства объекта, чтобы преобразовать его

в mql4:

OBJPROP_FIRSTLEVEL+n

210+n

int

Целочисленное значение для установки/получения значения уровня объекта Фибоначчи с индексом n. Индекс n может быть от 0 (количество уровней -1), но не больше 31

но я не нашел этого в MQL5

например: MQL4 : ObjectSetFiboDescription(objname,level,description);->MQL5: ObjectSetString(0,objname,OBJPROP_LEVELTEXT,level,description);

MQL4: ObjectSet(objname,OBJPROP_FIRSTLEVEL+level,value); -> MQL5: ???


а, я нашел

ObjectSetDouble(0,objname,OBJPROP_LEVELVALUE,level,value);

^^

 
vietlh216:

а, я нашел это

ObjectSetDouble(0,objname,OBJPROP_LEVELVALUE,level,value);

^^


Вы можете попробовать следующее дополнение к моему include:

class OBJPROP_DOUBLE_BROKER_EXTENDED: public OBJPROP_DOUBLE_BROKER
{
  public:
    OBJPROP_DOUBLE_BROKER_EXTENDED(const ENUM_OBJECT_PROPERTY_DOUBLE property, const int modifier): OBJPROP_DOUBLE_BROKER(property, modifier)
    {
    }
    
    OBJPROP_DOUBLE_BROKER_EXTENDED *operator+(const int add)
    {
      i = add;
      return &this;
    }
};

OBJPROP_DOUBLE_BROKER_EXTENDED OBJPROP_FIRSTLEVEL(OBJPROP_LEVELVALUE, 0);

После этого ваш исходный MQL4-код должен работать как есть.

 
Stanislav Korotky:

Вы можете попробовать следующее дополнение к моему include:

После этого ваш первоначальный MQL4-код должен работать как есть.


Теперь я понял, как это работает, большое спасибо Станиславу Короцкому.

 

Я бы предложил заменить

string StringConcatenate(..);

на

string StringFormat("",..);

Обе функции возвращают строку, что облегчает замену при определенных условиях!

 
Stanislav Korotky:

Вы можете попробовать следующее дополнение к моему include:

После этого ваш исходный MQL4-код должен работать как есть.

Я добавил класс OBJPROP_DOUBLE_BROKER_EXTENDED в ваше включение ind4to5, но, похоже, он не работает, так как в последней сборке Metaeditor 1958 вызов ObjectSetDouble(chart_ID,name,OBJPROP_PRICE1,price1) возвращает ошибку компиляции 'ObjectSetDouble' - ни одна из перегрузок не может быть применена к вызову функции. Есть идеи?

 

Я сам догадался, что ObjectSetDouble не был включен в ind4to5. Я добавил следующий код в mqh, и это решило проблему.

bool ObjectSetDouble(long chart_id, const string name, const OBJPROP_DOUBLE_BROKER &property, const double value)
{
  return ObjectSetDouble(chart_id, name, property.p, property.i, value);
}