K-line график акций на Python для количественного анализа

Мы можем использоватьмодуль Python pyechartsдля построения графиков K-линий акций.

pyecharts — это библиотека визуализации данных на Python, основанная на ECharts. Она позволяет пользователям использовать Python для создания различных типов интерактивных графиков и визуализаций данных.

Просмотр содержимого модуля Python pyecharts:модуль Python pyecharts。

В pyecharts можно использовать график K-линии (Kline) для отображения динамики акций. Графики K-линии в основном используются для отображения финансовых данных, таких как цена открытия, цена закрытия, максимальная цена и минимальная цена акции.

Сначала убедитесь, что у вас установлен pyecharts:

pip install pyecharts

Мы используем данные Yahoo Finance, чтобы получить данные об акциях за последний год. Мы можем использовать библиотеку yfinance:

pip install yfinance

Использование графика K-линии

Импортируйте соответствующие модули:

from pyecharts import options as opts
from pyecharts.charts import Kline

Подготовьте данные:

Данные графика Kline обычно представляют собой двумерный массив, содержащий цену открытия, цену закрытия, максимальную цену и минимальную цену, например:

data = [
    [2320.26, 2320.26, 2287.3, 2362.94],
    [2300, 2291.3, 2288.26, 2308.38],
    # ...
]

Настройте график Kline:

kline = (
    Kline()
    .add_xaxis(xaxis_data=["2017-10-24", "2017-10-25", "2017-10-26", "2017-10-27"])
    .add_yaxis(series_name="Kline", y_axis=data)
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(is_scale=True),
        yaxis_opts=opts.AxisOpts(is_scale=True),
        title_opts=opts.TitleOpts(title="Kline 示例"),
    )
)

Здесь add_xaxis используется для задания данных оси x, add_yaxis используется для добавления серии данных Kline, а set_global_opts используется для настройки глобальных параметров, включая заголовок, и т. д.

Отрисуйте график:

kline.render("kline_chart.html")

Отрисуйте график Kline в HTML-файл.

Пример

from pyecharts import options as opts
from pyecharts.charts import Kline

# Подготовьте данные
data = [
    [2320.26, 2320.26, 2287.3, 2362.94],
    [2300, 2291.3, 2288.26, 2308.38],
    [2295.35, 2346.5, 2295.35, 2345.92],
    [2347.22, 2358.98, 2337.35, 2363.8],
    # ... больше данных
]

# Настройте диаграмму Kline
kline = (
    Kline()
    .add_xaxis(xaxis_data=["2017-10-24", "2017-10-25", "2017-10-26", "2017-10-27"])
    .add_yaxis(series_name="Kline", y_axis=data)
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(is_scale=True),
        yaxis_opts=opts.AxisOpts(is_scale=True),
        title_opts=opts.TitleOpts(title="Пример Kline"),
    )
)

# Отрисовать график
kline.render("kline_chart.html")

Пояснение:

  • У нас есть набор данных с именемdata, который содержит ежедневные финансовые данные, включая цену открытия, цену закрытия, максимальную цену и минимальную цену.
  • Мы создалиKlineэкземпляр, используемыйadd_xaxisдля установки данных оси X (в данном случае даты), и используемыйadd_yaxisдля добавления серии данных Kline.
  • Используйтеset_global_optsдля установки глобальных параметров, таких как масштабирование оси X и оси Y, и заголовка графика.
  • Наконец, мы используемrenderчтобы отрисовать график в HTML-файл.

Файл kline_chart.html будет создан в текущем каталоге. Откройте файл, и график отобразится следующим образом:

Ниже приведен пример кода, демонстрирующий, как получить данные об акциях Kweichow Moutai и сгенерировать график K-line:

Пример

import yfinance as yf
from pyecharts import options as opts
from pyecharts.charts import Kline

# Получить данные акций Kweichow Moutai за последние три года
symbol = '600519.SS'  # 600519.SS — это код акции Kweichow Moutai
start_date = '2020-01-01'
end_date = '2022-12-31'

stock_data = yf.download(symbol, start=start_date, end=end_date)

# Извлечь формат данных, необходимый для графика K-линий
kline_data = []
for index, row in stock_data.iterrows():
    kline_data.append([row['Open'], row['Close'], row['Low'], row['High']])

# Настройте диаграмму Kline
kline = (
    Kline()
    .add_xaxis(xaxis_data=stock_data.index.strftime('%Y-%m-%d').tolist())
    .add_yaxis(series_name="Kline", y_axis=kline_data)
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(is_scale=True),
        yaxis_opts=opts.AxisOpts(is_scale=True),
        title_opts=opts.TitleOpts(title="Пример Kline-графика Kweichow Moutai"),
        datazoom_opts=[opts.DataZoomOpts()],
        toolbox_opts=opts.ToolboxOpts(
            особенность={
                "dataZoom": {"yAxisIndex": "none"},
                "restore": {},
                "saveAsImage": {},
            }
        ),
    )
)

# Отрисовать график
kline.render("maotai_kline_chart.html")

Файл maotai_kline_chart.html будет создан в текущем каталоге. Откройте файл, и диаграмма отобразится следующим образом:

Построение линейного графика

Мы также можем использовать pyecharts, чтобы построить простой линейный график акции, взяв в качестве примера Moutai (600519.SH):

Пример

import yfinance as yf
from pyecharts import options as opts
from pyecharts.charts import Line
from datetime import datetime, timedelta

# Установите код акции Moutai
stock_code = "600519.SS"

# Получите текущую дату
end_date = datetime.now().strftime('%Y-%m-%d')

# Вычислите дату три года назад
start_date = (datetime.now() - timedelta(days=3 * 365)).strftime('%Y-%m-%d')

# Используйте yfinance для получения данных об акции
df = yf.download(stock_code, start=start_date, end=end_date)

# Извлеките даты и цены закрытия из данных
dates = df.index.strftime('%Y-%m-%d').tolist()
closing_prices = df['Close'].tolist()

# Создать линейный график
line_chart = Line()
line_chart.add_xaxis(xaxis_data=dates)
line_chart.add_yaxis(series_name="Динамика цены акций Moutai",
                     y_axis=closing_prices,
                     markline_opts=opts.MarkLineOpts(
                         data=[opts.MarkLineItem(type_="average", name="Среднее")]
                     )
                     )
line_chart.set_global_opts(
    title_opts=opts.TitleOpts(title="График динамики цены акций Moutai (за последние три года)"),
    xaxis_opts=opts.AxisOpts(type_="category"),
    yaxis_opts=opts.AxisOpts(is_scale=True),
    datazoom_opts=[opts.DataZoomOpts(pos_bottom="-2%")],
)

# Отрисовать график
line_chart.render("maotai_stock_trend_chart.html")

Файл maotai_stock_trend_chart.html будет создан в текущем каталоге. Откройте файл, и диаграмма отобразится следующим образом:

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

Ниже приведён оптимизированный код с добавленными функциями масштабирования данных и просмотра данных:

Пример

import yfinance as yf
from pyecharts import options as opts
from pyecharts.charts import Line
from pyecharts.commons.utils import JsCode
from datetime import datetime, timedelta

# Установите код акции Moutai
stock_code = "600519.SS"

# Получите текущую дату
end_date = datetime.now().strftime('%Y-%m-%d')

# Вычислите дату три года назад
start_date = (datetime.now() - timedelta(days=3 * 365)).strftime('%Y-%m-%d')

# Используйте yfinance для получения данных об акции
df = yf.download(stock_code, start=start_date, end=end_date)

# Извлеките даты и цены закрытия из данных
dates = df.index.strftime('%Y-%m-%d').tolist()
closing_prices = df['Close'].tolist()

# Создать линейный график
line_chart = Line()
line_chart.add_xaxis(xaxis_data=dates)
line_chart.add_yaxis(series_name="Динамика цены акций Moutai",
                     y_axis=closing_prices,
                     markline_opts=opts.MarkLineOpts(
                         data=[opts.MarkLineItem(type_="average", name="Среднее")]
                     )
                     )
line_chart.set_global_opts(
    title_opts=opts.TitleOpts(title="График динамики цены акций Moutai (за последние три года)"),
    xaxis_opts=opts.AxisOpts(type_="category"),
    yaxis_opts=opts.AxisOpts(is_scale=True),
    datazoom_opts=[
        opts.DataZoomOpts(
            pos_bottom="-2%",
            range_start=0,
            range_end=100,
            type_="inside"
        ),
        opts.DataZoomOpts(
            pos_bottom="-2%",
            range_start=0,
            range_end=100,
            type_="slider",
        ),
    ],
    toolbox_opts=opts.ToolboxOpts(
        особенность={
            "dataZoom": {"yAxisIndex": "none"},
            "restore": {},
            "saveAsImage": {},
        }
    ),
)

# Отрисовать график
line_chart.render("maotai_stock_trend_chart2.html")

В текущем каталоге будет создан файл maotai_stock_trend_chart2.html. Откройте файл, и график отобразится следующим образом:

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