Python gráfico de velas para acciones cuantitativas

Podemos, a través deel módulo pyecharts de Pythondibujar gráficos de velas de acciones.

pyecharts es una biblioteca de visualización de datos de Python basada en ECharts, que permite a los usuarios generar varios tipos de gráficos interactivos y visualizaciones de datos usando el lenguaje Python.

Ver el contenido del módulo pyecharts de Python:Módulo pyecharts de Python。

En pyecharts, se puede usar el gráfico de velas (Kline) para mostrar la tendencia de las acciones. El gráfico de velas se utiliza principalmente para mostrar datos financieros, como el precio de apertura, el precio de cierre, el precio máximo, el precio mínimo, etc.

Primero, asegúrate de que has instalado pyecharts:

pip install pyecharts

Usamos los datos de Yahoo Finance para obtener datos de acciones del último año. Podemos usar la biblioteca yfinance:

pip install yfinance

Uso del gráfico de velas

Importar los módulos relacionados:

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

Preparar los datos:

Los datos del gráfico Kline suelen ser una matriz bidimensional que contiene precio de apertura, precio de cierre, precio máximo y precio mínimo, por ejemplo:

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

Configurar el gráfico 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 示例"),
    )
)

Aquí, se usa add_xaxis para establecer los datos del eje x, se usa add_yaxis para agregar la serie de datos Kline, y set_global_opts se utiliza para establecer la configuración global, incluyendo el título, etc.

Renderizar el gráfico:

kline.render("kline_chart.html")

Renderiza el gráfico Kline en un archivo HTML.

Ejemplo

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

# Preparar los datos
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],
    # ... more data
]

# Configurar el gráfico 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="Ejemplo de Kline"),
    )
)

# Renderizar el gráfico
kline.render("kline_chart.html")

Explicación:

  • Tenemos un conjunto de datos llamadodata, que contiene datos financieros diarios, incluyendo precio de apertura, precio de cierre, precio máximo y precio mínimo.
  • Hemos creado una instancia deKline, usandoadd_xaxispara establecer los datos del eje x (en este caso, las fechas), y usandoadd_yaxispara agregar la serie de datos Kline.
  • Usarset_global_optspara establecer opciones globales, como el zoom de los ejes x e y, así como el título del gráfico.
  • Finalmente, usamosrenderpara renderizar el gráfico en un archivo HTML.

En el directorio actual se generará un archivo kline_chart.html. Al abrir ese archivo, el gráfico se mostrará de la siguiente manera:

A continuación se muestra un código de ejemplo que demuestra cómo obtener los datos de las acciones de Kweichow Moutai y generar un gráfico de velas:

Ejemplo

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

# Obtener los datos de las acciones de Kweichow Moutai de los últimos tres años
symbol = '600519.SS'  # 600519.SS es el código de las acciones de Kweichow Moutai
start_date = '2020-01-01'
end_date = '2022-12-31'

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

# Extraer el formato de datos necesario para el gráfico de velas
kline_data = []
for index, row in stock_data.iterrows():
    kline_data.append([row['Open'], row['Close'], row['Low'], row['High']])

# Configurar el gráfico 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="Ejemplo de gráfico Kline de Kweichow Moutai"),
        datazoom_opts=[opts.DataZoomOpts()],
        toolbox_opts=opts.ToolboxOpts(
            feature={
                "dataZoom": {"yAxisIndex": "none"},
                "restore": {},
                "saveAsImage": {},
            }
        ),
    )
)

# Renderizar el gráfico
kline.render("maotai_kline_chart.html")

En el directorio actual se generará un archivo maotai_kline_chart.html. Al abrir ese archivo, el gráfico se mostrará de la siguiente manera:

Dibujar gráfico de líneas

También podemos usar pyecharts para dibujar un gráfico de líneas simple de las acciones, tomando como ejemplo Moutai (600519.SH):

Ejemplo

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

# Establecer el código de las acciones de Moutai
stock_code = "600519.SS"

# Obtener la fecha actual
end_date = datetime.now().strftime('%Y-%m-%d')

# Calcular la fecha de hace tres años
start_date = (datetime.now() - timedelta(days=3 * 365)).strftime('%Y-%m-%d')

# Usar yfinance para obtener los datos de las acciones
df = yf.download(stock_code, start=start_date, end=end_date)

# Extraer las fechas y los precios de cierre de los datos
dates = df.index.strftime('%Y-%m-%d').tolist()
closing_prices = df['Close'].tolist()

# Crear el gráfico de líneas (Line)
line_chart = Line()
line_chart.add_xaxis(xaxis_data=dates)
line_chart.add_yaxis(series_name="Tendencia del precio de las acciones de Moutai",
                     y_axis=closing_prices,
                     markline_opts=opts.MarkLineOpts(
                         data=[opts.MarkLineItem(type_="average", name="Valor medio")]
                     )
                     )
line_chart.set_global_opts(
    title_opts=opts.TitleOpts(title="Gráfico de tendencia del precio de las acciones de Moutai (últimos tres años)"),
    xaxis_opts=opts.AxisOpts(type_="category"),
    yaxis_opts=opts.AxisOpts(is_scale=True),
    datazoom_opts=[opts.DataZoomOpts(pos_bottom="-2%")],
)

# Renderizar el gráfico
line_chart.render("maotai_stock_trend_chart.html")

En el directorio actual se generará un archivo maotai_stock_trend_chart.html. Al abrir ese archivo, el gráfico se mostrará de la siguiente manera:

Se puede considerar agregar algunas herramientas para el gráfico, como zoom de datos, vista de datos, etc., para mejorar la experiencia interactiva del usuario.

El siguiente es el código optimizado, que agrega las funciones de zoom de datos y vista de datos:

Ejemplo

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

# Establecer el código de las acciones de Moutai
stock_code = "600519.SS"

# Obtener la fecha actual
end_date = datetime.now().strftime('%Y-%m-%d')

# Calcular la fecha de hace tres años
start_date = (datetime.now() - timedelta(days=3 * 365)).strftime('%Y-%m-%d')

# Usar yfinance para obtener los datos de las acciones
df = yf.download(stock_code, start=start_date, end=end_date)

# Extraer las fechas y los precios de cierre de los datos
dates = df.index.strftime('%Y-%m-%d').tolist()
closing_prices = df['Close'].tolist()

# Crear el gráfico de líneas (Line)
line_chart = Line()
line_chart.add_xaxis(xaxis_data=dates)
line_chart.add_yaxis(series_name="Tendencia del precio de las acciones de Moutai",
                     y_axis=closing_prices,
                     markline_opts=opts.MarkLineOpts(
                         data=[opts.MarkLineItem(type_="average", name="Valor medio")]
                     )
                     )
line_chart.set_global_opts(
    title_opts=opts.TitleOpts(title="Gráfico de tendencia del precio de las acciones de Moutai (últimos tres años)"),
    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(
        feature={
            "dataZoom": {"yAxisIndex": "none"},
            "restore": {},
            "saveAsImage": {},
        }
    ),
)

# Renderizar el gráfico
line_chart.render("maotai_stock_trend_chart2.html")

En el directorio actual se generará un archivo maotai_stock_trend_chart2.html. Al abrir ese archivo, el gráfico se mostrará de la siguiente manera:

Otras extensiones