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

 
Dmitry Fedoseev:

А зачем время?

При желании можно и в инт все это впихнуть. Максимальное значение инта 2 147 483 647, то есть 9 знаков без проблем.

Уникальный ID ордера - это тикет. А он такой же int, как и сам магик. Отсюда и проблема. Если отводить весь магик под тикет, то можно будет открывать ордера только одной копией советника, даже без ручной торговли. А это достаточно жесткое ограничение.

1-3 - ид советника в терминале. 4-6 - внутренний ид ордера одного советника (вряд ли будет открыто больше 1000 ордеров за раз). 7-9 - ид привязанного ордера. 

Тогда нужно будет где-то сохранять таблицу этих вот внутренних ID ордеров. А это то же самое, что запись в файл, в глобальные переменные и т. д. Зачем тогда весь этот сыр-бор с магиком? Просто сами ведем данные и не меняем терминал. Ну или меняем, но не забываем при этом захватить какой-то файл, в котором есть все эти данные.

 
Maxim Kuznetsov:

кстати, да...в Magic можно время паковать с точностью до десятых долей секунды. Число десятых долей секунд прошедших с например 1 янв 2010 года

только зачем ? достаточно делать его уникальным, а с уникальным ключом можно связать любой объём данных.

Таблица ключей должна быть где-то? Должна. А здесь решение без отдельных БД, файлов и т. д. Вся информация на сервере ДЦ.

Это, конечно, если я правильно понял задачу: установить соответствие пары "отложенный ордер - рыночный ордер". 

 
Ihor Herasko:

Уникальный ID ордера - это тикет. А он такой же int, как и сам магик. Отсюда и проблема. Если отводить весь магик под тикет, то можно будет открывать ордера только одной копией советника, даже без ручной торговли. А это достаточно жесткое ограничение.

Тогда нужно будет где-то сохранять таблицу этих вот внутренних ID ордеров. А это то же самое, что запись в файл, в глобальные переменные и т. д. Зачем тогда весь этот сыр-бор с магиком? Просто сами ведем данные и не меняем терминал. Ну или меняем, но не забываем при этом захватить какой-то файл, в котором есть все эти данные.

Не тикет. Свой внутренний у советника от 0 до 999. Нужна функция поиска свободного ид, не такая уж она и замороченная. Можно на запуске найти максимальный ид в открытых ордерах, и по кольцу пойти - вообще без вычислений, точнее, без циклов.

 
Если уж в магик все запаковывать, то:
1. Пользователю под id робота оставляем uchar.
2. Старший бит определяет main/lock, по факту это больше или меньше 0.
3. Оставшихся 23 бит Вам надеюсь хватит на все остальное?
PS. ИМХО. Время зашивать в магик в мт4 не лучшее решение, да и не к чему, Вам же не логгирование делать, а подхват своих ордеров после перезапуска.
 
Запихивать все в Магик плохая идея. Не универсальная. А если надо 10 тикетов записать? Тут либо в файл либо в глобальные переменные
 
Запихивать все в Магик плохая идея. Не универсальная. А если надо 10 тикетов записать? Тут либо в файл либо в глобальные переменные
 
Dmitry Fedoseev:

Не тикет. Свой внутренний у советника от 0 до 999. Нужна функция поиска свободного ид, не такая уж она и замороченная. Можно на запуске найти максимальный ид в открытых ордерах, и по кольцу пойти - вообще без вычислений, точнее, без циклов.

Я же и говорю о том, что внутренний ID должен где-то храниться на предмет соответствия реальному. Вот и получаем, что не обойтись без записи данных локально. Тогда только один путь - вести свою БД.

 
Dmitiry Ananiev:
Запихивать все в Магик плохая идея. Не универсальная. А если надо 10 тикетов записать? Тут либо в файл либо в глобальные переменные. 

Вот это действительно плохая идея, худшей наверное не придумать. Работа с файлом так-же не блещет скоростью.

 
Dmitiry Ananiev:
Запихивать все в Магик плохая идея. Не универсальная. А если надо 10 тикетов записать? Тут либо в файл либо в глобальные переменные

Один отложенный ордер может соответствовать десяти другим рыночным ордерам? 

 
Ihor Herasko:

Один отложенный ордер может соответствовать десяти другим рыночным ордерам? 

Это если надо сохранить всю цепочку.
Причина обращения: