Имя пользователя:

Пароль:



MQL5 - вопросы программирования

Подписчиков: coder-ex

MQL5 - вопросы программирования

Номер сообщения:#21  Непрочитанное сообщение coder-ex » 03 авг 2016, 18:23

Серега, будешь смеяться, я полтора месяца потратил в этом году на тестирование и создание серии методов используя OnTrade и OnTradeTransaction в своей библиотеке классов. Но потом столкнулся на потере (иногда) ответов с торгового сервера либо сервера биржи. Потом вел диалог полмесяца с MetaQuotes и они тогда мне и разъяснили (наконец то снизошли и рассказали всю правду :) ), что оказывается программы в среде МТ5 выполняются в одном исполняемом потоке, а событийная система у них имеет одну общую очередь и общая она на все функции. В итоге я удалил все семейство этих методов из своей библиотеки. И вот уже несколько дней (исключая поездки на отдых) по новой все тестирую и пришел к выводу, что !!! нафига я все удалял, нужно было чуть по другому все написать и не было бы этих пулеметных очередей из одинаковых запросов.
В общем теперь занят созданием флагов, сами методы на бумаге восстановил. Долбанные разработчики, нафига всем втирают, что у них там многопотоковая система в МТ5, а OnTrade и OnTradeTransaction типа калбеки. Они может и калбеки, но какой от них толк в едином потоке исполнения.
Ошибки пофиксю в Grabber`e, допишу методы под биржевое исполнение и полностью уйду в проект под Linux, а то столько времени отнимает эта вся вакханалия с костылями.
Кстати на будущее, OnTradeTransaction порождает несколько вызовов OnTrade и нет точного числа, сами разработчики об этом поведали. Единственное для чего они ее разработали - включение минимальной задержки на 1-3 тика, но это можно сделать и одним флагом.
Си — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.
Аватар пользователя
coder-ex
.
.
Сообщений: 849
Возраст: 47
Зарегистрирован: 16 месяцев и 26 дней
Откуда: Томск
Национальный флаг:
Russia
Благодарил (а): 10 раз.
Поблагодарили: 21 раз.
Имя: Константин
Пункты репутации: 2
Ученик трейдера

MQL5 - вопросы программирования

Номер сообщения:#22  Непрочитанное сообщение Pyyx » 04 авг 2016, 14:52

coder-ex писал(а):

Серега, будешь смеяться, я полтора месяца потратил в этом году на тестирование и создание серии методов используя OnTrade и OnTradeTransaction в своей библиотеке классов. Но потом столкнулся на потере (иногда) ответов с торгового сервера либо сервера биржи. Потом вел диалог полмесяца с MetaQuotes и они тогда мне и разъяснили (наконец то снизошли и рассказали всю правду :) ), что оказывается программы в среде МТ5 выполняются в одном исполняемом потоке, а событийная система у них имеет одну общую очередь и общая она на все функции.

coder-ex писал(а):

Кстати на будущее, OnTradeTransaction порождает несколько вызовов OnTrade и нет точного числа, сами разработчики об этом поведали. Единственное для чего они ее разработали - включение минимальной задержки на 1-3 тика, но это можно сделать и одним флагом.

Ну это не новость, это даже в справке написано.
Цитата:
Один торговый запрос, отправленный из терминала вручную или через торговые функции OrderSend()/OrderSendAsync(), может порождать на торговом сервере несколько последовательных торговых транзакций. При этом очередность поступления этих транзакций в терминал не гарантирована, поэтому нельзя свой торговый алгоритм строить на ожидании поступления одних торговых транзакций после прихода других. Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.

Все равно при использовании любой стратегии скальпеля, для исключения дятлонизма сервера, тебе придется прописывать дополнительные функции проверки или ответа сервера на запрос, или же проверки и исключения повторяющихся запросов.
:tipa:
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

MQL5 - вопросы программирования
Аватар пользователя
Pyyx
.
.
Сообщений: 950
Возраст: 36
Зарегистрирован: 65 месяцев и 3 дня
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

MQL5 - вопросы программирования

Номер сообщения:#23  Непрочитанное сообщение coder-ex » 04 авг 2016, 14:58

Мы не ищем легких путей %) Сперва создаем потом удаляем, потом снова то же самое создаем :men:
Но OnTrade использовать по любому не буду, это абсурдная функция для быстрых стратегий, она только усложнит архитектуру робота, проще на 1-3 тика задержать флагом.
Си — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.
Аватар пользователя
coder-ex
.
.
Сообщений: 849
Возраст: 47
Зарегистрирован: 16 месяцев и 26 дней
Откуда: Томск
Национальный флаг:
Russia
Благодарил (а): 10 раз.
Поблагодарили: 21 раз.
Имя: Константин
Пункты репутации: 2
Ученик трейдера

MQL5 - вопросы программирования

Номер сообщения:#24  Непрочитанное сообщение coder-ex » 11 авг 2016, 19:52

После продолжительного тестирования, пришел к выводу, что восстановить потерю событий в потоке терминал МТ5 <-> сервер МТ5 <-> биржевой сервер (если есть) не получится ни какими костылями, но восстановить некоторые торговые запросы получается. Вот тестовый модуль:
test_OpenClosePos.ex5

прим.: пункты в настройках для 4-х знака с множителем х10, для 5-ти знака вычисляются автоматически с множителем х1.
Если нужен будет код то выложу позже, как только приведу библиотеку в порядок.
У вас нет доступа для просмотра вложений в этом сообщении.
Си — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.
Аватар пользователя
coder-ex
.
.
Сообщений: 849
Возраст: 47
Зарегистрирован: 16 месяцев и 26 дней
Откуда: Томск
Национальный флаг:
Russia
Благодарил (а): 10 раз.
Поблагодарили: 21 раз.
Имя: Константин
Пункты репутации: 2
Ученик трейдера

MQL5 - вопросы программирования

Номер сообщения:#25  Непрочитанное сообщение Pyyx » 13 авг 2016, 13:25

coder-ex писал(а):

После продолжительного тестирования, пришел к выводу, что восстановить потерю событий в потоке терминал МТ5 <-> сервер МТ5 <-> биржевой сервер (если есть) не получится ни какими костылями, но восстановить некоторые торговые запросы получается. Вот тестовый модуль:
test_OpenClosePos.ex5

прим.: пункты в настройках для 4-х знака с множителем х10, для 5-ти знака вычисляются автоматически с множителем х1.
Если нужен будет код то выложу позже, как только приведу библиотеку в порядок.

Костик что то ты здесь перемудрил,не знаю точно на чем ты здесь основываешься, и почему пытаешься использовать связку терминал МТ5 <-> сервер МТ5 <-> биржевой сервер (если есть), ведь сами разрабы МТ5 предупреждают, что потеря данных в событиях всегда будет присутствовать. Работай как все, вытягивай данные из PositionSelect(), OrderSelect(), ну и HistorySelect(), так точно не чего не потеряешь.
:D
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

MQL5 - вопросы программирования
Аватар пользователя
Pyyx
.
.
Сообщений: 950
Возраст: 36
Зарегистрирован: 65 месяцев и 3 дня
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

MQL5 - вопросы программирования

Номер сообщения:#26  Непрочитанное сообщение coder-ex » 14 авг 2016, 12:22

Цитата:
и почему пытаешься использовать связку терминал МТ5 <-> сервер МТ5 <-> биржевой сервер (если есть)

Ну а как ты себе представляешь отправку торговых запросов и получение другой рыночной информации? Телепатически я не умею, есть схема, от которой ты не уйдешь. Меня эта цепочка событий в калбэке не устраивает, на Plaza2 все просто - получаешь поток, позиционируешь структуры и если что то потеряется, то и фиг с ним, типа качество связи страдает. Но там нет этой принудительной цепочки событий. На открытие позиции аж 4 события, на модификацию 2 и т.д. Я пытался убрать дублирование торговых запросов, но единственное чего добился, это повтор торгового запроса 1-2 раза. Для меня важно не налететь на штрафы биржи за неэффективные заявки, ведь в конечном итоге планирую робота запустить на бирже, а позиции заменить на лимитники, вот тут как раз и может случится каряга.
В общем теперь хоть поток контролируется и это главное. Видимо от МТ5 большего не добиться, будем работать над собственной платформой под Linux :tipa:
Си — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.
Аватар пользователя
coder-ex
.
.
Сообщений: 849
Возраст: 47
Зарегистрирован: 16 месяцев и 26 дней
Откуда: Томск
Национальный флаг:
Russia
Благодарил (а): 10 раз.
Поблагодарили: 21 раз.
Имя: Константин
Пункты репутации: 2
Ученик трейдера

MQL5 - вопросы программирования

Номер сообщения:#27  Непрочитанное сообщение coder-ex » 25 авг 2016, 19:15

Может кому будет интересно, в MQL5 введены указатели на функции (callback`и). Их преимущество в скорости доступа к функции - через указатель происходит быстрее. К тому же биржевые системы строят свои событийные модели именно на callback`ах.
Кто не в курсе как они работают, изучите тестовый пример, будут вопросы задавайте.
test_Callback.mq5
У вас нет доступа для просмотра вложений в этом сообщении.
Си — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.
Аватар пользователя
coder-ex
.
.
Сообщений: 849
Возраст: 47
Зарегистрирован: 16 месяцев и 26 дней
Откуда: Томск
Национальный флаг:
Russia
Благодарил (а): 10 раз.
Поблагодарили: 21 раз.
Имя: Константин
Пункты репутации: 2
Ученик трейдера

MQL5 - вопросы программирования

Номер сообщения:#28  Непрочитанное сообщение coder-ex » 17 окт 2016, 17:36

Ни как не пойму MetaQuotes, зачем изобретать очередной "велосипед" если он уже есть %) Ну создали язык программирования на основе синтаксиса C++, но почему так упорно не хотят вводить все его парадигмы... К примеру ввели перегрузку и ввели оператор * (получение ссылки на переменную - разыменовывание указателя). Но блин почему не работает перегрузка * ))) этот код свободно работает в с++:
Код: выделить все · Развернуть
class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };

int main(int argc, char **argv) {
   Iterator *_it = new Iterator(5);
   
   int _val = **_it;
//---
   return 0;
}

но в mql не хочет. При этом сперва ответили обобщенно касаемо оператора *:
Цитата:
На данный момент оператор *(dereference/indirection) можно использовать только для указателей на объекты классов и это rvalue

Задал разработчикам вопрос более конкретно и получил ответ:
Цитата:
Потому что нет оператора преобразования Iterator::operator int() и/или глобального int iperator=(int,const Iterator &), которые, к сожалению, на данный момент не поддерживаются в MQL.

ну и в чем проблема ввести была не пойму ))) вот и пользуются кодеры mql гетерами из-за этих грабель...
Си — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.
Аватар пользователя
coder-ex
.
.
Сообщений: 849
Возраст: 47
Зарегистрирован: 16 месяцев и 26 дней
Откуда: Томск
Национальный флаг:
Russia
Благодарил (а): 10 раз.
Поблагодарили: 21 раз.
Имя: Константин
Пункты репутации: 2
Ученик трейдера

MQL5 - вопросы программирования

Номер сообщения:#29  Непрочитанное сообщение forwardkiko » 30 ноя 2017, 23:50

интересует мнение людей ближе к трейдингу, чем кодеру, написал индикатор ренко вместе с адаптиве мовинг авераге, которое строится от кирпичей ренко, по моим первым оценкам вроде потенциал есть. Задуман робот котрый ставит сделку при появлении нового кирпича, если на предыдущем кирпиче было пересечение АМА ну и вытаскивание просевших позиций при флете постоянным полулоком пока не пойдет тренд, посмотрите индикатор и скажите свое имхо, написан в mq5, т.к mq4 не позволяет индикаторам рисовать свечи
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
forwardkiko
.
.
Сообщений: 374
Возраст: 42
Зарегистрирован: 45 месяцев и 3 дня
Откуда: Беларусь г. Гомель
Национальный флаг:
Belarus
Благодарил (а): 36 раз.
Поблагодарили: 91 раз.
Имя: Игорь
Пункты репутации: 5
Ученик трейдера

Пред.

Вернуться в Программное обеспечение



Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

  • Объявления
cron