Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 12

 

Уважаемые разработчики!

Прошу обратить внимание на следующий момент.

openLong - bool переменная

minStoch - double массив

А на такую вот строчку:

if(onlyLocalTrend) openLong=openLong && minStoch[0,2];//регрессия вверх

компилятор никак не реагирует: ни предупреждений, ни ошибок.

Билд 625, Win 7 ultimate, UAC отключен, МЕ 914.

 

Не могу понять или баг или я что то не так делаю
класс

#property strict
class vr_trade
  {
private:
public:
   bool              func(int raz, int dwa);
                     vr_trade();                    ~vr_trade();
  };
//+------------------------------------------------------------------+
vr_trade:: vr_trade() {  }
//+------------------------------------------------------------------+
vr_trade::~vr_trade() {  }
//+------------------------------------------------------------------+
bool  vr_trade::   func(int raz, int dwa);
  {
   if( raz>dwa )
      return true;
  }
//+------------------------------------------------------------------+

Код советника

#property strict
#include  "vr_trade.mqh"
//+------------------------------------------------------------------+
vr_trade od.func(2,1); < --- на конструктор метода ругается 
void OnTick()
  {
  }

Пытаюсь сделать конструктор для метода, но не получается, примеры делал по статье https://www.mql5.com/ru/articles/351

Но компилятор безжалостно ругается, как сделать конструктор отдельного метода класса ????

 
wlad:
WinXP?
Нет, Win7.
 
VOLDEMAR:


Но компилятор безжалостно ругается, как сделать конструктор отдельного метода класса ????


"конструктор метода класса" это как ?

а вообще, как вариант

vr_trade *T; 

void OnInit(){
T = new vr_trade();
}

void OnTick(){
 bool res = T.func(2,1);
} 

void OnDeinit(){
 if (T != NULL) delete T;
} 

 
keekkenen:


"конструктор метода класса" это как ?

а вообще, как вариант


Обьясните это

Использование нескольких экземпляров класса

Один и тот же класс, как было написано в предыдущем разделе, в зависимости от устанавливаемых при инициализации параметров может выполнять различные действия. Если заранее известно, для каких целей будет использоваться класс, можно обойтись без необходимости его переинициализации. Для этого следует загрузить несколько экземпляров класса с различными параметрами.

Например, заранее известно, что в процессе работы эксперта в некоторых случаях потребуется удалять ордера типа BuyStop и BuyLimit, а в других случаях - SellStop и SellLimit. В таком случае можно загрузить два экземпляра класса.

Для удаления BuyStop и BuyLimit:

COrderDelete DeleteBuy(false,true,false,true,false,false,false);

Для удаления SellStop и SellLimit:

COrderDelete DeleteSell(false,false,true,false,true,false,false);

Теперь, когда надо удалить отложенные ордера Buy, используем один экземпляр класса:

DeleteBuy.Delete();

Когда надо удалить отложенные ордера Sell - другой:

DeleteSell.Delete();

 
wlad:

писали как то - при миграции данных файлы буду скопированы в новые директории и ничего не удаляется

сейчас в 625 удаляется целиком папка /experts

издеваетесь?


Я как предчувствовал возможное. Сразу по выходу 600 билда переименовал папку experts в _experts_ во всех терминалах.
 
VOLDEMAR:


Обьясните это

Использование нескольких экземпляров класса

Один и тот же класс, как было написано в предыдущем разделе, в зависимости от устанавливаемых при инициализации параметров может выполнять различные действия. Если заранее известно, для каких целей будет использоваться класс, можно обойтись без необходимости его переинициализации. Для этого следует загрузить несколько экземпляров класса с различными параметрами.

Например, заранее известно, что в процессе работы эксперта в некоторых случаях потребуется удалять ордера типа BuyStop и BuyLimit, а в других случаях - SellStop и SellLimit. В таком случае можно загрузить два экземпляра класса.

Для удаления BuyStop и BuyLimit:

COrderDelete DeleteBuy(false,true,false,true,false,false,false);

Для удаления SellStop и SellLimit:

COrderDelete DeleteSell(false,false,true,false,true,false,false);

Теперь, когда надо удалить отложенные ордера Buy, используем один экземпляр класса:

DeleteBuy.Delete();

Когда надо удалить отложенные ордера Sell - другой:

DeleteSell.Delete();

Здесь DeleteBuy и DeleteSell - переменные типа COrderDelete, а не методы.

Идея - в следующем:

#property strict
class vr_trade
  {
private:
                     bool m_always_true;
public:
   bool              func(int raz, int dwa);
                     vr_trade(bool always_true);                    ~vr_trade();
  };
//+------------------------------------------------------------------+
vr_trade:: vr_trade(bool always_true): m_always_true(always_true) {  }
//+------------------------------------------------------------------+
vr_trade::~vr_trade() {  }
//+------------------------------------------------------------------+
bool  vr_trade::   func(int raz, int dwa)
  {
   if (m_always_true)
      return true;

   if( raz>dwa )
      return true;

   return false;
  }

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

И затем создаются две переменные-экземпляра класса, с разной инициализацией:

#property strict
#include  "vr_trade.mqh"
//+------------------------------------------------------------------+

vr_trade od1(false);
vr_trade od2(true);

void OnTick()
  {
   Print("od1.func(1, 2) = ", od1.func(1, 2), ", od1.func(2, 1) = ", od1.func(2, 1));
   Print("od2.func(1, 2) = ", od2.func(1, 2), ", od2.func(2, 1) = ", od2.func(2, 1));
  }
;

При прогоне получается примерно следующее:

od1.func(1, 2) = false, od1.func(2, 1) = true
od2.func(1, 2) = true, od2.func(2, 1) = true

Видно, что объекты-переменные-экземпляры класса od1 и od2 ведут себя по-разному.

В той статье сформулировано не точно.

 

да, написано по уродски..

в нормальном случае можно написать общую функцию/метод с передаваемыми параметрами - что передашь, то и будет удаляться, ну или, наоборот (тут кому как нравится), функции, которые будут удалять только определенный тип ордера.. а то что приведено - 100500 true|false это фигня, в которой через уже месяц после написания сам не разберешься..

 
wlad:

писали как то - при миграции данных файлы буду скопированы в новые директории и ничего не удаляется

сейчас в 625 удаляется целиком папка /experts

издеваетесь?

получил ответ с сервисдеска,

может кому понадобится:

от 4 файлов в папке удаление не происходит

 

Забавно, пришло уведомление о переводе, который уже несколько лет как опубликован:

Что-то меняли в уведомлениях?

А они, кстати, когда-нибудь работать начнут (я про этот, четверочный, форум)?

Причина обращения: