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

 

Хочу рассказать, как я перевел свой проект с MQL4 на 5-ку за одну ночь. Только сразу, чтобы Андрей з-з-з-з не возбуждался, я не хвастаюсь, просто хочу рассказать о практике, все оказалось до веселого просто )

Итак, вчера днем устал, прилег на пол-часика, а проснулся в пол-первого ночи. Во думаю, храпанул, что теперь делать, фига уснешь.

А давно хотел перенести свой проект скальпера с МТ4 на МТ5 с хеджем, уже и хедж-демки от робо давно завел, да все времени реально не было. Главная цель - потестировать на реальных тиках от робо. И запустить оптимизатор в облаке, там скорость реально радует.

Сейчас я гоняю модель в Матлабе, но это все же упрощенный вариант и становиться все тяжелее, точнее нуднее синхронизировать изменения в коде и модели. Скажем так, модель постоянно отстает от реального кода MQL4.

********** Процесс переноса *****

Итак,  у меня проект состоит из одного .mq4 файла и кучи классов в .mqh. Перенес все в 5-ку, .mq4 переименовал в .mq5, классы оставил, как есть. Запустил компиляцию, 100500 ошибок естественно. Ок, трудности нас не пугают, смотрим на ошибки. Основная масса связана с MarketInfo, встречается почти везде. Ок, я ленивый котик, вычищать руками принципы лени не позволяют )) Запускаем Visual Studio, а там у меня уже есть проект по работе с файлами MQL4/5.

Кстати, посмотрел, до сих пор Ютуб бережно хранит мой древний ролик от 2011 г. , как настроить студию 2010, чтобы она воспринимала файлы MQL, как плюсовые. Ничего не изменилось, можно юзать и сейчас.

Ролик от 2011, я там могу сильно ругаться на MQL4, сейчас ситуация изменилась, язык нормальный )) Просто лень переслушивать, но могут проскочить отголоски прошлого. 

https://www.youtube.com/watch?v=oQs4qqwhqzg

Итак, закинул все в студию, там приятности в том, что поиск и замену можно делать сразу по всему проекту, а не по одному файлу. Заменил все MarketInfo на аналоги из MQL5. После пары мелких коррекций все ошибки, как и ожидалось, остались в классе COrderManager. Это мой класс, который управляет ордерами, строит и модифицирует сетки и всякое разное.

На его переделку ушло, наверное, часа 3. Использовал класс Стандартной библиотеки CTrade, правда, пришлось родить от него младенца, так как некоторых фич не хватило.

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

Вывод. Да фигня все эти стоны о том, как тяжко бедному программеру перейти на пятерку! За время перехода я нажарил огромную сковороду картошки с мясом, сходил ночью прогулялся, люблю ночью гулять, посмотрел немного кино с Брюсом У., ну и значительно улучшил те места, до которых руки не доходили. Теперь вполне можно делать ребейтор, а то мне недавно напомнили старое обещание, да и тема опять возникла на днях.

Да, класс  COrderManager сильно похудел с использованием Стандартной библиотеки

Настройка Visual Studio 2010 для редактирования MQL файлов
Настройка Visual Studio 2010 для редактирования MQL файлов
  • 2011.07.01
  • www.youtube.com
Как известно, редактор Metatrader 4 далек от совершенства. Часто удобно редактировать большие проекты в VS2010. На этом видео я показываю процесс настройки.
 
Andrey F. Zelinsky:

Как понять "улучшили те места" после "сходил ночью погулять"?

Вы гуляли ночью или выгуливались? 

Мне в офисе сидеть давно не надо, я часто гуляю по ночам ) Улучшил в проекте места, которые давно хотелось переделать, да было лень, и так работало. А тут под такое дело, конвертация, как-то собрался и сделал заново многие вещи.

Андрей, "гулять" и "бухать" - разные вещи )) 

 

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

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

 

 

Следующее:

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

 

 

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

 

 

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

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

 
Alexey Volchanskiy:

...

Вывод. Да фигня все эти стоны о том, как тяжко бедному программеру перейти на пятерку! ...

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

Мне кажется легче не переносить код. А написать с нуля. Так и качественней получится.

 
Dmitry Fedoseev:
Вот не надо божий дар с яичницей путать. Если советник работает несколькими ордерами и переводится в неттинг, это нереальная задача.  

Само собой, я же написал в первом посте "А давно хотел перенести свой проект скальпера с МТ4 на МТ5 с хеджем, уже и хедж-демки от робо давно завел, да все времени реально не было." Наверное, вы пропустили эти детали.

Я именно поэтому не переходил на МТ5, пока там был только неттинг. Сейчас, с хеджем, переползаю потихоньку.

Пост был о чисто технической стороне перехода. 

 
Anton Zverev:

Мне кажется легче не переносить код. А написать с нуля. Так и качественней получится.

Почему? Языки одинаковы, отличаются функции по доступу к таймсериям, некоторые другие, это решается в VS заменой по всему проекту, как я написал. Это быстро и нетрудно. Некоторые сложности с торговой частью, мне пришлось ввести в класс помимо обработки ордеров обработку позиций. Но, в принципе, тоже ерунда.

Еще раз, на всякий - я про хедж. 

 
Vitaly Muzichenko:

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

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

 

 

Следующее:

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

 

 

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

 

 

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

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

Виталий, так вы можете оставить все в процедурном стиле, никто не заставляет использовать ООП. Просто Стандартная библиотека мне понятна, я от нее родил свой класс, кое-что дополнил. Да и у меня все на ООП сделано.

Отвечаю в обратном порядке )) 

1. Переделывал скрипт с графикой, есть отличия, но крайне незначительные. В основном, надо явно указывать окно и подокно, в четверке было необязательно.

2. Насчет открытия позиций, если использовать класс CTrade, там есть почти прямые аналоги функций MQL4

3. Думаю, недолго.  

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

 
Anton Zverev:

Мне кажется легче не переносить код. А написать с нуля. Так и качественней получится.

Иногда бывает полезно бросить работу, жену, сытую жизнь и начать все с нуля. Я делал так много раз. Получается все качественнее и качественнее ))
 
Alexey Volchanskiy:
Иногда бывает полезно бросить работу, жену, сытую жизнь и начать все с нуля. Я делал так много раз. Получается все качественнее и качественнее ))
))
 
Сейчас на меня набросятся -чувствую. Надо писать в стиле ООП и будет счастье.
И тогда подобный переезд будет - легкой ночной прогулкой.