Получение финансовых данных на Python
В этом разделе мы сначала рассмотрим простой пример количественной торговли на Python, использующий стратегию скользящей средней с данными Yahoo Finance.
Основная идея этой стратегии — генерировать сигналы на покупку и продажу путём сравнения краткосрочной и долгосрочной скользящих средних.
Перед реализацией этого простого примера необходимо установить три пакета:
pip install pandas numpy matplotlib yfinance
Описания пакетов:
- pandas— это мощная библиотека с открытым исходным кодом для обработки и анализа данных, специально предназначенная для эффективного анализа и манипулирования данными.
- numpyОбеспечивает поддержку массивов и матриц для математических вычислений.
- yfinance— это библиотека для получения финансовых данных, поддерживающая извлечение данных об акциях, индексах и других данных финансового рынка из Yahoo Finance.
- matplotlib— это библиотека для построения 2D-графиков, используемая для создания статических, анимированных и интерактивных диаграмм визуализации данных.
Получение исторических данных об акциях
Используйте yfinance для получения исторических данных об акциях. Вот простой пример:
Пример
# Получение данных об акциях
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"
data = yf.download(symbol, start=start_date, end=end_date)
print(data.head())
Вывод следующий:
Open High Low Close Adj Close Volume
Date
2022-01-04 2055.00000 2068.949951 2014.000000 2051.229980 1973.508057 3384262
2022-01-05 2045.00000 2065.000000 2018.000000 2024.000000 1947.309937 2839551
2022-01-06 2022.01001 2036.000000 1938.510010 1982.219971 1907.112915 5179475
2022-01-07 1975.00000 1988.880005 1939.319946 1942.000000 1868.416870 2981669
2022-01-10 1928.01001 1977.000000 1917.550049 1966.000000 1891.507446 2962670
Простой анализ данных и визуализация
Используйте pandas для анализа данных и matplotlib для визуализации:
Пример
import pandas as pd
import matplotlib.pyplot as plt
# Получение данных об акциях
symbol = "600519.SS"
start_date = "2022-01-01"
end_date = "2023-01-01"
data = yf.download(symbol, start=start_date, end=end_date)
# Простой анализ данных
print(data.describe())
# Построение графика тренда цены акций
data['Close'].plot(figsize=(10, 6), label=символ)
plt.title(f"Цена акций {symbol}")
plt.xlabel("Дата")
plt.ylabel("Цена")
plt.legend()
plt.show()
График тренда показан ниже:

Стратегия пересечения скользящих средних
Затем мы можем использовать библиотеку Yahoo Finance (yfinance), чтобы получить данные об акциях Гуйчжоу Moutai (600519.SS) и продемонстрировать простой пример на основе стратегии скользящей средней:
Пример
import yfinance as yf
import matplotlib.pyplot as plt
# Получение данных об акциях Гуйчжоу Moutai
symbol = "600519.SS"
start_date = "2022-05-01"
end_date = "2023-12-01"
data = yf.download(symbol, start=start_date, end=end_date)
# Рассчитать краткосрочную (50-дневную) и долгосрочную (200-дневную) скользящие средние
data['MA_50'] = data['Close'].rolling(window=50).mean()
data['MA_200'] = data['Close'].rolling(window=200).mean()
# Сгенерировать сигналы на покупку/продажу
data['Signal'] = 0
data['Signal'][data['MA_50'] > data['MA_200']] = 1 # Краткосрочная MA пересекает долгосрочную MA снизу вверх, генерируя сигнал на покупку
data['Signal'][data['MA_50'] < data['MA_200']] = -1 # Краткосрочная MA пересекает долгосрочную MA сверху вниз, генерируя сигнал на продажу
# Построить график цены акции и скользящих средних
plt.figure(figsize=(10, 6))
plt.plot(data['Close'], label='Цена закрытия')
plt.plot(data['MA_50'], label='50-дневная скользящая средняя')
plt.plot(data['MA_200'], label='200-дневная скользящая средняя')
# Отметить сигналы на покупку/продажу
plt.scatter(data[data['Signal'] == 1].index, data[data['Signal'] == 1]['MA_50'], marker='^', color='g', label='Сигнал покупки')
plt.scatter(data[data['Signal'] == -1].index, data[data['Signal'] == -1]['MA_50'], marker='v', color='r', label='Сигнал продажи')
plt.title("Цена акций Moutai со скользящими средними")
plt.xlabel("Дата")
plt.ylabel("Цена (CNY)")
plt.legend()
plt.show()
В приведённом выше примере кода используются данные акций Guizhou Moutai (600519.SS) для расчёта 50-дневной и 200-дневной скользящих средних и генерации сигналов покупки/продажи путём сравнения соотношения между ними.
Наконец, Matplotlib используется для построения графика тренда цены акций и отметки сигналов покупки/продажи.
Помните, что нужно тщательно исследовать и тестировать стратегии в реальной торговле, и не совершайте реальных инвестиций, основываясь непосредственно на вышесказанном.
Выполните приведённый выше код, итоговый график выглядит следующим образом: зелёные части — это сигналы покупки, красные — сигналы продажи. Щёлкните по изображению, чтобы увеличить его и увидеть подробности:
Стратегия бэктестинга
Я использовал положительную или отрицательную дневную доходность акций для генерации торговых сигналов, чтобы продемонстрировать простой пример. Вы можете изменить это условие в соответствии с вашей собственной стратегией.
Пример
import pandas as pd
import matplotlib.pyplot as plt
# Получение данных об акциях
symbol = "600519.SS"
start_date = "2023-01-01"
end_date = "2023-12-01"
data = yf.download(symbol, start=start_date, end=end_date)
# Инициализировать столбец сигнала пересечения
data['Signal'] = 0
# Рассчитать дневные доходности
data['Daily_Return'] = data['Close'].pct_change()
# Расчет сигналов стратегии
data['Signal'] = 0
data.loc[data['Daily_Return'] > 0, 'Signal'] = 1 # Использовать рост цены в качестве сигнала; при необходимости изменить условие
# Расчет доходности стратегии
data['Strategy_Return'] = data['Signal'].shift(1) * data['Daily_Return']
# Рассчитать кумулятивную доходность
data['Cumulative_Return'] = (1 + data['Strategy_Return']).cumprod()
# Построить кривую накопленной доходности
plt.figure(figsize=(10, 6))
plt.plot(data['Cumulative_Return'], label='Накопленная доходность стратегии', color='b')
plt.plot(data['Close'] / data['Close'].iloc[0], label='Накопленная доходность акции', color='g')
plt.title("Накопленная доходность стратегии по сравнению с акцией")
plt.xlabel("Дата")
plt.ylabel("Совокупная доходность")
plt.legend()
plt.show()
Выполните приведенный выше код, график вывода будет следующим:

Базовые стратегии количественной торговли
Количественная торговля основана на математических моделях, статистике и компьютерных алгоритмах, выявляя и исполняя торговые возможности с помощью систематических методов.
Ниже приведены некоторые распространенные базовые стратегии количественной торговли:
Количественная торговля основана на математических моделях, статистике и компьютерных алгоритмах, выявляя и исполняя торговые возможности с помощью систематических методов.
Ниже приведены некоторые распространенные базовые стратегии количественной торговли:
1. Стратегия скользящей средней
Идея стратегии:На основе исторического среднего цен акций сигналы покупки и продажи генерируются путем расчета разницы между краткосрочной и долгосрочной скользящими средними.
Метод реализации:Рассчитайте краткосрочную и долгосрочную скользящие средние. Когда краткосрочная скользящая средняя пересекает долгосрочную скользящую среднюю снизу вверх, генерируется сигнал покупки; в противном случае генерируется сигнал продажи.
2. Стратегия возврата к среднему
Идея стратегии:На основе исторических колебаний цены предполагается, что цены вернутся к своему среднему уровню после колебаний.
Метод реализации:Путем расчета разницы между ценой и средним значением генерируется сигнал на покупку или продажу, когда цена слишком сильно отклоняется от среднего значения.
3. Стратегия моментума
Идея стратегии:На основе ценовых трендов предполагается, что ценовые тренды будут продолжаться в течение некоторого времени.
Метод реализации:Сигналы на покупку или продажу генерируются путем расчета скорости изменения цены или других индикаторов тренда.
4. Рыночно-нейтральная стратегия
Идея стратегии:Путем одновременной покупки и продажи можно воспользоваться относительной силой рынка.
Метод реализации:Генерировать торговые сигналы на основе разницы цен или корреляции между двумя или более связанными активами.
5. Стратегия статистического арбитража
Идея стратегии:На основе статистических принципов осуществляется поиск временных дисбалансов между ценами для осуществления арбитража.
Метод реализации:Генерировать торговые сигналы путем поиска выбросов в ценах, волатильности или других статистических показателях.
6. Событийно-ориентированная стратегия
Идея стратегии:Генерировать торговые сигналы на основе возникновения конкретных событий или информации.
Метод реализации:Отслеживайте новости, финансовые отчёты, экономические показатели и т. д. и совершайте сделки при возникновении конкретных событий.
7. Стратегия машинного обучения
Идея стратегии:Использовать алгоритмы машинного обучения для выявления закономерностей в больших объёмах данных и прогнозирования будущих ценовых трендов.
Метод реализации:Использовать модели регрессии, классификации или глубокого обучения и обучать модели для прогнозирования рыночных трендов.
8. Стратегия высокочастотной торговли
Идея стратегии:Извлекать выгоду из небольших разниц в ценах за чрезвычайно короткие периоды путём быстрого совершения большого количества сделок.
Метод реализации:Использовать высокопроизводительные алгоритмы и быстрые системы исполнения, обычно предполагающие большое количество сделок и короткие периоды удержания.
Эти стратегии — лишь небольшая часть области количественной торговли. На самом деле стратегии количественной торговли бывают самыми разными и могут корректироваться в зависимости от рынка, класса активов и предпочтений трейдера. Важно, что разработка количественных стратегий требует тщательного бэктестинга и внимательного отношения к управлению рисками, чтобы обеспечить их эффективность в различных рыночных условиях.
Другие расширения