KLineChart
该函数用于使用类似Pine语言的画图方式进行策略运行时的自定义画图。
KLineChart(options)示例
-
画出K线,并在K线上叠加收盘价曲线。
javascriptfunction main() { var c = KLineChart({overlay: true}) var records = exchange.GetRecords() if (!records) return for (var bar of records) { c.begin(bar) // 每根K线以 begin 开始 c.plot(bar.Close, "Close") c.close() // 以 close 结束 } }pythondef main(): c = KLineChart({"overlay": True}) records = exchange.GetRecords() if not records: return for bar in records: c.begin(bar) # 每根K线以 begin 开始 c.plot(bar["Close"], "Close") c.close() # 以 close 结束rustfn main() { let mut c = KLineChart::new(r#"{"overlay": true}"#); let Ok(records) = exchange.GetRecords(None, None, None) else { return }; for bar in &records { c.begin(bar); // 每根K线以 begin 开始 c.plot(bar.Close, r#"{"title": "Close"}"#); c.close(); // 以 close 结束 } } -
如果在策略自定义画图区域画图必须有图表控制对象,使用
KLineChart()函数创建该对象。KLineChart()函数的参数为一个图表配置结构,在参考代码中使用的图表结构很简单:{overlay: true}。
这个图表配置结构仅仅设置了画图内容在图表主图上输出,如果overlay设置为假值,例如:false,则图表上的内容都输出在副图上,如果需要指定某个画图函数在主图上画出也可以在具体函数调用中指定参数overlay为真值,例如:true。javascriptfunction main() { // 调用KLineChart函数创建图表控制对象c let c = KLineChart({ overlay: true }) // 使用现货交易所对象测试,获取K线数据。如果使用期货交易所对象测试,需要先设置合约 let bars = exchange.GetRecords() if (!bars) { return } // 在K线数据上遍历执行画图操作,画图操作中必须以```c.begin(bar)```函数调用作为起始,以```c.close(bar)```函数调用作为结束。 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 }) # 使用现货交易所对象测试,获取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}"#); // 使用现货交易所对象测试,获取K线数据。如果使用期货交易所对象测试,需要先设置合约 let bars = exchange.GetRecords(None, None, None).unwrap(); // 在K线数据上遍历执行画图操作,画图操作中必须以c.begin(bar)函数调用作为起始,以c.close()函数调用作为结束。 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(); } } -
使用
pricePrecision和volumePrecision参数控制图表数据精度。可以根据实际需求设置价格和成交量的显示精度,例如对于价格波动较大的品种可以设置为0显示整数,对于价格精确的品种可以设置为2或更高精度。javascriptfunction 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(bar) }) }pythondef 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(bar)rustfn main() { // 创建图表控制对象,设置价格精度为0(整数),成交量精度为0(整数) // pricePrecision为价格数据精度,设置2即保留2位小数;volumePrecision为成交量数据精度 let mut c = KLineChart::new(r#"{"overlay": true, "pricePrecision": 0, "volumePrecision": 0}"#); // 根据交易所类型选择合适的交易对 let symbol = if exchange.GetName().contains("Futures_") { "ETH_USDT.swap" } else { "ETH_USDT" }; Log!("Test symbol:", symbol); // 获取K线数据 let bars = exchange.GetRecords(symbol, 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(); } }
返回值
| 类型 | 描述 |
object | 图表对象,画图方法( |
参数
| 名称 | 类型 | 必填 | 描述 |
options | object / object数组 | 是 | 图表配置对象: |
参考
备注
策略自定义画图只能使用KLineChart()函数的方式或者Chart()函数的方式中的一种。KLineChart()函数调用时用到的一些颜色、样式等设置,参看使用KLineChart函数画图的专题文章
pricePrecision和volumePrecision参数用于控制图表中数据的显示精度。当不设置这些参数时,图表使用默认精度显示数据。设置精度参数后,图表中的价格和成交量数据将按照指定的小数位数进行四舍五入显示,这对于简化图表显示、提高可读性很有帮助