| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Торговый бот |
| Автор: AntiInt 1.12.2013, 17:18 |
| Всем привет! Есть у кого-то опыт написания торгового бота? Интересует архитектура, как оно должно выглядеть? |
| Автор: jonie 2.12.2013, 12:21 |
| Есть. Архитектуру никто вам не раскажет ибо NDA. |
| Автор: AntiInt 2.12.2013, 17:35 |
| jonie, а ссылкой на какие-нибудь обзоры или описания можно поделиться? я сильно сомневаюсь, что это ноухау... |
| Автор: dzaraev 3.12.2013, 05:44 |
| В такой формулировке вы можете и сами погуглить. Это очень широкая сфера, всё равно что спросить "есть у кого-то опыт написания компьютерной игры? какая должна быть архитектура?". Прежде, чем узнавать про архитектуру, надо определиться на основе чего писать. Если это просто скрипт для MT4 или NinjaTrader например, это одно, если же самостоятельная система, напрямую юзающая различные сервисы котировок и ордеров - совсем другое. И первая и вторая программы могут называться торговыми роботами. |
| Автор: AntiInt 3.12.2013, 06:06 |
| dzaraev, это будет самостоятельная система, не скрипт к метатрейдеру. почти все что есть в гугле - это разного рода нахлабучки к метатрейдеру и иже с ними. а интересует вот именно архитектура бота, как должно правильно взаимодействовать различные части программы - слушатель рынков, анализатор и т.д. |
| Автор: dzaraev 3.12.2013, 07:16 |
И опять же сначала конкретезируйте задачу - это будет у вас какой-то сервис, или только десктопное приложение? Или какая-то расширяемая платформа наподобие того же МТ? Все же попробую обозначить основные узлы: ядром любого торгового робота конечно же является код, "принимающий решения" о торговых операциях. Писать этот код нужно на абстрактном API, не зависящем от конкретных поставщиков котировок, торговой платформы, индикаторов и т.д. Т.е. для этого "ядра" все узлы, которые могут быть замещены, должны быть инкапсулированы. Но этот принцип думаю вам и так понятен. Далее, возможно будет расширяться сама логика этого ядра, например вы захотите поддержать подключение различных торговых стратегий со стороны, написанных другими кодерами в обнимку с трейдерами. В таком случае, ваше "ядро" становится эдакой "средой выполнения" с набором каких-нибудь стандартных инструментов, базовых классов и средств запуска всего этого. А конкретная логика принятия торговых решений - пишется уже на базе такого ядра. Главное - максимально изолировать логику принятия решения (и предоставить ей согласованный и удобный API), потому что это самая изменяемая часть подобных систем. Из остальных узлов можно конечно же выделить: Поставщика котировок - сущность, на вход получающая какие-то исходные данные по рынку, например инструмент (акцию/валюту) и время начала торгов, а на выходе - массив котировок (грубо говоря). Реализация должна быть заменяемой, т.к. для получения котировок можно подключать разные сторонние сервисы, и у каждого может быть свой API. Торговая платформа - сущность, принимающая на вход ваше "торговое решение" и обеспечивающее его интерпретацию доставку до конкретного торгового сервиса, торговый сервис (как правило сторонний) проводит ваш ордер дальше - вплоть до конкретной биржи, и обеспечивает фидбек и трекинг(отслеживание состояния) по этому ордеру. Индикаторы - сущности, которые на вход принимаю рыночные данные (например котировки), а на выходе предоставляют дополнительную информацию, характеризующую рынок, которая используется для дальнейшего принятия торговых решений. Индикаторы вы можете тупо и бодро кодить своими силами или опять же воспользоваться сторонними сервисами. Главное - не забывайте об инкапсуляции и заменяемости подобных компонентов. В принципе "приниматель решений" тоже может являться каким-то сторонним сервисом. Всё зависит то того - что именно вы продаёте в своём продукте. Не стоит также забывать о клиентском модуле - который должен также быть расширяем и предоставлять удобный интерфейс для наблюдения и управления состоянием вашего торгового робота/платформы. Ну и конечно фундамент всей системы - данные. Необходимо как можно раньше решить что и где вы будете хранить. Те же акции - их набор, имена, сопоставленная индустрия т.д. - это мета информация, которая создаётся не вами, а запрашивается с сервиса котировок/торговой платформы и т.д. однако юзерам может потребоваться хранить связанные с акциями данные - например статистические показатели, вычисленные вашей системой. Возможно потребуется экспортировать/импортировать эти наборы акций с машины на машину (или с аккаунта на аккаунт) и при этом поддерживать их согласованность с используемыми торговыми платформами, чтобы например не попытаться открыть сделку по акции, которой уже нет на бирже. |
| Автор: AntiInt 3.12.2013, 11:14 |
| Планируется десктопное приложение. Пока надо хорошо подумать что и как сделать особенно модуль аналитики будет сложный. |
| Автор: jonie 3.12.2013, 15:19 |
| 1) настоящие пацаны не пишут роботов на це решетке. 2) роботы вообще никогда не были десктопными 3) C# можно юзать только для управления роботом 4) работать через брокерерское API - бред - много не заработать, ибо выставление заявки в 200мсек уже неприемлемо. |
| Автор: AntiInt 3.12.2013, 19:15 |
| jonie, 1.чем шарп плох? 2.ну десктоп-не десктоп - какая разница, это так для эксперимента пока, может службу сделаю потом 3.ну это на вкус и цвет 4.А как работать не через брокерское API? не ну как? варианты? |
| Автор: dzaraev 4.12.2013, 06:48 |
| jonie, 1 Ну надо тогда сразу пояснять - на чем пишут пацаны, и обосновывать - почему. Всем же интересно. 2 Правильно, десктопными могут быть только приложения. 3 Опять же заявление в стиле "пацанов". 4 Время выставления заявки на заработок напрямую не влияет, всю зависит от того - что за торговля вообще идет, если акции на фондах нужно купить/продать и ордера могут быть 1-2 раза в день или даже в неделю, то 200 мс - не помеха совершенно. Если нужен какой-то быстрый арбиртаж или скальпинг, где количество сделок в день может достигать десятков а то и сотен, а рыночная ситуация меняется каждые несколько секунд - то тогда да, время выставления ордера критично, но только тогда. |
| Автор: AntiInt 4.12.2013, 08:43 |
| Товарищи, а какие варианты доступа к бирже кроме ее апи существует? Ну на вскидку? |
| Автор: dzaraev 4.12.2013, 21:59 | ||
Ну так поэтому вы и говорите про "неприемлимость" 200мс. Понятное дело, что в ваших "решениках" это время критично. Когда-то я писал арбитраж-систему на форексе (была наивная попытка в институте), - тогда мне так и не удалось "завести" ее на реальных счетах в основном по этой же причине. Когда много позже писал "портфельного" трейдера уже для фондов (работал и приносил $), там количество сделок могло быть 1-2 в неделю, анализировались минутки-пятиминутки и далее. Естественно уже не было нужды ни в C++ с асмом, ни в планке в N миллисекунд. Просто разные требования к системе - соответственно разные решения и инструменты. Какие требования у автора, пока не ясно, но категорично отсекать C# как основной язык разработки я бы не стал. |
| Автор: jonie 5.12.2013, 08:43 | ||
с тех пор могло всё поменяться 8-) |
| Автор: AntiInt 5.12.2013, 09:18 |
| Ну на данный момент это бот для ознакомительных целей. Поэтому там пока нет серьезных требований к производительности... Кстати по поводу производительности: есть мнение, что управляемый код может быть быстрее неуправляемого, т.к. управляемый компилируется под целевую машину и под ее процессор, в отличие от неуправляемого(с учетом того что его под конкретную архитектуру не компилировали). |
| Автор: jonie 5.12.2013, 14:24 |
| проблемы возникают не в процессоре, а в работе с памятью обычно. |
| Автор: dzaraev 5.12.2013, 15:01 |
В чем шарп проигрывает плюсам в работе с памятью? Даже если требуется иногда ручное управление, оно вполне реализуемо через Dispose. Просто академический интерес. |
| Автор: jonie 5.12.2013, 15:14 |
| когда у вас 64ГБ в памяти занято , то GC становится отнбдь не очень быстрым.. а счет идёт на доли секунды... |
| Автор: gambit 5.12.2013, 16:56 |
| >когда у вас 64ГБ в памяти занято Чем чем и чем????? Даже если коня в вакуме придумать и забить - у меня на ноуте 8 оперативы, пусть 3 под систему и остальное, а это значит что 59 гигов будут в свопе, и тут уж какая нахрен разница, на чем ваше приложение написано, что там со сборкой мусора. Если ты собрался свопить 59 гигов - где то ты свернул не туда. Добавлено через 1 минуту и 48 секунд На оправдание облаков и мощные сервера, я перефразирую в - "Если ты собрался хранить в памяти 64 гига - где то ты свернул не туда. " |
| Автор: jonie 6.12.2013, 10:49 |
Да теже котировки и расчетные на основе них данные немало занимают (а зачастую алгоритмам нужны исторические данные). Мир форексом не ограничивается (форекс это вообще самое простое что может быть). 64 гига это не так и много - таже база (новостная) у нас занимает около 14ТБ. |
| Автор: AntiInt 9.12.2013, 08:13 |
У Вас бот семантический анализ новостей делает? |
| Автор: gambit 12.12.2013, 11:43 |
| jonie, d памяти и на диске, это из разных областей. Вы же не грузите в память 14Тб |