При каждом выполнении OnTick() нужна информация об открытых в данный момент ордерах. Так помести ее в структуру.
Какой-нибудь такой шаблон для начала:
Дальше думаешь, какая именно нужна будет информация об открытых сейчас ордерах. Например, для открытия новых ордеров сетки нужна верхняя и нижняя цены открытия ордеров, номер последнего шага и (как в том примере) признак наличия существования сигнального ордера. Добавляешь нужные переменные в структуру:
Один раз проходишь в цикле по всем ордерам и заполняешь эту структуру. Это ведь реализуемо, правда? Все. Дальше просто пихаешь уже подготовленные данные в условия для открытия новых ордеров сетки.
Для любых блоков программы информация по рыночным ордерам подготовлена и аккуратно упакована в удобном, читаемом виде. Не нужно делать миллион циклов и огромную вложенность.
Открываем первый ордер по сигналу индикатора? Пожалуйста:
Можно даже сделать еще более явно:
Добавляем закрытие и модификацию (тут я уже вставил немного упрощенный пример из реального кода):
Что касается history и exitSignal - это тоже заранее подготовленные, аккуратно упакованные в структуры данные.
Я все это пишу к тому, что использование новичками структур приучает их наперед разрабатывать архитектуру программы, разделять программу на логически обособленные блоки кода и продумывать взаимодействие между этими блоками. До того, как человек напишет свое первое
превратив код в одноразовую портянку.
А пример кода, который подорвал мне сраку, я привел для демонстрации того, к чему приводит подход "начни писать, дальше разберешься"/"аппетит приходит во время еды"
Декомпозиция))) Хотя да, писать без алгоритма это еще те крючки для правок))) Алгоритм, оптимизация алгоритма, код алгоритма, оптимизация кода)))
Зачем мне этот массив? Потому что ордер может быть, например, уже не в активных, но ещё не в истории. Или уже отправлен (async!), но ещё не появился в активных.
А так мы храним всю инфу по ордеру от отправки до попадания в историю.
Спасибо за вашу активность в теме.
Пожалуйста, но все хотят услышать хоть что-то понятно? Или всё сказанное пролетело мимо?
Пожалуйста, но все хотят услышать хоть что-то понятно? Или всё сказанное пролетело мимо?
При каждом выполнении OnTick() нужна информация об открытых в данный момент ордерах. Так помести ее в структуру.
Какой-нибудь такой шаблон для начала:
Дальше думаешь, какая именно нужна будет информация об открытых сейчас ордерах. Например, для открытия новых ордеров сетки нужна верхняя и нижняя цены открытия ордеров, номер последнего шага и (как в том примере) признак наличия существования сигнального ордера. Добавляешь нужные переменные в структуру:
Один раз проходишь в цикле по всем ордерам и заполняешь эту структуру. Это ведь реализуемо, правда? Все. Дальше просто пихаешь уже подготовленные данные в условия для открытия новых ордеров сетки.
Для любых блоков программы информация по рыночным ордерам подготовлена и аккуратно упакована в удобном, читаемом виде. Не нужно делать миллион циклов и огромную вложенность.
Открываем первый ордер по сигналу индикатора? Пожалуйста:
Можно даже сделать еще более явно:
Добавляем закрытие и модификацию (тут я уже вставил немного упрощенный пример из реального кода):
Что касается history и exitSignal - это тоже заранее подготовленные, аккуратно упакованные в структуры данные.
Я все это пишу к тому, что использование новичками структур приучает их наперед разрабатывать архитектуру программы, разделять программу на логически обособленные блоки кода и продумывать взаимодействие между этими блоками. До того, как человек напишет свое первое
превратив код в одноразовую портянку.
А пример кода, который подорвал мне сраку, я привел для демонстрации того, к чему приводит подход "начни писать, дальше разберешься"/"аппетит приходит во время еды"
Декомпозиция))) Хотя да, писать без алгоритма это еще те крючки для правок))) Алгоритм, оптимизация алгоритма, код алгоритма, оптимизация кода)))
Я уже выкладывал своё: https://www.mql5.com/ru/forum/160683/page1950#comment_34431498 - отсортированный массив ордеров.
Зачем мне этот массив? Потому что ордер может быть, например, уже не в активных, но ещё не в истории. Или уже отправлен (async!), но ещё не появился в активных.
А так мы храним всю инфу по ордеру от отправки до попадания в историю.
Доброго времени!
Спасибо участникам темы за мысли о структурах.
Так как я уже применяю их в своих работах, говорит о том, что я начинаю их понимать.