Вопрос на засыпку -- нафига сохранять тикеты в файл?
На каждом тике проверяю - если байстопы перешли в рынок то удаляю селлстопы, и наоборот. Тикеты хранятся в массиве. Если случайно был закрыт терминал, массив стерся - тикеты просрали... На этот случай они пишутся в файл
Зачем просто - когда можно сложно
Наиболее эффективный способ работы с тикетами -- запрашивать их у терминала когда они необходимы.
Все остальное -- ненадежно или громоздко. Проверено многими кодерами под MQL4
Зачем просто - когда можно сложно
Наиболее эффективный способ работы с тикетами -- запрашивать их у терминала когда они необходимы.
Вот с этого места поподробнее, я записываю. Что значит "запрашивать у терминала"
Пользуюсь этой функцией и без разницы закрывалься терминал или нет.
https://www.mql5.com/ru/forum/131859/page3#434226
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает тикет последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetTicketLastPos(string sy="", int op=-1, int mn=-1) { datetime o; int i, k=OrdersTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); r=OrderTicket(); } } } } } } } return(r); }
Так ладно, виноват. Опишу проблему яснее и подробнее. Противоположные отложенники у меня устанавливаются группами. К примеру 3 группы ордеров, в каждой группе по 4 ордера (2 байстоп, 2 селлстоп).
Для каждой группы надо проверять: если байстопы в этой группе перешли в рынок то удаляются селлстопы в этой группе, и наоборот. Как вот ЭТО грамотно реализовать? Спасибо за ответы.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток, господа.
Проблема такая: автоматически устанавливаются по 2 отложенника buystop и sellstop. Их тикеты запоимнаются в массиве и пишутся в файл. Задача: если оба ордера buystop стали рыночными - удалить sellstopы, если sellstopы в рынок перешли - удалить байстопы.
Если не закрывать советника - он сохраняет тикеты в массив и всё прекрасно работает. Закрываешь терминал - открываешь, тикеты записываются в массив из файла. Записываются правильно - адресация правильная, проверял, но блин напрочь отказывается манипулировать ордерами. Хотя массив заполнен правильно, тикеты у ордеров прежние. Должно работать, но не работает.
Если надо могу выложить куски кода.