Ошибки, баги, вопросы - страница 1541

 
Karputov Vladimir:
Вам нужен аналог правого клика по графику и "Обновить" для индикатора?

Да именно так. Чтобы мог рассчитаться индикатор, но не обращаться к иниту.  ChartRedraw()  это не выполняет.

Вызов в  OnChartEvent 

 
Владимир:

Да именно так. Чтобы мог рассчитаться индикатор, но не обращаться к иниту.  ChartRedraw()  это не выполняет.

Вызов в  OnChartEvent 

Сделайте весь цикл функцией, и вызывайте с нужными параметрами откуда хотите.
[Удален]  
Владимир:

Да именно так. Чтобы мог рассчитаться индикатор, но не обращаться к иниту.  ChartRedraw()  это не выполняет.

Вызов в  OnChartEvent 

Для четверки

  static int FullOnCalculate( void )
  {
    long volume[];
    int spread[];

    ArraySetAsSeries(volume, TRUE);
    ArraySetAsSeries(spread, TRUE);

    const int Size = MathMin(CopyTickVolume(Symbol(), Period(), 0, Bars, volume),
                             CopySpread(Symbol(), Period(), 0, Bars, spread));

    return(OnCalculate(Size, 0, Time, Open, High, Low, Close, Volume, volume, spread));
  }

Для пятерки аналогично.

[Удален]  

Почему этот класс компилируется под MT4, но не компилируется под MT5?

class CHARTOBJECT
{
public:
  template <typename T>
#ifdef __MQL4__
  void SetProperty( const int id, const T Value, const int Modifier = 0 ) const
#else #endif
#ifdef __MQL5__
  void SetProperty( const ENUM_OBJECT_PROPERTY_STRING id, const T Value, const int Modifier = 0 ) const
#endif      
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  } 
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};
 
А там #else или #endif не лишние случаем?
[Удален]  
Комбинатор:
А там #else или #endif не лишние случаем?

В строке #else #endif если убираю #endif, то не компилируется. Почему - тоже не знаю.

Но даже если убрать всю условную компиляцию, под MT5 не будет компилироваться, а под MT4 - будет. 

[Удален]  
Alexey Kozitsyn:
Что такое мультитерминал?)
Это версия терминала МТ4, один экземпляр которого якобы может одновременно работать с несколькими счетами. Установочный файл fcmt4multisetup_ru.exe я скачал на сайте FXCluba. Мб, это вообше их разработка, и я обращаюсь не по адресу?
[Удален]  
comp:

Почему этот класс компилируется под MT4, но не компилируется под MT5?

Если в этом классе удалить определение оператора, то под MT5 начинает компилироваться. Похоже, это баг компилятора пятерки.
 
comp:
Если в этом классе удалить определение оператора, то под MT5 начинает компилироваться. Похоже, это баг компилятора пятерки.

Попробуйте заменить

__MQL5__

на

__MQL5BUILD__

[Удален]  
coderex:

Попробуйте заменить

__MQL5__

на

__MQL5BUILD__

Чтобы не смущала условная компиляция, убрал ее

class CHARTOBJECT
{
public:
  template <typename T>
// для MT4 надо заменить ENUM_OBJECT_PROPERTY_STRING на int  
  void SetProperty( const ENUM_OBJECT_PROPERTY_STRING id, const T Value, const int Modifier = 0 ) const
  {
    const string sType = typename(T);

    if (sType == "double")
      ::ObjectSetDouble(0, "", id, Modifier, (double)Value);
    else if (sType == "string")
      ::ObjectSetString(0, "", id, Modifier, (string)Value);
    else
      ::ObjectSetInteger(0, "", id, Modifier, (long)Value);

    return;
  }
  
  virtual void operator =( const string Value ) const
  {
    this.SetProperty(OBJPROP_TEXT, Value);

    return;
  }
};

Пятерка не может скомпилировать, четверка - OK.