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


Распараллеливание работы со стратегиями
Atom
3/1/2010


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

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

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

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

Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 3/2/2010
Reply


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

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

Thanks:

Andrey

Avatar
Date: 3/2/2010
Reply


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

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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/2/2010
Reply


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

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

Thanks:

Andrey

Avatar
Date: 3/2/2010
Reply


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

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

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

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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/3/2010
Reply


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

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

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

Thanks:

Andrey

Avatar
Date: 3/4/2010
Reply


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

Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy