Трудности перевода :) - страница 4

 
Alexey Volchanskiy:

Всегда пожалуйста. Но я же написал, что ленивый котик))

Именно по этой причине я не дергаю каждый раз черта за яйца, а храню данные об ордерах в классе. 

Чисто по вопросу: вероятно, вы хотели отсмотреть позиции, а не ордера? М... я бы все сделал по другому, но прямая трансляция как-то так

У меня в шаблоне этих функций штук 40 на все случаи жизни. Отдельно на ордера, и отдельно на позиции. Ну очень быстро с ними работать, используем те, которые нужны в данном советнике, плюс ко всему, за пару минут можно расширить или переделать алгоритм советника. Вот поэтому и пользуюсь функциями внутри одного файла, и не нужно ничего подключать дополнительно.

Да, хотел отсмотреть позиции, и если можно, то ордера тоже, это будет супер)

Алексей, если будет время и желание после ночной прогулки, напишите пожалуйста, посмотрю как это должно выглядеть, и по аналогии перепишу все что есть.

Спасибо! 

//================== 

P.S. пока писал, Вы дали ответ)

(с)  почему надо вставлять всякое г***о после вставки кода!!!! 

Это чтоб знать какая функция, типа комментария, их много

Спасибо за ответ, буду дальше копать ))) 

 
Alexey Volchanskiy:

Всегда пожалуйста. Но я же написал, что ленивый котик))

Именно по этой причине я не дергаю каждый раз черта за яйца, а храню данные об ордерах в классе. 

Чисто по вопросу: вероятно, вы хотели отсмотреть позиции, а не ордера? М... я бы все сделал по другому, но прямая трансляция как-то так

тупой сайт опять все грохнул, зая**ло, пойду на красный, там все четко

 ****************** тупойййййййййййййййййййййййййййй сайттттттттттттттттттттттттт!!!!!!!!!!!!!!

почему надо вставлять всякое г***о после вставки кода!!!! 

Нет Алексей, это не совсем правильно. PositionSelect(Symbol()) будет выбирать одну и ту-же позицию. Это для нетинга подойдёт.

Приведу тоже кусок с непарными скобками, тут все понимающие

    for(i = 0; i < PositionsTotal(); i++)
     {
      if(PositionGetTicket(i) > 0 && PositionGetString(POSITION_SYMBOL) == Symbol() && PositionGetInteger(POSITION_MAGIC) == magic)
       {
        if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY || PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
         {
 
Vitaly Muzichenko:

Да, хотел отсмотреть позиции, и если можно, то ордера тоже, это будет супер)


Для отложенных ордеров будет почти то-же самое

    for(i = 0; i < OrdersTotal(); i++)
     {
      if(OrderGetTicket(i) > 0 && OrderGetString(POSITION_SYMBOL) == Symbol() && OrderGetInteger(POSITION_MAGIC) == magic)
       {
        if(OrderGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY_STOP || OrderGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL_STOP) // или другие типы
         {
 
Alexey Viktorov:

Для отложенных ордеров будет почти то-же самое

Огромная благодарность пятокодописалелям) за помощь!
 
Vitaly Muzichenko:

Алексей, к Вам вопрос:

Насколько долго и сложно перевести проекты, которые писаны в процедурном стиле? Почему в процедурном? - привык так, есть один шаблон на все случаи жизни, пишу в нём 3-5 строк для условий, и любая сова готова за пол-часа со всеми отладками

 Следующее:

Возможно ли переписать функцию открытия позиций, чтоб применять её в том-же виде, что и в четвёрке, просто привык за несколько лет к их названиям и использованию, и не нужно подключать никаких библиотек.

 

Ну и блок условий для открытия и создания графики:

 Ещё много графики, писал как-то один раз на пятом, так там что-то через .опу сделано время и цена выбора первой точки и второй. В четвёрке так: ObjectSetInteger(0,nm,OBJPROP_TIME1, t1)  и ObjectSetInteger(0,nm,OBJPROP_TIME2, t2), а вот в пятом такая конструкция не работает(

Заранее спасибо за ответ! 

Еще один проект переписал вчера, довольно большой советник. У клиента он оптимизировался неделями, тяжелый код и много параметров. Я его уговорил перейти на 5-ку с хеджем, говорю, сможете оптимизировать в облаке. Так он сегодня пишет, что писает кипятком от такой скорости, за пару часов все оптимизировалось, на что раньше недели уходили. Ну ясное дело, в облаке обычно несколько тысяч свободных агентов.

Теперь по вашему вопросу, я опыта поднабрался, есть ответы.

1. Так пусть процедурный стиль и остается, никто в ООП насильно не загоняет.

2. Вот хорошая статья по соответствию функций MQL4 и 5. Там таблица есть. https://www.mql5.com/ru/articles/81

3. А вот библиотека по совместному использованию торговых функций 4-ки и 5-ки. Я не пробовал, но вещь интересная. https://www.mql5.com/ru/code/16006

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • 2010.05.11
  • Sergey Pavlov
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Трудности перевода :)

Vitaly Muzichenko, 2016.08.15 21:00

Согласен )

 Алексей, тогда в качестве игры) переведите пожалуйста эту функцию на пятёрку:

//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions(string symb="0", int type=-1, int mg=-1) {
 int kp=0;
  if(symb=="0") { symb=Symbol();}
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
     if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
      kp++;
 }}}}
  return(kp);
 }

Как его использовать в четвёрке - Вы знаете.

Спасибо! 


У меня несколько иной взгляд на перевод. Никаких "замен" в VS. Просто добавление одной строчки. Рабочий код упомянутой функции для MT5-Hedge

// https://www.mql5.com/ru/code/16006
#include <MT4Orders.mqh>

//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions(string symb="0", int type=-1, int mg=-1) {
 int kp=0;
  if(symb=="0") { symb=Symbol();}
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
     if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
      kp++;
 }}}}
  return(kp);
 }

Код стал кроссплатформенным сразу. 

Аналогично запускаю чужие MT4-советники в MT5-тестере - пример.

 
fxsaber:

У меня несколько иной взгляд на перевод. Никаких "замен" в VS. Просто добавление одной строчки. Рабочий код упомянутой функции для MT5-Hedge

Код стал кроссплатформенным сразу. 

Аналогично запускаю чужие MT4-советники в MT5-тестере - пример.

Круть! Я вчера CTrade использовал для скорости перевода, библиотеку еще не смотрел. Но обязательно посмотрю.
 
Alexey Volchanskiy:
Круть! Я вчера CTrade использовал для скорости перевода, библиотеку еще не смотрел. Но обязательно посмотрю.

У меня MT4Orders.mqh не пошла - конфликтует со стандартной библиотекой, которую я уже использую. Наверное, надо только на чистый лист.

'::' - unexpected token Trade.mqh       126     22
'::' - unexpected token Trade.mqh       1477    14
'MqlTradeResult' - identifier already used      Trade.mqh       1477    55
see previous declaration of '           0       0
'&' - semicolon expected        Trade.mqh       1477    70
'if' - expressions are not allowed on a global scope    Trade.mqh       1483    4
'else' - expressions are not allowed on a global scope  Trade.mqh       1485    4
'if' - expressions are not allowed on a global scope    Trade.mqh       1488    4
'else' - expressions are not allowed on a global scope  Trade.mqh       1493    4
'return' - expressions are not allowed on a global scope        Trade.mqh       1499    4
')' - expressions are not allowed on a global scope     Trade.mqh       1500    3
declaration of 'action' hides global declaration in file 'Trade.mqh' at line 1480       DealInfo.mqh    244     55

 **

 
Alexey Volchanskiy:

У меня MT4Orders.mqh не пошла - конфликтует со стандартной библиотекой, которую я уже использую. Наверное, надо только на чистый лист.

 **

#include <MT4Orders.mqh> // если есть #include <Trade/Trade.mqh>, вставить эту строчку ПОСЛЕ
 

Вопрос - а как узнать комиссию позиции в MQL5?

В МQL4 я делал так

double oProfit = OrderProfit() + OrderSwap() + OrderCommission(); // MQL4

 А в MQL5 комиссии нет, получается только так

double oProfit = PositionGetDouble(POSITION_PROFIT) + PositionGetDouble(POSITION_SWAP);

 Посмотрел в свойствах ордера, тоже нет комиссии. И что делать?

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