Доброго времени суток всем.
Необходимо подсчитать какой по счету ордер был открыт в сетке. Причем простой перебор текущих открытых ордеров не подходит. Допустим в сетке допускается открыть не больше 7 ордеров. Т.е. когда все 7 ордеров существуют на графике все замечательно и простой перебор работает безотказно. НО! Допустим что первый открытый ордер был закрыт пользователем вручную. Получается что в сетке в текущий период существуют 6 ордеров. Но мы то знаем что 7 ордер был уже открыт, следовательно открывать следующие сделки нельзя.
Загвоздка заключается в следующем. Как это можно реализовать? А то я себе голову сломала) Причем надо сделать так, чтобы робот сам все пересчитал даже после перезагрузки терминала. Пробовала выносить номер открытого ордера в комментарий. После забирала номер последней сделки функцией StringGetCharacter, но это нормально работает только если максимальное число ордеров однозначное число. Если максимум ордеров в сетке 10 и больше, уже начинаются танцы с бубном. Допусти в сетке 10 ордеров 1,2,3,4,5,6,7,8,9,10. Ордера 1,2,3,4 закрыли руками. Как заставить робота понимать что 10 ордер уже был открыт и существует на графике, не используя глобальные переменные. Прихожу к выводу это только выносить номер в комментарий, а потом его от туда забирать. Но как это сделать корректно?? А то я немного ракуля)))
Заранее благодарна!)
В коммент можно хоть двух хоть трёх-значный номер запихнуть, но коммент ненадёжно, да и удалить руками можно и последний ордер. Делайте через магик 555777, 5557771....555777333 . Дальше понятно? :)
задача на сортировку, нужно отсортировать последние 7 ордеров по времени открытия, причем считать нужно и открытые ордера и закрытые (в истории) ордера, это довольно хлопотно
но можно использовать 2 магикномера, один магикномер для первого ордера в серии ордеров, а для последующих второй магик - тогда ищем последний по времени открытия ордер с магиком №1, запоминаем его время открытия, дальше уже проще нужно найти все ордера с магиком №2 с большим или равным временем открытия которое запомнили в предыдущем шаге
Доброго времени суток всем.
Необходимо подсчитать какой по счету ордер был открыт в сетке. Причем простой перебор текущих открытых ордеров не подходит. Допустим в сетке допускается открыть не больше 7 ордеров. Т.е. когда все 7 ордеров существуют на графике все замечательно и простой перебор работает безотказно. НО! Допустим что первый открытый ордер был закрыт пользователем вручную. Получается что в сетке в текущий период существуют 6 ордеров. Но мы то знаем что 7 ордер был уже открыт, следовательно открывать следующие сделки нельзя.
Загвоздка заключается в следующем. Как это можно реализовать? А то я себе голову сломала) Причем надо сделать так, чтобы робот сам все пересчитал даже после перезагрузки терминала. Пробовала выносить номер открытого ордера в комментарий. После забирала номер последней сделки функцией StringGetCharacter, но это нормально работает только если максимальное число ордеров однозначное число. Если максимум ордеров в сетке 10 и больше, уже начинаются танцы с бубном. Допусти в сетке 10 ордеров 1,2,3,4,5,6,7,8,9,10. Ордера 1,2,3,4 закрыли руками. Как заставить робота понимать что 10 ордер уже был открыт и существует на графике, не используя глобальные переменные. Прихожу к выводу это только выносить номер в комментарий, а потом его от туда забирать. Но как это сделать корректно?? А то я немного ракуля)))
Заранее благодарна!)
Подключите немного разума и сделайте, чтобы и с неоднозначным номером работало.
Например, в конец добавляйте какой-нибудь знак-разделитель, потом находите его позицию и отделяйте соответствующее количество знаков (цифр).
Доброго времени суток всем.
Необходимо подсчитать какой по счету ордер был открыт в сетке. Причем простой перебор текущих открытых ордеров не подходит. Допустим в сетке допускается открыть не больше 7 ордеров. Т.е. когда все 7 ордеров существуют на графике все замечательно и простой перебор работает безотказно. НО! Допустим что первый открытый ордер был закрыт пользователем вручную. Получается что в сетке в текущий период существуют 6 ордеров. Но мы то знаем что 7 ордер был уже открыт, следовательно открывать следующие сделки нельзя.
Загвоздка заключается в следующем. Как это можно реализовать? А то я себе голову сломала) Причем надо сделать так, чтобы робот сам все пересчитал даже после перезагрузки терминала. Пробовала выносить номер открытого ордера в комментарий. После забирала номер последней сделки функцией StringGetCharacter, но это нормально работает только если максимальное число ордеров однозначное число. Если максимум ордеров в сетке 10 и больше, уже начинаются танцы с бубном. Допусти в сетке 10 ордеров 1,2,3,4,5,6,7,8,9,10. Ордера 1,2,3,4 закрыли руками. Как заставить робота понимать что 10 ордер уже был открыт и существует на графике, не используя глобальные переменные. Прихожу к выводу это только выносить номер в комментарий, а потом его от туда забирать. Но как это сделать корректно?? А то я немного ракуля)))
Заранее благодарна!)
в 4-ке: в коммент (или magic) всем ордерам кроме начального пишется тикет самого первого ордера в сетке. Это так делаются не только сетки, но вообще группы. ID группы = тикет первого ордера.
в 4-ке: в коммент (или magic) всем ордерам кроме начального пишется тикет самого первого ордера в сетке. Это так делаются не только сетки, но вообще группы. ID группы = тикет первого ордера.
идея интересная, но не соображу как будете после перезагрузки терминала восстанавливать все это
Все что могу придумать это : ищем ордер с самым большим временем открытия и с нашим магиком (первый же ордер может и закрыться), потом уже применяем Ваше кодирование информации
так?
идея интересная, но не соображу как будете после перезагрузки терминала восстанавливать все это
Все что могу придумать это : ищем ордер с самым большим временем открытия и с нашим магиком (первый же ордер может и закрыться), потом уже применяем Ваше кодирование информации
так?
перебираем ордера выявляем все группы в рынке, с ними и работаем.
Вот если группа закрыта полностью пока робот был офф-лайн, но с ней всё ещё надо работать, тут конечно гимор
перебираем ордера выявляем все группы в рынке, с ними и работаем.
Вот если группа закрыта полностью пока робот был офф-лайн, но с ней всё ещё надо работать, тут конечно гимор
Понятно
В принципе из предложенных решений, все свелось к работе с несколькими магик-номерами, какой именно способ реализует ТС не важно
Насколько я понимаю, с одним магиком эту задачу решать только через определение времени открытия последних ХХ ордеров, но в виду того, что не гарантируется хранение информации ордеров в каком-либо порядке, то скорее всего это будет сортировка всех ордеров по времени открытия?.... тогда это ресурсозатратный процесс.
ЗЫ: Да и не факт, что ТС не открывает серию ордеров на одном тике, там вообще время открытия может на секунду отличаться или не отличаться, причем порядок обработки такой серии ордеров (на одном тике) на сервере тоже не определен, т.е. не факт что первый отправленный ордер будет иметь наименьший тикет или время
Понятно
В принципе из предложенных решений, все свелось к работе с несколькими магик-номерами, какой именно способ реализует ТС не важно
Насколько я понимаю, с одним магиком эту задачу решать только через определение времени открытия последних ХХ ордеров, но в виду того, что не гарантируется хранение информации ордеров в каком-либо порядке, то скорее всего это будет сортировка всех ордеров по времени открытия?.... тогда это ресурсозатратный процесс.
ЗЫ: Да и не факт, что ТС не открывает серию ордеров на одном тике, там вообще время открытия может на секунду отличаться или не отличаться, причем порядок обработки такой серии ордеров (на одном тике) на сервере тоже не определен, т.е. не факт что первый отправленный ордер будет иметь наименьший тикет или время
предоставили же отличнейшую штуку - SQLite. Остаётся в советнике создать в памяти и поддерживать в актуальном виде оперативную базу.
SELECT * FROM Orders WHERE groupid=xx ORDER BY openTime
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго времени суток всем.
Необходимо подсчитать какой по счету ордер был открыт в сетке. Причем простой перебор текущих открытых ордеров не подходит. Допустим в сетке допускается открыть не больше 7 ордеров. Т.е. когда все 7 ордеров существуют на графике все замечательно и простой перебор работает безотказно. НО! Допустим что первый открытый ордер был закрыт пользователем вручную. Получается что в сетке в текущий период существуют 6 ордеров. Но мы то знаем что 7 ордер был уже открыт, следовательно открывать следующие сделки нельзя.
Загвоздка заключается в следующем. Как это можно реализовать? А то я себе голову сломала) Причем надо сделать так, чтобы робот сам все пересчитал даже после перезагрузки терминала. Пробовала выносить номер открытого ордера в комментарий. После забирала номер последней сделки функцией StringGetCharacter, но это нормально работает только если максимальное число ордеров однозначное число. Если максимум ордеров в сетке 10 и больше, уже начинаются танцы с бубном. Допусти в сетке 10 ордеров 1,2,3,4,5,6,7,8,9,10. Ордера 1,2,3,4 закрыли руками. Как заставить робота понимать что 10 ордер уже был открыт и существует на графике, не используя глобальные переменные. Прихожу к выводу это только выносить номер в комментарий, а потом его от туда забирать. Но как это сделать корректно?? А то я немного ракуля)))
Заранее благодарна!)