Постов с тегом "Программирование": 328

Программирование


Общий финансовый анализ на Python (Часть 3)

    • 05 апреля 2020, 12:51
    • |
    • Aleks
  • Еще

После всех вычислений, приведенных в этой и этой публикациях, можно углубиться в статистический анализ и рассмотреть метод наименьших квадратов. Для этой цели используется библиотека statsmodels, которая позволяет пользователям исследовать данные, оценивать статистические модели и выполнять статистические тесты. За основу были взяты эта статья и эта статья. Само описание используемой функции на английском доступно по следующей ссылке.

Сначала немного теории:

О линейной регрессии

Линейная регрессия используется в качестве прогнозирующей модели, когда предполагается линейная зависимость между зависимой переменной (переменная, которую мы пытаемся предсказать) и независимой переменной (переменная и/или переменные, используемые для предсказания).



( Читать дальше )

Тинькофф API (поделитесь опытом)

Кто работал с Тинькофф API?

Поделитесь, пожалуйста, опытом работы

Какие подводные камни есть? Интересные фичи? И так далее

Планирую использовать его, для алгоритмической торговли на трад.рынке, из всех брокеров, у которых есть доступные API, пока остановился на нем

Общий финансовый анализ на Python (Часть 2)

    • 22 марта 2020, 13:48
    • |
    • Aleks
  • Еще
Ну что продолжим?

Скользящее окно(Moving Windows)

В заголовке я привел дословный перевод. Если кто меня поправит, и другой термин применяется — то спасибо.

Смысл скользящего окна– с каждым новым значением функция пересчитывается за заданный период времени. Этих функций большое количество. Для примера: rolling.mean(), rolling.std(), которые чаще всего и используют при анализе движения акций. rolling.mean() — это обычная скользящая средняя, которая сглаживает краткосрочные колебания и позволяет визуализировать общую тенденцию.

# Выделяю скорректированную цену закрытия 
adj_close_px = sber['Adj Close']

# Вычисляю скользящую среднию
moving_avg = adj_close_px.rolling(window=40).mean()

# Вывожу результат
print(moving_avg[-10:])
Общий финансовый анализ на Python (Часть 2)
Дальше построим график, чтоб лучше понять то, что получается в результате работы данной функции:
# Вычисление короткой скользящей средней
sber['40'] = adj_close_px.rolling(window=40).mean()

# Вычисление длинной скользящей средней
sber['252'] = adj_close_px.rolling(window=252).mean()

# Построение полученных значений
sber[['Adj Close', '40', '252']].plot(figsize=(20,20))

plt.show()


( Читать дальше )

Что делать? Из трейдера в программисты

Совет всем кто торгует больше полутора лет а результатов нет, прям стишок.
Очень коротко о себе, торговал 6 лет (2 сам, 2 в инвест компании, 2 в банках(СВА, и Откр) результатов выдающихся нет(сам около 0, в инвест комп была пирамида на облигах с дох 12%, в банке около 20%, и потом пчти все в 0 после 14 года). Сейчас программист зп ~200к, бэкенд питон.
Если б не потерял 6 лет на дрочку в торговле сейчас была бы зп 300-500К.
После вторника куча постов появилась, я все потерял, но я встану с колен соберу деньжат, прочитаю Кукурузкина, Герчика, Васю и вернусь и все бу дет по другому, да них*я не будет, ничего не поменяется, ты так же будешь сидеть с потными ладошками и торговать 30 фьючерс Ри, и будешь рад как ребенок заработав 30К в день, и наоборот хмур как туча, зол на себя, семью, аллаха, погоду и тд и будешь дальше проебыв*ать свое время и жизнь.

Сейчас it является лучшим направлением развития из всех существующих для среднестатистического человека.
Под it я понимаю программистов и смежное, например веб дизайнеры, верстальщики, аналитики. Мне проще говорить за программистов, коим я и являюсь, в Москве, да в регионах посложнее с вакансиями и зп ниже чем в столице раза в 2, но главное время и желание.

Безграничный рост, да может миллиардером не стать, как половина трейдеров смартлаба, но 100-300 тыс зарабатывать в мес реально, оттуда где есть интернет, да нужно потратить время на изучение, но его сейчас тратите на бесполезный трейдинг а результата нет и никто не может его гарантировать, и статистика не на вашей стороне, да вы думаете что вы избранный и тратя по 10-12 часов в день вы скоро будите видеть кукла, невидимую руку, точки входа и выхода, предсказывать график на год вперед, да хер там. 

Разумный порог входа, да не получится через неделю устроится на 50К, но все время которое ты инвестируешь в изучение программирования оно прямо пропорционально твоей зп. Куча материалов в бесплатном доступе, есть все необходимое для самостоятельного обучения. За полгода плотного изучения или год занимаясь по 5 часов в неделю можно стать джуном в своей области, если ты совсем не тупой.

Какой то сумбур написал)) В общем все в it, все реально, трейдинг это то что вам точно не нужно, легких денег не бывает и мое мнение что трейдингом ни в каком виде заработать нельзя, главное не потерять, хотя поправочку наверное внесу, трейдингом можно заработать когда ты прикрыт с финансовой стороны и потеря депозита будет имен не самое сильное влияние на псих состояние, и вот когда ты прикрыт и трейдинг типа хобби, ты спокойно все оцениваешь и начинает получатся только тогда можно смещать фокус в сторону торговли.
В it сидишь, что то делаешь, нет авралов, зп большая, ты развиваешься постоянно ты и в 50 будешь программистом, а если еще и не сидел на месте ты будешь ТОПовым  программистом, зал на этаж ниже, бассейн в 200 метрах, настольный теннис, массажный кабинет, куча других плющек.
Кто живет в Москве обязательно сходить на экскурсию в офис mail, yandex, avito, посмотреть как можно работать и как норм компании относятся к работнику


Супер ускорение расчета индикаторов

Когда-то давно я занимался распознавание образов и использовал такую вещь как интегральное представление изображения. И на самом деле этот же метод применим и в алготрейдинге, например для быстрого расчета SMA, или сбора статистики винрейта за указанный период. 

Например, был ценовой ряд из 6-ти элементов:

1.104, 1.102, 1.105, 1.106, 1.103, 1.101 

Найдем его интегральное представление (начнем с нуля):

0.0, 1.104, 2.206, 3.311, 4.417, 5.52, 6.621

Чему будет равно SMA за последние 3 элемента? Достаточно посчитать разницу: 6.621 - 3.311 и разделить ее на 3.

SMA(3) = (6.621 - 3.311)/3 = 1.103

Убедимся, что SMA(3) найдено верно. 

(1.106 + 1.103 + 1.101)/3 = 1.103

Таким образом можно найти SMA с любым периодом, совершив всего навсего одну операцию вычитания и одну операцию деления. Это позволит гораздо быстрее получить набор значений индикаторов типа SMA, RSI, STD_DEV.
Вроде все хорошо, НО НАДО ПОМНИТЬ, что если использовать тип данных с плавающей точкой, то у нас будет накапливаться ошибка. Поэтому ценовой ряд лучше сначала преобразовать в целочисленный тип. Для этого достаточно для 5-ти значных котировок умножить цену на число 100 000.

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




Про программирование в алготрейдинге и полезные навыки

По моему опыту в алготрейдинге (под алготрейдингом я подразумеваю поиск закономерностей и их использование) большая часть времени уходит на исследования, это примерно 90% времени. Однако, часто можно услышать критику примерно следующего плана.
  • Нужно писать код на питоне/джаве, можно в два счета набросать торгового робота. Нафиг Си и С++, сложна.
  • Не нужно изобретать велосипеды, все уже сделано за нас. Зря потратить время, бери готовое и действуй. Метатрейдер в помощь.
  • Нужно всегда писать чистый код, а не говнокод. 
Если все это верно, то получается, что успех в алготрейдинге (да и в IT) должен зависеть от этих факторов. Однако, к примеру, на практике большая часть доли в проекте принадлежит обычно не программистам (т.е. людям, которые вообще могут не уметь программировать), хороший код не обязательно принесет много денег, да и сложные алгоритмы порой без разницы, на каком языке реализовывать, быстрее они не напишутся.

Если объяснить проще, то успех не равен чистоте, хорошести и прочим характеристикам кода. Тогда почему происходит акцентуация на подобные факторы? 

( Читать дальше )

Библиотека С++ для загрузки экономических новостей

Есть один хороший сайт www.investing.com с экономическими новостями, которым пользуются многие трейдеры на Форексе. И решил я как-то раз попробовать посмотреть, что будет на бэктестинге торговли по новостям. Поковырявшись в страничке экономического календаря сделал в итоге С++ библиотеку для загрузки новостей. Для http запросов библиотека использует curl. Новости загружаются по UTC времени, загрузить их можно со времен начала эпохи UNIX

Класс для хранения одной новости:
/** \brief Класс Новостей
*/
class News
{
public:
	std::string name;          /**< Имя новости */
	std::string currency;      /**< Валюта новости */
	std::string country;       /**< Страна новости */
	int level_volatility = -1; /**< Уровень волатильности (-1 не инициализировано,  низкий уровень = 0, средний 1, высокий 2) */
	double previous;           /**< Предыдущее значение */
	double actual;             /**< Актуальное значение */
	double forecast;           /**< Предсказанное значение */
	bool is_previous = false;  /**< Наличие предыдущего значения */
	bool is_actual = false;    /**< Наличие актуального значения */
	bool is_forecast = false;  /**< Наличие предсказанного значения */
	uint64_t timestamp = 0;    /**< Метка времени новости */

	News() {};
};
Для хранения массива исторических данных новостей используется библиотека 

( Читать дальше )

Про тестирование стратегий на фьючерсах

    • 26 ноября 2019, 09:29
    • |
    • _sk_
  • Еще
Просто несколько строк про свой опыт.

Тестер стратегий у меня самописный (java), что даёт неплохую производительность и возможность запрограммировать именно то, что нужно мне.

Обычная склейка фьючерсов не используется из-за нестыковок цены соседних контрактов, которые портят как расчёт прибылей/убытков, так и значения индикаторов.

Свечные данные сохраняются из терминала QUIK скриптом на QLua в ежедневном режиме отдельно по каждому инструменту. Получается, что для каждого фьючерса есть вся его история в виде csv-файлов «финамовского» OHLCV-формата. Тестер умеет загружать временные ряды из этих файлов за любой период времени.

Для каждого фьючерса прописаны 3 даты: дата экспирации, день, предшествующий экспирации, и день экспирации предыдущего фьючерса. В коде это выглядит примерно так:

SiH9("Si-3.19", "SiH9", "Si", 20190321, 20190320, 20181220),
SiM9("Si-6.19", "SiM9", "Si", 20190620, 20190619, 20190321),
SiU9("Si-9.19", "SiU9", "Si", 20190919, 20190918, 20190620),
SiZ9("Si-12.19", "SiZ9", "Si", 20191219, 20191218, 20190919),

В торговых системах используется правило: не торгуем истекающим фьючерсом в день экспирации. Позиции по фьючерсу в торговый день, предшествующий дню экспирации, закрываются по цене закрытия этого дня, а в день экспирации торгуется новый фьючерс.

( Читать дальше )

Мой плейлист обогатился нефтяным отчетом (СА, дроны, ipo Арамко).

Кто читал об этой истории здесь: smart-lab.ru/blog/571765.php, тому это видео ни к чему. Хотя свежая информация присутствует.

Да что ходить вокруг, да около.
Смотрим и думаем… а что это было?



( Читать дальше )

....все тэги
UPDONW
Новый дизайн