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
