该函数用于使用类似 Pine 语言的画图方式进行策略运行时的自定义画图。
图表对象。
KLineChart() 函数返回的图表对象包含多个方法,其中需要注意 begin() 和 close()。在 K 线数据上遍历执行画图操作时,画图操作必须以 begin() 函数调用作为起始,以 close() 函数调用作为结束。
object
KLineChart(options)
options 参数为图表配置对象,支持以下属性:
- overlay:布尔值,设置画图内容是否在主图上输出。设置为 true 时在主图显示,设置为 false 时在副图显示。
- pricePrecision:数字,价格数据精度,用于控制图表中价格数据的小数位数。例如设置为 2 表示保留 2 位小数,设置为 0 表示不保留小数(四舍五入为整数)。
- volumePrecision:数字,成交量数据精度,用于控制图表中成交量数据的小数位数。例如设置为 2 表示保留 2 位小数,设置为 0 表示不保留小数(四舍五入为整数)。
options
true
object / object数组
”`javascript function main() { // 调用KLineChart函数创建图表控制对象c let c = KLineChart({ overlay: true })
// 使用现货交易所对象测试,获取K线数据。如果使用期货交易所对象测试,需要先设置合约
let bars = exchange.GetRecords()
if (!bars) {
return
}
// 在K线数据上遍历执行画图操作,画图操作中必须以```c.begin(bar)```函数调用作为起始,以```c.close()```函数调用作为结束。
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()
})
}
python
def main():
# 调用KLineChart函数创建图表控制对象c
c = KLineChart({
“overlay”: True
})
# 使用现货交易所对象测试,获取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()```
// 暂不支持
如果在策略自定义画图区域画图,必须有图表控制对象,使用KLineChart()函数创建该对象。KLineChart()函数的参数为一个图表配置结构,在参考代码中使用的图表结构很简单:{overlay: true}。
这个图表配置结构仅设置了画图内容在图表主图上输出。如果overlay设置为假值,例如:false,则图表上的内容都输出在副图上。如果需要指定某个画图函数在主图上绑出,也可以在具体函数调用中指定参数overlay为真值,例如:true。
“`javascript
function main() {
// 创建图表控制对象,设置价格精度为0(整数),成交量精度为0(整数)
let c = KLineChart({
overlay: true,
pricePrecision: 0, // 价格数据精度,设置2即保留2位小数
volumePrecision: 0 // 成交量数据精度
})
// 根据交易所类型选择合适的交易对
let symbol = exchange.GetName().includes("Futures_") ? "ETH_USDT.swap" : "ETH_USDT"
Log("Test symbol:", symbol)
// 获取K线数据
let bars = exchange.GetRecords(symbol)
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()
})
}
python
def main():
# 创建图表控制对象,设置价格精度为0(整数),成交量精度为0(整数)
c = KLineChart({
“overlay”: True,
“pricePrecision”: 0, # 价格数据精度,设置2即保留2位小数
“volumePrecision”: 0 # 成交量数据精度
})
# 根据交易所类型选择合适的交易对
exName = exchange.GetName()
symbol = "ETH_USDT.swap" if "Futures_" in exName else "ETH_USDT"
Log("Test symbol:", symbol)
# 获取K线数据
bars = exchange.GetRecords(symbol)
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()```
// 暂不支持
使用pricePrecision和volumePrecision参数控制图表数据精度。可以根据实际需求设置价格和成交量的显示精度,例如对于价格波动较大的品种可以设置为0显示整数,对于价格精确的品种可以设置为2或更高精度。
c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') // 使用本例中参考代码中的例子说明,不再赘述
c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
// 暂不支持
绑图操作中支持的Pine语言绑图接口函数包括:
barcolor,用于设置K线颜色。
barcolor(color, offset, editable, show_last, title, display)
display参数可选值:”none”、”all”
c.bgcolor('rgba(0, 255, 0, 0.5)')c.bgcolor('rgba(0, 255, 0, 0.5)')// 暂不支持bgcolor,用于以指定颜色填充K线的背景。bgcolor(color, offset, editable, show_last, title, display, overlay)
display参数可选值:”none”、”all”
c.plot(bar.High, 'high') c.plot(bar.Open < bar.Close ? NaN : bar.Close, "Close", {style: "linebr"}) // 支持绘制不连续的数据线h = c.plot(bar.High, 'high') h = c.plot(None if bar.Open < bar.Close else bar.Close, "Close", style = "linebr") # 支持绘制不连续的数据线// 暂不支持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”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)'})h = 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)')// 暂不支持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'格式设置。
c.hline(bar.High)
c.hline(bar.High)
// 暂不支持
hline,在指定的固定价格水平上绘制水平线。
hline(price, title, color, linestyle, linewidth, editable, display) linestyle参数可选:”dashed”, “dotted”, “solid” display参数可选:”none”, “all”
c.plotarrow(bar.Close - bar.Open)c.plotarrow(bar.Close - bar.Open)// 暂不支持plotarrow,在图表上绘制向上和向下的箭头。 plotarrow(series, title, colorup, colordown, offset, minheight, maxheight, editable, show_last, display) display参数可选:”none”, “all”c.plotshape(bar.Low, {style: 'diamond'})c.plotshape(bar.Low, style = 'diamond')// 暂不支持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”c.plotchar(bar.Close, {char: 'X'})c.plotchar(bar.Close, char = 'X')// 暂不支持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”c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)// 暂不支持plotcandle,在图表上绘制K线图。 plotcandle(open, high, low, close, title, color, wickcolor, editable, show_last, bordercolor, display) display参数可选值:”none”, “all”c.signal("long", bar.High, 1.5)c.signal("long", bar.High, 1.5)// 暂不支持signal,Pine语言中没有此函数,用于绘制买卖信号。 signal(direction, price, qty, id)
参数”long”表示交易方向,可选值为”long”、”closelong”、”short”、”closeshort”。参数bar.High指定信号标记的Y轴位置。
参数1.5表示信号的交易数量。可传入第四个参数用于替换默认显示的文本内容,信号标记的默认文本为交易方向,例如:”closelong”。
c.reset()
c.reset()
// 暂不支持
reset,Pine语言中没有此函数,用于清空图表数据。
reset(remain)
reset()方法可接受一个参数remain,用于指定保留的数据条数。不传入remain参数表示清除全部数据。
策略自定义画图只能使用 KLineChart() 函数或 Chart() 函数中的一种方式。KLineChart() 函数调用时用到的一些颜色、样式等设置,请参阅使用 KLineChart 函数画图的专题文章。
pricePrecision 和 volumePrecision 参数用于控制图表中数据的显示精度。当不设置这些参数时,图表使用默认精度显示数据。设置精度参数后,图表中的价格和成交量数据将按照指定的小数位数进行四舍五入显示,这对于简化图表显示、提高可读性非常有帮助。
{@fun/Log/Chart Chart}