Избранное трейдера WooDoo
Приветствую.
Готов поделиться опытом работы с российскими коннекторами прямого доступа к московской биржи (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.
Собираем моделируемую опционную позицию из премиальных опционов