Chart
KLineChart - K线图表
创建和管理K线图表,用于可视化策略运行状态。
语法
python
# 创建图表
chart = KLineChart()
# 创建叠加图表
chart = KLineChart({"overlay": True})参数
| 参数名 | 类型 | 必选 | 默认值 | 说明 |
|---|---|---|---|---|
| options | dict | 否 | {} | 图表配置选项 |
options 配置
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| overlay | bool | False | 是否叠加到主图(True)还是独立子图(False) |
方法
add(series, data, index)
添加数据点到图表。
参数:
series(str): 数据系列名称data(number/list): 数据值或数据数组index(int, 可选): K线索引,默认为最新K线
示例:
python
# 添加单个数据点
chart.add("MA5", 50000)
# 添加多个数据点
chart.add("MA5", [49000, 49500, 50000, 50500, 51000])
# 添加到指定K线
chart.add("Signal", 1, index=-5) # 倒数第5根K线update()
更新图表显示。调用此方法后,数据会发送到前端显示。
示例:
python
chart.update()reset()
清空图表所有数据。
示例:
python
chart.reset()示例
示例1: 绘制均线
python
def init():
global chart
# 创建图表
chart = KLineChart({"overlay": True})
def main():
while True:
# 获取K线数据
records = exchange.GetRecords()
if len(records) < 30:
Sleep(5000)
continue
# 计算MA5和MA10
ma5 = sum([r['Close'] for r in records[-5:]]) / 5
ma10 = sum([r['Close'] for r in records[-10:]]) / 10
# 添加到图表
chart.add("MA5", ma5)
chart.add("MA10", ma10)
chart.update()
Sleep(5000)示例2: 买卖信号标记
python
def init():
global chart
chart = KLineChart({"overlay": True})
def main():
while True:
records = exchange.GetRecords()
if len(records) < 20:
Sleep(5000)
continue
# 计算信号
ma5 = sum([r['Close'] for r in records[-5:]]) / 5
ma20 = sum([r['Close'] for r in records[-20:]]) / 20
# 金叉买入信号
if ma5 > ma20:
chart.add("BuySignal", records[-1]['Low'] * 0.98)
Log("✅ 买入信号")
# 死叉卖出信号
if ma5 < ma20:
chart.add("SellSignal", records[-1]['High'] * 1.02)
Log("❌ 卖出信号")
chart.update()
Sleep(5000)示例3: 绘制MACD指标
python
def init():
global macd_chart
# 创建独立子图
macd_chart = KLineChart({"overlay": False})
def calculate_macd(records, short=12, long=26, signal=9):
"""计算MACD指标"""
closes = [r['Close'] for r in records]
# 计算EMA
ema_short = closes[-1] # 简化版,实际应使用真实EMA
ema_long = sum(closes[-long:]) / long
# MACD线
macd = ema_short - ema_long
# 信号线
signal_line = macd # 简化版
# 柱状图
histogram = macd - signal_line
return macd, signal_line, histogram
def main():
while True:
records = exchange.GetRecords()
if len(records) < 30:
Sleep(5000)
continue
# 计算MACD
macd, signal, hist = calculate_macd(records)
# 绘制到图表
macd_chart.add("MACD", macd)
macd_chart.add("Signal", signal)
macd_chart.add("Histogram", hist)
macd_chart.update()
Sleep(5000)示例4: 多条均线
python
def init():
global chart
chart = KLineChart({"overlay": True})
def main():
while True:
records = exchange.GetRecords()
if len(records) < 60:
Sleep(5000)
continue
# 计算多条均线
ma5 = sum([r['Close'] for r in records[-5:]]) / 5
ma10 = sum([r['Close'] for r in records[-10:]]) / 10
ma20 = sum([r['Close'] for r in records[-20:]]) / 20
ma60 = sum([r['Close'] for r in records[-60:]]) / 60
# 添加到图表
chart.add("MA5", ma5)
chart.add("MA10", ma10)
chart.add("MA20", ma20)
chart.add("MA60", ma60)
chart.update()
Sleep(5000)示例5: 布林带
python
import math
def init():
global chart
chart = KLineChart({"overlay": True})
def calculate_bollinger(records, period=20, std_dev=2):
"""计算布林带"""
closes = [r['Close'] for r in records[-period:]]
# 中轨(SMA)
middle = sum(closes) / period
# 标准差
variance = sum([(c - middle) ** 2 for c in closes]) / period
std = math.sqrt(variance)
# 上轨和下轨
upper = middle + std_dev * std
lower = middle - std_dev * std
return upper, middle, lower
def main():
while True:
records = exchange.GetRecords()
if len(records) < 20:
Sleep(5000)
continue
# 计算布林带
upper, middle, lower = calculate_bollinger(records)
# 绘制
chart.add("BB_Upper", upper)
chart.add("BB_Middle", middle)
chart.add("BB_Lower", lower)
chart.update()
Sleep(5000)注意事项
-
数据系列: 每个系列名称对应图表上的一条线
-
更新频率: 调用
update()后数据才会显示,建议按固定间隔更新 -
叠加vs子图:
overlay=True: 绘制在主K线图上(如均线)overlay=False: 独立子图(如MACD、RSI)
-
数据持久化: 图表数据存储在服务器,刷新页面后仍可查看
-
性能考虑: 过于频繁的更新可能影响性能,建议间隔至少1秒
-
索引说明:
- 不指定index: 添加到最新K线
- 负数index: 倒数第N根K线 (-1为最新)
- 正数index: 第N根K线 (0为第一根)
相关 API
- GetRecords - 获取K线数据
- LogStatus - 显示状态信息