KLineChart
该函数用于采用类似Pine语言的绘图方式,在策略运行时进行自定义绘图。
KLineChart(options)示例
-
若需在策略的自定义画图区域进行绘图,必须先创建图表控制对象,使用
KLineChart()函数创建该对象。KLineChart()函数的参数为一个图表配置结构,参考代码中使用的图表配置结构非常简单:{overlay: true}。该图表配置结构仅将绘图内容输出到图表的主图上。如果将
overlay设置为假值(例如false),则图表内容将全部输出到副图上;如果需要指定某个画图函数在主图上绘制,也可以在该函数的调用中将参数overlay指定为真值(例如true)。javascriptfunction main() { // 调用KLineChart函数创建图表控制对象c let c = KLineChart({ overlay: true }) while(true) { if (exchange.IO("status")) { break } Sleep(1000) } exchange.SetContractType("rb888") // 获取K线 let bars = exchange.GetRecords() if (!bars) { return } bars.forEach(function(bar, index) { c.begin(bar) c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') if (bar.Close > bar.Open) { c.bgcolor('rgba(0, 255, 0, 0.5)') } let h = c.plot(bar.High, 'high') let l = c.plot(bar.Low, 'low') c.fill(h, l, { color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)' }) c.hline(bar.High) c.plotarrow(bar.Close - bar.Open) c.plotshape(bar.Low, { style: 'diamond' }) c.plotchar(bar.Close, { char: 'X' }) c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9) if (bar.Close > bar.Open) { // long/short/closelong/closeshort c.signal("long", bar.High, 1.5) } else if (bar.Close < bar.Open) { c.signal("closelong", bar.Low, 1.5) } c.close(bar) }) }pythondef main(): # 调用KLineChart函数创建图表控制对象c c = KLineChart({ "overlay": True }) while True: if exchange.IO("status"): break Sleep(1000) exchange.SetContractType("rb888") # 获取K线 bars = exchange.GetRecords() if not bars: return for bar in bars: c.begin(bar) c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)') if bar.Close > bar.Open: c.bgcolor('rgba(0, 255, 0, 0.5)') h = c.plot(bar.High, 'high') l = c.plot(bar.Low, 'low') c.fill(h, l, 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)') c.hline(bar.High) c.plotarrow(bar.Close - bar.Open) c.plotshape(bar.Low, style = 'diamond') c.plotchar(bar.Close, char = 'X') c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9) if bar.Close > bar.Open: # long/short/closelong/closeshort c.signal("long", bar.High, 1.5) elif bar.Close < bar.Open: c.signal("closelong", bar.Low, 1.5) c.close(bar)rustfn main() { // 调用KLineChart::new创建图表控制对象c let mut c = KLineChart::new(r#"{"overlay": true}"#); // 判断连接期货公司前置机是否成功 while exchange.IO("status").unwrap_or_default() != "true" { Sleep(1000); } exchange.SetContractType("rb888").unwrap(); // 获取K线 let bars = exchange.GetRecords(None, None, None).unwrap(); for bar in &bars { c.begin(bar); c.barcolor(if bar.Close > bar.Open { "rgba(255, 0, 0, 0.2)" } else { "rgba(0, 0, 0, 0.2)" }, "{}"); if bar.Close > bar.Open { c.bgcolor("rgba(0, 255, 0, 0.5)", "{}"); } let h = c.plot(bar.High, r#"{"title": "high"}"#); let l = c.plot(bar.Low, r#"{"title": "low"}"#); c.fill(h, l, if bar.Close > bar.Open { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# } else { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# }); c.hline(bar.High, "{}"); c.plotarrow(bar.Close - bar.Open, "{}"); c.plotshape(bar.Low > 0.0, r#"{"style": "diamond"}"#); c.plotchar(bar.Close > 0.0, r#"{"char": "X"}"#); c.plotcandle(bar.Open * 0.9, bar.High * 0.9, bar.Low * 0.9, bar.Close * 0.9, "{}"); if bar.Close > bar.Open { // long/short/closelong/closeshort c.signal("long", bar.High, 1.5, "long"); } else if bar.Close < bar.Open { c.signal("closelong", bar.Low, 1.5, "closelong"); } c.close(); } }c++// 暂不支持 -
使用
pricePrecision和volumePrecision参数控制图表数据的显示精度。可根据实际需求设置价格与成交量的显示精度:例如,对于价格波动较大的品种,可将精度设置为 0 以显示整数;对于价格较为精细的品种,可设置为 2 或更高精度。javascriptfunction main() { // 创建图表控制对象,设置价格精度为 0(整数)、成交量精度为 0(整数) let c = KLineChart({ overlay: true, pricePrecision: 0, // 价格数据精度,例如设置为 2 即保留 2 位小数 volumePrecision: 0 // 成交量数据精度 }) // 等待交易所连接就绪 while (true) { if (exchange.IO("status")) { break } Sleep(1000) } // 设置合约类型(以螺纹钢主力合约为例) exchange.SetContractType("rb888") Log("Test symbol: rb888") // 获取 K 线数据 let bars = exchange.GetRecords() if (!bars) { return } // 遍历 K 线数据并绘制图表 bars.forEach(function(bar, index) { c.begin(bar) c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') c.plot(bar.High, 'high') c.plot(bar.Low, 'low') c.close(bar) }) }pythondef main(): # 创建图表控制对象,设置价格精度为 0(整数)、成交量精度为 0(整数) c = KLineChart({ "overlay": True, "pricePrecision": 0, # 价格数据精度,例如设置为 2 即保留 2 位小数 "volumePrecision": 0 # 成交量数据精度 }) # 等待交易所连接就绪 while True: if exchange.IO("status"): break Sleep(1000) # 设置合约类型(以螺纹钢主力合约为例) exchange.SetContractType("rb888") Log("Test symbol: rb888") # 获取 K 线数据 bars = exchange.GetRecords() if not bars: return # 遍历 K 线数据并绘制图表 for bar in bars: c.begin(bar) c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)') c.plot(bar.High, 'high') c.plot(bar.Low, 'low') c.close(bar)rustfn main() { // 创建图表控制对象,设置价格精度为 0(整数)、成交量精度为 0(整数) // pricePrecision 为价格数据精度,例如设置为 2 即保留 2 位小数;volumePrecision 为成交量数据精度 let mut c = KLineChart::new(r#"{"overlay": true, "pricePrecision": 0, "volumePrecision": 0}"#); // 等待交易所连接就绪 while exchange.IO("status").unwrap_or_default() != "true" { Sleep(1000); } // 设置合约类型(以螺纹钢主力合约为例) exchange.SetContractType("rb888").unwrap(); Log!("Test symbol: rb888"); // 获取 K 线数据 let bars = exchange.GetRecords(None, None, None).unwrap(); // 遍历 K 线数据并绘制图表 for bar in &bars { c.begin(bar); c.barcolor(if bar.Close > bar.Open { "rgba(255, 0, 0, 0.2)" } else { "rgba(0, 0, 0, 0.2)" }, "{}"); c.plot(bar.High, r#"{"title": "high"}"#); c.plot(bar.Low, r#"{"title": "low"}"#); c.close(); } }c++// 暂不支持 -
画图操作中支持的
Pine语言画图接口函数如下:barcolor,用于设置K线颜色。barcolor(color, offset, editable, show_last, title, display)
display参数可选值:"none", "all"
javascriptc.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') // 使用本例中参考代码中的例子说明,不再赘述pythonc.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')rustc.barcolor(if bar.Close > bar.Open { "rgba(255, 0, 0, 0.2)" } else { "rgba(0, 0, 0, 0.2)" }, "{}"); // 使用本例中参考代码中的例子说明,不再赘述c++// 暂不支持 -
bgcolor,用于以指定颜色填充K线背景。bgcolor(color, offset, editable, show_last, title, display, overlay)
display参数可选值:"none", "all"
javascriptc.bgcolor('rgba(0, 255, 0, 0.5)')pythonc.bgcolor('rgba(0, 255, 0, 0.5)')rustc.bgcolor("rgba(0, 255, 0, 0.5)", "{}");c++// 暂不支持 -
plot,用于在图表上绘制一系列数据。plot(series, title, color, linewidth, style, trackprice, histbase, offset, join, editable, show_last, display)
style参数可选值:"stepline_diamond", "stepline", "cross", "areabr", "area", "circles", "columns", "histogram", "linebr", "line"
display参数可选值:"none", "all"
javascriptc.plot(bar.High, 'high') c.plot(bar.Open < bar.Close ? NaN : bar.Close, "Close", {style: "linebr"}) // 支持绘制不连续的数据线pythonh = c.plot(bar.High, 'high') h = c.plot(None if bar.Open < bar.Close else bar.Close, "Close", style = "linebr") # 支持绘制不连续的数据线rustlet h = c.plot(bar.High, r#"{"title": "high"}"#); c.plot(if bar.Open < bar.Close { f64::NAN } else { bar.Close }, r#"{"title": "Close", "style": "linebr"}"#); // 支持绘制不连续的数据线c++// 暂不支持 -
fill,使用指定的颜色填充两个绘图或hline之间的背景。fill(hline1, hline2, color, title, editable, fillgaps, display)
display 参数可选:"none", "all"
由于
JavaScript语言无法通过函数形参名称来指定所传入的参数,为解决这一问题,可以使用{key: value}结构为指定的形参名称传入参数。例如,参考代码中使用{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'}为fill函数的color参数赋值。如需连续为多个形参名称指定参数,可以使用
{key1: value1, key2: value2, key3: value3}。例如,在本例中额外指定一个title参数:{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)', title: 'fill'}。颜色值既可以使用'rgba(255, 0, 0, 0.2)'的形式设置,也可以使用'#FF0000'的形式设置。javascriptlet h = c.plot(bar.High, 'high') let l = c.plot(bar.Low, 'low') c.fill(h, l, {color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'})pythonh = c.plot(bar.High, 'high') l = c.plot(bar.Low, 'low') c.fill(h, l, color = 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)')rustlet h = c.plot(bar.High, r#"{"title": "high"}"#); let l = c.plot(bar.Low, r#"{"title": "low"}"#); c.fill(h, l, if bar.Close > bar.Open { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# } else { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# });c++// 暂不支持 -
hline,在给定的固定价格水平上绘制一条水平线。hline(price, title, color, linestyle, linewidth, editable, display)
linestyle 参数可选:"dashed", "dotted", "solid"
display 参数可选:"none", "all"
javascriptc.hline(bar.High)pythonc.hline(bar.High)rustc.hline(bar.High, "{}");c++// 暂不支持 -
plotarrow,在图表上绘制向上和向下的箭头。plotarrow(series, title, colorup, colordown, offset, minheight, maxheight, editable, show_last, display)
display 参数可选:"none", "all"
javascriptc.plotarrow(bar.Close - bar.Open)pythonc.plotarrow(bar.Close - bar.Open)rustc.plotarrow(bar.Close - bar.Open, "{}");c++// 暂不支持 -
plotshape,在图表上绘制可视化形状。plotshape(series, title, style, location, color, offset, text, textcolor, editable, size, show_last, display)
style参数可选值包括:"diamond", "square", "label_down", "label_up", "arrow_down", "arrow_up", "circle", "flag", "triangle_down", "triangle_up", "cross", "xcross"
location参数可选值包括:"abovebar", "belowbar", "top", "bottom", "absolute"
size参数可选值包括:"10px", "14px", "20px", "40px", "80px",分别对应Pine语言中的size.tiny、size.small、size.normal、size.large、size.huge
size.auto等同于size.small。
display参数可选值包括:"none", "all"
javascriptc.plotshape(bar.Low, {style: 'diamond'})pythonc.plotshape(bar.Low, style = 'diamond')rustc.plotshape(bar.Low > 0.0, r#"{"style": "diamond"}"#);c++// 暂不支持 -
plotchar,在图表上使用任意给定的Unicode字符绘制可视化形状。plotchar(series, title, char, location, color, offset, text, textcolor, editable, size, show_last, display)
location参数可选值包括:"abovebar", "belowbar", "top", "bottom", "absolute"
size参数可选值包括:"10px", "14px", "20px", "40px", "80px",分别对应Pine语言中的size.tiny、size.small、size.normal、size.large、size.huge
size.auto等同于size.small。
display参数可选值包括:"none", "all"
javascriptc.plotchar(bar.Close, {char: 'X'})pythonc.plotchar(bar.Close, char = 'X')rustc.plotchar(bar.Close > 0.0, r#"{"char": "X"}"#);c++// 暂不支持 -
plotcandle,在图表上绘制K线图。plotcandle(open, high, low, close, title, color, wickcolor, editable, show_last, bordercolor, display)
display参数可选值包括:"none", "all"
javascriptc.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)pythonc.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)rustc.plotcandle(bar.Open * 0.9, bar.High * 0.9, bar.Low * 0.9, bar.Close * 0.9, "{}");c++// 暂不支持 -
signal是Pine语言中没有的函数,此处用于绘制买卖信号。signal(direction, price, qty, id)
参数"long"表示交易方向,可选值包括"long"、"closelong"、"short"、"closeshort"。参数
bar.High用于标记信号在Y轴上的位置。参数1.5表示信号的交易数量。可传入第四个参数以替换默认绘制的文本内容,信号标记的默认文本为交易方向,例如:"closelong"。
javascriptc.signal("long", bar.High, 1.5)pythonc.signal("long", bar.High, 1.5)rustc.signal("long", bar.High, 1.5, "long");c++// 暂不支持 -
reset是Pine语言中没有的函数,用于清空图表数据。reset(remain)
reset()方法可接受一个参数remain,用于指定需要保留的数据条数。若不传入remain参数,则表示清除全部数据。javascriptc.reset()pythonc.reset()rustc.reset(0);c++// 暂不支持
返回值
| 类型 | 描述 |
object | 图表对象。
|
参数
| 名称 | 类型 | 必填 | 描述 |
options | object / object数组 | 是 |
|
参考
备注
策略自定义绘图只能采用KLineChart()函数或Chart()函数两种方式中的一种。有关KLineChart()函数调用时所用的颜色、样式等设置,请参阅使用KLineChart函数画图的专题文章。
pricePrecision和volumePrecision参数用于控制图表中数据的显示精度。若不设置这些参数,图表将以默认精度显示数据。设置精度参数后,图表中的价格和成交量数据将按照指定的小数位数进行四舍五入显示,这有助于简化图表显示、提高可读性。