Распараллеливание работы со стратегиями

Распараллеливание работы со стратегиями
Atom
01.03.2010
Andrey


Добрый день!
Очень понравилась Ваша библиотека. Большое спасибо за ее создание.

Для написания своего робота и понимания как он работает, я хотел бы
сам написать обработчик стратегий. Не могли бы Вы мне подсказать как
правильно разобраться с потоками и обработчиками событий?

Основные вопросы такие: предположим у меня есть 2 стратегии. Я хочу их
вызывать при поступлении новых данных по DDE для инструментов каждой
стратегии, обрабатывать каждую стратегию в отдельном потоке.
Не понимаю
1) как правильно разделить работу на потоки,
2) Как сделать чтобы обработчики событий DDE вызывали основную функцию
работы стратегии (аналог OnProcess) после того как данная функция
отработала, т.е. функция бы не запускалась одновременно несколько раз,
разными обработчиками.
3) Как правильно работать с логами. Т.е. если в каждой стратегии я
хочу писать логи в один и тот же файл, как мне избежать блокировки
файла одним из потоков в момент записи другим потоком.

Буду очень благодарен за любую помощь в решении данных вопросов!

Теги:


Спасибо:


Mikhail Sukhov

Фотография
Дата: 02.03.2010
Ответить


Если у Вас фундаментальные вопросы, то лучше почитать ту онлайн
книжку, что я указал в доке.

1. Если использовать Strategy, то об этом особо думат не нужно - он
сам все распределяет. Нужно лишь правильно написать OnProcess
2. Не совсем понял, что требуется.
3. Такого не существует. В файл можно писать из разных потоков - это
нормально обрабатывается и операционной и файловой системами.

Спасибо:

Andrey

Фотография
Дата: 02.03.2010
Ответить


Спасибо.
во 2ом вопросе я имел ввиду, что на обновление данных из DDE, я хотел
бы вызывать функцию аналог OnProcess.
Но если мне пришли сделки по DDE и я вызвал OnProcess, а потом пришли
обновления по ордерам и по идее я должен вызвать OnProcess , а
OnProcess еще не выполнился - заходить же в него некорректно, как с
этим бороться?

Подскажите еще с 1 вопросом пожалуйста:
При первоначальном запуске экспорта по DDE, как мне понять, что,
например, все данные из таблицы сделок уже подгрузились и их можно
обрабатывать?

Спасибо:

Mikhail Sukhov

Фотография
Дата: 02.03.2010
Ответить


Подход в использовании Strategy таков: настраивается интвервал опроса
состояния биржи, реализуется код в OnProcess, который по истечению
интервала (происходит автоматически) смотрит на сделки, смотрит на
заявки, смотрит на стаканы (куда угодно смотрит, зависит от алго). Сам
метод OnProcess вызывать не нужно.

Это очень интересный вопрос. У меня решается путем подождать для
пользователей. Можно (не на 100% гарантированно) посмотреть на дату
сделок.

Спасибо:

Andrey

Фотография
Дата: 02.03.2010
Ответить


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

Когда думал над этим вопросом это было первое что пришло в голову,
останавливает только проблема с неликвидом. Какой запас времени назад
брал.
Сейчас пришла идея сравнивать суммарный оборот по бумаге в таблице
всех сделок и оборот в таблице инструментов. можно по лотам можно по
объему.
или даже наверно проще по кол-во всех сделок.

А если отвалиться экспорт по DDE, я это могу узнать из
QuikTrader.DdeError ?

Еще вопрос про обработку таблиц сделок в стратегиях, можно ли
запоминать номер строки с последней обработанной сделкой, чтобы больше
не работать с обработанными сделками? Или есть более элегантный
способ?

Спасибо:

Mikhail Sukhov

Фотография
Дата: 03.03.2010
Ответить


Ставьте небольшой интервал даже для неликвидов. Просто пишите простой
код проверки, торговать или подождать. Нагружку на процессор это не
создаст.

Нет, DdeError не выдаст ничего в случае, если Квик перестал посылать
информацию. У меня реализована серверная сторона для ДДЕ, а она по
определению не знает от таких вещах. Но лично я пока еще не встречал,
чтобы отваливался экспорт ДДЕ. Все остальное, да, отваливалось. А это
пока нет.

Если же для Вас критично, то пожете подписаться, на событие
ProcessWellKnownData и работать в нем с таймером. Как только не пришло
события о новых данных в течении, допустим, 30 секунд, значит разрыв.

Спасибо:

Andrey

Фотография
Дата: 04.03.2010
Ответить


Спасибо!
Думаю так и сделаю, как Вы советуете.

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy