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 文件,用浏览器打开该文件即可看到动态图。