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 下,然后重启集算器。

stockchartjar

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

..