Помогите с организацией кода

 

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

Лок раскрывается так: При прибыли скажем в 50 пунктов профитный ордер закрывается и открывается противоположный ордер удвоенным лотом и открывается стоповый ордер на общий суммарный лот для нового лока . Если оба ордера в сумме вышли в плюс, то закрываемся. если дошли до стопового ордера,  то получим опять лок из первой позиции +2 позиции 2-ым лотом и 3 позицию обратную но уже с суммарным лотом. Попытка раскрыть лок повторяется еще один раз. 

 

Так вот вопрос в том, как правильно организовать подобный алгоритм. Можно на словах но с подробностями. 
 Ну типа: Помечаем локовый ордер комментарием OrderTicketmain + "lock". 

Или создаем структуру и как только открыли или выставили ордер - пишем в структуру комментарий "лок для тикета 102154  " тикет 102154 . Соответственно получим массив структур типа { коментарий;  тикет }

или сделать соответственно структуру типа {main, lock1, lock2? unlock1, unlock2} и 2 структура (параметры каждого ордера: тикет, цена открытия, Время , и т.д.} Ну и соответственно сделать массив таких структур для учета. 

Может еще есть способы ? 

 

Можно и с комментарием - в комментарии писать тикет ордера с которым ордер составляет пару. Но будут некоторые сложности с дальнейшей обработкой ордеров, поскольку указана связь только в одну сторону. Не то, чтобы непреодолимые сложности - просто неудобства. 

Удобнее глобальные переменные терминала. В имени переменной тикет ордера, в значении тикет второго ордера. Количество переменных, которые можно привязать в ордеру, не ограничено. Вот тут самое главное, когда открываешь второй ордер из пары, создаешь две глобальны переменных, одна указывает от первого ордера на второй, а другая - от второго на первый. Тогда будет очень удобно проводить все остальное творчество с ордерами. Так же можно файлы использовать.

А структуры - это дело личное. Сами по себе они не обеспечат возможности перезапуска советника, хотя бы в случае случайного закрытия графика.

 
Dmitry Fedoseev:

Можно и с комментарием - в комментарии писать тикет ордера с которым ордер составляет пару. Но будут некоторые сложности с обработкой ордеров, поскольку указана связь только в одну сторону. Не то, чтобы непреодолимые сложности - просто неудобства. 

Удобнее глобальные переменные терминала. В имени переменной тикет ордера, в значении тикет второго ордера. Количество переменных, которые можно привязать в ордеру, не ограничено. Вот тут самое главное, когда открываешь второй ордер из пары, создаешь две глобальны переменных, одна указывает от первого ордера на второй, а другая - от второго на первый. Тогда будет очень удобно проводить все остальное творчество с ордерами. Так же можно файлы использовать.

А структуры - это дело личное. Сами по себе они не обеспечат возможности перезапуска советника, хотя бы в случае случайного закрытия графика.

С глобальными переменными - дело хорошее.

Надо подумать. Заодно и решается вопрос с перезапуском терминала. 


Спасибо. 

 

Здравствуйте, Дмитрий!

Предлагаю, как вариант, хранить массив в файле. В Oninit восстанавливать массив из файла, а записывать массив в файл после каждого изменения массива. И периодически сверять массив с реальным существованием ордеров. Всё безотказно и экономно работает. Ну а какую логику учёта локирующих ордеров реализовать конкретно - Вам виднее, тяжело сказать без понимания всей идеи. Не знаю, поможет Вам такой совет или нет ;)

 
Dmitiry Ananiev:

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

Лок раскрывается так: При прибыли скажем в 50 пунктов профитный ордер закрывается и открывается противоположный ордер удвоенным лотом и открывается стоповый ордер на общий суммарный лот для нового лока . Если оба ордера в сумме вышли в плюс, то закрываемся. если дошли до стопового ордера,  то получим опять лок из первой позиции +2 позиции 2-ым лотом и 3 позицию обратную но уже с суммарным лотом. Попытка раскрыть лок повторяется еще один раз. 

 

Так вот вопрос в том, как правильно организовать подобный алгоритм. Можно на словах но с подробностями. 
 Ну типа: Помечаем локовый ордер комментарием OrderTicketmain + "lock". 

Или создаем структуру и как только открыли или выставили ордер - пишем в структуру комментарий "лок для тикета 102154  " тикет 102154 . Соответственно получим массив структур типа { коментарий;  тикет }

или сделать соответственно структуру типа {main, lock1, lock2? unlock1, unlock2} и 2 структура (параметры каждого ордера: тикет, цена открытия, Время , и т.д.} Ну и соответственно сделать массив таких структур для учета. 

Может еще есть способы ? 

а если использовать время открытия ордера? для построения цепочки ордеров.

 
Dmitiry Ananiev:

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

Лок раскрывается так: При прибыли скажем в 50 пунктов профитный ордер закрывается и открывается противоположный ордер удвоенным лотом и открывается стоповый ордер на общий суммарный лот для нового лока . Если оба ордера в сумме вышли в плюс, то закрываемся. если дошли до стопового ордера,  то получим опять лок из первой позиции +2 позиции 2-ым лотом и 3 позицию обратную но уже с суммарным лотом. Попытка раскрыть лок повторяется еще один раз. 

 

Так вот вопрос в том, как правильно организовать подобный алгоритм. Можно на словах но с подробностями. 
 Ну типа: Помечаем локовый ордер комментарием OrderTicketmain + "lock". 

Или создаем структуру и как только открыли или выставили ордер - пишем в структуру комментарий "лок для тикета 102154  " тикет 102154 . Соответственно получим массив структур типа { коментарий;  тикет }

или сделать соответственно структуру типа {main, lock1, lock2? unlock1, unlock2} и 2 структура (параметры каждого ордера: тикет, цена открытия, Время , и т.д.} Ну и соответственно сделать массив таких структур для учета. 

Может еще есть способы ? 

ООП в помощь. Создаем класс, который сопровождает ордер от выставления, до закрытия. Далее, создаем класс, который управляет парой ордеров main-lock. Не забываем о сохранении необходимых данных (мое мнение - сериализация необходимых для восстановления работы данных и скидывание их на диск). Дерзайте.
 
Если логика стратегии подразумевает, что в течение одной минуты не может быть открыто более одного ордера, то существует способ зашифровки всех необходимых данных в MagicNumber. В итоге советник не будет привязан к терминалу или компьютеру, т. к. вся информация находится на сервере ДЦ. 
 
Dmitiry Ananiev:

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

Перевести всё в нетто, сэкономите спреды и не будете себе голову морочить ))

 
Ihor Herasko:
Если логика стратегии подразумевает, что в течение одной минуты не может быть открыто более одного ордера, то существует способ зашифровки всех необходимых данных в MagicNumber. В итоге советник не будет привязан к терминалу или компьютеру, т. к. вся информация находится на сервере ДЦ. 

Если можно - с этого места подробнее. Новый Magic не может быть назначен чаще, чем раз в минуту? 

 
Алексей Тарабанов:

Если можно - с этого места подробнее. Новый Magic не может быть назначен чаще, чем раз в минуту? 

Типа того. Смысл в том, что в Magic можно упаковать время с точностью до минуты. Плюс еще остается место для ID эксперта и некоторых дежурных полей вроде индекса ордера в сетке и т. п.

 
Ihor Herasko:

Типа того. Смысл в том, что в Magic можно упаковать время с точностью до минуты. Плюс еще остается место для ID эксперта и некоторых дежурных полей вроде индекса ордера в сетке и т. п.

Я не об упаковке, а о самой генерации. Можно сгенерировать 2 магика за 1 минуту? 

Причина обращения: