输入/搜索内容
内置函数
Global
Log
Log
LogStatus
LogProfit
LogProfitReset
LogReset
LogVacuum
EnableLog
Chart
KLineChart
console.log
console.error
exchange.Log
Market
Trade
Account
Futures
Exchange
IO
Network
Storage
Threads
TA
Talib
OS
结构体
内置变量与常量
通用约定
交易所

该函数用于使用类似Pine语言的画图方式进行策略运行时的自定义画图。

KLineChart(options)

示例

  • 画出K线,并在K线上叠加收盘价曲线。

    javascript
    function 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 结束 } }
    python
    def 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 结束
    rust
    fn 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。

    javascript
    function 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) }) }
    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(bar)
    rust
    fn 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或更高精度。

    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(bar) }) }
    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(bar)
    rust
    fn 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

图表对象,画图方法(barcolor、bgcolor、plot、fill、hline、plotarrow、plotshape、plotchar、plotcandle、signal、reset)的参数见KLineChart-return。在K线数据上遍历画图时,每根K线的画图操作必须以begin(bar)开始、以close(bar)结束。

参数

名称类型必填描述

options

object / object数组

是

图表配置对象:overlay为true时画在主图、false时画在副图;pricePrecision、volumePrecision为价格、成交量显示的小数位数(0为取整)。其它字段见KLineChart-options。

参考

备注

策略自定义画图只能使用KLineChart()函数的方式或者Chart()函数的方式中的一种。KLineChart()函数调用时用到的一些颜色、样式等设置,参看使用KLineChart函数画图的专题文章

pricePrecision和volumePrecision参数用于控制图表中数据的显示精度。当不设置这些参数时,图表使用默认精度显示数据。设置精度参数后,图表中的价格和成交量数据将按照指定的小数位数进行四舍五入显示,这对于简化图表显示、提高可读性很有帮助