Избранное трейдера WooDoo
Перед прочтением этой статьи — ВАЖНО следующее: основная цель данной статьи заключается в том, чтобы показать как просто можно создать торгового робота, который может торговать российскими акциями или зарубежными акциями. Важно понимать, что создавая бота, вы лично несете ответственность за принимаемые им решения, инвестиционные операции и связанные с ними риски. Я не несу ответственности за решения, которые вы можете принять после прочтения этого материала. И я не даю никаких инвестиционных рекомендаций или советов. Не забывайте, что боты способны принести большие убытки, поэтому используйте их с осторожностью.
Программирование для меня это хобби и любимое дело. А так я сертифицированный системный архитектор. Поэтому прошу не особо ругать за код:‑)
Выбор брокера и библиотекКак вы знаете, брокеров много))) но нам нужны те, у которых есть API — программный интерфейс через который наш торговый робот сможет отправлять заявки на покупку и продажу акций.
Приветствую.
Готов поделиться опытом работы с российскими коннекторами прямого доступа к московской биржи (MOEX). Я довольно долго искал коннекторы для прямого доступа на московскую биржу Fix/Fast, Plaza2, Twime на C#, в итоге пришлось все написать самому :)
Я пробовал использовать готовые решения (закрытые библиотеки), которые предлагает к примеру S#. Там очень часто появляются ошибки, которые могут не исправляться просто годами. Во-вторых, непонятно, что происходит внутри и огромные задержки по скорости отправления заявок. Исходные коды стоят довольно дорого и в конце неизвестно то же, что будет тебя ждать.
Поскольку я сам программист, пришлось написать эти коннекторы самому.
От перепутья коннекторов, технологий и пересечения, какой подходит под какие задачи вы офигеете.
И честно скажу полный хаос также твориться и в описании документации к этим подключениям у самой биржи.
С одной стороны высокий барьер входа это хорошо и позволяет реализовывать простые арбитражные схемы на российском рынке, что нельзя было бы сделать к примеру на других рынках. Но с другой стороны — это просто ад и кошмар. Все запутано, документация крайне не дружелюбна, нормальных примеров нет.
Алгоритмическая торговля — это быстро развивающаяся область, которая использует математические модели и компьютерные алгоритмы для совершения сделок на финансовых рынках. Линейная алгебра — это фундаментальная математическая концепция, которая играет решающую роль во многих алгоритмических торговых стратегиях.
Линейная алгебра — это раздел математики, который имеет дело с линейными уравнениями и их представлениями в векторных пространствах. В алгоритмической торговле линейная алгебра используется для моделирования финансовых рынков и прогнозирования будущих рыночных тенденций. Например, линейная регрессия является популярным методом, используемым для моделирования взаимосвязи между зависимой переменной и одной или несколькими независимыми переменными. Этот метод может быть использован для прогнозирования цен на акции, курсов иностранных валют или других финансовых инструментов.
Другим важным применением линейной алгебры в алгоритмической торговле является анализ главных компонент (PCA). PCA — это статистический метод, который уменьшает размерность набора данных путем нахождения основных компонентов, которые представляют собой линейные комбинации исходных переменных, объясняющих наибольшие различия в данных. В алгоритмической торговле PCA может использоваться для определения наиболее важных факторов, влияющих на цены финансовых инструментов. Уменьшая размерность данных, PCA позволяет трейдерам сосредоточиться на наиболее важных переменных и делать более точные прогнозы относительно будущих рыночных тенденций.
#property copyright "Copyright 2019, Example Inc." #property link "https://www.example.com" input int LotSize = 1; input int Period = 30; input double VolatilityThreshold = 0.1; input int ExitAfterMinutes = 60; int buyOrderId; int sellOrderId; datetime entryTime; void OnTick() { // Get the last Period candlesticks ArraySetAsSeries(candles, true); CopyRates(Symbol(), PERIOD_M1, TimeCurrent() - Period, Period, candles); // Calculate the maximum and minimum prices double maxPrice = High(candles); double minPrice = Low(candles); // Calculate the standard deviation of the closing prices double stdev = iStdDev(candles, MODE_CLOSE, 0); // Check if the volatility is above the threshold if (stdev > VolatilityThreshold) { // Check if the current ask price is higher than the maximum price if (Ask > maxPrice) { // Place a buy order if (OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, "My order", 16384, 0, Green)) { Print("Buy order placed"); buyOrderId = OrderTicket(); entryTime = TimeCurrent(); } else { Print("Error placing buy order : ", ErrorDescription(GetLastError())); } } // Check if the current bid price is lower than the minimum price if (Bid < minPrice) { // Place a sell order if (OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, 0, 0, "My order", 16384, 0, Red)) { Print("Sell order placed"); sellOrderId = OrderTicket(); entryTime = TimeCurrent(); } else { Print("Error placing sell order : ", ErrorDescription(GetLastError())); } } } if (buyOrderId > 0) { if (TimeCurrent() - entryTime >= ExitAfterMinutes * 60) { if (OrderClose(buyOrderId, LotSize, Bid, 3, clrNONE)) { Print("Buy order closed"); buyOrderId = 0; } else { Print("Error closing buy order : ", ErrorDescription(GetLastError())); } } } if (sellOrderId > 0) { if (TimeCurrent() - entryTime >= ExitAfterMinutes * 60) { if (OrderClose(sellOrderId, LotSize, Ask, 3, clrNONE)) { Print("Sell order closed"); sellOrderId = 0; } else { Print("Error closing sell order : ", ErrorDescription(GetLastError())); } } } }
Сегодня вышла версия OptionVictory (OptionFVV) 2.3.7 с поддержкой моделирования позиций в новых премиальных опционах на акции.
ВАЖНО: новая версия требует изменения настроек таблицы текущих торгов в Quik: нужно добавить последним столбец Код класса.
Чтобы работать с премиальными опционами, нужно добавить в начало таблицы соответствующую акцию (туда же, куда добавляем фьючи), базовые активы должны идти в таблице первыми, а потом добавить интересующие серии опционов на акции (их можно найти по хвосту _CLT).
Получится что-то такое:
Дальше открываем OptionVictory и запускаем вывод по DDE из Quik.
Собираем моделируемую опционную позицию из премиальных опционов