K 線 – Candlestick

      在〈K 線 – Candlestick〉中尚無留言

Candlestick

Candlestick(K 線)是股市技術分析中常見的圖表型態,用來呈現一段時間內的價格變化。

每一根 K 線包含四個關鍵資訊:

開盤價(Open)
收盤價(Close)
最高價(High)
最低價(Low)

中間的長方形稱為「實體」,表示開盤與收盤之間的價格區間;上下延伸的細線則稱為「影線」,代表該時間內的最高與最低價格波動。

透過 K 線圖,可以快速觀察市場在特定時間內的多空力道與價格走勢。

完整代碼如下

todo

from datetime import datetime, timedelta
import dash
import plotly
import yfinance as yf
import plotly.graph_objects as go

from dash import dcc, html
from dash.dependencies import Input, Output
import pandas as pd
app = dash.Dash()
ticker = "GC=F"
name = "黃金期貨"
app.layout = html.Div([
    #html.H2("黃金期貨"),
    dcc.Graph(
        id="chart",
        style={"height": "900px"}
    ),

    # 每分鐘更新一次
    dcc.Interval(
        id="interval-component",
        interval=60 * 1000,  # 毫秒
        n_intervals=0
    )
])

# 更新圖表
@app.callback(
    Output("chart", "figure"),
    Input("interval-component", "n_intervals")
)
def update_chart(n):
    fig = go.Figure() #需寫在此處,不然 trace 會一直疊家
    df = yf.download(
        ticker,
        period="5d",
        interval="1m",
        progress=False,
        auto_adjust=True
    )
    # 移除 MultiIndex
    if hasattr(df.columns, "levels"):
        df.columns = df.columns.droplevel(1)

    # 轉台北時間
    if df.index.tz is not None:
        df.index = df.index.tz_convert("Asia/Taipei")

    current = pd.Timestamp.now(tz="Asia/Taipei")
    start = current - timedelta(hours=3)
    df = df.query("index >= @start")

    print(df)

    fig.add_trace(
        go.Candlestick(
            x=df.index,
            open=df["Open"],
            high=df["High"],
            low=df["Low"],
            close=df["Close"],
            increasing=dict(
                line=dict(width=1),
                fillcolor="green"
            ),
            decreasing=dict(
                line=dict(width=1),
                fillcolor="red"
            ),
        ),
    )
    # fig.add_trace(
    #     go.Scatter(
    #         x=df.index,
    #         y=df["Close"],
    #         mode="lines",
    #         line=dict(width=2, color="lightblue"),
    #     )
    # )
    fig.update_layout(
        showlegend = False,
        hovermode = "x unified",
        title = f"{name}:{datetime.now().strftime("%Y-%m-%d %H:%M")}",
    )
    fig.update_xaxes(rangeslider_visible=False)#取消滑桿
    return fig

# 啟動
if __name__ == "__main__":
    app.run(
        host="0.0.0.0",
        port=8050,
        debug=True
    )

結果如下

todo

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *