SPL 量化 绘制分析图
在股票投资领域,技术图形分析是投资者不可或缺的重要手段。通过对股票价格和成交量等数据的图形化展示,技术图形能够为投资者提供丰富的信息,帮助他们做出更明智的投资决策。
静态图
股票分析主要观察价量走热,通常以折线图为主。我们可以编写一个通用脚本来绘制这种图:
A | B | C | D | |
1 | =[rgb(255,0,0),rgb(0,0,0),rgb(0,255,0),rgb(0,255,255),rgb(156,102,31),rgb(255,127,80),rgb(8,46,84),rgb(107,142,35),rgb(3,168,158),rgb(25,25,112)] | |||
2 | =[rgb(0,0,255),rgb(255,255,0),rgb(255,0,255),rgb(85,102,0),rgb(237,145,33),rgb(128,42,42),rgb(188,143,143),rgb(210,180,140),rgb(218,112,214),rgb(153,51,250)] | |||
3 | =if(year(data(1).tdate)==year(data.m(-1).tdate),"MM-dd","YY-MM-dd") | |||
4 | =canvas() | |||
5 | =A4.plot("DateAxis","name":"x","format":A3,"labelStep":2,"labelAngle":-45,"allowRegions":false) | |||
6 | =A4.plot("NumericAxis","name":"y1","location":2,"autoRangeFromZero":false,"title":"y1","titleFont":"Arial","titleSize":13,"labelOverlapping":true) | |||
7 | if ifa(y1) | for y1 | =y1.(if(#==1,m=0.1,m=m+0.1)) | |
8 | =A4.plot("Line","shadow":true,"markerStyle":0,"lineColor":A1(#B7),"axis1":"x","data1":data.(${x}),"axis2":"y1","data2":data.(${B7})) | |||
9 | =A4.plot("Legend","name":B7,"legendText":B7,"x":0.9,"y":C7(#B7),"legendType":3,"legendLineColor":A1(#B7),"legendFillColor":A1(#B7)) | |||
10 | else | =A4.plot("Line","markerStyle":0,"lineColor":-16777216,"axis1":"x","data1":data.(${x}),"axis2":"y1","data2":data.(${y1})) | ||
11 | =A4.plot("Legend","name":y1,"legendText":y1,"x":0.9,"legendType":3,"legendLineColor":-16777216,"legendFillColor":["ChartColor",0,true,-16777216,-16777216,0]) | |||
12 | ||||
13 | if y2 | =A4.plot("NumericAxis","name":"y2","location":2,"autoRangeFromZero":false,"yPosition":0.8,"title":"y2","titleFont":"Arial","titleSize":13,"labelOverlapping":true,"scalePosition":0) | ||
14 | if ifa(y2) | for y2 | =y2.(if(#==1,n=max(C7)+0.1,n=n+0.1)) | |
15 | =A4.plot("Line","shadow":true,"markerStyle":0,"lineColor":A2(#C14),"axis1":"x","data1":data.(${x}),"axis2":"y2","data2":data.(${C14})) | |||
16 | =A4.plot("Legend","name":C14,"legendText":C14,"x":0.9,"y":D14(#C14),"legendType":3,"legendLineColor":A2(#C14),"legendFillColor":A2(#C14)) | |||
17 | else | =A4.plot("Line","markerStyle":0,"lineColor":-14336,"axis1":"x","data1":data.(${x}),"axis2":"y2","data2":data.(${y2})) | ||
18 | =A4.plot("Legend","name":y2,"legendText":y2,"x":0.9,"y":0.5,"legendType":3,"legendLineColor":-256,"legendFillColor":["ChartColor",0,true,-256,-256,0]) | |||
19 | =A4.draw@p(1200,400) |
脚本参数:
data | 序表,要绘制图形的列 |
x | 字符串,x 轴字段名,如 "tdate" |
y1 | 字符串或序列,y1 轴字段名,如 "close" 或 ["close","close_MA_5"] |
y2 | 字符串或序列,y2 轴字段名,如 "volume",或 ["volume","volume_MA_5"]。y2 也可以为空,为空时只有一个 y 轴 |
脚本保存为 draw.splx,此脚本可返回双轴或单轴折线图。
例如绘制浦发银行 2024 年 close、close_MA_5、volume 和 volume_MA_5 的走势图。
代码示例:
A | |
1 | =register("loadkday","loadkday.splx") |
2 | 600000 |
3 | 2024-01-01 |
4 | 2024-12-31 |
5 | =loadkday(A2,A3,A4) |
6 | =call@f("index.splx") |
7 | =ma(A5,"close",5) |
8 | =ma(A5,"volume",5) |
9 | =A5.new(tdate,close,A7(#).close_MA_5,volume,A8(#).volume_MA_5) |
10 | =call("draw.splx",A9,"tdate","close","volume") |
11 | =call("draw.splx",A9,"tdate","close") |
12 | =call("draw.splx",A9,"tdate",["close","close_MA_5"],["volume","volume_MA_5"]) |
A1-A5 读取 K 线数据
A6-A8 计算 MA
A9 将需要绘制图形的列放入一张序表
A10 调用绘图脚本,以 tdate 为 x 轴,close 为 y1 轴,volume 为 y2 轴画图
A11 参数 y2 为空,只绘制 y1 轴
A12 参数 y1、y2 为序列,绘制多条线
动态图
SPL 还可以借助 echart 做出动态图。
1. 首先下载 stockchart.jar,放到集算器安装路径…\raqsoft\esProcDesk\lib 下,然后重启集算器。
2. 编写脚本 drawhtml.splx。
脚本代码:
A | B | |
1 | =data.derive() | |
2 | =if(year(data(1).field(x))==year(data.m(-1).field(x)),"MM-dd","YY-MM-dd") | |
3 | =A1.run(~.field(x, string(~.field(x),A2)) ) | |
4 | =if(ifa(y1),y1,[y1]) | =if(ifa(y2)||!y2,y2,[y2]) |
5 | =invoke(com.raqsoft.stockchart.LineChart.drawHtml,A3,[x,A4,B4]) | |
6 | =file(htmlfile).write(A5) |
脚本参数:
data | 序表,要绘制图形的列 |
x | 字符串,x 轴字段名,如 "tdate" |
y1 | 字符串或序列,y1 轴字段名,如 "close" 或 ["close","close_MA_5"] |
y2 | 字符串或序列,y2 轴字段名,如 "volume",或 ["volume","volume_MA_5"]。y2 也可以为空,为空时只有一个 y 轴 |
htmlfile | 动态图文件路径 |
此脚本可返回双轴或单轴折线动态图 html 文件。
3. 调用脚本,生成动态 html 文件。
例如绘制浦发银行 2024 年 close、close_MA_5、volume 和 volume_MA_5 的动态图。
A | |
… | …… |
10 | =call("drawhtml.splx",A9,"tdate",["close","close_MA_5"],["volume","volume_MA_5"],"D:/量化 /stock/600000.html") |
A1-A9 计算要绘制图形的数据
A10 会生成 600000.html 文件,用浏览器打开该文件即可看到动态图。