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

 
Ihor Herasko:

Тогда я чего-то не понимаю. Как можно идентифицировать тикет ордера по трем разрядам (пусть даже десятичным), если никакой дополнительной информации нет?

Тикет не нужен, нужна связь. Допустим, такой магик: 123456000. 123 - это ид эксперта, что бы каждый эксперт со своими ордерами работал. 456 - это внутренний ид ордера в советнике, последний разряд 000 - значит этот ордер ни с каким другим ордером не связан. Теперь такой магик: 123457456 - этот ордер составляет пару с ордером 456 (с тем. который имеет магик 123456000). 

 
fxsaber:
Если стоит задача хранить любые данные на торговом сервере, то это всегда можно сделать через информационные ордера в истории торгов.

Как? Через какие ордера? 

 
Dmitry Fedoseev:

Как? Через какие ордера? 

Отложками далеко от цены писать инфу азбукой морзе точка тире точка тире
 
Maxim Dmitrievsky:
Обложками далеко от цены писать инфу азбукой морзе точка тире точка тире

А не сработавшие сохраняются в истории?

 
Dmitry Fedoseev:

А не сработавшие сохраняются в истории?

Не знаю, дело техники, Сабер расскажет, я таким не страдаю )
 
Maxim Dmitrievsky:
Не знаю, дело техники, Сабер расскажет, я таким не страдаю )

Аналогично. Но в теории должно работать.

Выставляем отложку так, чтобы максимально использовать байты всех ее полей, включая Expiration (это поле можно вовсю модифицировать даже для живых ордеров). Далее убиваем ее и получаем эти байты в истории торгов.

 

топик из организации кода перешел в советы где же все таки лучше сохраняться

имхо файл (глоб.переменные или БД, по сути тоже самое) - возможности ничем не ограниченны

по сабжу, использовать как уже написали ООП, или динамические списки - что тоже самое в MQL


структура организации кода не сложная:

1. в OnInit() разработать поиск открытых ордеров с нашими магиками, если нет таких - удаляем файл с сохраненными данными, если есть ордера - читаем файл и проводим аудит ордеров

2. в OnTick() каждый тик организуем проверку по номеру тикета факта существования ордера, если ордер уже закрыт прерываемся и организовываем полный аудит ордеров. Если в структуре(класс, массив? - место где хранятся наши сведения об ордерах) были изменения - выставляем флаг необходимости записи в файл.

3. в OnTimer() проверяем флаг необходимости записи в файл один раз в секунду, и один раз в несколько минут ? делаем бекап файла, на случай возникновения маловероятной ситуации, что писали в файл и тут ПК взял и отключился


Не хочу тестировать, но думаю, что открыть файл, записать в файл 1-2 кб данных и закрыть файл после записи займет очень мало времени. Про ресурс ж/д или SSD - можно и терминал в RAM диске запустить, но тогда не забыть настроить запись файла на физический диск, но думаю, что если торговая стратегия не сильно агресивная, то запись в файл потребуется один раз в несколько десятков минут - тогда не зачем переживать за ресурс ж/д


ЗЫ: можно писать в файл и не по таймеру, тут дело вкуса или осторожности

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