Получение финансовых данных на Python

В этом разделе мы сначала рассмотрим простой пример количественной торговли на Python, использующий стратегию скользящей средней с данными Yahoo Finance.

Основная идея этой стратегии — генерировать сигналы на покупку и продажу путём сравнения краткосрочной и долгосрочной скользящих средних.

Перед реализацией этого простого примера необходимо установить три пакета:

pip install pandas numpy matplotlib yfinance

Описания пакетов:

  • pandas— это мощная библиотека с открытым исходным кодом для обработки и анализа данных, специально предназначенная для эффективного анализа и манипулирования данными.
  • numpyОбеспечивает поддержку массивов и матриц для математических вычислений.
  • yfinance— это библиотека для получения финансовых данных, поддерживающая извлечение данных об акциях, индексах и других данных финансового рынка из Yahoo Finance.
  • matplotlib— это библиотека для построения 2D-графиков, используемая для создания статических, анимированных и интерактивных диаграмм визуализации данных.

Получение исторических данных об акциях

Используйте yfinance для получения исторических данных об акциях. Вот простой пример:

Пример

import yfinance as yf

# Получение данных об акциях
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 yfinance as yf
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 pandas as pd
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 yfinance as yf
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. Стратегия высокочастотной торговли

  • Идея стратегии:Извлекать выгоду из небольших разниц в ценах за чрезвычайно короткие периоды путём быстрого совершения большого количества сделок.

  • Метод реализации:Использовать высокопроизводительные алгоритмы и быстрые системы исполнения, обычно предполагающие большое количество сделок и короткие периоды удержания.

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

Другие расширения