♻️ refactor(tsl): split function.md into 44 modular files
问题: - 原 function.md 有 221,389 行(4.2MB),导致编辑器性能问题 - Git diff 无法有效查看 - 搜索和定位困难,难以维护 解决方案: - 按功能模块拆分为 44 个独立文件 - TSL函数 → 10个子文件(数学、基础、系统等) - 金融函数 → 23个子文件(股票、行情、技术分析等) - 其他 → 9个独立章节文件 - 3个索引文件提供导航 改进效果: - 最大文件 < 50,000 行(减少 79%) - 编辑器打开速度从 10-30秒 → < 1秒 - Git diff 清晰可读,便于code review - 模块化搜索,精准定位 - 独立维护和扩展 目录结构: function/ ├── index.md # 总索引 ├── tsl/ # TSL函数(10个文件) ├── financial/ # 金融函数(23个文件) └── 03_*.md # 其他章节(9个文件) 注意: - 原文件已保留为 function.md.backup(未提交) - function.md 改为重定向文件(3KB) - 更新 syntax_book/index.md 中的引用 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
0d6b2a0702
commit
7e96bc86d8
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,312 @@
|
|||
### 服务器交互函数
|
||||
|
||||
#### 内容
|
||||
|
||||
- 服务器交互函数简介
|
||||
- ConnectServer
|
||||
- LoginServer
|
||||
- DefaultConnectAndLogin
|
||||
- INI文件配置登陆信息
|
||||
- SendExecuteAndWait
|
||||
- SendExecute
|
||||
- 实时行情订阅SendExecute
|
||||
- 异步回调函数以及实时订阅系统参数说明
|
||||
- 服务器返回信息类型
|
||||
- EndExecute
|
||||
- CheckLogined
|
||||
- CheckConnected
|
||||
- LoginedUser
|
||||
- RemoteAddress
|
||||
- RemotePort
|
||||
- DisconnectServer
|
||||
- TSTaskAdmin
|
||||
- SetComputeService
|
||||
- GetComputebitsOption
|
||||
- SetComputebitsOption
|
||||
- GetComputeService
|
||||
|
||||
#### 服务器交互函数简介
|
||||
|
||||
服务器交互函数可以让本地执行的TSL语言与金融分析.NET服务器进行交互,并递交计算请求到服务器运算。
|
||||
|
||||
#### ConnectServer
|
||||
|
||||
范例 http模式代理登陆
|
||||
|
||||
```text
|
||||
cTS:=ConnectServer("tsl.tinysoft.com.cn",443,array("Address":"192.168.0.250","Port":808,"AuthMode":0));
|
||||
|
||||
|
||||
lg:=LoginServer("TSUser","UserPass",msg);
|
||||
|
||||
|
||||
if lg=0 then
|
||||
|
||||
|
||||
begin
|
||||
|
||||
|
||||
echo "登陆成功!";
|
||||
|
||||
|
||||
Script:='program TS_testFunc;
|
||||
|
||||
|
||||
Begin
|
||||
|
||||
|
||||
r:=1->5;
|
||||
|
||||
|
||||
Return r;
|
||||
|
||||
|
||||
End.';
|
||||
|
||||
|
||||
if SendExecuteAndWait(Script,getSysParams(),Result,ErrMsg)=0 then //Execute Success
|
||||
|
||||
|
||||
echo tostn(Result),'\r\n';
|
||||
|
||||
|
||||
else
|
||||
|
||||
|
||||
echo '远端执行失败!\r\n';
|
||||
|
||||
|
||||
DisconnectServer();
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
else
|
||||
|
||||
|
||||
echo "登陆失败,报错:(",cTS,",",msg,")\r\n";
|
||||
```
|
||||
|
||||
打印"登陆成功!"则说明连接成功。参考DefaultConnectAndLogin LoginServer
|
||||
|
||||
#### LoginServer
|
||||
|
||||
参考DefaultConnectAndLogin ConnectServer
|
||||
|
||||
#### DefaultConnectAndLogin
|
||||
|
||||
参考ConnectServer LoginServer
|
||||
|
||||
#### INI文件配置登陆信息
|
||||
|
||||
第一步:在plugin目录下新建ini文件,文件全名为tslclient.ini
|
||||
|
||||
注:客户端用户,该plugin目录在天软安装目录下,一般路径为:C:\Program Files\Tinysoft\Analyse.NET\Plugin
|
||||
|
||||
其它用户,需要找到插件包中的plugin目录下添加。
|
||||
|
||||
第二步:在tslclient.ini添加以下内容:
|
||||
|
||||
```text
|
||||
[TSLClient Config]
|
||||
|
||||
;调用是登陆的别名
|
||||
|
||||
[test]
|
||||
|
||||
;本地许可
|
||||
|
||||
Permit=local
|
||||
|
||||
;用户名
|
||||
|
||||
LoginName=
|
||||
|
||||
;密码
|
||||
|
||||
LoginPass=
|
||||
|
||||
;服务器 地址
|
||||
|
||||
Address=tsl.tinysoft.com.cn
|
||||
|
||||
;端口
|
||||
|
||||
Port=443
|
||||
|
||||
;---以下为代理服务器
|
||||
|
||||
;代理服务器端口
|
||||
|
||||
ProxyPort=
|
||||
|
||||
;代理服务器地址
|
||||
|
||||
ProxyAddress=
|
||||
|
||||
;代理身份验证用户名
|
||||
|
||||
ProxyUser=
|
||||
|
||||
;验证密码
|
||||
|
||||
ProxyPass=
|
||||
|
||||
;代理模式 http模式设置为0, SOCKS5模式设置为5
|
||||
|
||||
ProxyAuthMode=
|
||||
```
|
||||
|
||||
其中,[test]中的test是用户自定义的别名,可用户自己设定,区分大小写,在登陆时调用。
|
||||
|
||||
其余项用户需要根据自己的实际情况填写。
|
||||
|
||||
同一个ini文档中,可以配置多个配置信息,使用时通过别名进行识别。
|
||||
|
||||
调用比如:cTS:=DefaultConnectAndLogin(‘test’,msg)
|
||||
|
||||
#### SendExecuteAndWait
|
||||
|
||||
参考实时行情订阅。
|
||||
|
||||
#### SendExecute
|
||||
|
||||
参考实时行情订阅 异步回调函数以及实时订阅系统参数说明 服务器返回信息类型。
|
||||
|
||||
#### 实时行情订阅SendExecute
|
||||
|
||||
参考异步回调函数以及实时订阅系统参数说明 服务器返回信息类型
|
||||
|
||||
#### 异步回调函数以及实时订阅系统参数说明
|
||||
|
||||
<table><tbody><tr><td>
|
||||
系统参数名</td><td>
|
||||
类型</td><td>
|
||||
说明</td></tr><tr><td>
|
||||
channel</td><td>
|
||||
整数</td><td>
|
||||
通道ID,和SendExecute返回值一致</td></tr><tr><td>
|
||||
recvtype</td><td>
|
||||
整数</td><td>
|
||||
参阅:<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/display.tsl?id=22122">服务器返回信息类型</a></td></tr><tr><td>
|
||||
errno</td><td>
|
||||
整数</td><td>
|
||||
错误号,非0错误</td></tr><tr><td>
|
||||
errmsg</td><td>
|
||||
字符串</td><td>
|
||||
错误信息</td></tr><tr><td>
|
||||
result</td><td>
|
||||
订阅为数组类型</td><td>
|
||||
结果集,订阅为推送类型</td></tr></tbody></table>
|
||||
|
||||
#### 服务器返回信息类型
|
||||
|
||||
<table><tbody><tr><td>
|
||||
返回类型</td><td>
|
||||
值</td><td>
|
||||
说明</td></tr><tr><td>
|
||||
执行函数返回</td><td>
|
||||
0x0201</td><td>
|
||||
</td></tr><tr><td>
|
||||
执行委托函数返回</td><td>
|
||||
0x0301</td><td>
|
||||
</td></tr><tr><td>
|
||||
ECHO返回</td><td>
|
||||
0x0401</td><td>
|
||||
</td></tr><tr><td>
|
||||
客户请求返回</td><td>
|
||||
0x0402</td><td>
|
||||
</td></tr><tr><td>
|
||||
实时订阅返回</td><td>
|
||||
0x0501</td><td>
|
||||
</td></tr><tr><td>
|
||||
错误信息返回</td><td>
|
||||
0</td><td>
|
||||
</td></tr></tbody></table>
|
||||
|
||||
#### EndExecute
|
||||
|
||||
#### CheckLogined
|
||||
|
||||
#### CheckConnected
|
||||
|
||||
#### LoginedUser
|
||||
|
||||
#### RemoteAddress
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
####python交互范例,python代码
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.append('D:\\tinysoft\\Analyse.NET\\')
|
||||
|
||||
import TSLPy3 as ts
|
||||
|
||||
data=ts.DefaultConnectAndLogin("test")
|
||||
|
||||
print(ts.Logined())
|
||||
|
||||
print("远程登录地址",ts.RemoteAddress())
|
||||
|
||||
print("服务器设置:",ts.GetService())
|
||||
|
||||
ts.SetComputeBitsOption(64) #设置计算单位
|
||||
|
||||
print("计算位数设置:",ts.GetComputeBitsOption())
|
||||
|
||||
ts.Disconnect() #断开连接
|
||||
```
|
||||
|
||||
//结果
|
||||
|
||||
#### RemotePort
|
||||
|
||||
#### DisconnectServer
|
||||
|
||||
- 服务器交互函数简介
|
||||
- ConnectServer
|
||||
- LoginServer
|
||||
- DefaultConnectAndLogin
|
||||
- INI文件配置登陆信息
|
||||
- SendExecuteAndWait
|
||||
- SendExecute
|
||||
- 实时行情订阅SendExecute
|
||||
- 异步回调函数以及实时订阅系统参数说明
|
||||
- 服务器返回信息类型
|
||||
- EndExecute
|
||||
- CheckLogined
|
||||
- CheckConnected
|
||||
- LoginedUser
|
||||
- RemoteAddress
|
||||
- RemotePort
|
||||
- DisconnectServer
|
||||
- TSTaskAdmin
|
||||
- SetComputeService
|
||||
- GetComputebitsOption
|
||||
- SetComputebitsOption
|
||||
- GetComputeService
|
||||
|
||||
#### TSTaskAdmin
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
rdo2 TSTaskAdmin("oa",CmdReturn,BroadCastMsg,ErrMsg,3000,1000);
|
||||
|
||||
return CmdReturn;
|
||||
```
|
||||
|
||||
返回结果:
|
||||
|
||||
#### SetComputeService
|
||||
|
||||
#### GetComputebitsOption
|
||||
|
||||
#### SetComputebitsOption
|
||||
|
||||
#### GetComputeService
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,185 @@
|
|||
### CGI控制台相关函数
|
||||
|
||||
#### 内容
|
||||
|
||||
- CGI/控制台相关函数简介
|
||||
- CGI/控制台输入输出函数
|
||||
- CGI变量以及环境相关函数
|
||||
|
||||
#### CGI/控制台相关函数简介
|
||||
|
||||
CGI/控制台相关函数仅当使用TSL语言编写CGI或者编写控制台应用的时候才被使用。
|
||||
|
||||
此处的CGI兼容于TSL在APACHE或者IIS上以MODULE方式运行的模式。
|
||||
|
||||
#### CGI/控制台输入输出函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- Echo
|
||||
- SetEchoString
|
||||
- UnsetEchoString
|
||||
- IsEchoRedirect
|
||||
- Read
|
||||
- ReadLn
|
||||
- Writeln
|
||||
- Write
|
||||
|
||||
##### Echo
|
||||
|
||||
##### SetEchoString
|
||||
|
||||
ECHO和WRITE,WRITELN等输出函数被重定向,不再输出,用UnSetEchoString获得重定向的输出流。
|
||||
|
||||
##### UnsetEchoString
|
||||
|
||||
##### IsEchoRedirect
|
||||
|
||||
##### Read
|
||||
|
||||
范例
|
||||
|
||||
范例一:读单个字符,不用回显:Ch:=Read(1,'');
|
||||
|
||||
范例二:读一个密码串,以*显示输入的字符:Password:=Read(0,'*');
|
||||
|
||||
##### ReadLn
|
||||
|
||||
##### Writeln
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//先输出111222,接着另起一行显示空白,再接着另起一行输出333
|
||||
|
||||
|
||||
writeln("111","222");
|
||||
|
||||
|
||||
writeln("333");
|
||||
|
||||
|
||||
{结果页面中,运行信息下打印:
|
||||
|
||||
|
||||
111222
|
||||
|
||||
|
||||
333
|
||||
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
##### Write
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//先输出123456,接着另起一行输出789
|
||||
|
||||
|
||||
write("123","456");
|
||||
|
||||
|
||||
write("789");
|
||||
|
||||
|
||||
return ;
|
||||
|
||||
|
||||
{在结果页面中打印:
|
||||
|
||||
|
||||
123456
|
||||
|
||||
|
||||
789}
|
||||
```
|
||||
|
||||
#### CGI变量以及环境相关函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- HttpGetContent
|
||||
- HttpGetContentLength
|
||||
- HttpGetQueryString
|
||||
- HttpGetRequestMethod
|
||||
- HttpGetQueryValues
|
||||
- HttpGetQueryValueByName
|
||||
- HttpGetQueryValueByNameEx
|
||||
- HttpGetScriptName
|
||||
- HttpGetPathInfo
|
||||
- HttpGetPathTranslated
|
||||
- HttpGetRemoteHost
|
||||
- HttpGetRemoteAddr
|
||||
- HttpGetAuthType
|
||||
- HttpGetRemoteUser
|
||||
- HttpGetRemoteIdent
|
||||
- HttpGetHttpAccept
|
||||
- HttpGetHttpUserAgent
|
||||
- HttpGetServerName
|
||||
- HttpGetServerPort
|
||||
- HttpGetServerProtocol
|
||||
- HttpGetServerSoftware
|
||||
- HttpGetGatewayInterface
|
||||
- HttpGetCookie
|
||||
- HttpGetEnvVar
|
||||
- HttpSetHeadString
|
||||
|
||||
##### HttpGetContent
|
||||
|
||||
##### HttpGetContentLength
|
||||
|
||||
##### HttpGetQueryString
|
||||
|
||||
范例
|
||||
|
||||
前端执行的是http://hostname/test.tsl?name=billgates&sex=male,
|
||||
|
||||
则返回的值为name=billgates&sex=male
|
||||
|
||||
##### HttpGetRequestMethod
|
||||
|
||||
##### HttpGetQueryValues
|
||||
|
||||
##### HttpGetQueryValueByName
|
||||
|
||||
##### HttpGetQueryValueByNameEx
|
||||
|
||||
##### HttpGetScriptName
|
||||
|
||||
##### HttpGetPathInfo
|
||||
|
||||
##### HttpGetPathTranslated
|
||||
|
||||
##### HttpGetRemoteHost
|
||||
|
||||
##### HttpGetRemoteAddr
|
||||
|
||||
##### HttpGetAuthType
|
||||
|
||||
##### HttpGetRemoteUser
|
||||
|
||||
##### HttpGetRemoteIdent
|
||||
|
||||
##### HttpGetHttpAccept
|
||||
|
||||
##### HttpGetHttpUserAgent
|
||||
|
||||
##### HttpGetServerName
|
||||
|
||||
##### HttpGetServerPort
|
||||
|
||||
##### HttpGetServerProtocol
|
||||
|
||||
##### HttpGetServerSoftware
|
||||
|
||||
##### HttpGetGatewayInterface
|
||||
|
||||
##### HttpGetCookie
|
||||
|
||||
##### HttpGetEnvVar
|
||||
|
||||
##### HttpSetHeadString
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,936 @@
|
|||
### TSL编译工具
|
||||
|
||||
#### 内容
|
||||
|
||||
- 功能简介
|
||||
- 应用场景
|
||||
- 特性
|
||||
- 编译范围
|
||||
- TSL指令
|
||||
- 调用效率的测试
|
||||
- 依赖关系
|
||||
|
||||
#### 功能简介
|
||||
|
||||
将TSL代码编译成为可执行文件和动态库文件,支持windows与linux环境。
|
||||
|
||||
编译成为可执行文件,即开发的程序与应用可作为一个独立运行的小程序,不需要依赖天软客户端或天软解释器。
|
||||
|
||||
编译动态库文件,可将天软函数包编译成动态链接库,方便其它开发工具如C++等进行调用,为第三方开发工具提供支撑,如由TSL开发的算法等,让TSL语言程序可被更广泛地应用。
|
||||
|
||||
#### 应用场景
|
||||
|
||||
##### 内容
|
||||
|
||||
- 编译可执行文件
|
||||
- 编译动态库
|
||||
|
||||
##### 编译可执行文件
|
||||
|
||||
此前,天软语言只支持脚本方式运行,即在.NET平台、本地解释器或.web平台中进行执行。若只作为天软的建模语言,已经满足了一般需求,然而,随着天软语言支持功能的扩展,其应用也越来越广泛,如用来开发编译桌面应用的天软TSL语言桌面开发工具,开发好的应用是需要通过TSL.exe去执行这个桌面应用的,这种方式不利于这些应用的发布,由此,编译成为可执行文件就显的很有必要。
|
||||
|
||||
另外,天软还提供了信创版的客户端,该客户端也是基于TSL语言的开发程,支持编译成可执行文件后,就可以将这些已开发的应用直接编译成windows或linux的可执行程序,用起来就会非常方便。
|
||||
|
||||
除此之外,还有例如一些管理工具,业务的应用的小程序等,都可生成为一个独立的可执行文件。
|
||||
|
||||
##### 编译动态库
|
||||
|
||||
可将天软TSL语言函数包创建成一个动态链接库(即DLL文件),并将该函数包进行输出。如此,在第三方工具如C++中,只需将生成的该动态库进行引入后,就可直接调用,不再需要天软TSSVRAPI等包的支持。
|
||||
|
||||
还可以将一些复杂的算法,通过TSL语言进行开发后编译成动态库,放入到其它语言工具中,就可以直接进行调用,不需要重复开发。
|
||||
|
||||
#### 特性
|
||||
|
||||
TSL编译工具的三特性:
|
||||
|
||||
其中,
|
||||
|
||||
独立编译:目前,除Linux中编译动态库还需依赖GCC相关功能才能完成外,其它编译工作,如windows中编译可执行文件与动态库,及Linux中编译可执行文件等,都已实现不依赖其它编译工具就可独立完成。
|
||||
|
||||
线程安全:输出的动态库可被多线程并发,且线程安全。
|
||||
|
||||
接口高效:利用TSL编译出来的动态库,接口调用所花费的时间消耗在亚微秒级别,效率非常高,大概一秒钟可以调用107次,能适用于交易级别的应用。
|
||||
|
||||
#### 编译范围
|
||||
|
||||
编译工具可将TSL语言的源代码与函数库,以及相关的资源文件,如配置类.ini文件,桌面开发工具中的窗体.dfm文件、窗口资源文件等,都可以通过天软编译工具生成一个单一的目标文件(即单一的可执行文件或.so或.dll),该文件的运行仅依赖天软运行环境的动态库,可方便程序的直接运行与业务应用的安装发布。
|
||||
|
||||
#### TSL指令
|
||||
|
||||
根据编译目标大致可分为三块指令:
|
||||
|
||||
可执行文件(.exe),编译命--buildexe=
|
||||
|
||||
可选项一: -buildgui,用来指定编译出来的目标是Windows UI应用程序,默认为控制台应用程序。
|
||||
|
||||
可选项二:--buildico=,用来指定Windows icon图标。
|
||||
|
||||
以上两个可选项只在Windows下有效,在Linux中不生效。
|
||||
|
||||
动态库(.dll/.so),编译命--buildlib=,
|
||||
|
||||
可选项一--exports=,可以指定输出的函数。
|
||||
|
||||
包文件,编译命令--build=
|
||||
|
||||
另外,还新增了对包执行等相关命令
|
||||
|
||||
如执行包文件,命令为:--runpkg=
|
||||
|
||||
加载包文件,命令为:--pkg=
|
||||
|
||||
等等,详情可参考TSL命令集列表。
|
||||
|
||||
目前提供的指令功能分布大致如下:
|
||||
|
||||
如,将TSLDemo01.tsl程序编译成可执行文件,操作如下:
|
||||
|
||||
在文件路径下进入控制台,执行以下命令:
|
||||
|
||||
tsl --buildexe=TSLDemo01.tsl --output=test01.exe
|
||||
|
||||
执行完后在当前路径中会新增一个test01.exe可执行文件,如下所示:
|
||||
|
||||
双击test01.exe即可启动运行该程序。
|
||||
|
||||
##### 内容
|
||||
|
||||
- TSL命令集列表
|
||||
- 命令集详细解析
|
||||
|
||||
##### TSL命令集列表
|
||||
|
||||
执行命令行的命令为:tsl xxx
|
||||
|
||||
Windows命令集
|
||||
|
||||
<table><tbody><tr><td>
|
||||
命令</td><td>
|
||||
功能说明</td><td>
|
||||
备注</td></tr><tr><td>
|
||||
tsl.exe /?</td><td>
|
||||
查看命令列表帮助,或TSL /?</td><td>
|
||||
注意/前有一个空格</td></tr><tr><td>
|
||||
-COMPILE|-COMPILEC [/S] [-S] tslfiename</td><td>
|
||||
将tsl/tsf文件编译为二进制格式文件。
|
||||
-COMPILE命令生成的文件后缀为.TSB
|
||||
- COMPILEC命令生成的文件后缀为.TSC
|
||||
可选项
|
||||
/S:递归模式,即加上该可选命令后,会从子目录中查找该函数。默认只在当前目录下查找。
|
||||
-S:安静模式,不打印执行结果的信息</td><td>
|
||||
默认生成的文件与原文件同目录,如:
|
||||
Tsl -COMPILE TsfDemo01.tsf
|
||||
作用:编译成二进制文件后,函数与脚本照样可以正常调用,可以用于隐藏源代码。</td></tr><tr><td>
|
||||
编译指令</td><td></td><td></td></tr><tr><td>
|
||||
--buildexe=tslfilename</td><td>
|
||||
将指定tsl文件编译成可执行(.exe)文件,默认生成文件名为default.exe,可执行文件默认图标为tsl编译器图标</td><td>
|
||||
</td></tr><tr><td>
|
||||
其可选项</td><td>
|
||||
-buildgui
|
||||
指定编译的可执行文件为Windows UI应用程序</td><td>
|
||||
默认为控制台应用程序</td></tr><tr><td>
|
||||
</td><td>
|
||||
--buildico=xxx.ico
|
||||
指定可执行文件的图标</td><td>
|
||||
默认为TSL.exe的图标</td></tr><tr><td>
|
||||
--buildlib=tsl(tsf)filename</td><td>
|
||||
将指定tsl/tsf文件编译成动态库(.dll)文件</td><td>
|
||||
默认生成文件名为default.dll</td></tr><tr><td>
|
||||
其可选项</td><td>
|
||||
--exports=func1[:exp1][,…]
|
||||
将指定函数名输出在动态库中</td><td>
|
||||
指定多个函数用逗号分割</td></tr><tr><td>
|
||||
--build=tslfilename</td><td>
|
||||
将指定tsl文件编译成.tsg包文件,默认生成文件名为default.tsg</td><td>
|
||||
可以通过函数获取包中资源内容rs:
|
||||
getglobalcache("@@tsl-resource@@",rs)</td></tr><tr><td>
|
||||
编译指令的可选项</td><td>
|
||||
--buildexe|--buildlib|--build通用的可选项</td><td></td></tr><tr><td>
|
||||
--output=filename</td><td>
|
||||
给输出目标指定文件路径与名称</td><td>
|
||||
默认为
|
||||
default.exe|default.dll|default.tsg
|
||||
默认生成在当前路径下</td></tr><tr><td>
|
||||
-strong</td><td>
|
||||
编译所有引用,将所有依赖的引用都进行编译
|
||||
缺省为仅编译调用的</td><td>
|
||||
解决调用了某些动态库不能被检测到的函数。</td></tr><tr><td>
|
||||
--depends=fun1,fun2,…</td><td>
|
||||
指定额外需要编译的函数列表</td><td>
|
||||
多个函数或路径用,分隔</td></tr><tr><td>
|
||||
--dependsdir=dir1,dir2,…</td><td>
|
||||
指定额外需要编译的函数路径</td><td>
|
||||
</td></tr><tr><td>
|
||||
--excludes=fun1,fun2,…</td><td>
|
||||
不编译某些函数</td><td>
|
||||
</td></tr><tr><td>
|
||||
--resourcedir=foldername</td><td>
|
||||
指定编译资源文件目录</td><td>
|
||||
</td></tr><tr><td>
|
||||
--resourcepat=pat1,pat2,…</td><td>
|
||||
指定资源文件的匹配串</td><td>
|
||||
需要搭配--resourcedir=一起使用</td></tr><tr><td>
|
||||
-resourcekeepdir</td><td>
|
||||
资源名保留相对路径</td><td>
|
||||
</td></tr><tr><td>
|
||||
--extresource=filename1
|
||||
[:keyname1],filename2…</td><td>
|
||||
指定额外的资源</td><td>
|
||||
</td></tr><tr><td>
|
||||
运行指令</td><td></td><td></td></tr><tr><td>
|
||||
--runpkg=packagename</td><td>
|
||||
执行包文件</td><td>
|
||||
如:tsl --runpkg=runpkg.tsg</td></tr><tr><td>
|
||||
-eval tslstring</td><td>
|
||||
执行TSL脚本串</td><td>
|
||||
如:tsl -eval “inttostr(100)”</td></tr><tr><td>
|
||||
tslfilename</td><td>
|
||||
执行TSL脚本文件</td><td>
|
||||
如:tsl test.tsl</td></tr><tr><td>
|
||||
其可选项</td><td>
|
||||
-LIBPATH </td><td>
|
||||
扩展函数查找路径</td></tr><tr><td>
|
||||
</td><td>
|
||||
-TESTMULTITHREAD N</td><td>
|
||||
线程调用,N为线程数</td></tr><tr><td>
|
||||
</td><td>
|
||||
-NODEBUGSERVER</td><td>
|
||||
不启用调试服务器</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGSERVER</td><td>
|
||||
开启调试服务器</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGPORT port</td><td>
|
||||
指定调试监听端口</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGLISTEN ip</td><td>
|
||||
指定调试监听地址</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGTHREADS N</td><td>
|
||||
指定调试用于网络通信的线程数</td></tr><tr><td>
|
||||
</td><td>
|
||||
-WAITATTACH</td><td>
|
||||
运行时等待调试程序连接</td></tr><tr><td>
|
||||
</td><td>
|
||||
-DEBUGLOGIN 1|0</td><td>
|
||||
是否需要进行用户登陆</td></tr><tr><td>
|
||||
</td><td>
|
||||
--data-dir=datapath</td><td>
|
||||
使用指定文件夹中的配置文件</td></tr><tr><td>
|
||||
</td><td>
|
||||
--pkg=pgk1,pkg2…</td><td>
|
||||
加载指定包中的函数</td></tr><tr><td>
|
||||
其它指令</td><td></td><td></td></tr><tr><td>
|
||||
-ENCODE configstring</td><td>
|
||||
生成加密串</td><td>
|
||||
用于数据库配置串加密</td></tr><tr><td>
|
||||
-ENCODEDEBUGPASS</td><td>
|
||||
生成密码串的加密串</td><td>
|
||||
用于远程调试配置中密码的加密</td></tr></tbody></table>
|
||||
|
||||
Linux命令集
|
||||
|
||||
<table><tbody><tr><td>
|
||||
命令</td><td>
|
||||
说明</td><td>
|
||||
备注</td></tr><tr><td>
|
||||
TSL /?</td><td>
|
||||
查看命令列表帮助</td><td>
|
||||
注意TSL后有一个空格</td></tr><tr><td>
|
||||
其它命令参考Windows命令集,注意大小写</td><td></td><td></td></tr></tbody></table>
|
||||
|
||||
##### 命令集详细解析
|
||||
|
||||
提示:以下命令的操作展示都是在windows操作系统中完成的。
|
||||
|
||||
###### 内容
|
||||
|
||||
- 查看命令帮助
|
||||
- 编译成二进制文件
|
||||
- 编译成可执行文件
|
||||
- 编译动态库
|
||||
- 编译包文件
|
||||
- 编译命令的其它可选项
|
||||
- 执行包文件(.tsg)
|
||||
- 生成加密串
|
||||
- 执行TSL代码串
|
||||
- 加密密码串
|
||||
- 执行TSL脚本
|
||||
|
||||
###### 查看命令帮助
|
||||
|
||||
进入cmd中,执行:tsl /?
|
||||
|
||||
展示所有命令及其帮助说明,显示如下:
|
||||
|
||||
###### 编译成二进制文件
|
||||
|
||||
语法:-COMPILE|-COMPILEC [/S] [-S] tslfilename
|
||||
|
||||
功能:将指定脚本文件编译成二进制文件。
|
||||
|
||||
场景一:默认方式下将tsf文件生成二进制文件
|
||||
|
||||
输入:
|
||||
|
||||
tsl -COMPILE C:\DoTSL\CompileToExe\TsfDemo01.tsf
|
||||
|
||||
输出:在tsf文件同目录下生成.TSB文件。
|
||||
|
||||
新增文件如下:
|
||||
|
||||
####### 内容
|
||||
|
||||
- 可选项:/S 递归模式
|
||||
- 可选项:-S 安静模式
|
||||
|
||||
####### 可选项:/S 递归模式
|
||||
|
||||
功能:编译时,若当前目录下无目标文件,会查找子目录下的目标进行编译
|
||||
|
||||
如:被编译的文件TsfFuncB.tsf在C:\DoTSL\CompileToExe\AAA目录下,命令运行当前路径是在C:\DoTSL\CompileToExe\,执行以下操作进行对比:
|
||||
|
||||
<table><tbody><tr><td>
|
||||
执行命令</td><td>
|
||||
结果说明</td></tr><tr><td>
|
||||
默认情况下进行编译
|
||||
命令行:tsl -COMPILE TsfFuncB.tsf</td><td>
|
||||
执行结果:编译失败,找不到目标文件,原因是默认只在当前路径下查找。</td></tr><tr><td>
|
||||
在递归模式下进行编译
|
||||
命令行:tsl -COMPILE /S TsfFuncB.tsf</td><td>
|
||||
执行结果:编译成功,递归模式下,还会在当前目录下的子目录下进行查找。</td></tr></tbody></table>
|
||||
|
||||
执行具体表现如下:
|
||||
|
||||
####### 可选项:-S 安静模式
|
||||
|
||||
功能:安静模式,不打印执行结果的信息。
|
||||
|
||||
如:安静模式命令:tsl -COMPILE -S TsfFuncA.tsf
|
||||
|
||||
默认情况下的命令:tsl -COMPILE TsfFuncA.tsf
|
||||
|
||||
对比结果如下,安静模式下,不打印执行是否成功的提示信息。
|
||||
|
||||
###### 编译成可执行文件
|
||||
|
||||
命令:--buildexe=tslfilename
|
||||
|
||||
功能:将指定tsl脚本文件编译成可执行文件,同时会编译该函数的相关依赖。
|
||||
|
||||
场景:将目标文件编译成.exe可执行文件,默认文件名为default.exe
|
||||
|
||||
输入:tsl --buildexe=TD_TSL_ExePath.tsl
|
||||
|
||||
输出:在tsl文件同目录下生成.exe可执行文件。默认是一个控制台应用
|
||||
|
||||
运行结果和新增文件如下:
|
||||
|
||||
默认图标为天软客户端图标。
|
||||
|
||||
####### 内容
|
||||
|
||||
- 可选项:-buildgui 指定为Windows UI应用程序
|
||||
- 可选项:--buildico= 指定图标
|
||||
|
||||
####### 可选项:-buildgui 指定为Windows UI应用程序
|
||||
|
||||
命令:-buildgui
|
||||
|
||||
功能:指定编译的可执行文件为Windows UI应用程序。
|
||||
|
||||
场景:将创建了界面的脚本编译成带有图形界面的.exe可执行文件,指定文件名为buildgui.exe
|
||||
|
||||
输入:tsl --buildexe=Test_GUIexe.tsl --output=buildgui.exe -buildgui
|
||||
|
||||
输出:在tsl文件同目录下生成一个带有图形界面的buildgui.exe可执行文件。
|
||||
|
||||
新增文件以及buildgui.exe执行结果如下:
|
||||
|
||||
以下是上述Test_GUIexe.tsl文件中的代码,仅供参考。执行下述案例中用到了界面tslvcl工具包。
|
||||
|
||||
```text
|
||||
uses tslvcl;
|
||||
|
||||
app := initializeapplication();
|
||||
|
||||
app.createform(class(tfm),fm);
|
||||
|
||||
fm.show();
|
||||
|
||||
app.run();
|
||||
|
||||
type tfm=class(TVCForm)
|
||||
|
||||
uses tslvcl;
|
||||
|
||||
function Create(AOwner);
|
||||
|
||||
begin
|
||||
|
||||
inherited;
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
```
|
||||
|
||||
####### 可选项:--buildico= 指定图标
|
||||
|
||||
命令:--buildico=iconfile
|
||||
|
||||
功能:指定输出文件的图标,默认为天软可执行文件的图标。
|
||||
|
||||
场景:将输出的可执行文件的图标指定为ts.ico图标,文件名为buildico.exe
|
||||
|
||||
输入:tsl --buildexe=TD_TSL_ExePath.tsl --output=buildico.exe --buildico=ts.ico
|
||||
|
||||
输出:在tsl文件同目录下生成一个带有自定义图标的buildico.exe可执行文件。
|
||||
|
||||
注:自定义图标文件只能为.ico格式图片,否则编译时打印错误信息,但不会影响编译。
|
||||
|
||||
如发现编译后的可执行文件图标没有更改,可能是windows存有缓存。
|
||||
|
||||
###### 编译动态库
|
||||
|
||||
命令:--buildlib=tsl(tsf)filename
|
||||
|
||||
功能:将tsl/tsf文件编译成动态库, 同时会编译该函数或脚本中的相关依赖
|
||||
|
||||
场景:将指定的tsl文件及相关依赖编译到一个.dll动态库文件中
|
||||
|
||||
输入:tsl --buildlib=TD_TSL_ExePath.tsl
|
||||
|
||||
输出:在tsl文件同目录下生成.dll文件。tsl文件及其依赖会编译至单个文件中。
|
||||
|
||||
运行结果和新增文件如下:
|
||||
|
||||
####### 内容
|
||||
|
||||
- 可选项:--exports 输出指定函数名
|
||||
|
||||
####### 可选项:--exports 输出指定函数名
|
||||
|
||||
命令:--exports=func1[:exp1],…
|
||||
|
||||
功能:将指定函数输出在动态库中,多个函数用逗号分割
|
||||
|
||||
场景:将目标文件编译成动态库文件,并在动态库的函数列表中暴露函数TD_TSL_ExePath,别名为
|
||||
|
||||
ExePath
|
||||
|
||||
输入:tsl --buildlib=TD_TSL_ExePath.tsl --exports=TD_TSL_ExePath:ExePath
|
||||
|
||||
输出:在tsl文件同目录下生成.dll文件。
|
||||
|
||||
执行上述语句打印信息如下:
|
||||
|
||||
可以通过visual studio自带工具可以查看.dll文件暴露出的方法,如下所示:
|
||||
|
||||
###### 编译包文件
|
||||
|
||||
命令:--build=tslfilename
|
||||
|
||||
功能:将tsl/tsf文件编译成.tsg包文件, 同时会编译目标函数或脚本中的相关依赖
|
||||
|
||||
场景:将指定的tsl文件编译成.tsg包文件
|
||||
|
||||
输入:tsl --build=TD_TSL_ExePath.tsl
|
||||
|
||||
输出:在tsl文件同目录下生成.tsg包文件。
|
||||
|
||||
运行结果和新增文件如下:
|
||||
|
||||
###### 编译命令的其它可选项
|
||||
|
||||
在执行--build| --buildexe| --buildlib编译命令时,可添加的可选项的使用样例。
|
||||
|
||||
在不添加可选项时,编译默认会包含tsl文件中调用的tsf函数文件。不加额外参数的情况下,默认编译文件名为default.xxx,且文件生成在当前路径下。
|
||||
|
||||
####### 内容
|
||||
|
||||
- --output= 输出目标文件的名称与路径
|
||||
- -strong 编译所有引用
|
||||
- --depends= 指定函数列表
|
||||
- --dependsdir= 函数扩展路径
|
||||
- --excludes= 不编译指定函数
|
||||
- --resourcedir= 资源扩展路径
|
||||
- --resourcepat= 指定资源匹配串
|
||||
- -resourcekeepdir 保留相对路径
|
||||
- --extresource= 指定额外资源
|
||||
|
||||
####### --output= 输出目标文件的名称与路径
|
||||
|
||||
可选命令:--output=filename
|
||||
|
||||
功能:给输出目标指定文件路径与名称
|
||||
|
||||
场景:将目标文件编译成名为test.tsg的包文件,并且指定输出目录为子目录output
|
||||
|
||||
输入:tsl --build=TD_TSL_ExePath.tsl --output=.\output\test.tsg
|
||||
|
||||
输出:在当前运行目录下的output子文件夹中生成test.tsg文件。
|
||||
|
||||
####### -strong 编译所有引用
|
||||
|
||||
命令:-strong
|
||||
|
||||
功能:将所有依赖的引用都进行编译
|
||||
|
||||
场景:目标文件中调用了单元方法,单元中其它方法还调用了其它函数,将目标文件编译成.exe可执行文件,且将所有没有被调用到的引用也编译至生成文件中
|
||||
|
||||
输入:tsl--buildexe=TestDemo01.tsl -strong
|
||||
|
||||
输出:在tsl文件同目录下生成.exe可执行文件。
|
||||
|
||||
展示如下(包括不加该选项的对照):
|
||||
|
||||
其中,TestDemo01.tsl?的源代码如下:
|
||||
|
||||
```text
|
||||
uses TSLUnitDemo01;
|
||||
|
||||
a:=10;
|
||||
|
||||
t:=FuncA(a);
|
||||
|
||||
echo "TSLUnitDemo01.FuncA",t;
|
||||
|
||||
sleep(10*1000);
|
||||
|
||||
return t;
|
||||
```
|
||||
|
||||
TSLUnitDemo01单元的源代码如下:
|
||||
|
||||
```text
|
||||
Unit TSLUnitDemo01;
|
||||
|
||||
Interface
|
||||
|
||||
function FuncA(a);
|
||||
|
||||
function FuncB(a);
|
||||
|
||||
Implementation
|
||||
|
||||
function FuncA(a);
|
||||
|
||||
begin
|
||||
|
||||
return a+20;
|
||||
|
||||
end;
|
||||
|
||||
function FuncB(a);
|
||||
|
||||
begin
|
||||
|
||||
a:=TD_Test(a);
|
||||
|
||||
return a*a;
|
||||
|
||||
end;
|
||||
|
||||
Initialization
|
||||
|
||||
FuncA(2);
|
||||
|
||||
Finalizationend.
|
||||
```
|
||||
|
||||
####### --depends= 指定函数列表
|
||||
|
||||
命令:--depends=fun1,fun2,…
|
||||
|
||||
功能:指定额外的需要一起编译的函数列表,多个函数用,分隔
|
||||
|
||||
场景:目标函数不依赖该函数的情况下,将该函数与目标文件一起编译至动态库中
|
||||
|
||||
输入:tsl --buildlib=Test_depends.tsl --depends=Test01_TD
|
||||
|
||||
输出:在tsl文件同目录下生成.dll文件。
|
||||
|
||||
####### --dependsdir= 函数扩展路径
|
||||
|
||||
命令:--dependsdir=dir1,dir2,…
|
||||
|
||||
功能:指定其它需要被编译的函数路径
|
||||
|
||||
场景:将指定文件夹(子目录\test)中的所有函数一起编译至动态库中
|
||||
|
||||
输入:tsl --buildlib=Test_dependsdir.tsl --dependsdir=test
|
||||
|
||||
输出:在tsl文件同目录下生成.dll文件,该dll中包含指定路径下的所有文件。
|
||||
|
||||
####### --excludes= 不编译指定函数
|
||||
|
||||
命令:--excludes=fun1,fun2,…
|
||||
|
||||
功能:不编译指定函数,一般用于在依赖范围内时需要不被编译的场景
|
||||
|
||||
场景:将一个调用了Test01_TD函数的脚本文件编译成可执行文件,并且指定Test01_TD函数不被编译。
|
||||
|
||||
输入:tsl --buildexe=Test_depends.tsl --excludes=Test01_TD
|
||||
|
||||
输出:生成可执行文件,该文件中不包含Test01_TD函数
|
||||
|
||||
其生成过程的表及与运行该可执行文件的表现如下:运行会报找不到Test01_TD函数的错,说明打包中没有该模型。
|
||||
|
||||
注:编译过程中的打印信息是指分析到的依赖关系或资源文件,像上面Test01_TD这种被依赖但是不需要编译的文件还是会被打印在提示信息中。
|
||||
|
||||
####### --resourcedir= 资源扩展路径
|
||||
|
||||
命令:--resourcedir=foldername
|
||||
|
||||
功能:指定其它需要被编译的资源路径。
|
||||
|
||||
场景:在编译动态库文件时,指定子目录\ resourcedir\下的文件一起编译至动态库中
|
||||
|
||||
输入:tsl --buildlib=Test_resourcedir.tsl --resourcedir=resource
|
||||
|
||||
执行上述语句,打印信息如下:
|
||||
|
||||
资源文件夹中文件如下:
|
||||
|
||||
####### --resourcepat= 指定资源匹配串
|
||||
|
||||
命令:--resourcepat=pat1,pat2,…
|
||||
|
||||
功能:将指定目录下的符合匹配串的文件编译进目标文件中,需要通过--resourcedir=进行指定目录,指定当前目录时,用--resourcedir=.\。
|
||||
|
||||
场景01:在编译成可执行文件时,将\ resource \目录下的所有.ini文件编译至生成文件中。
|
||||
|
||||
输入:tsl --buildexe=Test_resourcepat.tsl --resourcedir=resource --resourcepat="\*.ini"
|
||||
|
||||
输出:在同目录下生成了.exe文件,并一起编译了\ resource \目录下的ini文件
|
||||
|
||||
子目录\ resource \文件夹如下:可以看出上面的命令中只编译了两个ini,其它文件没有被编译。
|
||||
|
||||
Test_resourcepat.tsl中代码如下:
|
||||
|
||||
```text
|
||||
echo "\r\n";
|
||||
|
||||
echo "Running!!\r\n";
|
||||
|
||||
getglobalcache("@@tsl-resource@@",rs);//获取可执行文件中的所有资源文件信息
|
||||
|
||||
echo tostn(rs);
|
||||
|
||||
sleep(20 * 1000);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
执行目标文件打印如下:可以到符合条件的ini文件信息
|
||||
|
||||
场景02:编译可执行文件时,将当前路径及其子路径下的pat.ini文件一起编译。
|
||||
|
||||
输入:tsl --buildexe=Test_resourcepat.tsl --resourcedir=.\ --resourcepat="pat.ini"
|
||||
|
||||
输出:生成.exe文件,并编译了两个路径下的pat.ini文件
|
||||
|
||||
执行命令目录下的pat.ini文件展示如下:
|
||||
|
||||
####### -resourcekeepdir 保留相对路径
|
||||
|
||||
命令:-resourcekeepdir
|
||||
|
||||
功能:资源文件名中保留文件的相对路径
|
||||
|
||||
场景:编译可执行文件时,编译pat.ini文件,并保留相对路径,目标源代码中输出当前资源数据。
|
||||
|
||||
输入:tsl --buildexe=Test_resourcekeepdir.tsl --resourcedir=.\ --resourcepat=pat.ini -resourcekeepdir
|
||||
|
||||
输出:生成可执行文件。
|
||||
|
||||
执行可执行文件:资源文件名中加入了相对路径
|
||||
|
||||
下面是不加相对路径命令的生成结果:可对比查看差异
|
||||
|
||||
####### --extresource= 指定额外资源
|
||||
|
||||
命令:--extresource=filename1[:keyname1],filename2…
|
||||
|
||||
功能:将指定资源加入编译,一般用于需要额外加入资源文件时使用,支持相对路径的指定
|
||||
|
||||
场景:在编译可执行文件时,将ts.ico图标文件一起编译
|
||||
|
||||
输入:tsl--buildexe=Test01_TD.tsl?--extresource=ts.ico
|
||||
|
||||
输出:生成.exe文件
|
||||
|
||||
执行编译与运行可执行文件展示:资源包中存在ts.ico文件
|
||||
|
||||
其中Test01_TD.tsl?的源程序如下:
|
||||
|
||||
```text
|
||||
echo "\r\n";
|
||||
|
||||
echo "Running!!\r\n";
|
||||
|
||||
getglobalcache("@@tsl-resource@@",rs);//获取包中的资源文件信息
|
||||
|
||||
echo tostn(rs);
|
||||
|
||||
sleep(20 * 1000);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
###### 执行包文件(.tsg)
|
||||
|
||||
命令:--runpkg=packagename
|
||||
|
||||
功能:执行包文件
|
||||
|
||||
场景:执行一个写入本地test_runpkg.txt文件中的包文件
|
||||
|
||||
输入:tsl --runpkg=runpkg.tsg
|
||||
|
||||
输出:运行.tsg包文件,在本地新增test_runpkg.txt文件,并写入内容
|
||||
|
||||
其中,包中目标文件的的源代码如下:
|
||||
|
||||
```text
|
||||
content:="test_runpkg";
|
||||
|
||||
writefile(rwraw(),"","D:\\test\\tslCmdTest\\runpkg\\test_runpkg.txt",0,1000,content);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
####### 内容
|
||||
|
||||
- 可选项:--pkg= 加载指定资源包
|
||||
|
||||
####### 可选项:--pkg= 加载指定资源包
|
||||
|
||||
命令:--pkg=pkg1,pkg2…
|
||||
|
||||
功能:执行包文件的同时,加载指定包文件。
|
||||
|
||||
场景:执行包文件,加载并调用指定包中的函数
|
||||
|
||||
输入:tsl --runpkg=main.tsg --pkg=data.tsg,SumVol.tsg
|
||||
|
||||
输出:运行结果如下
|
||||
|
||||
注:
|
||||
|
||||
包main.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
echo evalData(0);
|
||||
|
||||
function evalData(n)
|
||||
|
||||
begin
|
||||
|
||||
data := data();
|
||||
|
||||
ret :=
|
||||
|
||||
case n of
|
||||
|
||||
0:SumVol(data);
|
||||
|
||||
1:AvgVol(data);
|
||||
|
||||
2:SumAmount(data);
|
||||
|
||||
3:AvgAmount(data);
|
||||
|
||||
end;
|
||||
|
||||
return ret;
|
||||
|
||||
end
|
||||
```
|
||||
|
||||
包data.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
function data()
|
||||
|
||||
begin
|
||||
|
||||
return array(
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.79,"成交量":189366181.0,"成交金额":1482908609.8),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.64,"成交量":145843421.0,"成交金额":1110094218.41),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.53,"成交量":136469106.0,"成交金额":1027113710.84),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.77,"成交量":211713302.0,"成交金额":1624520449.34),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.53,"成交量":159372804.0,"成交金额":1205270122.69),
|
||||
|
||||
("StockID":"SZ000002","收盘价":7.48,"成交量":97780993.0,"成交金额":732008884.19)
|
||||
|
||||
);
|
||||
|
||||
end
|
||||
```
|
||||
|
||||
包SumVol.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
function SumVol(data)
|
||||
|
||||
begin
|
||||
|
||||
return sum(data[:,"成交量"]);
|
||||
|
||||
end
|
||||
```
|
||||
|
||||
###### 生成加密串
|
||||
|
||||
命令:-ENCODE configstring
|
||||
|
||||
功能:生成指定字符串的加密串,可用于数据库配置串的加密处理。
|
||||
|
||||
场景:对数据库的连接串进行加密处理
|
||||
|
||||
输入:tsl -encode "Server=127.0.0.1;Database=tsBase;Uid=TinySoft;Pwd=admin;"
|
||||
|
||||
输出:返回加密串
|
||||
|
||||
###### 执行TSL代码串
|
||||
|
||||
命令:-eval tslstring
|
||||
|
||||
功能:执行TSL语言代码串
|
||||
|
||||
场景:执行字符串” datetostr(20231106T)”
|
||||
|
||||
输入:tsl -eval "datetostr(20231106T)"
|
||||
|
||||
输出:返回串执行的结果
|
||||
|
||||
###### 加密密码串
|
||||
|
||||
命令:-ENCODEDEBUGPASS password
|
||||
|
||||
功能:生成密码串加密后的串,用于远程调试配置中对密码信息的加密隐藏
|
||||
|
||||
场景:生成密码“admin”的加密串
|
||||
|
||||
输入:tsl -encodedebugpass admin
|
||||
|
||||
输出:得到加密后的密码串
|
||||
|
||||
###### 执行TSL脚本
|
||||
|
||||
命令:tsl filename
|
||||
|
||||
功能:执行指定tsl程序,若不在当前路径下,需要加上路径信息。
|
||||
|
||||
场景:执行TSLDemo01.tsl
|
||||
|
||||
输入:tsl TSLDemo01.tsl
|
||||
|
||||
####### 内容
|
||||
|
||||
- 可选项:-LIBPATH 扩展函数查找路径
|
||||
- 可选项:-TESTMULTITHREAD多线程执行
|
||||
- 可选项:--pkg= 加载指定资源包
|
||||
|
||||
####### 可选项:-LIBPATH 扩展函数查找路径
|
||||
|
||||
命令:-LIBPATH libpath
|
||||
|
||||
功能:设置函数(.tsf)的搜索路径,多个路径用分号分割,当前路径为.场景:执行TSLDemo01.tsl脚本,程序中有调用函数TsfFuncA(),且该函数不在当前目录下
|
||||
|
||||
输入:tsl TSLDemo01.tsl -libpath .\aaa\
|
||||
|
||||
输出:如下图所示,成功调用TsfFuncA ()函数
|
||||
|
||||
TsfFuncA函数的路径如下:
|
||||
|
||||
####### 可选项:-TESTMULTITHREAD多线程执行
|
||||
|
||||
命令:-TESTMULTITHREAD N
|
||||
|
||||
功能:指定N个线程调用脚本
|
||||
|
||||
场景:起用5个线程调用testMultiThread.tsl,该脚本中执行打印当前线程的id号
|
||||
|
||||
输入:tsl testMultiThread.tsl -TestMultiThread 5
|
||||
|
||||
输出:如下图,打印了5个不同线程的id号,说明函数被调用了5次
|
||||
|
||||
其它更多请查看命令列表的介绍。
|
||||
|
||||
####### 可选项:--pkg= 加载指定资源包
|
||||
|
||||
命令:--pkg=pkg1,pkg2…
|
||||
|
||||
功能:加载包文件。
|
||||
|
||||
场景:执行调用包中的函数的脚本
|
||||
|
||||
输入:tsl TestAAA.tsl--pkg=TestB.tsg
|
||||
|
||||
输出:运行结果如下
|
||||
|
||||
注:上述中给出了不加载包时执行的结果,方便功能体现。
|
||||
|
||||
#### 调用效率的测试
|
||||
|
||||
通过上述测试可以看出:调用TSL编译的动态库1千万次,只花费了1.9秒,属于亚微秒级别的调用,可用于交易级别的开发中。
|
||||
|
||||
#### 依赖关系
|
||||
|
||||
##### 内容
|
||||
|
||||
- 查找执行文件的依赖关系
|
||||
- SysGetFuncdepends
|
||||
|
||||
##### 查找执行文件的依赖关系
|
||||
|
||||
在实现编译成可执行文件以及动态库的过程中,有一个重要的过程,即查找执行文件的依赖关系。
|
||||
|
||||
因此,天软提供了SysGetFuncdepends模型,专门获取指定目标的依赖关系。
|
||||
|
||||
查找的依赖关系范围包括如下:
|
||||
|
||||
##### SysGetFuncdepends
|
||||
|
||||
范例
|
||||
|
||||
范例01:查找函数的依赖关系
|
||||
|
||||
```text
|
||||
obj:=Findfunction("stockzf");
|
||||
|
||||
v:=SysGetFuncdepends(obj,2+4+8,v1,v2);
|
||||
|
||||
return array("依赖的函数信息":v,"二进制函数信息":v1,"二进制类信息":v2);
|
||||
```
|
||||
|
||||
返回结果:
|
||||
|
||||
其中,依赖的函数信息结果截图如下:
|
||||
|
||||
二进制函数信息截图如下:
|
||||
|
||||
范例02:查找类相关函数的依赖关系
|
||||
|
||||
```text
|
||||
obj:=Findfunction("getPYStringList");
|
||||
|
||||
v:=SysGetFuncdepends(obj,2+4+8,v1,v2);
|
||||
|
||||
return array("依赖的函数信息":v,"二进制函数信息":v1,"二进制类信息":v2);
|
||||
```
|
||||
|
||||
其中,函数getPYStringList调用了天软内置类THashedStringList。
|
||||
|
||||
返回:
|
||||
|
||||
其中,二进制类信息展开如下:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,747 @@
|
|||
### Web开发支撑
|
||||
|
||||
#### 内容
|
||||
|
||||
- TSL的Web支持
|
||||
- .Web Tools
|
||||
|
||||
#### TSL的Web支持
|
||||
|
||||
##### 内容
|
||||
|
||||
- 介绍
|
||||
- 运行模式
|
||||
- WEB服务器配置方法
|
||||
- 程序结构
|
||||
- 输出
|
||||
- HTML表单处理
|
||||
|
||||
##### 介绍
|
||||
|
||||
TSL可用于Web开发,下面是一个简单的示例
|
||||
|
||||
<?tslx>
|
||||
|
||||
<HTML>
|
||||
|
||||
<Title>TSL Web Page</Title>
|
||||
|
||||
<Body>
|
||||
|
||||
<?tsl
|
||||
|
||||
writeln("First Tsl Web page");
|
||||
|
||||
>
|
||||
|
||||
</Body>
|
||||
|
||||
与 PHP类似, TSL代码被嵌入HTML代码中做一些事情,
|
||||
|
||||
与JAVAScript客户端不同的是,TSL代码在服务器端执行,在客户端看不到TSL代码,只能看到由TSL生成的HTML代码。
|
||||
|
||||
##### 运行模式
|
||||
|
||||
Tsl脚本可以以纯cgi的模式执行,也可以用Apache 1.x, 2.x的Module运行,还可以支持以IIS的过滤器来运行,此外,还内置支持了纯CGI对FastCGI的支撑。
|
||||
|
||||
##### WEB服务器配置方法
|
||||
|
||||
如需要使用TSL的WEB解释器,请将安装TSL的目录加入系统路径中。
|
||||
|
||||
以下是各类WEB服务器的配置方法:
|
||||
|
||||
###### 内容
|
||||
- IIS
|
||||
- Apache 2.2
|
||||
- Apache 1.x
|
||||
|
||||
###### IIS
|
||||
|
||||
注意:需要在IIS管理器里的Web服务扩展里允许所有CGI扩展和所有未知ISAPI
|
||||
|
||||
####### 内容
|
||||
- IIS Module模式
|
||||
- IIS CGI模式
|
||||
|
||||
####### IIS Module模式
|
||||
|
||||
请在IIS管理器里加入IIS_TSL.dll模块关联.tsl类型。
|
||||
|
||||
####### IIS CGI模式
|
||||
|
||||
请在IIS管理器里加入TSLCGI.exe关联.tsl类型。
|
||||
|
||||
###### Apache 2.2
|
||||
|
||||
Apache 2.2与其2.0版本做了比较大的修改,所以TSL取消了模块对2.0的支持,当然CGI模式在各种版本下均支持。如需要使用模块,请下载Apache 2.2的版本。
|
||||
|
||||
####### 内容
|
||||
- Apache 2.2 Module模式:
|
||||
- Apache 2.X CGI模式:
|
||||
|
||||
####### Apache 2.2 Module模式:
|
||||
|
||||
在httpd.conf中加入:
|
||||
|
||||
LoadModule tsl_module C:/Tinysoft/tsl/MOD_TSL2.dll
|
||||
|
||||
AddType tslscript-handler .tsl
|
||||
|
||||
AddHandler tslscript-handler .tsl
|
||||
|
||||
####### Apache 2.X CGI模式:
|
||||
|
||||
在httpd.conf中加入:
|
||||
|
||||
<Directory "C:/Tinysoft/tsl">
|
||||
|
||||
AllowOverride None
|
||||
|
||||
Options None
|
||||
|
||||
Order allow,deny
|
||||
|
||||
Allow from all
|
||||
|
||||
</Directory>
|
||||
|
||||
AddHandler tslscript-handler .tsl
|
||||
|
||||
ScriptAlias /tsl/ "c:/Tinysoft/tsl/"
|
||||
|
||||
Action tslscript-handler "/tsl/TSLCgi.exe"
|
||||
|
||||
或者在httpd.conf中加入:
|
||||
|
||||
AddHandler cgi-script .tsl
|
||||
|
||||
并且在.tsl的第一行加入#!C:/Tinysoft/tsl/tslCgi.exe
|
||||
|
||||
###### Apache 1.x
|
||||
|
||||
虽然目前Apache的主要版本已经升级为2.2,但是Apache 1.x的版本使用依然很广泛,由于Apache 1.x的版本与2.2版本差异非常之大,所以TSL语言会继续支持Apache 1.x版本。
|
||||
|
||||
####### 内容
|
||||
- Apache 1.x Module模式:
|
||||
- Apache 1.x CGI模式:
|
||||
|
||||
####### Apache 1.x Module模式:
|
||||
|
||||
在httpd.conf中加入:
|
||||
|
||||
LoadModule tsl_module C:/tsl/mod_tsl1.dll
|
||||
|
||||
AddModule mod_tsl.c
|
||||
|
||||
AddType application/tslscript .tsl
|
||||
|
||||
AddHandler tslscript-handler .tsl
|
||||
|
||||
####### Apache 1.x CGI模式:
|
||||
|
||||
在httpd.conf中加入:
|
||||
|
||||
<Directory "C:/Tinysoft/tsl">
|
||||
|
||||
AllowOverride None
|
||||
|
||||
Options None
|
||||
|
||||
Order allow,deny
|
||||
|
||||
Allow from all
|
||||
|
||||
</Directory>
|
||||
|
||||
ScriptAlias /tsl/ "c:/Tinysoft/tsl/"
|
||||
|
||||
AddHandler application/tslcgi .tsl
|
||||
|
||||
Action application/tslcgi "/tsl/tslcgi.exe"
|
||||
|
||||
或者在httpd.conf中加入:
|
||||
|
||||
AddHandler cgi-script .tsl
|
||||
|
||||
并且在.tsl的第一行加入#!C:/Tinysoft/tsl/tslCgi.exe
|
||||
|
||||
##### 程序结构
|
||||
|
||||
与PHP不同TSL脚本默认是程序,而非HTML文本。
|
||||
|
||||
下面的脚本会直接执行
|
||||
|
||||
s:="this is a tsl script";
|
||||
|
||||
writeln(s);
|
||||
|
||||
如果要输出完整的HTML结构,需要编写下面的代码
|
||||
|
||||
write("
|
||||
|
||||
<HTML>
|
||||
|
||||
<Body>
|
||||
|
||||
<p>TSL Script</p>
|
||||
|
||||
</Body>
|
||||
|
||||
</HTML>
|
||||
|
||||
");
|
||||
|
||||
###### 内容
|
||||
- <?tslx> 标记
|
||||
- <?tsl … ?>块
|
||||
|
||||
- <?= ?>块
|
||||
|
||||
###### <?tslx> 标记
|
||||
|
||||
标记下面文字是HTML代码,代码将会原文输出到网页上.直到出现<?tsl ,
|
||||
|
||||
上面的代码可以使用这种标记方式:
|
||||
|
||||
<?tslx>
|
||||
|
||||
<HTML>
|
||||
|
||||
<Body>
|
||||
|
||||
<p>TSL Script</p>
|
||||
|
||||
</Body>
|
||||
|
||||
</HTML>
|
||||
|
||||
###### <?tsl … ?>块
|
||||
|
||||
<?tsl
|
||||
|
||||
//这里可以写TSL代码…
|
||||
|
||||
>
|
||||
|
||||
当代码应用了<?tslx>标记后,以后的代码都被解析成文本,如果仍然需要在<?tslx>后执行TSL代码,就需要把代码写在<?tsl和 ?>中间。标识符和代码可以写在一行或多行,如果写在一行,<?tsl和代码必须用空格分开。代码中可以出现多次<?tsl … ?>块。但是不能嵌套。
|
||||
|
||||
上面的代码可以写成:
|
||||
|
||||
<?tslx>
|
||||
|
||||
<HTML>
|
||||
|
||||
<Body>
|
||||
|
||||
<p>
|
||||
|
||||
<?tsl write("TSL Script");?>
|
||||
|
||||
</p>
|
||||
|
||||
</Body>
|
||||
|
||||
</HTML>
|
||||
|
||||
###### <?= ?>块
|
||||
|
||||
在<?tslx>环境下,可以使用<?= ?>来简化输出,输出的模式为:
|
||||
|
||||
<?=<p1>[,p2..pn]?>
|
||||
|
||||
例如要输出当前时间:
|
||||
|
||||
<?="现在是:",DateTimeToStr(Now())?>
|
||||
|
||||
##### 输出
|
||||
|
||||
TSL使用Write()和Writeln()2个函数把内容输出到网页中。
|
||||
|
||||
格式为 Write(p1,p2,…,pn);
|
||||
|
||||
把参数p1、p2、…、pn连接起来输出.
|
||||
|
||||
Writeln()和write的参数一样,同时输出回车和换行。但是浏览器解释HTML有时会忽略换行回车,把连在一起的空白字符解析成一个空格,这一点需要注意。
|
||||
|
||||
TSL还可以使用echo操作符号输出内容,使用的效果和write相同,但是:
|
||||
|
||||
格式为Echo <p1>[,p2…pn]
|
||||
|
||||
此外,在<?TSLX>块中还可以采用<?=<p1>[,p2..pn] ?>的模式来输出。
|
||||
|
||||
##### HTML表单处理
|
||||
|
||||
当一个表单体交给 TSL 脚本时,表单中的信息会自动在脚本中可用。TSL可以轻松的访问这些信息,例如下面的表单:
|
||||
|
||||
<form action="foo.tsl" method="POST">
|
||||
|
||||
Name: <input type="text" name="username"><br />
|
||||
|
||||
Email: <input type="text" name="email"><br />
|
||||
|
||||
<input type="submit" name="submit" value="Submit me!" />
|
||||
|
||||
</form>
|
||||
|
||||
Tsl可以提取上面表单的数据,方法是使用
|
||||
|
||||
HttpGetQueryValueByName(Name:String):String
|
||||
|
||||
示例:
|
||||
|
||||
<?tsl
|
||||
|
||||
write("Name:",HttpGetQueryValueByName("name"),"<br>");
|
||||
|
||||
write("Email:",HttpGetQueryValueByName("email"));
|
||||
|
||||
>
|
||||
|
||||
为了使用简单,TSL使用HttpGetQueryValueByName方法,也可以提取get表单数据,和
|
||||
|
||||
Query_String 方式(URL中在之后的信息)的数据。
|
||||
|
||||
示例:
|
||||
|
||||
http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
|
||||
可以用上面的方式提取数据
|
||||
|
||||
#### .Web Tools
|
||||
|
||||
##### 内容
|
||||
- 表格样式
|
||||
- 单元格
|
||||
- 图形配置
|
||||
- 展示范例
|
||||
- 中间函数
|
||||
|
||||
##### 表格样式
|
||||
|
||||
###### 内容
|
||||
- Web_tb_arrow
|
||||
- Web_tb_bar
|
||||
- Web_tb_gradient
|
||||
- Web_tb_npbar
|
||||
- Web_tb_npgridbar
|
||||
|
||||
###### Web_tb_arrow
|
||||
|
||||
- Web_tb_arrow
|
||||
- Web_tb_bar
|
||||
- Web_tb_gradient
|
||||
- Web_tb_npbar
|
||||
- Web_tb_npgridbar
|
||||
|
||||
###### Web_tb_bar
|
||||
|
||||
- Web_tb_arrow
|
||||
- Web_tb_bar
|
||||
- Web_tb_gradient
|
||||
- Web_tb_npbar
|
||||
- Web_tb_npgridbar
|
||||
|
||||
###### Web_tb_gradient
|
||||
|
||||
- Web_tb_arrow
|
||||
- Web_tb_bar
|
||||
- Web_tb_gradient
|
||||
- Web_tb_npbar
|
||||
- Web_tb_npgridbar
|
||||
|
||||
###### Web_tb_npbar
|
||||
|
||||
- Web_tb_arrow
|
||||
- Web_tb_bar
|
||||
- Web_tb_gradient
|
||||
- Web_tb_npbar
|
||||
- Web_tb_npgridbar
|
||||
|
||||
###### Web_tb_npgridbar
|
||||
|
||||
- Web_tb_arrow
|
||||
- Web_tb_bar
|
||||
- Web_tb_gradient
|
||||
- Web_tb_npbar
|
||||
- Web_tb_npgridbar
|
||||
|
||||
##### 单元格
|
||||
|
||||
###### 内容
|
||||
- 背景
|
||||
- 富文本
|
||||
- 迷你图
|
||||
|
||||
###### 背景
|
||||
|
||||
####### 内容
|
||||
- Web_css_bgbar
|
||||
- Web_css_bgcolor
|
||||
- Web_css_bghist
|
||||
|
||||
####### Web_css_bgbar
|
||||
|
||||
- Web_css_bgbar
|
||||
- Web_css_bgcolor
|
||||
- Web_css_bghist
|
||||
|
||||
####### Web_css_bgcolor
|
||||
|
||||
- Web_css_bgbar
|
||||
- Web_css_bgcolor
|
||||
- Web_css_bghist
|
||||
|
||||
####### Web_css_bghist
|
||||
|
||||
- Web_css_bgbar
|
||||
- Web_css_bgcolor
|
||||
- Web_css_bghist
|
||||
|
||||
###### 富文本
|
||||
|
||||
####### 内容
|
||||
- Web_richtext_zdbgcolor
|
||||
|
||||
####### Web_richtext_zdbgcolor
|
||||
|
||||
- Web_richtext_zdbgcolor
|
||||
|
||||
###### 迷你图
|
||||
|
||||
####### 内容
|
||||
- Web_spark_hist
|
||||
- Web_spark_nphist
|
||||
|
||||
####### Web_spark_hist
|
||||
|
||||
- Web_spark_hist
|
||||
- Web_spark_nphist
|
||||
|
||||
####### Web_spark_nphist
|
||||
|
||||
- Web_spark_hist
|
||||
- Web_spark_nphist
|
||||
|
||||
##### 图形配置
|
||||
|
||||
###### 内容
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
- Web_fig_radar
|
||||
- Web_fig_tree_decomp
|
||||
- Web_fig_violin
|
||||
|
||||
###### Web_fig_box
|
||||
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
- Web_fig_radar
|
||||
- Web_fig_tree_decomp
|
||||
- Web_fig_violin
|
||||
|
||||
###### Web_fig_heatmap
|
||||
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
- Web_fig_radar
|
||||
- Web_fig_tree_decomp
|
||||
- Web_fig_violin
|
||||
|
||||
###### Web_fig_histogram
|
||||
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
- Web_fig_radar
|
||||
- Web_fig_tree_decomp
|
||||
- Web_fig_violin
|
||||
|
||||
###### Web_fig_radar
|
||||
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
- Web_fig_radar
|
||||
- Web_fig_tree_decomp
|
||||
- Web_fig_violin
|
||||
|
||||
###### Web_fig_tree_decomp
|
||||
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
- Web_fig_radar
|
||||
- Web_fig_tree_decomp
|
||||
- Web_fig_violin
|
||||
|
||||
###### Web_fig_violin
|
||||
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
- Web_fig_radar
|
||||
- Web_fig_tree_decomp
|
||||
- Web_fig_violin
|
||||
|
||||
##### 展示范例
|
||||
|
||||
###### 内容
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
- Demo_framestyle_net
|
||||
- Demo_framestyle_web
|
||||
- Demo_framestyle_data
|
||||
|
||||
###### Demo_framestyle_constyle_dotweb
|
||||
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
- Demo_framestyle_net
|
||||
- Demo_framestyle_web
|
||||
- Demo_framestyle_data
|
||||
|
||||
###### Demo_framestyle_constyle_net
|
||||
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
- Demo_framestyle_net
|
||||
- Demo_framestyle_web
|
||||
- Demo_framestyle_data
|
||||
|
||||
###### Demo_framestyle_heatmaptb_net
|
||||
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
- Demo_framestyle_net
|
||||
- Demo_framestyle_web
|
||||
- Demo_framestyle_data
|
||||
|
||||
###### Demo_framestyle_net
|
||||
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
- Demo_framestyle_net
|
||||
- Demo_framestyle_web
|
||||
- Demo_framestyle_data
|
||||
|
||||
###### Demo_framestyle_web
|
||||
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
- Demo_framestyle_net
|
||||
- Demo_framestyle_web
|
||||
- Demo_framestyle_data
|
||||
|
||||
###### Demo_framestyle_data
|
||||
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
- Demo_framestyle_net
|
||||
- Demo_framestyle_web
|
||||
- Demo_framestyle_data
|
||||
|
||||
##### 中间函数
|
||||
|
||||
###### 内容
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Kerneldensityestimator
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_color_theme
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_color_triscale
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_dict2tabletree
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_format
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_getcolorscalebyrgbarr
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_getdefultcolor
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_getlineargradient
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_gettdbar
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_html_span
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_html_table
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
|
||||
###### Web_table2dicttree
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
- Web_dict2tabletree
|
||||
- Web_format
|
||||
- Web_getcolorscalebyrgbarr
|
||||
- Web_getdefultcolor
|
||||
- Web_getlineargradient
|
||||
- Web_gettdbar
|
||||
- Web_html_span
|
||||
- Web_html_table
|
||||
- Web_table2dicttree
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,50 @@
|
|||
#### 数据提取
|
||||
|
||||
##### 内容
|
||||
|
||||
- GetDataByMd
|
||||
- GetDataByMd2
|
||||
- StockIndustryLowerArr
|
||||
|
||||
##### GetDataByMd
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
// "MA110C2375"在20210322日的开仓手续费额
|
||||
|
||||
|
||||
SetSysParam(PN_Date(),20210322T);
|
||||
|
||||
|
||||
return GetDataByMd("MA110C2375.SP",1);
|
||||
|
||||
//结果:0.5
|
||||
```
|
||||
|
||||
##### GetDataByMd2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
// "MA110C2375"在20210322日的开仓手续费额
|
||||
|
||||
|
||||
SetSysParam(PN_Date(),20210322T);
|
||||
|
||||
|
||||
return GetDataByMd2("MA110C2375.SP",1);
|
||||
|
||||
//结果:0.5
|
||||
```
|
||||
|
||||
##### StockIndustryLowerArr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
// 在20201207的申万一级行业列表
|
||||
|
||||
return StockIndustryLowerArr("SWHY110000",20201207T);
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
#### 评价分析算法函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- Hurst
|
||||
|
||||
##### Hurst
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
data:=spec(FundNAWZFQk(20240308t,20240831t,cy_day(),0,0), "OF000001");
|
||||
|
||||
t := sselect ["净值收益率(%)"] from data end;
|
||||
|
||||
return Hurst(t);// 0.47
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,116 @@
|
|||
#### 外汇
|
||||
|
||||
##### 内容
|
||||
|
||||
- 汇率
|
||||
|
||||
##### 汇率
|
||||
|
||||
###### 内容
|
||||
|
||||
- ForExrateMidPrice
|
||||
- ForExrateMidPriceBegTEndT
|
||||
- GetCurrencyCodeBySecurityCode
|
||||
- ForExRateZf
|
||||
|
||||
###### ForExrateMidPrice
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//2020年4月20日美元/人民币的中间价
|
||||
|
||||
SetSysParam(PN_Stock(),'FXUSDCNY');
|
||||
|
||||
return ForExrateMidPrice(20200420T);
|
||||
|
||||
//返回7.0657
|
||||
```
|
||||
|
||||
###### ForExrateMidPriceBegTEndT
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//2020年4月20日到4月30日美元/人民币的中间价数据
|
||||
|
||||
SetSysParam(PN_Stock(),'FXUSDCNY');
|
||||
|
||||
begt:=20200420T;
|
||||
|
||||
endt:=20200430T;
|
||||
|
||||
return ForExrateMidPriceBegTEndT(begt,endt);
|
||||
```
|
||||
|
||||
//返回:
|
||||
|
||||
<table><tbody><tr><td>
|
||||
日期</td><td>
|
||||
代码</td><td>
|
||||
中间价</td></tr><tr><td>
|
||||
20200420</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0657</td></tr><tr><td>
|
||||
20200421</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0752</td></tr><tr><td>
|
||||
20200422</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0903</td></tr><tr><td>
|
||||
20200423</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0887</td></tr><tr><td>
|
||||
20200424</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0803</td></tr><tr><td>
|
||||
20200427</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0703</td></tr><tr><td>
|
||||
20200428</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.071</td></tr><tr><td>
|
||||
20200429</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0704</td></tr><tr><td>
|
||||
20200430</td><td>
|
||||
FXUSDCNY</td><td>
|
||||
7.0571</td></tr></tbody></table>
|
||||
|
||||
###### GetCurrencyCodeBySecurityCode
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//港股长和00001对应的货币对代码
|
||||
|
||||
return GetCurrencyCodeBySecurityCode('HK00001');
|
||||
|
||||
//返回 HKD
|
||||
```
|
||||
|
||||
###### ForExRateZf
|
||||
|
||||
算法
|
||||
|
||||
(V2-V1)/V1
|
||||
|
||||
其中V2是货币对在endt的中间价,V1是begt(需要大于首个交易日,否则begt=首个交易日)的中间价。范例
|
||||
|
||||
```text
|
||||
//2020年4月20日到4月30日美元/人民币的收益率
|
||||
|
||||
SetSysParam(PN_Stock(),'FXUSDCNY');
|
||||
|
||||
|
||||
begt:=20200420T;
|
||||
|
||||
|
||||
endt:=20200430T;
|
||||
|
||||
|
||||
return ForExRateZf(BegT,EndT);
|
||||
|
||||
//返回 -0.20786786956644
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
#### 框架构造Tools
|
||||
|
||||
##### 内容
|
||||
|
||||
- 数据分析
|
||||
- 参数调整
|
||||
|
||||
##### 数据分析
|
||||
|
||||
###### 内容
|
||||
|
||||
- 树形表格遍历
|
||||
|
||||
###### 树形表格遍历
|
||||
|
||||
####### 内容
|
||||
|
||||
- GetTreeSumByClassPath
|
||||
|
||||
####### GetTreeSumByClassPath
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Data:=array(
|
||||
|
||||
("名称":"风格收益(%)","取值":1.2,"分类路径":"总收益(%)"),
|
||||
|
||||
("名称":"Alpha(%)","取值":0.6,"分类路径":"总收益(%)\\选股Alpha(%)"),
|
||||
|
||||
("名称":"残差(%)","取值":0.2,"分类路径":"总收益(%)\\选股Alpha(%)"));
|
||||
|
||||
NodeName:="名称";
|
||||
|
||||
PathName:="分类路径";
|
||||
|
||||
SumName:="取值";
|
||||
|
||||
IfLever0:=0;
|
||||
|
||||
IfTreeID:=1;
|
||||
|
||||
return GetTreeSumByClassPath(Data,NodeName,PathName,SumName,IfLever0,IfTreeID);
|
||||
```
|
||||
|
||||
##### 参数调整
|
||||
|
||||
###### 内容
|
||||
|
||||
- pmstand_array
|
||||
|
||||
###### pmstand_array
|
||||
|
||||
范例
|
||||
|
||||
范例1
|
||||
|
||||
```text
|
||||
V:=2;
|
||||
|
||||
return pmstand_array(v);//array(2);
|
||||
```
|
||||
|
||||
范例2
|
||||
|
||||
```text
|
||||
V:="abc";
|
||||
|
||||
return pmstand_array(v);//array("abc");
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,301 @@
|
|||
#### 网格池
|
||||
|
||||
##### 内容
|
||||
|
||||
- MultiProc_unit
|
||||
|
||||
##### MultiProc_unit
|
||||
|
||||
功能描述:封装网格常用操作
|
||||
|
||||
接口汇总:
|
||||
|
||||
<table><tbody><tr><td>
|
||||
所属分类</td><td>
|
||||
接口名称</td><td>
|
||||
说明</td><td>
|
||||
备注</td></tr><tr><td>
|
||||
总接口</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=Fastmap" target="_blank">fastmap</a></td><td>
|
||||
调用网格执行函数</td><td>
|
||||
</td></tr><tr><td>
|
||||
日志</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=GridLogo" target="_blank">gridLogo</a></td><td>
|
||||
网格写日志</td><td>
|
||||
</td></tr><tr><td>
|
||||
等分划分方式</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=SplitDiv" target="_blank">splitDiv</a></td><td>
|
||||
度等分划分</td><td>
|
||||
参数为度(int)</td></tr><tr><td>
|
||||
</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=SplitDiv2" target="_blank">splitDiv2</a></td><td>
|
||||
长度等分划分</td><td>
|
||||
</td></tr><tr><td>
|
||||
</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=DeleteTablebyReg" target="_blank">SplitArrayQK</a></td><td>
|
||||
数组等分划分</td><td>
|
||||
参数为数组(array)</td></tr><tr><td>
|
||||
</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=SplitArrayQK2" target="_blank">SplitArrayQK2</a></td><td>
|
||||
数组等分划分</td><td>
|
||||
</td></tr><tr><td>
|
||||
用户数据相关</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=DeleteTablebyReg" target="_blank">DeleteTablebyReg</a></td><td>
|
||||
批量删除用户数据</td><td>
|
||||
正则匹配</td></tr><tr><td>
|
||||
</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=GettablebyReg" target="_blank">GettablebyReg</a></td><td>
|
||||
获取用户数据</td><td>
|
||||
正则匹配</td></tr><tr><td>
|
||||
</td><td>
|
||||
<a href="http://www.tinysoft.com.cn/tsdn/helpdoc/SearchContent.tsl?KeyWord=TryInsetTable" target="_blank">TryInsetTable</a></td><td>
|
||||
添加用户数据</td><td>
|
||||
正则匹配</td></tr></tbody></table>
|
||||
|
||||
网格使用经验:
|
||||
|
||||
1、网格嵌套(网格模型再去调用开网格),容易有效率问题
|
||||
|
||||
2、耗时小于0.2s~1s的函数,不建议用网格,因为此时网格调度耗时将会很耗时
|
||||
|
||||
3、在测试网格时使用Timeit 测试比较耗时的网络节点,不同网络节点耗时差异可以为0.02s VS 0.4s
|
||||
|
||||
通过设置fastmap的sysparm参数,指定运算网格
|
||||
|
||||
###### 内容
|
||||
|
||||
- Fastmap
|
||||
- 范例
|
||||
- 工具函数
|
||||
- 中间函数
|
||||
|
||||
###### Fastmap
|
||||
|
||||
- Fastmap
|
||||
- 范例
|
||||
- 工具函数
|
||||
- 中间函数
|
||||
|
||||
###### 范例
|
||||
|
||||
####### 内容
|
||||
|
||||
- 提取50的5日涨幅
|
||||
- 提取50的历史涨幅矩阵
|
||||
|
||||
####### 提取50的5日涨幅
|
||||
|
||||
```text
|
||||
//**********************参数设置***********************//
|
||||
|
||||
N := 5;
|
||||
|
||||
endt := today();
|
||||
|
||||
stocks := getbk("上证50");
|
||||
|
||||
|
||||
//**********************网格模版*********************//
|
||||
|
||||
gridNo := 3; //网格个数,0:表示只使用本地服务器
|
||||
|
||||
func := FunctionName() + '.tsubbystocks'; //网格函数
|
||||
|
||||
parms := array(N,endt,stocks);
|
||||
|
||||
parmstype := array(0, 0, 1);
|
||||
|
||||
return unit(MultiProc_unit).fastmap(gridNo,func,parms,parmstype);
|
||||
|
||||
//***********************子函数**********************//
|
||||
|
||||
function tsubbystocks(N, endt,stocks);
|
||||
|
||||
begin
|
||||
|
||||
sp_s(pn_date(),endt);
|
||||
|
||||
i := 0;
|
||||
|
||||
ret := array();
|
||||
|
||||
|
||||
for _,stk in stocks do
|
||||
|
||||
begin
|
||||
|
||||
sp_s(PN_Stock(),stk);
|
||||
|
||||
for j := 0 to N do
|
||||
|
||||
begin
|
||||
|
||||
ret[I,'截止日'] := ref(sp_time(),j);
|
||||
|
||||
ret[i,'代码'] := stk;
|
||||
|
||||
ret[i,'名称'] := stockname(stk);
|
||||
|
||||
ret[I,'涨幅(%)'] := ref(stockzf3(),j);
|
||||
|
||||
i++;
|
||||
|
||||
end
|
||||
|
||||
|
||||
end;
|
||||
|
||||
return ret;
|
||||
|
||||
end;
|
||||
```
|
||||
|
||||
//返回
|
||||
|
||||
####### 提取50的历史涨幅矩阵
|
||||
|
||||
```text
|
||||
//**********************参数设置***********************//
|
||||
|
||||
N := 5;
|
||||
|
||||
endt := today();
|
||||
|
||||
stocks := getbk("上证50");
|
||||
|
||||
|
||||
//**********************网格模版*********************//
|
||||
|
||||
|
||||
//**********************网格模版*********************//
|
||||
|
||||
gridNo := 3; //网格个数,0:表示只使用本地服务器
|
||||
|
||||
func := FunctionName() + '.tsubbystock'; //网格函数
|
||||
|
||||
parms := array(N,endt,stocks);
|
||||
|
||||
parmstype := array(0, 0, 2);
|
||||
|
||||
return unit(MultiProc_unit).fastmap(gridNo,func,parms,parmstype);
|
||||
|
||||
|
||||
end;
|
||||
|
||||
function tsubbystock(N, endt,stock);
|
||||
|
||||
begin
|
||||
|
||||
sp_s(PN_Stock(),stock);
|
||||
|
||||
sp_s(pn_date(),endt);
|
||||
|
||||
ret := array(
|
||||
|
||||
"代码":stock,
|
||||
|
||||
"名称":stockname(stock),
|
||||
|
||||
"截止日":endt,
|
||||
|
||||
);
|
||||
|
||||
for i := 1 to N do
|
||||
|
||||
ret["T_" $ i] := ref(stockzf3(),i);
|
||||
|
||||
return ret;
|
||||
|
||||
end;
|
||||
```
|
||||
|
||||
###### 工具函数
|
||||
|
||||
####### 内容
|
||||
|
||||
- GridLogo
|
||||
|
||||
####### GridLogo
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//在C:\\temp\\Gridlog默认路径下写日志文件
|
||||
|
||||
Return unit(MultiProc_unit).gridLogo('测试');
|
||||
```
|
||||
|
||||
###### 中间函数
|
||||
|
||||
####### 内容
|
||||
|
||||
- SplitDiv
|
||||
- SplitDiv2
|
||||
- SplitArrayQK
|
||||
- SplitArrayQK2
|
||||
- DeleteTablebyReg
|
||||
- GettablebyReg
|
||||
- TryInsetTable
|
||||
|
||||
####### SplitDiv
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).splitDiv(14,5); // array(0,2,4,6,8,14)
|
||||
```
|
||||
|
||||
####### SplitDiv2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).splitDiv2(14,5); // array(0,3,6,9,12,14)
|
||||
```
|
||||
|
||||
####### SplitArrayQK
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
arr := array(2,1,3,4,9,5,7,8,9,10,11,12,13,15);
|
||||
|
||||
return unit(MultiProc_unit).SplitArrayQK(arr,5); //array((2,1),(3,4),(9,5),(7,8),(9,15))
|
||||
```
|
||||
|
||||
####### SplitArrayQK2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
arr := array(2,1,3,4,9,5,7,8,9,10,11,12,13,15);
|
||||
|
||||
return unit(MultiProc_unit).SplitArrayQK2(arr,5);
|
||||
|
||||
// array((2,3),(4,5),(7,9),(10,12),(13,15))
|
||||
```
|
||||
|
||||
####### DeleteTablebyReg
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).DeleteTablebyReg('test');
|
||||
```
|
||||
|
||||
####### GettablebyReg
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).GettablebyReg('test');
|
||||
```
|
||||
|
||||
####### TryInsetTable
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).TryInsetTable('test',array(1,2,3));
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
# 金融函数
|
||||
|
||||
> 本文档从 [TSL 函数参考](../index.md) 拆分而来
|
||||
|
||||
金融函数涵盖股票、行情、技术分析、财务等金融专用功能,是量化分析和金融建模的核心函数库。
|
||||
|
||||
## 目录
|
||||
|
||||
### 行情数据
|
||||
|
||||
- **[股票](./stock.md)** (20,893行) - 股票代码、名称、上市信息、交易状态等
|
||||
- **[行情](./market_data.md)** (11,748行) - 实时行情、历史行情、K线数据、成交量价
|
||||
- **[指数](./index_data.md)** (2,237行) - 指数数据、指数成分股、指数计算
|
||||
|
||||
### 技术分析
|
||||
|
||||
- **[技术分析](./technical_analysis.md)** (11,373行)
|
||||
- 均线、MACD、KDJ、RSI等技术指标
|
||||
- 形态识别、趋势判断、支撑阻力
|
||||
|
||||
### 资产类别
|
||||
|
||||
- **[债券](./bond.md)** (2,827行) - 债券信息、收益率曲线、债券估值
|
||||
- **[期权](./option.md)** (1,573行) - 期权定价、希腊字母、隐含波动率
|
||||
- **[基金](./fund.md)** (10,681行) - 基金净值、持仓、业绩、基金公司
|
||||
- **[期货](./futures.md)** (1,248行) - 期货合约、持仓量、基差
|
||||
- **[权证](./warrant.md)** (125行) - 权证信息、行权价、到期日
|
||||
- **[外汇](./forex.md)** (116行) - 汇率、外汇行情
|
||||
|
||||
### 财务与基本面
|
||||
|
||||
- **[财务分析](./financial_analysis.md)** (46,778行) ⚠️ **最大文件**
|
||||
- 资产负债表、利润表、现金流量表
|
||||
- 财务比率、财务指标、财务预测
|
||||
|
||||
- **[基本面](./fundamentals.md)** (6,139行)
|
||||
- 公司基本信息、行业分类、股东结构
|
||||
- 分红、配股、增发等公司行为
|
||||
|
||||
- **[宏观](./macro.md)** (789行) - 宏观经济数据、GDP、CPI、利率
|
||||
|
||||
### 板块与分类
|
||||
|
||||
- **[板块](./sector.md)** (24,819行) ⚠️ **大文件**
|
||||
- 行业板块、概念板块、地域板块
|
||||
- 板块涨跌、板块轮动、板块成分股
|
||||
|
||||
### 量化分析
|
||||
|
||||
- **[金融工程](./financial_engineering.md)** (6,564行)
|
||||
- 风险模型、因子模型、组合优化
|
||||
- 回测框架、绩效归因
|
||||
|
||||
- **[组合评价](./portfolio_evaluation.md)** (3,656行)
|
||||
- 夏普比率、最大回撤、收益波动
|
||||
- 组合绩效评估、风险调整收益
|
||||
|
||||
- **[天软因子](./ts_factor.md)** (186行) - 天软自定义因子库
|
||||
|
||||
### 工具与框架
|
||||
|
||||
- **[框架构造Tools](./framework_tools.md)** (71行) - 策略框架构建工具
|
||||
- **[网格池](./grid_pool.md)** (301行) - 网格交易、池化管理
|
||||
- **[日志](./logging.md)** (53行) - 交易日志、事件日志
|
||||
- **[数据提取](./data_extraction.md)** (50行) - 批量数据提取工具
|
||||
- **[评价分析算法函数](./evaluation_algorithms.md)** (18行) - 评价算法接口
|
||||
|
||||
## 快速索引
|
||||
|
||||
### 按应用场景
|
||||
|
||||
| 应用场景 | 推荐文件 | 说明 |
|
||||
|---------|---------|------|
|
||||
| 选股策略 | [股票](./stock.md) + [技术分析](./technical_analysis.md) | 基于技术指标的选股 |
|
||||
| 基本面分析 | [财务分析](./financial_analysis.md) + [基本面](./fundamentals.md) | 财务数据+公司信息 |
|
||||
| 行业轮动 | [板块](./sector.md) + [行情](./market_data.md) | 板块强弱、行业配置 |
|
||||
| 量化回测 | [金融工程](./financial_engineering.md) + [组合评价](./portfolio_evaluation.md) | 回测框架+绩效评估 |
|
||||
| 资产配置 | [基金](./fund.md) + [债券](./bond.md) | 多资产组合配置 |
|
||||
|
||||
### 超大文件提示
|
||||
|
||||
以下两个文件内容较多,建议使用全局搜索定位具体函数:
|
||||
|
||||
- ⚠️ **财务分析** (46,778行) - 包含大量财务报表字段和计算函数
|
||||
- ⚠️ **板块** (24,819行) - 包含众多板块分类和成分股函数
|
||||
|
||||
## 使用提示
|
||||
|
||||
1. **实时行情**:使用 [行情](./market_data.md) 获取最新价格、成交量等
|
||||
2. **历史数据**:使用 [股票](./stock.md) + [行情](./market_data.md) 获取历史K线
|
||||
3. **财务数据**:[财务分析](./financial_analysis.md) 包含完整的财务报表访问函数
|
||||
4. **技术指标**:[技术分析](./technical_analysis.md) 包含常用技术指标计算函数
|
||||
5. **搜索建议**:在当前目录(`function/financial/`)使用全局搜索查找特定函数
|
||||
|
||||
---
|
||||
|
||||
**返回**: [函数参考首页](../index.md)
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,53 @@
|
|||
#### 日志
|
||||
|
||||
##### 内容
|
||||
|
||||
- Logger_debug
|
||||
- logger_info
|
||||
- logger_warning
|
||||
- logger_info2
|
||||
|
||||
##### Logger_debug
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
logger_debug(1234);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
##### logger_info
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
logger_info("当前执行第100个");
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
##### logger_warning
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
logger_warning("当前执行第100个");
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
##### logger_info2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
logger_info2("异常","类型不能大于",3);
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,789 @@
|
|||
#### 宏观
|
||||
|
||||
##### 内容
|
||||
|
||||
- 基本信息
|
||||
- 财政支出
|
||||
- 国家银行存款\_贷款
|
||||
- 货币供应
|
||||
- 金融机构存款\_贷款
|
||||
- 居民消费价格指数
|
||||
- 商品零售价格指数
|
||||
- 生产资料价格指数
|
||||
- 银证转账
|
||||
- 行业宏观
|
||||
- 人民币存贷款利率
|
||||
|
||||
##### 基本信息
|
||||
|
||||
###### 内容
|
||||
|
||||
- CU_ChinaCode
|
||||
|
||||
###### CU_ChinaCode
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return CU_ChinaCode();
|
||||
|
||||
//结果:SS.000001
|
||||
```
|
||||
|
||||
##### 财政支出
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_CZSZ1_1
|
||||
- HG_CZSZ1_2
|
||||
- HG_CZSZ1_3
|
||||
- HG_CZSZ1_4
|
||||
- HG_CZSZ1_5
|
||||
- HG_CZSZ2_1
|
||||
- HG_CZSZ2_2
|
||||
- HG_CZSZ2_3
|
||||
- HG_CZSZ2_4
|
||||
- HG_CZSZ2_5
|
||||
|
||||
###### HG_CZSZ1_1
|
||||
|
||||
###### HG_CZSZ1_2
|
||||
|
||||
###### HG_CZSZ1_3
|
||||
|
||||
###### HG_CZSZ1_4
|
||||
|
||||
###### HG_CZSZ1_5
|
||||
|
||||
###### HG_CZSZ2_1
|
||||
|
||||
###### HG_CZSZ2_2
|
||||
|
||||
###### HG_CZSZ2_3
|
||||
|
||||
###### HG_CZSZ2_4
|
||||
|
||||
###### HG_CZSZ2_5
|
||||
|
||||
##### 国家银行存款\_贷款
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_GJYHCDK1_1
|
||||
- HG_GJYHCDK1_2
|
||||
- HG_GJYHCDK1_3
|
||||
- HG_GJYHCDK1_4
|
||||
- HG_GJYHCDK1_5
|
||||
- HG_GJYHCDK1_6
|
||||
- HG_GJYHCDK1_7
|
||||
- HG_GJYHCDK1_8
|
||||
- HG_GJYHCDK1_9
|
||||
- HG_GJYHCDK2_1
|
||||
- HG_GJYHCDK2_2
|
||||
- HG_GJYHCDK2_4
|
||||
- HG_GJYHCDK2_3
|
||||
- HG_GJYHCDK2_5
|
||||
- HG_GJYHCDK2_6
|
||||
- HG_GJYHCDK2_7
|
||||
- HG_GJYHCDK2_8
|
||||
- HG_GJYHCDK2_9
|
||||
|
||||
###### HG_GJYHCDK1_1
|
||||
|
||||
###### HG_GJYHCDK1_2
|
||||
|
||||
###### HG_GJYHCDK1_3
|
||||
|
||||
###### HG_GJYHCDK1_4
|
||||
|
||||
###### HG_GJYHCDK1_5
|
||||
|
||||
###### HG_GJYHCDK1_6
|
||||
|
||||
###### HG_GJYHCDK1_7
|
||||
|
||||
###### HG_GJYHCDK1_8
|
||||
|
||||
###### HG_GJYHCDK1_9
|
||||
|
||||
###### HG_GJYHCDK2_1
|
||||
|
||||
###### HG_GJYHCDK2_2
|
||||
|
||||
###### HG_GJYHCDK2_4
|
||||
|
||||
###### HG_GJYHCDK2_3
|
||||
|
||||
###### HG_GJYHCDK2_5
|
||||
|
||||
###### HG_GJYHCDK2_6
|
||||
|
||||
###### HG_GJYHCDK2_7
|
||||
|
||||
###### HG_GJYHCDK2_8
|
||||
|
||||
###### HG_GJYHCDK2_9
|
||||
|
||||
##### 货币供应
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_HB1_1
|
||||
- HG_HB1_2
|
||||
- HG_HB1_3
|
||||
- HG_HB1_4
|
||||
- HG_HB2_1
|
||||
- HG_HB2_2
|
||||
- HG_HB2_3
|
||||
- HG_HB2_4
|
||||
|
||||
###### HG_HB1_1
|
||||
|
||||
###### HG_HB1_2
|
||||
|
||||
###### HG_HB1_3
|
||||
|
||||
###### HG_HB1_4
|
||||
|
||||
###### HG_HB2_1
|
||||
|
||||
###### HG_HB2_2
|
||||
|
||||
###### HG_HB2_3
|
||||
|
||||
###### HG_HB2_4
|
||||
|
||||
##### 金融机构存款\_贷款
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_JRJGCDK1_1
|
||||
- HG_JRJGCDK1_2
|
||||
- HG_JRJGCDK1_3
|
||||
- HG_JRJGCDK1_4
|
||||
- HG_JRJGCDK1_6
|
||||
- HG_JRJGCDK1_5
|
||||
- HG_JRJGCDK2_1
|
||||
- HG_JRJGCDK2_2
|
||||
- HG_JRJGCDK2_3
|
||||
- HG_JRJGCDK2_4
|
||||
- HG_JRJGCDK2_5
|
||||
- HG_JRJGCDK2_6
|
||||
|
||||
###### HG_JRJGCDK1_1
|
||||
|
||||
###### HG_JRJGCDK1_2
|
||||
|
||||
###### HG_JRJGCDK1_3
|
||||
|
||||
###### HG_JRJGCDK1_4
|
||||
|
||||
###### HG_JRJGCDK1_6
|
||||
|
||||
###### HG_JRJGCDK1_5
|
||||
|
||||
###### HG_JRJGCDK2_1
|
||||
|
||||
###### HG_JRJGCDK2_2
|
||||
|
||||
###### HG_JRJGCDK2_3
|
||||
|
||||
###### HG_JRJGCDK2_4
|
||||
|
||||
###### HG_JRJGCDK2_5
|
||||
|
||||
###### HG_JRJGCDK2_6
|
||||
|
||||
##### 居民消费价格指数
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_JMXFJGZS1_1
|
||||
- HG_JMXFJGZS1_2
|
||||
- HG_JMXFJGZS1_3
|
||||
- HG_JMXFJGZS2_1
|
||||
- HG_JMXFJGZS2_2
|
||||
- HG_JMXFJGZS2_3
|
||||
|
||||
###### HG_JMXFJGZS1_1
|
||||
|
||||
###### HG_JMXFJGZS1_2
|
||||
|
||||
###### HG_JMXFJGZS1_3
|
||||
|
||||
###### HG_JMXFJGZS2_1
|
||||
|
||||
###### HG_JMXFJGZS2_2
|
||||
|
||||
###### HG_JMXFJGZS2_3
|
||||
|
||||
##### 商品零售价格指数
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_SPLSJGZS1_1
|
||||
- HG_SPLSJGZS1_2
|
||||
- HG_SPLSJGZS1_3
|
||||
- HG_SPLSJGZS2_1
|
||||
- HG_SPLSJGZS2_2
|
||||
- HG_SPLSJGZS2_3
|
||||
|
||||
###### HG_SPLSJGZS1_1
|
||||
|
||||
###### HG_SPLSJGZS1_2
|
||||
|
||||
###### HG_SPLSJGZS1_3
|
||||
|
||||
###### HG_SPLSJGZS2_1
|
||||
|
||||
###### HG_SPLSJGZS2_2
|
||||
|
||||
###### HG_SPLSJGZS2_3
|
||||
|
||||
##### 生产资料价格指数
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_SCZLJGZS1_1
|
||||
- HG_SCZLJGZS1_2
|
||||
- HG_SCZLJGZS1_3
|
||||
- HG_SCZLJGZS2_1
|
||||
- HG_SCZLJGZS2_2
|
||||
- HG_SCZLJGZS2_3
|
||||
|
||||
###### HG_SCZLJGZS1_1
|
||||
|
||||
###### HG_SCZLJGZS1_2
|
||||
|
||||
###### HG_SCZLJGZS1_3
|
||||
|
||||
###### HG_SCZLJGZS2_1
|
||||
|
||||
###### HG_SCZLJGZS2_2
|
||||
|
||||
###### HG_SCZLJGZS2_3
|
||||
|
||||
##### 银证转账
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_StockSettlementBalance
|
||||
- HG_StockSettlementBalanceByEndT
|
||||
- HG_StockPeriodBalance
|
||||
- HG_OptionMarginBalanceByEndT
|
||||
- HG_MoneyRollIn
|
||||
- HG_OptionMarginBalance
|
||||
- HG_StockGuaranteeBalanceByEndT
|
||||
- HG_MoneyNetRollIn
|
||||
- HG_MoneyRollOut
|
||||
- HG_StockGuaranteeBalance
|
||||
|
||||
###### HG_StockSettlementBalance
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间证券交易结算资金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockSettlementBalance(20170101T,20181008T);
|
||||
|
||||
//结果:
|
||||
```
|
||||
|
||||
###### HG_StockSettlementBalanceByEndT
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2018年10月8日的证券交易结算资金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockSettlementBalanceByEndT(20181008T);
|
||||
|
||||
//结果:1220500000000
|
||||
```
|
||||
|
||||
###### HG_StockPeriodBalance
|
||||
|
||||
算法
|
||||
|
||||
从证券及股票期权投资者资金余额及变动(813)表中获取三个表:
|
||||
|
||||
表1:满足条件:‘开始日’>=begt,‘截止日’<=endt且‘资金类别’为‘证券交易结算资金’的‘截止日’和‘证券交易结算资金余额’数据。
|
||||
|
||||
表2:满足条件:‘开始日’>=begt,‘截止日’<=endt且‘资金类别’为‘融资融券担保资金’的‘截止日’和‘融资融券担保资金余额’数据。
|
||||
|
||||
表3:满足条件: ‘开始日’>=begt,‘截止日’<=endt且‘资金类别’为‘股票期权保证金’的‘截止日’和‘股票期权保证金余额’数据。
|
||||
|
||||
返回三个表中‘截止日’相同的数据。范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间证券交易结算资金、融资融券担保资金、股票期权保证金余额情况
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockPeriodBalance(20170101T,20181008T);
|
||||
|
||||
//结果:
|
||||
```
|
||||
|
||||
###### HG_OptionMarginBalanceByEndT
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2018年10月8日的股票期权保证金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_OptionMarginBalanceByEndT(20181008T);
|
||||
|
||||
//结果:5974000000
|
||||
```
|
||||
|
||||
###### HG_MoneyRollIn
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间资金转入额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_MoneyRollIn(20170101T,20181008T);
|
||||
|
||||
//结果:11452969000000
|
||||
```
|
||||
|
||||
###### HG_OptionMarginBalance
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间股票期权保证金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_OptionMarginBalance(20170101T,20181008T);
|
||||
|
||||
//结果:
|
||||
```
|
||||
|
||||
###### HG_StockGuaranteeBalanceByEndT
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2018年10月8日的融资融券担保资金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockGuaranteeBalanceByEndT(20181008T);
|
||||
|
||||
//结果:147600000000
|
||||
```
|
||||
|
||||
###### HG_MoneyNetRollIn
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间资金净转入额
|
||||
|
||||
|
||||
Return HG_MoneyNetRollIn(20170101T,20181008T);
|
||||
|
||||
|
||||
//结果:-248651000000
|
||||
```
|
||||
|
||||
###### HG_MoneyRollOut
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间资金转出额
|
||||
|
||||
|
||||
Return HG_MoneyRollOut(20170101T,20181008T);
|
||||
|
||||
//结果:11701620000000
|
||||
```
|
||||
|
||||
###### HG_StockGuaranteeBalance
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间融资融券担保资金余额列表。
|
||||
|
||||
|
||||
Return HG_StockGuaranteeBalance(20170101T,20181008T);
|
||||
```
|
||||
|
||||
##### 行业宏观
|
||||
|
||||
###### 内容
|
||||
|
||||
- 偿债能力
|
||||
- 成长能力
|
||||
- 行情
|
||||
- 产品产量
|
||||
- 盈利能力
|
||||
|
||||
###### 偿债能力
|
||||
|
||||
####### 内容
|
||||
|
||||
- HY_42
|
||||
- HY_43
|
||||
- HY_44
|
||||
|
||||
####### HY_42
|
||||
|
||||
算法
|
||||
|
||||
资产负债率=负债合计/资产合计\*100%
|
||||
|
||||
####### HY_43
|
||||
|
||||
算法
|
||||
|
||||
固定资产比例=固定资产净值平均余额/资产合计\*100
|
||||
|
||||
####### HY_44
|
||||
|
||||
算法
|
||||
|
||||
流动资产比例=流动资产平均余额/资产合计\*100%
|
||||
|
||||
###### 成长能力
|
||||
|
||||
####### 内容
|
||||
|
||||
- HY_24
|
||||
- HY_07
|
||||
- HY_10
|
||||
- HY_25
|
||||
- HY_17
|
||||
- HY_12
|
||||
- HY_26
|
||||
- HY_06
|
||||
- HY_28
|
||||
- HY_15
|
||||
- HY_21
|
||||
- HY_01
|
||||
- HY_13
|
||||
- HY_16
|
||||
- HY_11
|
||||
- HY_09
|
||||
- HY_20
|
||||
- HY_23
|
||||
- HY_29
|
||||
- HY_30
|
||||
- HY_18
|
||||
- HY_14
|
||||
- HY_27
|
||||
- HY_22
|
||||
- HY_19
|
||||
- HY_08
|
||||
|
||||
####### HY_24
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得财务费用同比(%)
|
||||
|
||||
####### HY_07
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获取亏损企业单位数量同比(%)
|
||||
|
||||
####### HY_10
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得工业销售产值(当年价格)同比(%)
|
||||
|
||||
####### HY_25
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得利息支出同比(%)
|
||||
|
||||
####### HY_17
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得资产总计同比(%)
|
||||
|
||||
####### HY_12
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得企业亏损总额同比(%)
|
||||
|
||||
####### HY_26
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得利润总额同比(%)
|
||||
|
||||
####### HY_06
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获取企业单位数量同比(%)
|
||||
|
||||
####### HY_28
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得应交增值税同比(%)
|
||||
|
||||
####### HY_15
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得流动资产平均余额同比(%)
|
||||
|
||||
####### HY_21
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得产品销售费用同比(%)
|
||||
|
||||
####### HY_01
|
||||
|
||||
算法
|
||||
|
||||
亏损企业比例=亏损企业单位数量/企业单位数量\*100%
|
||||
|
||||
####### HY_13
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获取应收帐款净额同比(%)
|
||||
|
||||
####### HY_16
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得固定资产净值平均余额同比(%)
|
||||
|
||||
####### HY_11
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获取出口交货值同比(%)
|
||||
|
||||
####### HY_09
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得工业总产值(不变价格)同比(%)
|
||||
|
||||
####### HY_20
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得产品销售成本同比(%)
|
||||
|
||||
####### HY_23
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得管理费用同比(%)
|
||||
|
||||
####### HY_29
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得工业产品出厂价格指数同比(%)
|
||||
|
||||
####### HY_30
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得全部从业人员平均人数同比(%)
|
||||
|
||||
####### HY_18
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得负债合计同比(%)
|
||||
|
||||
####### HY_14
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得产成品同比(%)
|
||||
|
||||
####### HY_27
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得税金总额同比(%)
|
||||
|
||||
####### HY_22
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得产品销售税金及附加同比(%)
|
||||
|
||||
####### HY_19
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得产品销售收入同比(%)
|
||||
|
||||
####### HY_08
|
||||
|
||||
算法
|
||||
|
||||
函数通过对应的字段ID和报告期获得工业总产值(当年价格)同比(%)
|
||||
|
||||
###### 行情
|
||||
|
||||
####### 内容
|
||||
|
||||
- IndustryRPS_Ext3
|
||||
|
||||
####### IndustryRPS_Ext3
|
||||
|
||||
算法
|
||||
|
||||
通过行情(收盘价或结算价、昨结算)等计算N日涨幅,并进行排序,根据排序打分(0-100),获得其分值即RPS,涨幅越高,RPS分值越大。
|
||||
|
||||
###### 产品产量
|
||||
|
||||
####### 内容
|
||||
|
||||
- HYCL_02
|
||||
- HYCL_00
|
||||
- HYCL_01
|
||||
|
||||
####### HYCL_02
|
||||
|
||||
算法
|
||||
|
||||
获取报告期产品产量同比(%)
|
||||
|
||||
####### HYCL_00
|
||||
|
||||
算法
|
||||
|
||||
获取报告期产品计量单位
|
||||
|
||||
####### HYCL_01
|
||||
|
||||
算法
|
||||
|
||||
获取报告期产品产量
|
||||
|
||||
###### 盈利能力
|
||||
|
||||
####### 内容
|
||||
|
||||
- HY_34
|
||||
- HY_37
|
||||
- HY_31
|
||||
- HY_38
|
||||
- HY_41
|
||||
- HY_39
|
||||
- HY_33
|
||||
- HY_36
|
||||
- HY_40
|
||||
- HY_35
|
||||
- HY_32
|
||||
|
||||
####### HY_34
|
||||
|
||||
算法
|
||||
|
||||
主营业务利润率=利润总额/产品销售收入\*100%
|
||||
|
||||
####### HY_37
|
||||
|
||||
算法
|
||||
|
||||
管理费用比例=管理费用/产品销售收入\*100%
|
||||
|
||||
####### HY_31
|
||||
|
||||
算法
|
||||
|
||||
净资产收益率=利润总额/资产总计\*100%
|
||||
|
||||
####### HY_38
|
||||
|
||||
算法
|
||||
|
||||
财务费用比例=财务费用/产品销售收入\*100%
|
||||
|
||||
####### HY_41
|
||||
|
||||
算法
|
||||
|
||||
成本费用利润率=利润总额/(产品销售成本+产品销售税金及附加+产品销售费用+管理费用+财务费用)\*100%
|
||||
|
||||
####### HY_39
|
||||
|
||||
算法
|
||||
|
||||
三项费用比例=(产品销售费用+管理费用+财务费用)/产品销售收入\*100%
|
||||
|
||||
####### HY_33
|
||||
|
||||
算法
|
||||
|
||||
销售税金率=税金总额/产品销售收入\*100%
|
||||
|
||||
####### HY_36
|
||||
|
||||
算法
|
||||
|
||||
营业费用比例=产品销售费用/产品销售收入\*100%
|
||||
|
||||
####### HY_40
|
||||
|
||||
算法
|
||||
|
||||
总资产报酬率=利润总额/资产合计\*100%
|
||||
|
||||
####### HY_35
|
||||
|
||||
算法
|
||||
|
||||
主营成本比例=产品销售成本/产品销售收入\*100%
|
||||
|
||||
####### HY_32
|
||||
|
||||
算法
|
||||
|
||||
销售毛利率=(产品销售收入-产品销售成本)/产品销售收入\*100
|
||||
|
||||
##### 人民币存贷款利率
|
||||
|
||||
###### 内容
|
||||
|
||||
- HG_DL_InterestRate
|
||||
|
||||
###### HG_DL_InterestRate
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//活期存款在20210302的人民币存贷款利率
|
||||
|
||||
setsysparam(pn_stock(),"IR000001");
|
||||
|
||||
setsysparam(pn_date(),20210302T);
|
||||
|
||||
return HG_DL_InterestRate(); //结果: 0.35
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,186 @@
|
|||
#### 天软因子
|
||||
|
||||
##### 内容
|
||||
|
||||
- 基金经理
|
||||
- 基金
|
||||
- 指数
|
||||
|
||||
##### 基金经理
|
||||
|
||||
###### 内容
|
||||
|
||||
- 持仓偏好
|
||||
|
||||
###### 持仓偏好
|
||||
|
||||
####### 内容
|
||||
|
||||
- 持仓风格
|
||||
|
||||
####### 持仓风格
|
||||
|
||||
######## 内容
|
||||
|
||||
- 计算
|
||||
|
||||
######## 计算
|
||||
|
||||
######### 内容
|
||||
|
||||
- 中间函数
|
||||
|
||||
######### 中间函数
|
||||
|
||||
########## 内容
|
||||
|
||||
- FundManager_GetStockHoldings
|
||||
- FundManager_js_gpgmjz
|
||||
- FundManager_js_hyjqd
|
||||
|
||||
########## FundManager_GetStockHoldings
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
ManagerID := "1533";
|
||||
|
||||
FMtype := 1; //股混型
|
||||
|
||||
RDate := 20220630;
|
||||
|
||||
return FundManager_GetStockHoldings(ManagerID,FMtype,RDate);
|
||||
```
|
||||
|
||||
########## FundManager_js_gpgmjz
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
EndT := 20220812T;
|
||||
|
||||
return FundManager_js_gpgmjz(EndT);
|
||||
```
|
||||
|
||||
########## FundManager_js_hyjqd
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
RDate := 20220630;
|
||||
|
||||
return FundManager_js_hyjqd(RDate);
|
||||
```
|
||||
|
||||
##### 基金
|
||||
|
||||
###### 内容
|
||||
|
||||
- 业绩
|
||||
- 中间函数
|
||||
|
||||
###### 业绩
|
||||
|
||||
####### 内容
|
||||
|
||||
- 持有体验
|
||||
|
||||
####### 持有体验
|
||||
|
||||
######## 内容
|
||||
|
||||
- Fund_PF_HoldFeeling_Stat
|
||||
- Fund_PF_HoldFeeling_Trend
|
||||
|
||||
######## Fund_PF_HoldFeeling_Stat
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
FundID := "OF000001";
|
||||
|
||||
begt := 20200101t;
|
||||
|
||||
endt := 20240301t;
|
||||
|
||||
RollNYearArr := array(1,3); //持有1年,持有3年
|
||||
|
||||
return Fund_PF_HoldFeeling_Stat(FundID,begt,endt,RollNYearArr);
|
||||
```
|
||||
|
||||
返回:
|
||||
|
||||
######## Fund_PF_HoldFeeling_Trend
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
FundID := "OF000001";
|
||||
|
||||
begt := 20200101t;
|
||||
|
||||
endt := 20240301t;
|
||||
|
||||
MANum := 60;
|
||||
|
||||
delta := 20;
|
||||
|
||||
return Fund_PF_HoldFeeling_Trend(FundID,begt,endt,MANum,delta);
|
||||
```
|
||||
|
||||
返回:
|
||||
|
||||
###### 中间函数
|
||||
|
||||
####### 内容
|
||||
|
||||
- GetAllThemespools
|
||||
|
||||
####### GetAllThemespools
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
EndT := 20230919T;
|
||||
|
||||
return GetAllThemespools(EndT);
|
||||
```
|
||||
|
||||
##### 指数
|
||||
|
||||
###### 内容
|
||||
|
||||
- ETF净流入金额
|
||||
|
||||
###### ETF净流入金额
|
||||
|
||||
####### 内容
|
||||
|
||||
- ETF_MT_NetInflowAmount
|
||||
|
||||
####### ETF_MT_NetInflowAmount
|
||||
|
||||
范例
|
||||
|
||||
范例01:获取指定ETF在指定日的资金净流入
|
||||
|
||||
```text
|
||||
return ETF_MT_NetINflowAmount(20250922T,array("OF512000"));
|
||||
```
|
||||
|
||||
返回:920.088,单位为:万元
|
||||
|
||||
范例02:获取2022-02-17所有跟踪沪深300ETF基金资金净流入金额
|
||||
|
||||
```text
|
||||
fundArr := getbk("上证基金;深证基金;开放式基金;已退市基金");
|
||||
|
||||
etfArr := sselect ["StockID"] from infotable 302 of fundArr
|
||||
|
||||
where ["交易方式"]="ETF" and ["标的指数代码"]="SH000300"end;
|
||||
|
||||
endt := 20220217t;
|
||||
|
||||
return ETF_MT_NetInflowAmount(endt,ETFArr,r);// -223296.48
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
#### 权证
|
||||
|
||||
##### 内容
|
||||
|
||||
- 创设
|
||||
- 定价
|
||||
- 行权变动
|
||||
|
||||
##### 创设
|
||||
|
||||
###### 内容
|
||||
|
||||
- WarrantCCirculation1
|
||||
- WarrantCCirculation2
|
||||
- WarrantCCirculation3
|
||||
- WarrantCCirculation4
|
||||
- WarrantCCirculation5
|
||||
- WarrantCCirculation6
|
||||
|
||||
###### WarrantCCirculation1
|
||||
|
||||
算法
|
||||
|
||||
当权证创设生效日在指定开始日和截止日之间,且一次增减规模大于0时,从表404(权证.权证创设)中获取股票每次规模增减之和/10000。
|
||||
|
||||
###### WarrantCCirculation2
|
||||
|
||||
算法
|
||||
|
||||
当权证创设生效日在指定开始日和截止日之间,且一次增减规模小于0时,从表404(权证.权证创设)中获取股票每次规模增减之和/10000。
|
||||
|
||||
###### WarrantCCirculation3
|
||||
|
||||
算法
|
||||
|
||||
当权证创设生效日在指定开始日和截止日之间时,从表404(权证.权证创设)中获取股票每次规模增减之和/10000。
|
||||
|
||||
###### WarrantCCirculation4
|
||||
|
||||
算法
|
||||
|
||||
当权证创设生效日在上市日和指定截止日之间,且一次增减规模小于0时,从表404(权证.权证创设)中获取股票每次规模增减之和/10000。
|
||||
|
||||
###### WarrantCCirculation5
|
||||
|
||||
算法
|
||||
|
||||
当权证创设生效日在上市日和指定截止日之间,且一次增减规模小于0时,从表404(权证.权证创设)中获取股票每次规模增减之和/10000。
|
||||
|
||||
###### WarrantCCirculation6
|
||||
|
||||
算法
|
||||
|
||||
当权证创设生效日在上市日和指定截止日之间时,从表404(权证.权证创设)中获取股票每次规模增减之和/10000。
|
||||
|
||||
##### 定价
|
||||
|
||||
###### 内容
|
||||
|
||||
- WarrantGearing
|
||||
- WarrantPriceByBS
|
||||
- Warrant_OptionTypeByBS
|
||||
- WarrantBenchId
|
||||
- WarrantBenchVolatility
|
||||
- WarrantBenchClose
|
||||
- WarrantYHBDL
|
||||
- WarrantYJL
|
||||
- WarrantSJJZ
|
||||
- WarrantNZJZ
|
||||
- WarrantDurationDay
|
||||
- WarrantDurationMonth
|
||||
|
||||
###### WarrantGearing
|
||||
|
||||
###### WarrantPriceByBS
|
||||
|
||||
###### Warrant_OptionTypeByBS
|
||||
|
||||
###### WarrantBenchId
|
||||
|
||||
###### WarrantBenchVolatility
|
||||
|
||||
###### WarrantBenchClose
|
||||
|
||||
###### WarrantYHBDL
|
||||
|
||||
###### WarrantYJL
|
||||
|
||||
算法
|
||||
|
||||
(1)若权证性质为认购,溢价率(%)=(权证行权价 + 权证现价 / 行权比例 - 标的收盘)/标的收盘\*100;
|
||||
|
||||
(2)若权证性质不为认购,溢价率(%)=(标的收盘 + 权证现价 / 行权比例 - 权证行权价)/ 标的收盘\*100;
|
||||
|
||||
###### WarrantSJJZ
|
||||
|
||||
###### WarrantNZJZ
|
||||
|
||||
算法
|
||||
|
||||
(1)若权证性质为认购,内在价值=(正股价格 - 执行价格)与0中的最大值\*行权比例;
|
||||
|
||||
(2)若权证性质不为认购,内在价值=(执行价格 - 正股价格)与0中的最大值\*行权比例;
|
||||
|
||||
###### WarrantDurationDay
|
||||
|
||||
###### WarrantDurationMonth
|
||||
|
||||
##### 行权变动
|
||||
|
||||
###### 内容
|
||||
|
||||
- WarrantECirculation
|
||||
- WarrantEPrice
|
||||
- WarrantExerciseQk
|
||||
- WarrantERate
|
||||
|
||||
###### WarrantECirculation
|
||||
|
||||
###### WarrantEPrice
|
||||
|
||||
###### WarrantExerciseQk
|
||||
|
||||
###### WarrantERate
|
||||
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
# TSL 函数参考(Function Reference)
|
||||
|
||||
本章从天软金融分析 .NET 函数大全整理而来,保留原始函数说明结构。
|
||||
|
||||
> ⚠️ **重要提示**:由于函数数量庞大(22万+行),已按功能模块拆分为多个文件。建议使用编辑器的全局搜索功能查找特定函数。
|
||||
|
||||
## 快速导航
|
||||
|
||||
### 核心函数库
|
||||
|
||||
- **[TSL函数](./tsl/index.md)** - 数学、系统、基础、图形等通用函数
|
||||
- **[金融函数](./financial/index.md)** - 股票、行情、技术分析、财务等金融专用函数
|
||||
- **[数据仓库函数](./03_datawarehouse.md)** (7,270行) - 数据查询、时间序列、市场板块函数
|
||||
|
||||
### 专业领域
|
||||
|
||||
- **[算法交易支撑函数](./04_algo_trading.md)** (2,913行) - 算法交易服务器支撑、交易开发类
|
||||
- **[服务器交互函数](./05_server_interaction.md)** (312行) - 连接、登录、执行、订阅等服务器交互
|
||||
- **[文档处理函数](./06_document_processing.md)** (10,790行) - Office访问、Excel/Word/PDF处理、图片导出
|
||||
- **[金融报表分析](./10_financial_reports.md)** (10,382行) - 个股、板块、基金、债券报表分析
|
||||
|
||||
### 开发工具
|
||||
|
||||
- **[CGI控制台相关函数](./07_cgi_console.md)** (185行) - CGI输入输出、环境变量
|
||||
- **[GUI函数](./08_gui.md)** (1,244行) - 消息对话框、图形界面交互
|
||||
- **[TSL编译工具](./09_compiler.md)** (936行) - 编译范围、TSL指令、依赖关系
|
||||
- **[Web开发支撑](./11_web_development.md)** (747行) - TSL的Web支持、Web Tools
|
||||
|
||||
## 使用建议
|
||||
|
||||
1. **新手入门**:从 [TSL函数 → 基础函数](./tsl/base.md) 开始
|
||||
2. **金融分析**:查阅 [金融函数](./financial/index.md)
|
||||
3. **搜索函数**:使用编辑器全局搜索 `function/` 目录(推荐使用 `Ctrl+Shift+F` 或 `Cmd+Shift+F`)
|
||||
4. **API查询**:按功能模块浏览对应文件
|
||||
|
||||
## 拆分说明
|
||||
|
||||
原 `function.md` 文件有 221,389 行,已拆分为:
|
||||
|
||||
- **9个独立章节文件**(数据仓库、算法交易、服务器交互等)
|
||||
- **TSL函数** → 10个子文件(数学、基础、系统等)
|
||||
- **金融函数** → 23个子文件(股票、行情、技术分析等)
|
||||
|
||||
共计 **42个独立文件**,便于浏览和维护。
|
||||
|
||||
---
|
||||
|
||||
<details>
|
||||
<summary>📖 函数使用说明(点击展开)</summary>
|
||||
|
||||
## 类型声明说明
|
||||
|
||||
注意:
|
||||
|
||||
1. **类型声明**:TSL的函数定义无需参数类型声明,也无需返回类型声明,在以下函数说明里,我们采用了PASCAL的函数声明模式,只是为了让用户更容易地理解各个函数的具体含义和对参数的要求。
|
||||
|
||||
2. **VAR**:在函数参数声明中,有的使用了VAR作为前缀,这表示该函数会修改该VAR管辖的定义域内的参数,如果没有VAR前缀,则表示其变量不会被该函数修改。在TSL中,所有的函数变量都是允许被修改的,也不支持VAR前缀。
|
||||
|
||||
## 表达式类型说明
|
||||
|
||||
3. **表达式类型**:许多系统函数的参数类型是表达式类型,系统为了方便用户使用,这些参数并不需要使用表达式类型,而只需要使用表达式语句,TSL语言会直接为用户将表达式语句转换为表达式类型,典型函数如:Spec,SpecDate,Ma,hhv,llv等,例如我们要求SZ000001的收盘价,我们使用 `Spec('SZ000001',Close())` 而不是 `Spec('SZ000001',@Close())`,如果我们由于应用需要而必需使用表达式类型变量,我们可以配合使用Eval函数,例如exp为表达式类型,其值为@Close(),我们可以 `Spec('SZ000001',eval(exp))` 来求值;一般地,在系统函数里,除了isExp,eval等明显必需使用表达式类型作为参数的函数以外,大部分符合以上规则。
|
||||
|
||||
4. **重名函数**:TSL并不支持用户函数重名,如果存在用户函数与其他类型函数重名,则用户函数优先。在以下文档中,有函数重名现象,这表示该系统函数有多种参数模式。
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
**原始文档**:本文档由 221,389 行的 `function.md` 拆分而来,原文件已保留为 [`../function.md.backup`](../function.md.backup)
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,409 @@
|
|||
#### 客户端函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- 结果处理
|
||||
- 错误处理
|
||||
- 客户端行为控制函数
|
||||
- SendRunningData
|
||||
|
||||
##### 结果处理
|
||||
|
||||
###### 内容
|
||||
|
||||
- DelPrecode
|
||||
- IncPrecode
|
||||
- ProcessField
|
||||
- ProcessFirstField
|
||||
- TimeSeriesSplit
|
||||
- ReportSeriesSplit
|
||||
- TwoDimFormat2
|
||||
- ThreeDimFormat2
|
||||
- ThreeDimFormat3
|
||||
- ThreeDimFormat4
|
||||
- ThreeDimFormat5
|
||||
- ThreeDimFormat6
|
||||
- IsTwoDim
|
||||
- TransForm
|
||||
- TransPose
|
||||
- TransPoseForChart
|
||||
- TransPoseForChartSysParam
|
||||
- TransPoseForChartSysParamEx
|
||||
- TransDataStandardize
|
||||
- CallBack
|
||||
- 层次表格的展开
|
||||
- 简单统计
|
||||
- 品种管理
|
||||
|
||||
###### DelPrecode
|
||||
|
||||
###### IncPrecode
|
||||
|
||||
###### ProcessField
|
||||
|
||||
###### ProcessFirstField
|
||||
|
||||
###### TimeSeriesSplit
|
||||
|
||||
###### ReportSeriesSplit
|
||||
|
||||
###### TwoDimFormat2
|
||||
|
||||
###### ThreeDimFormat2
|
||||
|
||||
###### ThreeDimFormat3
|
||||
|
||||
###### ThreeDimFormat4
|
||||
|
||||
###### ThreeDimFormat5
|
||||
|
||||
###### ThreeDimFormat6
|
||||
|
||||
###### IsTwoDim
|
||||
|
||||
###### TransForm
|
||||
|
||||
###### TransPose
|
||||
|
||||
###### TransPoseForChart
|
||||
|
||||
###### TransPoseForChartSysParam
|
||||
|
||||
###### TransPoseForChartSysParamEx
|
||||
|
||||
###### TransDataStandardize
|
||||
|
||||
###### CallBack
|
||||
|
||||
####### 内容
|
||||
|
||||
- DelPrecodeCallBack
|
||||
- IncPrecodeCallBack
|
||||
|
||||
####### DelPrecodeCallBack
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return DelPrecodeCallBack('SH600000');
|
||||
```
|
||||
|
||||
//结果:’ 600000’
|
||||
|
||||
####### IncPrecodeCallBack
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return IncPrecodeCallBack('000002.SZ');
|
||||
```
|
||||
|
||||
//结果:’SZ000002’
|
||||
|
||||
###### 层次表格的展开
|
||||
|
||||
####### 内容
|
||||
|
||||
- CheckDataCanBeExtract
|
||||
- ExtractData
|
||||
- ExtractDataEx
|
||||
- ExtractDataEx2
|
||||
- ExtractDataLocalRun
|
||||
- ExtractDataLocalRun2
|
||||
|
||||
####### CheckDataCanBeExtract
|
||||
|
||||
####### ExtractData
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
r:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),
|
||||
|
||||
"名称",CurrentStockName(),
|
||||
|
||||
"股票.分红送股",infoarray(18));
|
||||
|
||||
return ExtractData(r,1,0);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
####### ExtractDataEx
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
r:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),
|
||||
|
||||
"名称",CurrentStockName(),
|
||||
|
||||
"名称2",CurrentStockName(),
|
||||
|
||||
"名称3f",CurrentStockName(),
|
||||
|
||||
"股票.分红送股",infoarray(18));
|
||||
|
||||
return ExtractDataEx(r,1,0,1);
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
####### ExtractDataEx2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
// 数据展开范例
|
||||
|
||||
r:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),
|
||||
|
||||
"名称",CurrentStockName(),
|
||||
|
||||
"名称2",CurrentStockName(),
|
||||
|
||||
"名称3f",CurrentStockName(),
|
||||
|
||||
"股票.分红送股",infoarray(18));
|
||||
|
||||
return ExtractDataEx2(r,1,0,1,1);
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
####### ExtractDataLocalRun
|
||||
|
||||
####### ExtractDataLocalRun2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
// 数据展开范例
|
||||
|
||||
r:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),
|
||||
|
||||
"名称",CurrentStockName(),
|
||||
|
||||
"名称2",CurrentStockName(),
|
||||
|
||||
"名称3f",CurrentStockName(),
|
||||
|
||||
"股票.分红送股",infoarray(18));
|
||||
|
||||
setsysparam(pn_data(),r);
|
||||
|
||||
return ExtractDataLocalRun2(0,1);
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
###### 简单统计
|
||||
|
||||
####### 内容
|
||||
|
||||
- SimpleStat
|
||||
- SimpleStatLocal
|
||||
|
||||
####### SimpleStat
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
data:=array(1,2,3,4,5);
|
||||
|
||||
|
||||
return SimpleStat(Data);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
####### SimpleStatLocal
|
||||
|
||||
###### 品种管理
|
||||
|
||||
####### 内容
|
||||
|
||||
- GetDefaultFuncNameByStock
|
||||
- GetTypeOfStock
|
||||
|
||||
####### GetDefaultFuncNameByStock
|
||||
|
||||
####### GetTypeOfStock
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return GetTypeOfStock('OF000001');
|
||||
```
|
||||
|
||||
//结果:4
|
||||
|
||||
##### 错误处理
|
||||
|
||||
###### 内容
|
||||
|
||||
- ThisFuncOnlyForStock
|
||||
- ThisFuncOnlyForBond
|
||||
- ThisFuncUnderConstruction
|
||||
- ThisFunOnlyForIndex
|
||||
- RaiseError
|
||||
- ThisFuncOnlyForFund
|
||||
- ASSERT
|
||||
|
||||
###### ThisFuncOnlyForStock
|
||||
|
||||
###### ThisFuncOnlyForBond
|
||||
|
||||
###### ThisFuncUnderConstruction
|
||||
|
||||
###### ThisFunOnlyForIndex
|
||||
|
||||
###### RaiseError
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return RaiseError('function1','无效的语段');
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
###### ThisFuncOnlyForFund
|
||||
|
||||
###### ASSERT
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return ASSERT(0,'无效的语段');
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
##### 客户端行为控制函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- 客户端行为控制函数简介
|
||||
- TSExpert_ClientConfig
|
||||
|
||||
###### 客户端行为控制函数简介
|
||||
|
||||
客户端行为控制,是指客户端会调用一个模型,该模型的返回的结果会影响到客户端的行为,目前,客户端支持用户编写一个名为TSExpert_ClientConfig的函数,客户端会根据该函数的返回结果集来决定CHART的背景图,CHART的颜色序列,重新登录自动执行函数等等行为。
|
||||
|
||||
###### TSExpert_ClientConfig
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//在客户端内创建函数,函数名为TSExpert_ClientConfig,函数体内的函数如下
|
||||
|
||||
r:=array();
|
||||
|
||||
r["AutoRun"][0]:='TS_ClientDemo';// TS_ClientDemo为预先设定好的函数,在下次登陆客户端时会自动运行该函数。其中TS_ClientDemo的代码为rdo2 MessageBox("欢迎登陆天软客户端","您好",rdo2 mb_DefButton1());
|
||||
|
||||
return r;
|
||||
```
|
||||
|
||||
//效果: 重新启动客户端时,会弹出下面对话框
|
||||
|
||||
该函数的返回值为一个数组,该数组的下标定义如下:
|
||||
|
||||
####### 内容
|
||||
|
||||
- ChartColor
|
||||
- ChartColorArray
|
||||
- DisabledFuncTypeList
|
||||
- DisabledSystemFuncList
|
||||
- DisabledSysFuncList
|
||||
- FuncTypeList
|
||||
- AutoRun
|
||||
|
||||
####### ChartColor
|
||||
|
||||
值为整数,为数组类型数据展示的Chart图的默认背景色。
|
||||
|
||||
例如:值为clWhite()
|
||||
|
||||
####### ChartColorArray
|
||||
|
||||
值为一个一维整数颜色数组,该数组为在数组类型数据展示的时候,下边的Chart的序列的颜色序列,例如:array(clRed(),clYellow(),clBlue()…..)表示第一个图的颜色为红色,第二个为黄色,第三个为蓝色…..。
|
||||
|
||||
####### DisabledFuncTypeList
|
||||
|
||||
值为一个一维整数数组,代表了在系统里禁用的函数类型ID,函数类型在funcType.cfg里定义。被禁止的函数类型将不会在系统里展示。
|
||||
|
||||
####### DisabledSystemFuncList
|
||||
|
||||
值为一个一维字符串数组,代表了在系统中隐藏的共用函数的函数名列表。
|
||||
|
||||
####### DisabledSysFuncList
|
||||
|
||||
值为一个一维字符串数组,代表了在系统中隐藏的二进制系统函数的函数名列表。
|
||||
|
||||
####### FuncTypeList
|
||||
|
||||
值为一个二维数组,该数组为扩展的函数类型定义,其定义参考FuncType.cfg。
|
||||
|
||||
这个二维数组有两列,分别为ID和NAME,ID列就是函数类型的数字,NAME则是函数类型的显示名称。
|
||||
|
||||
例如:
|
||||
|
||||
Array(("ID":601,"NAME":"我的扩展.扩展范例1"),…….)
|
||||
|
||||
####### AutoRun
|
||||
|
||||
值为一个数组,代表在客户端每次重新登录后自动运行的函数列表。
|
||||
|
||||
数组可以是一维的,也可以是二维。如果是一维,则每项的值为字符串类型,为需要的自动运行的函数名,如果是二维的,则具备两列,分别为type和name。
|
||||
|
||||
type列,类型为整数,表示函数的类型。0:用户函数,1:共享函数,2:共用函数,3:系统函数
|
||||
|
||||
name列,类型为字符串,表示函数的名称。
|
||||
|
||||
例如:array("AutoRunDemo1","AutoRunDemo2")表明启动的时候自动运行名为autorundemo1和autorundemo2的函数。
|
||||
|
||||
也可以用array(("type":0,"name":"AutoRunDemo1"),("type":0,"name":"AutoRunDemo2"))表明自动运行用户函数AutoRunDemo1和用户函数AutoRunDemo2。
|
||||
|
||||
##### SendRunningData
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//在原窗口输出个数,无需加Nwdow参数
|
||||
|
||||
n:=0;
|
||||
|
||||
While n<100 do
|
||||
|
||||
Begin
|
||||
|
||||
Echo n;
|
||||
|
||||
SendRunningData(n);
|
||||
|
||||
n++;
|
||||
|
||||
End;
|
||||
|
||||
Return 1;
|
||||
|
||||
在新窗口输出数组,则需要加Nwdow参数,代码如下:
|
||||
|
||||
n:=0;
|
||||
|
||||
While n<100 do
|
||||
|
||||
Begin
|
||||
|
||||
Echo n;
|
||||
|
||||
SendRunningData(rand(10),"新窗口");
|
||||
|
||||
n++;
|
||||
|
||||
end;
|
||||
|
||||
Return 1;
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
#### 压缩和解压函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- 压缩和解压函数简介
|
||||
- ZipCompress
|
||||
- ZipExtract
|
||||
- RarExtract
|
||||
- 压缩解压函数使用说明
|
||||
- unicompress
|
||||
- uniuncompress
|
||||
|
||||
##### 压缩和解压函数简介
|
||||
|
||||
ZIP和RAR是最常见的文件压缩格式,为此天软提供了ZIP文件压缩和解压函数,以及RAR的解压支持。因RAR格式版权所有人不允许除自己外的第二者提供压缩支持,目前天软没有提供RAR的压缩函数。
|
||||
|
||||
##### ZipCompress
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//把文件d:\a.txt压缩到d:\a.zip文件中的/hello/world/a.txt中
|
||||
|
||||
ZipCompress('', 'd:\\a.zip', '', 'd:\\a.txt', 'hello/world/a.txt');
|
||||
|
||||
//将d:\tmp目录压缩到d:\a.zip文件中
|
||||
|
||||
ZipCompress('', 'd:\\a.zip', '', 'd:\\tmp', 'test');
|
||||
```
|
||||
|
||||
##### ZipExtract
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//将ZIP文件解压,可以使用ZipExtract函数,例如将d:\a.zip文件解压到d:\tmp目录
|
||||
|
||||
ZipExtract('', 'd:\\a.zip', '', 'd:\\tmp', '123') ;
|
||||
```
|
||||
|
||||
##### RarExtract
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//将RAR文件解压,可以使用RarExtract函数,例如将d:\a.rar文件解压到d:\tmp目录
|
||||
|
||||
RarExtract('', 'd:\\a.rar', '', 'd:\\tmp', '123');
|
||||
```
|
||||
|
||||
##### 压缩解压函数使用说明
|
||||
|
||||
函数中的alias参数用于指定目录别名
|
||||
|
||||
ZipCompress函数可以将由filename指定的文件或目录压缩到由zip_filename指定的压缩文件中,如果压缩文件不存在,函数会创建一个。ZIP格式的压缩不支持加密。
|
||||
|
||||
函数中所指定的path是压缩文件或目录在ZIP文件中的路径。如同文件系统中文件是在树状的目录结构中存储一样,ZIP文件中所存储的文件也是树状结构的,通过指定path参数,我们可以将文件或目录压缩后存放到ZIP文件中指定的目录下,如果path参数为空(“”),就压缩到ZIP的根目录下。例如我们把文件d:\a.txt压缩到d:\a.zip文件中的/hello/world/a.txt中,可以使用下面的语句:
|
||||
|
||||
<table><tbody><tr><td>ZipCompress('', 'd:\\a.zip', '', 'd:\\a.txt', 'hello/world/a.txt');<br/></td></tr></tbody></table>
|
||||
|
||||
又如我们要将d:\tmp目录压缩到d:\a.zip文件中的根下,可以使用这样的语句:
|
||||
|
||||
<table><tbody><tr><td>ZipCompress('', 'd:\\a.zip', '', 'd:\\tmp', 'test');<br/></td></tr></tbody></table>
|
||||
|
||||
要将ZIP文件解压,可以使用ZipExtract函数,例如将d:\a.zip文件解压到d:\tmp目录:
|
||||
|
||||
<table><tbody><tr><td>ZipExtract('', 'd:\\a.zip', '', 'd:\\tmp', '123') ;<br/></td></tr></tbody></table>
|
||||
|
||||
要将RAR文件解压,可以使用RarExtract函数,例如将d:\a.rar文件解压到d:\tmp目录:
|
||||
|
||||
<table><tbody><tr><td>RarExtract('', 'd:\\a.rar', '', 'd:\\tmp', '123');<br/></td></tr></tbody></table>
|
||||
|
||||
##### unicompress
|
||||
|
||||
范例
|
||||
|
||||
本地运行下面脚本:
|
||||
|
||||
```text
|
||||
data:="Holle Tinysoft天软";
|
||||
|
||||
s:=unicompress("zstd",data);
|
||||
|
||||
echo s,"\r\n";
|
||||
|
||||
echo uniuncompress("zstd",s),"\r\n";
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
##### uniuncompress
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
data:="Holle Tinysoft天软";
|
||||
|
||||
len:=length(data);
|
||||
|
||||
s:=unicompress("zstd",data);
|
||||
|
||||
echo s,"\r\n";
|
||||
|
||||
echo uniuncompress("zstd",s,len),"\r\n";
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
#### 信息摘要及编码
|
||||
|
||||
##### 内容
|
||||
|
||||
- 信息摘要函数
|
||||
- BASE64编码
|
||||
- URI EnCode函数
|
||||
- 进制编码函数
|
||||
|
||||
##### 信息摘要函数
|
||||
|
||||
信息摘要函数主要提供CRC32,MD5,SHA这三类信息摘要算法的实现,信息摘要算法广泛地应用于数字签名应用中。
|
||||
|
||||
###### 内容
|
||||
|
||||
- 摘要函数使用说明
|
||||
- GetMsgDigest
|
||||
- GetMsgDigest(文件)
|
||||
|
||||
###### 摘要函数使用说明
|
||||
|
||||
<table><tbody><tr><td>filename:="d:\\test.txt";<br/>teststr:="hello";<br/>alias:=""; //别名<br/><br/>return array(<br/>"filename":filename,<br/>"GetMsgDigest(crc32_str)":GetMsgDigest(teststr,0),<br/>"GetMsgDigest(md5_str)":GetMsgDigest(teststr,1),<br/>"GetMsgDigest(sha1_str)":GetMsgDigest(teststr,2),<br/>"GetMsgDigest(sha224_str)":GetMsgDigest(teststr,3),<br/>"GetMsgDigest(sha256_str)":GetMsgDigest(teststr,4),<br/>"GetMsgDigest(sha384_str)":GetMsgDigest(teststr,5),<br/>"GetMsgDigest(sha512_str)":GetMsgDigest(teststr,6),<br/>"GetMsgDigest(alias, filename, crc32_str)":GetMsgDigest(alias,filename,0),<br/>"GetMsgDigest(alias, filename, md5_str)":GetMsgDigest(alias,filename,1),<br/>"GetMsgDigest(alias, filename, sha1_str)":GetMsgDigest(alias,filename,2),<br/>"GetMsgDigest(alias, filename, sha224_str)":GetMsgDigest(alias,filename,3),<br/>"GetMsgDigest(alias, filename, sha256_str)":GetMsgDigest(alias,filename,4),<br/>"GetMsgDigest(alias, filename, sha384_str)":GetMsgDigest(alias,filename,5),<br/>"GetMsgDigest(alias, filename, sha512_str)":GetMsgDigest(alias,filename,6)<br/>);<br/></td></tr></tbody></table>
|
||||
|
||||
###### GetMsgDigest
|
||||
|
||||
- 摘要函数使用说明
|
||||
- GetMsgDigest
|
||||
- GetMsgDigest(文件)
|
||||
|
||||
###### GetMsgDigest(文件)
|
||||
|
||||
##### BASE64编码
|
||||
|
||||
字符串与BASE64编码的互转函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- BASE64编码函数使用说明
|
||||
- StrToBase64
|
||||
- Base64ToStr
|
||||
|
||||
###### BASE64编码函数使用说明
|
||||
|
||||
<table><tbody><tr><td>//常量定义<br/>test_str:='hello world';<br/>//BASE64<br/>base64:=StrToBase64(test_str); //转换为BASE64编码<br/>orig_str:=Base64ToStr(base64); //BASE64编码转换为字符串<br/></td></tr></tbody></table>
|
||||
|
||||
###### StrToBase64
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return rdo2 strtobase64('a12');//返回字符串:YTEy
|
||||
```
|
||||
|
||||
###### Base64ToStr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return rdo2 base64tostr('YTEy');//返回字符串:a12
|
||||
```
|
||||
|
||||
##### URI EnCode函数
|
||||
|
||||
与JavaScript同名函数功能完全相同。
|
||||
|
||||
###### 内容
|
||||
|
||||
- EncodeURIComponent
|
||||
- DecodeURIComponent
|
||||
- EncodeURI
|
||||
- DecodeURI
|
||||
|
||||
###### EncodeURIComponent
|
||||
|
||||
###### DecodeURIComponent
|
||||
|
||||
###### EncodeURI
|
||||
|
||||
###### DecodeURI
|
||||
|
||||
##### 进制编码函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- 进制编码函数使用说明
|
||||
- EncodeRadixstr
|
||||
- DecodeRadixstr
|
||||
- Decoderadixwstr
|
||||
- Encoderadixwstr
|
||||
|
||||
###### 进制编码函数使用说明
|
||||
|
||||
encoderadixstr("123","0x",16)结果为"0x310x320x33" 前缀
|
||||
|
||||
encoderadixstr("123","h",0x80000000+16)结果为"31h32h33h" 后缀
|
||||
|
||||
decoderadixstr("0x310x320x33",2,16)的结果为123
|
||||
|
||||
encoderadixstr("123","h",0x80000000+16)结果为"31h32h33h"
|
||||
|
||||
decoderadixstr("31h32h33h",1,0x80000000+16)结果为"123"
|
||||
|
||||
encoderadixstr("天软","0x",16)结果为"0xCC0xEC0xC80xED" 默认大写
|
||||
|
||||
encoderadixstr("天软","0x",0x40000000+16)结果为"0xcc0xec0xc80xed" 小写字母
|
||||
|
||||
###### EncodeRadixstr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return encoderadixstr("1122","0x",16);//结果为’ 0x310x310x320x32’,前缀,16进制
|
||||
|
||||
return encoderadixstr("1122","h",0x80000000+16);//’ 31h31h32h32h’,后缀,16进制
|
||||
|
||||
return encoderadixstr("天软","ox",0x80000000+16);
|
||||
|
||||
//’ CCoxECoxC8oxEDox’,后缀,默认为大写字母,16进制
|
||||
|
||||
return encoderadixstr("天软","0X",0x80000000+0x40000000+16);
|
||||
|
||||
//’ cc0Xec0Xc80Xed0X’,后缀,小写字母,16进制
|
||||
|
||||
return Encoderadixstr("18","B",2);//’ B00110001B00111000’,二进制
|
||||
```
|
||||
|
||||
###### DecodeRadixstr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return decoderadixstr('0x310x310x320x32',2,16); //返回'1122'
|
||||
|
||||
//注:这里的第二个参数是前缀或后缀的串的长度,并非指定串
|
||||
```
|
||||
|
||||
###### Decoderadixwstr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return decoderadixwstr('0x00310x00310x00320x0032',2,16); //返回'1122'
|
||||
|
||||
//注:这里的第二个参数是前缀或后缀的串的长度,并非指定串
|
||||
```
|
||||
|
||||
###### Encoderadixwstr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return encoderadixwstr("1122","0x",16);
|
||||
|
||||
//结果为'0x00310x00310x00320x0032',前缀,16进制
|
||||
|
||||
return encoderadixwstr("1122","h",0x80000000+16);
|
||||
|
||||
//'0031h0031h0032h0032h',后缀,16进制
|
||||
|
||||
return encoderadixwstr("天软","ox",0x80000000+16);//''
|
||||
|
||||
//'5929ox8F6Fox',后缀,默认为大写字母,16进制
|
||||
|
||||
return encoderadixwstr("天软","0X",0x80000000+0x40000000+16);
|
||||
|
||||
//'59290X8f6f0X',后缀,小写字母,16进制
|
||||
|
||||
return Encoderadixwstr("18","B",2);
|
||||
|
||||
//'B0000000000110001B0000000000111000',二进制
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,698 @@
|
|||
#### 图形函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- 作图函数
|
||||
- 图形类型函数
|
||||
- 图形字段函数
|
||||
- 图形标示函数
|
||||
- 图形填充设置函数
|
||||
- 颜色函数
|
||||
- 颜色变换函数
|
||||
|
||||
##### 作图函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- Graph
|
||||
- GraphGroup
|
||||
- MergeGraph
|
||||
- EncodeGraphGroup
|
||||
- DecodeGraphGroup
|
||||
- DecodeGraph
|
||||
- EncodeGraph
|
||||
- FastLine_Web
|
||||
- BarLine_Web
|
||||
- PieLine_Web
|
||||
- GetColorByIndex
|
||||
|
||||
###### Graph
|
||||
|
||||
范例
|
||||
|
||||
范例一:
|
||||
|
||||
```text
|
||||
//K线图
|
||||
|
||||
setsysparam(pn_stock(),'SZ000002');
|
||||
|
||||
setsysparam(pn_date(),inttodate(20140117));
|
||||
|
||||
setsysparam(pn_nday(),250);
|
||||
|
||||
t1:=NDay2(gfopen(), Open() ,
|
||||
|
||||
gfclose(), close(),
|
||||
|
||||
gfhigh(), high(),
|
||||
|
||||
gflow(), low(),
|
||||
|
||||
gftime(), datetimetostr(sp_time()),
|
||||
|
||||
//KLine颜色
|
||||
|
||||
gfColor(), IfThen3(Close(), Open(),
|
||||
|
||||
ClRed() , //涨颜色
|
||||
|
||||
clYellow() , //平颜色
|
||||
|
||||
ClLime() //跌颜色
|
||||
|
||||
),
|
||||
|
||||
gffill(),ifThen3(Close(), Open(), flClear(), flSolid(),flSolid())
|
||||
|
||||
);
|
||||
|
||||
t2:=NDay2('MA10',Ma(Close(),10));
|
||||
|
||||
g1:=graph(gtKline(),'KLine',t1);
|
||||
|
||||
g2:=graph(gtline(),'MA10',t2);
|
||||
|
||||
return graphgroup(g1,g2);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
范例二:
|
||||
|
||||
```text
|
||||
//折线图
|
||||
|
||||
setsysparam(pn_stock(),'SZ000002');
|
||||
|
||||
setsysparam(pn_date(),inttodate(20140117));
|
||||
|
||||
setsysparam(pn_nday(),250);
|
||||
|
||||
GData1:=Nday2(gfclose(),close());
|
||||
|
||||
GData2:=Nday2('MA5',MA(close(),5));
|
||||
|
||||
GData3:=Nday2('MA20',MA(close(),20));
|
||||
|
||||
g1:=graph( gtLine(),gfclose(), Gdata1, gfColor() , clBlue());
|
||||
|
||||
g2:=graph( gtLine(),"MA5", Gdata2, gfColor() , clGreen());
|
||||
|
||||
g3:=graph( gtLine(),"MA20", Gdata3, gfColor() , clRed());
|
||||
|
||||
return graphgroup(g1,g2,g3);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
参考GraphGroup DecodeGraphGroup EncodeGraphGroup DecodeGraph EncodeGraph
|
||||
|
||||
###### GraphGroup
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
VolData := Nday2(GfVol() , Vol() , gfColor() , ifthen ( Close()> Open() , ClRed() , ClGreen() ) );
|
||||
|
||||
MAVOL := Nday2('MA5', MA ( Vol() , 5 ) );
|
||||
|
||||
VOLGraph:=Graph(gtBar(),'VOLGraph',VolData);
|
||||
|
||||
MAVOLGraph:=Graph(gtLine(),'MA5Graph',MAVOL,gfColor(),clBlue());
|
||||
|
||||
Return GraphGroup(VOLGraph,MAVOLGraph,gfMinValue(),0);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
结果说明:GraphGroup包含了两个TGraph图形,一个是VOLGraph成交量图形,另一个是MAVOLGraph成交量的5日均线的折线图形。这两个图形具有的共有属性是gfMinValue(),就是最小值为0。gfColor在VolData中作为了数据字段,用来指示每一个数据点的颜色。因此柱子会根据开盘和收盘的差异来决定色彩的显示。而在MAVOLGraph又作为了图形的属性,因此MAVOLGraph在显示的时候会呈现出蓝色。gfMinValue在返回的图形组合里作为了图形组合的属性,因此决定了图形会用0来作为最小的值来显示,而不会用区间内的最小成交量作为最小值显示。
|
||||
|
||||
另外,我们可以注意到,作为gtLine类型的MAVOLGraph并不含有特殊的值来指定折线的点的位置,在没有特定的数据字段的时候,系统会使用第一个存在的数据字段当成默认的gfValue来显示。
|
||||
|
||||
gfMinValue():设定最小值。一般的,图形会用查找视图内最小最小值用于显示,同时,为了特殊显示,也可以指定其显示的最大最小值,通常成交量的图是用0作为最小值的。参考Graph DecodeGraphGroup EncodeGraphGroup DecodeGraph EncodeGraph
|
||||
|
||||
###### MergeGraph
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
setsysparam(pn_stock(),'SZ000063');
|
||||
|
||||
setsysparam(pn_date(),20190301T);
|
||||
|
||||
setsysparam(pn_nday(),100);
|
||||
|
||||
t1:=NDay2(gfopen(), Open() ,
|
||||
|
||||
gfclose(), close(),
|
||||
|
||||
gfhigh(), high(),
|
||||
|
||||
gflow(), low(),
|
||||
|
||||
gftime(), datetimetostr(sp_time()),
|
||||
|
||||
//KLine颜色
|
||||
|
||||
gfColor(), IfThen3(Close(), Open(),
|
||||
|
||||
ClRed() , //涨颜色
|
||||
|
||||
clYellow() , //平颜色
|
||||
|
||||
ClLime() //跌颜色
|
||||
|
||||
),
|
||||
|
||||
gffill(),ifThen3(Close(), Open(), flClear(), flSolid(),flSolid())
|
||||
|
||||
);
|
||||
|
||||
t2:=NDay2('MA5',Ma(Close(),5)); //5日均线
|
||||
|
||||
t3:=NDay2('MA10',Ma(Close(),10)); //10日均线
|
||||
|
||||
t4:=NDay2('MA20',Ma(Close(),20)); //20日均线
|
||||
|
||||
g1:=graph(gtKline(),'KLine',t1);
|
||||
|
||||
g2:=graph(gtline(),'MA5',t2);
|
||||
|
||||
g3:=graph(gtline(),'MA10',t3);
|
||||
|
||||
g4:=graph(gtline(),'MA20',t4);
|
||||
|
||||
return MergeGraph(g1,g2,g3,g4);
|
||||
```
|
||||
|
||||
返回:
|
||||
|
||||
###### EncodeGraphGroup
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//取万科A 截止至2014年1月17日的250个交易日的K线数据与10日移动平均数据的图形组合
|
||||
|
||||
setsysparam(pn_stock(),'SZ000002');
|
||||
|
||||
setsysparam(pn_date(),inttodate(20140117));
|
||||
|
||||
setsysparam(pn_nday(),250);
|
||||
|
||||
t1:=NDay2(gfopen(), Open() ,
|
||||
|
||||
gfclose(), close(),
|
||||
|
||||
gfhigh(), high(),
|
||||
|
||||
gflow(), low(),
|
||||
|
||||
gftime(), datetimetostr(sp_time()),
|
||||
|
||||
//KLine颜色
|
||||
|
||||
gfColor(), IfThen3(Close(), Open(),
|
||||
|
||||
ClRed() , //涨颜色
|
||||
|
||||
clYellow() , //平颜色
|
||||
|
||||
Clblue() //跌颜色
|
||||
|
||||
),
|
||||
|
||||
gffill(),ifThen3(Close(), Open(), flClear(), flSolid(),flSolid())
|
||||
|
||||
);
|
||||
|
||||
t2:=NDay2('MA10',Ma(Close(),10));
|
||||
|
||||
g1:=graph(gtKline(),'KLine',t1);
|
||||
|
||||
g2:=graph(gtline(),'MA10',t2);
|
||||
|
||||
return EncodeGraphGroup(array(g1,g2),array());
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
参考Graph GraphGroup DecodeGraphGroup DecodeGraph EncodeGraph
|
||||
|
||||
###### DecodeGraphGroup
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
VolData := Nday2(GfVol() , Vol() , gfColor() , ifthen ( Close()> Open() , ClRed() , ClGreen() ) );
|
||||
|
||||
MAVOL := Nday2('MA5', MA ( Vol() , 5 ) );
|
||||
|
||||
VOLGraph:=Graph(gtBar(),'VOLGraph',VolData);
|
||||
|
||||
MAVOLGraph:=Graph(gtLine(),'MA5Graph',MAVOL,gfColor(),clBlue());
|
||||
|
||||
DATAARR:=GraphGroup(VOLGraph,MAVOLGraph,gfMinValue(),0);
|
||||
|
||||
DecodeGraphGroup(DATAARR,x,y);
|
||||
|
||||
return x;//返回分解后的柱状图
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
参考Graph GraphGroup EncodeGraphGroup DecodeGraph EncodeGraph
|
||||
|
||||
###### DecodeGraph
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
setsysparam(pn_stock(),'SZ000002');
|
||||
|
||||
setsysparam(pn_date(),inttodate(20140117));
|
||||
|
||||
setsysparam(pn_nday(),250);
|
||||
|
||||
t1:=NDay2(gfopen(), Open() ,
|
||||
|
||||
gfclose(), close(),
|
||||
|
||||
gfhigh(), high(),
|
||||
|
||||
gflow(), low(),
|
||||
|
||||
gftime(), datetimetostr(sp_time()),
|
||||
|
||||
//KLine颜色
|
||||
|
||||
gfColor(), IfThen3(Close(), Open(),
|
||||
|
||||
ClRed() , //涨颜色
|
||||
|
||||
clYellow() , //平颜色
|
||||
|
||||
Clblue() //跌颜色
|
||||
|
||||
),
|
||||
|
||||
gffill(),ifThen3(Close(), Open(), flClear(), flSolid(),flSolid())
|
||||
|
||||
);
|
||||
|
||||
g1:=graph(gtKline(),'KLine',t1);
|
||||
|
||||
DecodeGraph(g1,ty,na,da,pr);
|
||||
|
||||
return array(ty,na,da,pr);
|
||||
```
|
||||
|
||||
参考Graph GraphGroup DecodeGraphGroup EncodeGraphGroup EncodeGraph
|
||||
|
||||
###### EncodeGraph
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
setsysparam(pn_stock(),'SZ000002');
|
||||
|
||||
setsysparam(pn_date(),inttodate(20140117));
|
||||
|
||||
setsysparam(pn_nday(),250);
|
||||
|
||||
t1:=NDay2(gfopen(), Open() ,
|
||||
|
||||
gfclose(), close(),
|
||||
|
||||
gfhigh(), high(),
|
||||
|
||||
gflow(), low(),
|
||||
|
||||
gftime(), datetimetostr(sp_time()),
|
||||
|
||||
//KLine颜色
|
||||
|
||||
gfColor(), IfThen3(Close(), Open(),
|
||||
|
||||
ClRed() , //涨颜色
|
||||
|
||||
clYellow() , //平颜色
|
||||
|
||||
Clblue() //跌颜色
|
||||
|
||||
),
|
||||
|
||||
gffill(),ifThen3(Close(), Open(), flClear(), flSolid(),flSolid())
|
||||
|
||||
);
|
||||
|
||||
return EncodeGraph(gtkline(),'KLine',t1,array());
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
参考Graph GraphGroup DecodeGraphGroup EncodeGraphGroup DecodeGraph
|
||||
|
||||
###### FastLine_Web
|
||||
|
||||
- Graph
|
||||
- GraphGroup
|
||||
- MergeGraph
|
||||
- EncodeGraphGroup
|
||||
- DecodeGraphGroup
|
||||
- DecodeGraph
|
||||
- EncodeGraph
|
||||
- FastLine_Web
|
||||
- BarLine_Web
|
||||
- PieLine_Web
|
||||
- GetColorByIndex
|
||||
|
||||
###### BarLine_Web
|
||||
|
||||
###### PieLine_Web
|
||||
|
||||
###### GetColorByIndex
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return GetColorByIndex(1);
|
||||
|
||||
//返回:16711680
|
||||
```
|
||||
|
||||
##### 图形类型函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- gtLine
|
||||
- gtKLine
|
||||
- gtTower
|
||||
- gtAmerican
|
||||
- gtBar
|
||||
- gtSingleBar
|
||||
- gtCircle
|
||||
|
||||
###### gtLine
|
||||
|
||||
###### gtKLine
|
||||
|
||||
###### gtTower
|
||||
|
||||
###### gtAmerican
|
||||
|
||||
###### gtBar
|
||||
|
||||
###### gtSingleBar
|
||||
|
||||
###### gtCircle
|
||||
|
||||
##### 图形字段函数
|
||||
|
||||
这类函数用于描述数据点的特性或者描述整个图形的属性
|
||||
|
||||
###### 内容
|
||||
|
||||
- gfValue
|
||||
- gfClose
|
||||
- gfOpen
|
||||
- gfHigh
|
||||
- gfLow
|
||||
- gfTowerLow
|
||||
- gfTowerHigh
|
||||
- gfTowerMid
|
||||
- gfVol
|
||||
- gfAmount
|
||||
- gfTime
|
||||
- gfColor
|
||||
- gfFill
|
||||
- gfFlag
|
||||
- gfRateFlag
|
||||
- gfZero
|
||||
- gfMaxValue
|
||||
- gfMinValue
|
||||
- gfLTP
|
||||
- gfTitleCaption
|
||||
- gfLeftTitleCaption
|
||||
- gfCoordinate
|
||||
|
||||
###### gfValue
|
||||
|
||||
###### gfClose
|
||||
|
||||
###### gfOpen
|
||||
|
||||
###### gfHigh
|
||||
|
||||
###### gfLow
|
||||
|
||||
###### gfTowerLow
|
||||
|
||||
###### gfTowerHigh
|
||||
|
||||
###### gfTowerMid
|
||||
|
||||
###### gfVol
|
||||
|
||||
###### gfAmount
|
||||
|
||||
###### gfTime
|
||||
|
||||
###### gfColor
|
||||
|
||||
参考颜色函数
|
||||
|
||||
###### gfFill
|
||||
|
||||
参考图形填充设置函数
|
||||
|
||||
###### gfFlag
|
||||
|
||||
参考图形标示函数
|
||||
|
||||
###### gfRateFlag
|
||||
|
||||
###### gfZero
|
||||
|
||||
参考TGraphGroup
|
||||
|
||||
###### gfMaxValue
|
||||
|
||||
参考TGraphGroup
|
||||
|
||||
###### gfMinValue
|
||||
|
||||
参考TGraphGroup
|
||||
|
||||
###### gfLTP
|
||||
|
||||
参考TGraphGroup
|
||||
|
||||
###### gfTitleCaption
|
||||
|
||||
参考TGraphGroup
|
||||
|
||||
###### gfLeftTitleCaption
|
||||
|
||||
参考TGraphGroup
|
||||
|
||||
###### gfCoordinate
|
||||
|
||||
参考TGraphGroup
|
||||
|
||||
##### 图形标示函数
|
||||
|
||||
用于为图形做出一定标示,例如买入点或卖出点,取值为整数。
|
||||
|
||||
###### 内容
|
||||
|
||||
- fgNone
|
||||
- fgUp
|
||||
- fgDown
|
||||
- fgLeft
|
||||
- fgRight
|
||||
- fgLeftUp
|
||||
- fgLeftDown
|
||||
- fgRightUp
|
||||
- fgRightDown
|
||||
|
||||
###### fgNone
|
||||
|
||||
###### fgUp
|
||||
|
||||
###### fgDown
|
||||
|
||||
###### fgLeft
|
||||
|
||||
###### fgRight
|
||||
|
||||
###### fgLeftUp
|
||||
|
||||
###### fgLeftDown
|
||||
|
||||
###### fgRightUp
|
||||
|
||||
###### fgRightDown
|
||||
|
||||
##### 图形填充设置函数
|
||||
|
||||
用于设定图形是否填充以及如何填充,取值为整数。
|
||||
|
||||
参考:gfFill
|
||||
|
||||
###### 内容
|
||||
|
||||
- flSolid
|
||||
- flClear
|
||||
- flHorizontal
|
||||
- flVertical
|
||||
- flFDiagonal
|
||||
- flBDiagonal
|
||||
- flCross
|
||||
- flDiagCross
|
||||
|
||||
###### flSolid
|
||||
|
||||
参考gfFill flClear flHorizontal flVertical flFDiagonal flBDiagonal flCross flDiagCross
|
||||
|
||||
###### flClear
|
||||
|
||||
参考gfFill flSolid flHorizontal flVertical flFDiagonal flBDiagonal flCross flDiagCross
|
||||
|
||||
###### flHorizontal
|
||||
|
||||
参考gfFill flSolid flClear flVertical flFDiagonal flBDiagonal flCross flDiagCross
|
||||
|
||||
###### flVertical
|
||||
|
||||
参考gfFill flSolid flClear flHorizontal flFDiagonal flBDiagonal flCross flDiagCross
|
||||
|
||||
###### flFDiagonal
|
||||
|
||||
参考gfFill flSolid flClear flHorizontal flVertical flBDiagonal flCross flDiagCross
|
||||
|
||||
###### flBDiagonal
|
||||
|
||||
参考gfFill flSolid flClear flHorizontal flVertical flFDiagonal flCross flDiagCross
|
||||
|
||||
###### flCross
|
||||
|
||||
参考gfFill flSolid flClear flHorizontal flVertical flFDiagonal flBDiagonal flDiagCross
|
||||
|
||||
###### flDiagCross
|
||||
|
||||
参考gfFill flSolid flClear flHorizontal flVertical flFDiagonal flBDiagonal flCross
|
||||
|
||||
##### 颜色函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- clBlack
|
||||
- clMaroon
|
||||
- clGreen
|
||||
- clOlive
|
||||
- clNavy
|
||||
- clPurple
|
||||
- clTeal
|
||||
- clGray
|
||||
- clSilver
|
||||
- clRed
|
||||
- clLime
|
||||
- clYellow
|
||||
- clBlue
|
||||
- clFuchsia
|
||||
- clAqua
|
||||
- clLtGray
|
||||
- clDkGray
|
||||
- clWhite
|
||||
- clMoneyGreen
|
||||
- clSkyBlue
|
||||
- clCream
|
||||
- clMedGray
|
||||
|
||||
###### clBlack
|
||||
|
||||
###### clMaroon
|
||||
|
||||
###### clGreen
|
||||
|
||||
###### clOlive
|
||||
|
||||
###### clNavy
|
||||
|
||||
###### clPurple
|
||||
|
||||
###### clTeal
|
||||
|
||||
###### clGray
|
||||
|
||||
###### clSilver
|
||||
|
||||
###### clRed
|
||||
|
||||
###### clLime
|
||||
|
||||
###### clYellow
|
||||
|
||||
###### clBlue
|
||||
|
||||
###### clFuchsia
|
||||
|
||||
###### clAqua
|
||||
|
||||
###### clLtGray
|
||||
|
||||
###### clDkGray
|
||||
|
||||
###### clWhite
|
||||
|
||||
###### clMoneyGreen
|
||||
|
||||
###### clSkyBlue
|
||||
|
||||
###### clCream
|
||||
|
||||
###### clMedGray
|
||||
|
||||
##### 颜色变换函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- GetCValue
|
||||
- GetMValue
|
||||
- GetYValue
|
||||
- GetKValue
|
||||
- CMYK
|
||||
- RGB
|
||||
- Rgbbgr
|
||||
- PaletteRGB
|
||||
- PaletteIndex
|
||||
- GetRValue
|
||||
- GetGValue
|
||||
- GetBValue
|
||||
|
||||
###### GetCValue
|
||||
|
||||
###### GetMValue
|
||||
|
||||
###### GetYValue
|
||||
|
||||
###### GetKValue
|
||||
|
||||
###### CMYK
|
||||
|
||||
###### RGB
|
||||
|
||||
###### Rgbbgr
|
||||
|
||||
###### PaletteRGB
|
||||
|
||||
###### PaletteIndex
|
||||
|
||||
###### GetRValue
|
||||
|
||||
###### GetGValue
|
||||
|
||||
###### GetBValue
|
||||
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
# TSL函数
|
||||
|
||||
> 本文档从 [TSL 函数参考](../index.md) 拆分而来
|
||||
|
||||
TSL函数包含数学、系统、基础、图形等通用函数,适用于各种TSL脚本开发场景。
|
||||
|
||||
## 目录
|
||||
|
||||
### 数学与计算
|
||||
|
||||
- **[数学函数](./math.md)** (14,396行)
|
||||
- 数值计算、常用数学函数、位运算函数
|
||||
- 三角函数、角度量转换、双曲线函数
|
||||
- 指数对数函数、随机数、统计函数
|
||||
|
||||
### 系统与平台
|
||||
|
||||
- **[系统相关函数](./system.md)** (1,647行)
|
||||
- 系统信息、环境变量、进程控制
|
||||
- 内存管理、性能监控
|
||||
|
||||
- **[平台函数](./platform.md)** (553行)
|
||||
- 平台特定功能、系统调用
|
||||
|
||||
- **[客户端函数](./client.md)** (409行)
|
||||
- 客户端交互、界面控制
|
||||
|
||||
### 基础功能
|
||||
|
||||
- **[基础函数](./base.md)** (10,660行)
|
||||
- 字符串处理、数组操作、日期时间
|
||||
- 类型转换、条件判断、数据结构
|
||||
- 文件操作、流程控制
|
||||
|
||||
- **[图形函数](./graphics.md)** (698行)
|
||||
- 绘图、图表、可视化
|
||||
|
||||
### 资源与交互
|
||||
|
||||
- **[资源访问函数](./resource.md)** (4,897行)
|
||||
- 文件读写、数据库访问、网络通信
|
||||
- 配置文件、资源管理
|
||||
|
||||
- **[第三方交互函数](./third_party.md)** (610行)
|
||||
- 第三方库调用、外部程序交互
|
||||
|
||||
### 工具函数
|
||||
|
||||
- **[压缩和解压函数](./compression.md)** (108行)
|
||||
- 数据压缩、解压缩、归档
|
||||
|
||||
- **[信息摘要及编码](./digest_encoding.md)** (172行)
|
||||
- 哈希算法、加密、编码转换
|
||||
|
||||
## 快速索引
|
||||
|
||||
### 常用函数分类
|
||||
|
||||
| 功能类别 | 文件 | 典型函数示例 |
|
||||
|---------|------|-----------|
|
||||
| 数学计算 | [math.md](./math.md) | Abs, Sqrt, Sin, Cos, Log, Exp, Round... |
|
||||
| 字符串处理 | [base.md](./base.md) | Len, Mid, Left, Right, Trim, Replace... |
|
||||
| 日期时间 | [base.md](./base.md) | Now, Date, Time, DateAdd, DateDiff... |
|
||||
| 文件操作 | [resource.md](./resource.md) | FileExists, ReadFile, WriteFile... |
|
||||
| 数组操作 | [base.md](./base.md) | Array, UBound, LBound, Sort... |
|
||||
| 类型转换 | [base.md](./base.md) | CStr, CInt, CFloat, CBool... |
|
||||
|
||||
## 使用提示
|
||||
|
||||
1. **数学函数**:`math.md` 包含了所有数学计算相关的函数,是数值处理的基础
|
||||
2. **基础函数**:`base.md` 最为常用,包含了字符串、数组、日期时间等日常开发必需的函数
|
||||
3. **资源访问**:`resource.md` 涉及文件、数据库、网络等外部资源的访问
|
||||
4. **搜索建议**:在当前目录(`function/tsl/`)使用全局搜索查找特定函数
|
||||
|
||||
---
|
||||
|
||||
**返回**: [函数参考首页](../index.md)
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,553 @@
|
|||
#### 平台函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- 自有数据维护函数
|
||||
- 平台函数简介
|
||||
- 平台执行信息
|
||||
- 用户和函数相关函数
|
||||
- 平台与客户端交互函数
|
||||
|
||||
##### 自有数据维护函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- LoadTableEx
|
||||
- UserDB
|
||||
- LoadTable
|
||||
- SaveTable
|
||||
- TestTable
|
||||
- SaveBk
|
||||
- DeleteBk
|
||||
- ListTable
|
||||
- DeleteTable
|
||||
|
||||
###### LoadTableEx
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return LoadTableEx('repitle');
|
||||
```
|
||||
|
||||
返回:repitle为保存好的用户数据
|
||||
|
||||
###### UserDB
|
||||
|
||||
####### 内容
|
||||
|
||||
- UserDataUpLoad
|
||||
- HexToString
|
||||
- TransFileName
|
||||
|
||||
####### UserDataUpLoad
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//dir为用户本地用户数据的存贮目录
|
||||
|
||||
Filedir:='C:\\Users\\xxxx\\Tinysoft\\Analyse.NET\\D254A848\\xxx\\UserDB\\hex_74657374646174613031.stm';
|
||||
|
||||
return UserDataUpLoad(Filedir); //返回上传结果提示信息。
|
||||
```
|
||||
|
||||
####### HexToString
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//将用户数据名转化为可读串
|
||||
|
||||
str:='hex_74657374646174613031.stm';
|
||||
|
||||
return HexToString(str); //返回testdata01
|
||||
```
|
||||
|
||||
####### TransFileName
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//获取本地用户数据列表
|
||||
|
||||
dir:='C:\\Users\\xxxx\\Tinysoft\\Analyse.NET\\D254A848\\xxx\\UserDB';
|
||||
|
||||
return TransFileName(dir); //返回用户数据列表
|
||||
```
|
||||
|
||||
###### LoadTable
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//将savetable范例中保存的用户数据testA提取出来
|
||||
|
||||
Return loadTable('testA');
|
||||
```
|
||||
|
||||
参考TestTable SaveTable ListTable DeleteTable
|
||||
|
||||
###### SaveTable
|
||||
|
||||
注意:
|
||||
|
||||
在保存用户数据的时候可以分目录保存,只需在目录层次间添加‘\\’即可;在不同的目录下可以将数据保存为相同的数据名称。
|
||||
|
||||
另外,该目录的分类方法在左上角工具栏中的“数据”可查看到分类,但是在资源管理器中,只以"目录名\数据表名"显示
|
||||
|
||||
范例
|
||||
|
||||
范例一:直接在根目录下保存
|
||||
|
||||
```text
|
||||
//将r保存为用户数据testA
|
||||
|
||||
r:=rand(10,10);
|
||||
|
||||
Return savetable('testA',r);
|
||||
|
||||
//结果:-1
|
||||
```
|
||||
|
||||
范例二:保存到指定目录下
|
||||
|
||||
```text
|
||||
//将生成的10行10列的随机数据保存到目录:mydata\目录下,保存
|
||||
|
||||
//文件名称为testA
|
||||
|
||||
r:=rand(10,10);
|
||||
|
||||
ret:=savetable('mydata\\testA',r);
|
||||
|
||||
return ret;
|
||||
|
||||
//结果:-1
|
||||
```
|
||||
|
||||
用户数据的查看:
|
||||
|
||||
用户可以在左上角菜单栏的‘数据’中查看保存的数据,如果保存后即时查看,服务器还没有把数据推送到客户端,用户需要主动查询用户数据,点击左上角菜单栏‘系统’->‘检查用户数据’,右下角弹出最新更新的用户数据后,再点击菜单栏‘数据’,即可看到刚刚存入的数据。
|
||||
|
||||
范例三:新旧流格式数据保存操作及结果对比,在新版客户端+下一代服务器下执行以下操作
|
||||
|
||||
```text
|
||||
t:=getdatademo();//返回一个数组--测试者数据举例
|
||||
|
||||
r1:= savetable("TestSTData01",t);//缺省情况下保存用户数据
|
||||
|
||||
r2:= savetable("TestSTData02",t,0);//指定保存为原始流格式
|
||||
|
||||
r3:= savetable("TestSTData03",t,1);//指定保存为新流格式
|
||||
|
||||
return array(r1,r2,r3);
|
||||
```
|
||||
|
||||
保存后,用户数据中列表大小显示如下:新流格式数据大小为源始流格式的55%,数据大小有明显的变小
|
||||
|
||||
关于新流格式:
|
||||
|
||||
新一代客户端上传用户数据采用快速流,为了客户端保持和古旧的平台的兼容性,原有客户端上传的数据依旧采用原始流模式。
|
||||
|
||||
如果同时使用老旧的客户端(2020年6月之前的版本)和新的客户端,老旧客户端无法处理新的流模式。
|
||||
|
||||
新版本的执行返回结果集使用用的是快速流格式,快速流模式空间需求小,且加载效率快300%。
|
||||
|
||||
参考TestTable LoadTable ListTable DeleteTable
|
||||
|
||||
###### TestTable
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return testTable('testA');//测试用户数据"testA"是否存在。返回值为1,即存在,0即不存在。
|
||||
```
|
||||
|
||||
参考SaveTable LoadTable ListTable DeleteTable
|
||||
|
||||
###### SaveBk
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
SaveBk("MySector","我的一级分类\\我的二级分类",Array("SZ000001","SZ000002"));
|
||||
|
||||
{在"我的一级分类\\我的二级分类"目录生成一个名为"MySector "的板块,该板块的成分为SZ000001,SZ000002}
|
||||
```
|
||||
|
||||
参考DeleteBk
|
||||
|
||||
###### DeleteBk
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
DeleteBk ("MySector");
|
||||
```
|
||||
|
||||
参考SaveBk http://www.tinysoft.com.cn/TSDN/HelpDoc/SearchContent.tsl?r=ref&KeyWord=
|
||||
|
||||
###### ListTable
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return ListTable();
|
||||
```
|
||||
|
||||
结果如下:
|
||||
|
||||
参考TestTable SaveTable LoadTable DeleteTable
|
||||
|
||||
###### DeleteTable
|
||||
|
||||
范例
|
||||
|
||||
范例一:删除指定目录下的用户数据
|
||||
|
||||
```text
|
||||
//删除存在目录:“mydata\目录下”的用户数据testA
|
||||
|
||||
ret:=deleteTable('mydata\\testA');
|
||||
|
||||
return ret;
|
||||
|
||||
//结果:-1
|
||||
```
|
||||
|
||||
范例二:删除同一规则命名的用户数据
|
||||
|
||||
```text
|
||||
//删除存在目录:“mydata\目录下”以test开头命名的用户数据
|
||||
|
||||
data:= listTable();
|
||||
|
||||
for i:=0 to length(data)-1 do
|
||||
|
||||
begin
|
||||
|
||||
if pos('mydata\\test',data[i])>0 then
|
||||
|
||||
begin
|
||||
|
||||
deleteTable(data[i]);
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
return listtable();
|
||||
```
|
||||
|
||||
参考TestTable SaveTable LoadTable ListTable
|
||||
|
||||
##### 平台函数简介
|
||||
|
||||
平台函数指天软金融分析.NET平台专用函数(证券相关等函数也是平台专用函数)
|
||||
|
||||
##### 平台执行信息
|
||||
|
||||
###### 内容
|
||||
|
||||
- TSCanGrid
|
||||
- Isbackground
|
||||
- tsAppServer
|
||||
- TsAppServerName
|
||||
- SendToClient
|
||||
- TS_ModuleInfo
|
||||
|
||||
###### TSCanGrid
|
||||
|
||||
###### Isbackground
|
||||
|
||||
###### tsAppServer
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
a:=rand(10,10);
|
||||
|
||||
|
||||
return tsAppServer();
|
||||
|
||||
|
||||
//结果:192.168.101.45:3328(Z:\server\bin5)
|
||||
```
|
||||
|
||||
###### TsAppServerName
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return TsAppServerName();
|
||||
```
|
||||
|
||||
//结果:192.168.101.26:z:\server\bin\exec64.exe
|
||||
|
||||
###### SendToClient
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//1)执行命令:return 100+1
|
||||
|
||||
return SendToClient("getdo","return 100 + 1;",nil,nil);
|
||||
|
||||
//结果:101
|
||||
|
||||
//2)采用系统参数取得数据,将取得的数据相加,并设置超时时间为30s
|
||||
|
||||
return SendToClient("getdo","return getsysparam('a') + getsysparam('b');",nil,array("a":10,"b":30),30);
|
||||
|
||||
//结果:40
|
||||
```
|
||||
|
||||
参考平台和客户端交互。
|
||||
|
||||
###### TS_ModuleInfo
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return TS_ModuleInfo();
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
差异说明
|
||||
Windows:任何版本。
|
||||
|
||||
Linux:自2024-07-10之后的版本,开始支持;之前的版本不支持。
|
||||
|
||||
##### 用户和函数相关函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- User
|
||||
- UserName
|
||||
- FunctionType
|
||||
- FunctionName
|
||||
- FunctionVer
|
||||
- UserConfig
|
||||
- SetUID
|
||||
- SUDO
|
||||
|
||||
###### User
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//执行用户jrtzsupport 共享的大师策略的函数Show_DSXG_211
|
||||
|
||||
begt:=inttodate(20130101);
|
||||
|
||||
endt:=inttodate(20140101);
|
||||
|
||||
return user('jrtzsupport').Show_DSXG_211(begt,endt,0);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
参考SYSTEM
|
||||
|
||||
###### UserName
|
||||
|
||||
###### FunctionType
|
||||
|
||||
参考FunctionName FunctionVer
|
||||
|
||||
###### FunctionName
|
||||
|
||||
参考FunctionType FunctionVer
|
||||
|
||||
###### FunctionVer
|
||||
|
||||
参考FunctionType FunctionName
|
||||
|
||||
###### UserConfig
|
||||
|
||||
###### SetUID
|
||||
|
||||
###### SUDO
|
||||
|
||||
##### 平台与客户端交互函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- 在平台模型运行时打印信息到客户端/Web端
|
||||
- 平台模型远程调用客户端函数,访问客户端的资源
|
||||
- SendToClient提供调用本地命令
|
||||
|
||||
###### 在平台模型运行时打印信息到客户端/Web端
|
||||
|
||||
在运行平台模型的时候,为了调试方便,也为了监控模型的正常运行,往往需要知道模型运行的状态,这样我们需要在模型运行过程中输出一些信息到终端,而不是等待模型执行完毕得到最终结果。
|
||||
|
||||
这就需要使用打印信息到客户端的功能。
|
||||
|
||||
我们看一个案例,这个案例就是获得每个股票的Beta值:
|
||||
|
||||
Stks:=GetBk("深证A股;上证A股");
|
||||
|
||||
Result:=Array();
|
||||
|
||||
for i:=0 to length(Stks)-1 do
|
||||
|
||||
begin
|
||||
|
||||
SetSysParam(pn_Stock(),Stks[i]);
|
||||
|
||||
Result[i]["StockID"]:=Stks[i];
|
||||
|
||||
Result[i]["Beta"]:= StockBeta4("SH000300",10); //最近一年的Beta
|
||||
|
||||
Echo Result[i]["StockID"],"->",Result[i]["Beta"];
|
||||
|
||||
end;
|
||||
|
||||
Return Result;
|
||||
|
||||
由于调用Beta的时候,计算效率会稍微低,我们利用Echo把当前运行的信息打印到了客户端,客户端的窗口内容如下:
|
||||
|
||||
利用这样的方法,我们就可以实时知道当前模型运行的状况了。我们在很多地方可以用到这个功能,例如我们可以简单地打印几个时间或者运行的时间长短来知道运行的效率。
|
||||
|
||||
对于运行中间得到的结果是一个复杂结果的,例如数组等内容,那么就没办法直接Echo这个结果,这就要结合tostn函数来输出调试了。
|
||||
|
||||
Stks:=GetBk("深证A股;上证A股");
|
||||
|
||||
Result:=Array();
|
||||
|
||||
for i:=0 to length(Stks)-1 do
|
||||
|
||||
begin
|
||||
|
||||
SetSysParam(pn_Stock(),Stks[i]);
|
||||
|
||||
Result[i]["StockID"]:=Stks[i];
|
||||
|
||||
Result[i]["Beta"]:= StockBeta4("SH000300",10); //最近一年的Beta
|
||||
|
||||
Echo tostn(Result);
|
||||
|
||||
end;
|
||||
|
||||
Return Result;
|
||||
|
||||
每一行的内容会显示在右边部分,这个时候我们可以利用转换数据按钮把字符串以数据的方式来显示。
|
||||
|
||||
除了Echo以外,我们还可以利用Writeln或者Write函数来输出这些内容。
|
||||
|
||||
当我们不是在终端上运行这些模型,而是在WEB端或者独立解释器里调用运行这个模型,信息会直接输出到浏览器或者控制台中。
|
||||
|
||||
参考:echo
|
||||
|
||||
###### 平台模型远程调用客户端函数,访问客户端的资源
|
||||
|
||||
我们在使用平台模型的时候,经常有需要要访问客户端本地资源。打个比方,我们需要导出计算的数据,而等待整个模型的返回特别长,所以可能我们需要边运行,边导出数据。又或者整个的数据结果集非常大,无法单次返回,需要分开成小结果集运行时导出到客户端,而导出数据可以通过ExecSql输出到数据库,也可以是通过ExportFile来导出文件,我们还可以通过WriteFile等文件读写函数来直接操作文件。以及通过封装好的系统或者用户写的TSL函数。
|
||||
|
||||
平台提供了两个关键字RDo和RDo2来解决这个问题。RDo和RDo2可以在平台运行模型的时候远端调用客户端的函数运行。
|
||||
|
||||
例如:我们在运行的时候要导出一组股票的交易明细数据到客户机上。
|
||||
|
||||
```text
|
||||
Stks:=GetBK("深证A股;上证A股");
|
||||
|
||||
Day:=Today();
|
||||
|
||||
for i:=0 to length(Stks)-1 do
|
||||
|
||||
begin
|
||||
|
||||
SetSysParam(pn_Stock(),Stks[i]);
|
||||
|
||||
if not isTradeDay(Day) then continue;//如果没有交易则下一个
|
||||
|
||||
Data:=select DateTimeToStr(["date"]) as "Time",["close"],["vol"] from tradetable DateKey Day to Day+1 of Stks[i] where ["vol"]>0 end; //取出时间,收盘价,成交量
|
||||
|
||||
|
||||
RDo2
|
||||
ExportFile(ftCSV(),"","C:\\DataStore\\"+IntToStr(DateToInt(Day))+"\\"+Stks[i]+".csv",Data);//导出数据
|
||||
|
||||
end;
|
||||
```
|
||||
|
||||
以上代码为将上证和深证A股的当天的交易明细导出到本地。ExportFile是一个导出的函数,但是在平台上运行的时候导出到的位置是在服务器上,而且需要在服务器上设置权限。而用RDo2则使导出命令在客户端上运行,所以输出会在客户端本地。
|
||||
|
||||
由于要对本地文件进行读写,或者调用本地的其他资源,终端为了安全起见,默认禁止了这类远端调用,于是系统左上角会出现如下界面:
|
||||
|
||||
系统还会终止模型的运行并且返回出错信息。
|
||||
|
||||
用户可以通过菜单进入系统设置,也可以点击进入系统信任中心,界面如下:
|
||||
|
||||
信任中心的初始是最高安全性,禁止了远程模型对本地资源的访问。如果我们只需要导出数据到本地或者执行本地的数据库查询语句,那么我们可以选择高安全性,高安全性允许RDO/RDO2执行的函数是ExportFile和ExecSQL。
|
||||
|
||||
如果我们还需要从本地导入数据,调用ImportFile函数,则应该设置为中安全性。低安全性则是允许RDo/RDo2调用任何本地函数。而最低安全性则还允许使用SendToClient函数用”do”或者”getdo”命令组成命令串执行,这就可以不需要把命令串封装成函数来执行。
|
||||
|
||||
如果信任中心拒绝了调用,系统会自动禁止该调用,并且会有一个禁止掉的提示小窗口。而当信任中心允许调用的时候,如果用户没有进行许可设置,系统依旧会对远程模型的本地资源调用进行安全提示。
|
||||
|
||||
我们可以信任某个用户来源的所有的函数的调用,也可以信任该来源函数的调用,还可以仅仅信任该调用(例如信任导出的调用必须导出的文件名都是一致的),我们还可以临时允许该调用或者拒绝该调用。这样下次当调用发生的时候,该信任管理窗口依旧会出现。
|
||||
|
||||
对于导入和导出的调用,还有一个信任路径的设置。当设置了信任路径以后,在该信任路径下以及该路径下的子目录下的所有导入/导出命令将会被允许而不再提示。
|
||||
|
||||
无论是拒绝还是信任了,在运行信息中总是会显示收到的命令。此外,对于已经设置了信任的调用方式,如果用户需要修改,可以进入系统设置中,打开信任配置文件来修改INI文件,找到相应项目删除掉就可以了。
|
||||
|
||||
RDo和RDo2的差异在于RDo2会返回函数的执行结果,因此RDo2是同步执行的方式,一定会等待客户端执行完毕才返回。而RDo则是不返回结果,直接把命令提交给客户端处理,至于执行的正确与否,RDo是不理会的,会出现模型执行完毕了,而客户端的命令仍然在排队执行的情况。
|
||||
|
||||
在绝大多数情况下,RDo2会更安全可靠,但是RDo的效率有时候会更高。但是平台会约束RDo送回到客户端的内容的带宽,并且系统也无法保障RDo的执行是否是正确的。
|
||||
|
||||
而且有些函数是必须用RDo2的,例如ImportFile,因为不用RDo2,该调用毫无意义。而ExportFile,ExecSQL的调用,有点却不一定需要等待返回,所以也可以采用RDo,但是我们依旧推荐用户使用RDo2,除非用户确实需要使用RDo。
|
||||
|
||||
如果RDo2所调用的函数使用了系统参数(客户端执行的函数并不多见),则可以使用With关键字把系统参数带进去。
|
||||
|
||||
例如A:=RDo2 LocalFunctionTest() with array("abcd":123,"bcd":234);
|
||||
|
||||
而LocalFunctiontest函数的内容则为:
|
||||
|
||||
Return GetSysParam("abcd")+GetSysParam("bcd");
|
||||
|
||||
则返回的结果是357
|
||||
|
||||
RDo2调用的默认是300秒超时的,也就是说默认情况下当客户端未能在300秒内处理完请求(包括客户端无人响应确认),系统会抛出超时的异常。
|
||||
|
||||
如果需要设置超时的时间,可以用TimeOut来设置超时,例如RDo2 ImportFile(ftCsv(),"","C:\\1.csv",Data) TimeOut 30; //调用ImportFile函数的超时时间为30秒。
|
||||
|
||||
参考:RDo,RDo2
|
||||
|
||||
###### SendToClient提供调用本地命令
|
||||
|
||||
RDo和RDo2提供了调用本地函数的功能,但是有时候一个计算不一定要用函数,例如:执行一个1+1的操作。这类需求利用SendToClient可以完成。
|
||||
|
||||
SendToClient提供了很灵活的调用方法,事实上RDo,RDo2也是通过SendToClient函数来实现的。SendToClient实现了如下命令:
|
||||
|
||||
echo 显示信息
|
||||
|
||||
import 导入
|
||||
|
||||
export 导出
|
||||
|
||||
rdo 远程调用
|
||||
|
||||
rdo2 远程调用并返回
|
||||
|
||||
do 远程执行命令串
|
||||
|
||||
getdo 远程执行命令串并返回
|
||||
|
||||
由于echo命令、import、export、rdo、rdo2命令在之前都有相应的简单的替代方案,因此,我们就只讲do、getdo命令的使用。
|
||||
|
||||
例如,我们要用本地计算一个1+1的值,我们可以采用如下方法:
|
||||
|
||||
Return SendToClient("getdo","return 1+1;",nil,nil);
|
||||
|
||||
如果在计算中需要采用系统参数,将参数放入第四个参数即可:
|
||||
|
||||
Return SendToClient("getdo","return getsysparam('a')+GetSysParam('b');",nil,array("a":1,"b":2));
|
||||
|
||||
如果计算数据的超时时间需要设置,再在后边加入一个超时的秒数的参数:
|
||||
|
||||
Return SendToClient("getdo","return getsysparam('a')+GetSysParam('b');",nil,array("a":1,"b":2),30);//超时为30秒。
|
||||
|
||||
do命令和getdo命令类似,但是do命令不等待结果的返回,这点和RDo与RDo2的差异类似。
|
||||
|
||||
参考:SendToClient
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,610 @@
|
|||
#### 第三方交互函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- Python支持函数
|
||||
- R支持函数
|
||||
- MatLab支持函数
|
||||
- 彭博终端支撑函数
|
||||
- Html
|
||||
- do方式对外部语言的调用
|
||||
- COM接口
|
||||
- JAVA方法的调用
|
||||
|
||||
##### Python支持函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- Python支持函数简介
|
||||
- PyPutVar
|
||||
- PyGetVar
|
||||
- PyRun
|
||||
- PyCall
|
||||
- PyRelease
|
||||
- PyEnsure
|
||||
- 调用Python范例
|
||||
- PyError
|
||||
|
||||
###### Python支持函数简介
|
||||
|
||||
要使用Python的引擎,首先需要将对应于客户端(如在脚本调用则为TSL.EXE)的相应位数的版本(32位对应32位,64位对应于64位)的python相应支持DLL所在位置加入系统或者PATH中,并在天软存贮目录的plugin\FileMgr.ini中加入
|
||||
|
||||
[Python Config]
|
||||
|
||||
Enabled=1
|
||||
|
||||
version=3
|
||||
|
||||
如果是版本2.7的就用version=2
|
||||
|
||||
###### PyPutVar
|
||||
|
||||
###### PyGetVar
|
||||
|
||||
###### PyRun
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
s:="a=1
|
||||
|
||||
b=1
|
||||
|
||||
if a==1:
|
||||
|
||||
b=2
|
||||
|
||||
";
|
||||
|
||||
pyrun(s);
|
||||
|
||||
return array("a":pygetvar("a"),"b":pygetvar("b"));
|
||||
```
|
||||
|
||||
本地执行返回结果:
|
||||
|
||||
###### PyCall
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
rdo2 PyRun("import numpy");
|
||||
|
||||
//不给状态值,默认方式下调用python的randint函数
|
||||
|
||||
return rdo2 pycall('numpy.random','randint',6,9);
|
||||
|
||||
//参数通过数组方式传入
|
||||
|
||||
return pycall(2,'numpy.random','randint',array('high':9,'low':6));
|
||||
|
||||
//一个个指定参数方式传入
|
||||
|
||||
return pycall('numpy.random','randint',high:9,low:6);
|
||||
```
|
||||
|
||||
###### PyRelease
|
||||
|
||||
###### PyEnsure
|
||||
|
||||
###### 调用Python范例
|
||||
|
||||
例1:
|
||||
|
||||
```text
|
||||
a:=2;
|
||||
|
||||
pyputvar("a",a);//送入变量
|
||||
|
||||
pyrun("a = a+1"); //计算
|
||||
|
||||
b := pygetvar("a");//获取变量返回结果为 3
|
||||
|
||||
|
||||
例2:
|
||||
|
||||
PyRun("import math"); //执行python语句 :导入python的math模块
|
||||
|
||||
a := PyCall("math","sqrt",2) ; //a = 1.4142135623731
|
||||
|
||||
//调用math模块下的sqrt(开方)函数,参数为2;
|
||||
|
||||
b := PyCall("math","pow",2,3) ;//b = 8;
|
||||
|
||||
//调用math模块下的pow函数,参数为2,3 ;
|
||||
|
||||
Return C := a*b;
|
||||
```
|
||||
|
||||
###### PyError
|
||||
|
||||
范例
|
||||
|
||||
本地执行以下脚本
|
||||
|
||||
```text
|
||||
pyrun("a=math.pi");//此处会报错因为没有 import math
|
||||
|
||||
return pyerror();
|
||||
```
|
||||
|
||||
//返回: name 'math' is not defined
|
||||
|
||||
##### R支持函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- R支持函数简介
|
||||
- REVal
|
||||
- RGetVar
|
||||
- RPutVar
|
||||
- REnsure
|
||||
- RRelease
|
||||
- R支持函数范例
|
||||
|
||||
###### R支持函数简介
|
||||
|
||||
要使用R的引擎,首先需要将对应于客户端(如在脚本调用则为TSL.EXE)的相应位数的版本(32位对应32位,64位对应于64位)的R.DLL所在位置加入系统或者PATH中,并在天软存贮目录的plugin\FileMgr.ini中加入
|
||||
|
||||
[R Config]
|
||||
|
||||
Enabled=1
|
||||
|
||||
天软平台尝试对R进行了多线程支持,但由于R语言本身的缺陷,多线程调用R会存在内存泄露等问题。因此,尽管TSL语言支持R语言的多线程调用并经过了测试,天软依旧不建议多线程下调用R语言。
|
||||
|
||||
###### REVal
|
||||
|
||||
###### RGetVar
|
||||
|
||||
###### RPutVar
|
||||
|
||||
###### REnsure
|
||||
|
||||
###### RRelease
|
||||
|
||||
- R支持函数简介
|
||||
- REVal
|
||||
- RGetVar
|
||||
- RPutVar
|
||||
- REnsure
|
||||
- RRelease
|
||||
- R支持函数范例
|
||||
|
||||
###### R支持函数范例
|
||||
|
||||
Rdo2 RPutVar("a",array(1,2,3,4));
|
||||
|
||||
Ret:=Rdo2 REval("b=mean(laply(a,unlist))",Code); //Code=0则正确
|
||||
|
||||
VarValue:=Rdo2 RGetVar("b");
|
||||
|
||||
return varvalue;
|
||||
|
||||
说明:
|
||||
|
||||
RputVar传递给R一个array(1,2,3,4),,并且命名为a,R那边接受的是一个list,通过laply(a,unlist)转化成R里面的数组类型,进而求均值。最后通过RgetVar得到计算的值。通过这种形式,可以很容易的实现在在天软平台调用R的函数。注意这里由于安全原因R的支持服务器不授权不能被调用,因此需要使用RDO2来测试。
|
||||
|
||||
##### MatLab支持函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- MatLab支持函数简介
|
||||
- MATLAB编译的DLL支持函数
|
||||
|
||||
###### MatLab支持函数简介
|
||||
|
||||
TSL有两种模式调用MATLAB,一种是调用编译后的MATLAB函数,另外一种是调用MATLAB引擎的函数。
|
||||
|
||||
无论哪种调用,均依赖系统提供的matlab.dll动态库来支持,该动态库和安装到的MATLAB的版本有关系,每一个安装的版本的MATLAB,我们均提供一个对应的DLL来进行支持,一般的,系统提供了多个版本的支持库,例如matlab.dll.2008a,matlab.2009a等,用户把自己相应安装的版本的该文件复制成为matlab.dll即可。如果找不到匹配版本的动态库,可能是您的版本过老或者太新,请联系客户服务人员进行该支持库的定制。
|
||||
|
||||
###### MATLAB编译的DLL支持函数
|
||||
|
||||
TSL语言支持通过配置的方法来支持MATLAB编译出来的函数提供调用。
|
||||
|
||||
TSL提供支持编译MATLAB的函数的方法:
|
||||
|
||||
无论是用户自己编写的,函数现有的TOOLBOX函数,在MATLAB中都是以.m文件存在的,这些m文件matlab提供了编译成DLL的方法:
|
||||
|
||||
假定当前目录为toolbox\garch\garch下:
|
||||
|
||||
用C:\Program Files\MATLAB\R2008a\toolbox\garch\garch>mcc -W lib:garch -T link:lib
|
||||
|
||||
garchset garchfit garchpred ..\..\stats\norminv
|
||||
|
||||
可以将garchset garchfit garchpred norminv等函数编译成DLL,假如要编译更多的TOOLBOX函数或者自己编写的M函数,只要在命令行内添加就可以了。
|
||||
|
||||
编译完成后会得到garch.dll(由lib:garch指定的),在TSL的相关配置文件里进行配置就可以使得mdo和mdo2函数可以对其中编译的函数进行调用。
|
||||
|
||||
####### 内容
|
||||
|
||||
- Mdo
|
||||
- Mdo2
|
||||
- 天软金融平台调用MATLAB的M方法的图解步骤
|
||||
- MATLAB引擎支持函数
|
||||
|
||||
####### Mdo
|
||||
|
||||
####### Mdo2
|
||||
|
||||
####### 天软金融平台调用MATLAB的M方法的图解步骤
|
||||
|
||||
######## 内容
|
||||
|
||||
- 第一步,在MATLAB中建立C Shared Library工程
|
||||
- 第二步,在工程中加入需要的M文件
|
||||
- 第三步,设置好工程的相关的属性
|
||||
- 第四步,编译,生成动态库
|
||||
- 第五步,在金融工程平台中配置。
|
||||
- 第六步,可以在金融工程平台中建模使用
|
||||
- 第七步,运行的结果窗口
|
||||
|
||||
######## 第一步,在MATLAB中建立C Shared Library工程
|
||||
|
||||
######## 第二步,在工程中加入需要的M文件
|
||||
|
||||
以下范例为加入garchfit,garchpred,garchset,norminv等MATLAB方法
|
||||
|
||||
######## 第三步,设置好工程的相关的属性
|
||||
|
||||
######## 第四步,编译,生成动态库
|
||||
|
||||
######## 第五步,在金融工程平台中配置。
|
||||
|
||||
######## 第六步,可以在金融工程平台中建模使用
|
||||
|
||||
######## 第七步,运行的结果窗口
|
||||
|
||||
####### MATLAB引擎支持函数
|
||||
|
||||
要使用MATLAB的引擎,首先需要在天软的平台或者解释器以及客户端所在的目录找到当前使用的MATLAB版本难得相关支撑文件,一般来说其支撑文件的命名是matlab.dll.版本,例如matlab.dll.2013b就代表了R2013B的版本支持文件。
|
||||
|
||||
用户把相应的支撑文件的名字更名为matlab.dll。
|
||||
|
||||
对于绝大多数的MATLAB版本而言,这样就已经完成了配置,接下来的事情就是重新启动服务或者客户端,但是对于某些版本的MATLAB而言,这还不够,因为某些版本的MATLAB的路径设置有问题,用户需要手动将包含MATLAB引擎支撑库的路径加入到系统或者用户的PATH。一般来说该添加到PATH中的路径应包括安装到的目录的bin以及bin\win32或者bin\win64以及runtime\win32,runtime\win64。
|
||||
|
||||
######## 内容
|
||||
|
||||
- MEVal
|
||||
- MPutVar
|
||||
- MGetVar
|
||||
- MGetBuf
|
||||
- MClose
|
||||
- MSetVisible
|
||||
- MGetVisible
|
||||
- MATLAB引擎调用范例
|
||||
- Menablefmarray
|
||||
|
||||
######## MEVal
|
||||
|
||||
######## MPutVar
|
||||
|
||||
######## MGetVar
|
||||
|
||||
######## MGetBuf
|
||||
|
||||
######## MClose
|
||||
|
||||
######## MSetVisible
|
||||
|
||||
######## MGetVisible
|
||||
|
||||
######## MATLAB引擎调用范例
|
||||
|
||||
例如,用matlab做矩阵求逆的例子:
|
||||
|
||||
a:=rand(10,10);
|
||||
|
||||
MPutVar("MatlabA",a);
|
||||
|
||||
MEval("MatlabB=inv(a)");
|
||||
|
||||
b:=MGetVar("MatlabB");
|
||||
|
||||
由于大多数情况下MATLAB安装在客户机器上,因此,需要利用天软平台的RDO2来调用:
|
||||
|
||||
于是代码就变成了:
|
||||
|
||||
a:=rand(10,10);
|
||||
|
||||
RDO2 MPutVar("MatlabA",a);
|
||||
|
||||
RDO2 MEval(“MatlabB=inv(a)”);
|
||||
|
||||
b:=RDO2 MGetVar("MatlabB");
|
||||
|
||||
######## Menablefmarray
|
||||
|
||||
范例
|
||||
|
||||
范例代码:
|
||||
|
||||
```text
|
||||
t:=CreateMatrix(3,4,array('s','d','f'),1,2,3,4,5,6,7,8,9,10,11,12);
|
||||
|
||||
rdo2 mPutVar("A",t);
|
||||
|
||||
rdo2 mPutVar("B",2);
|
||||
|
||||
rdo2 mEval("C=A+B");
|
||||
|
||||
return rdo2 mGetVar("C");
|
||||
```
|
||||
|
||||
场景一:不设置Menablefmarray
|
||||
|
||||
不修改上述范例代码,结果如下:
|
||||
|
||||
场景二:设置Menablefmarray值为0
|
||||
|
||||
上述范例代码前加上"rdo2 Menablefmarray(0);",结果如下:
|
||||
|
||||
场景三:设置Menablefmarray值为1
|
||||
|
||||
上述范例代码前加上"rdo2 Menablefmarray(1);",结果如下:
|
||||
|
||||
##### 彭博终端支撑函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- 彭博终端支撑函数简介
|
||||
- blpcall
|
||||
- BLP测试范例
|
||||
|
||||
###### 彭博终端支撑函数简介
|
||||
|
||||
为了更好地和其他信息源进行交互,根据BLP的API,TSL封装了一个函数,用来从彭博的终端或者SERVER获得数据。
|
||||
|
||||
###### blpcall
|
||||
|
||||
###### BLP测试范例
|
||||
|
||||
//下属例子为订阅两支指数的最新价格,价格到达则回调hello函数。
|
||||
|
||||
a:=array();
|
||||
|
||||
a[0]:=array("FSSTI Index", "LAST_PRICE");
|
||||
|
||||
a[1]:=array("DAX Index", "LAST_PRICE");
|
||||
|
||||
blpcall(array("maxEvent":300),"//blp/mktdata","subscription",a,"hello");
|
||||
|
||||
function hello(b);
|
||||
|
||||
begin
|
||||
|
||||
echo "-----------------------------------\r\n";
|
||||
|
||||
if b["type"]=8 and b["msgs"][0,"id"]="FSSTI Index" then
|
||||
|
||||
c[0,1]:=b["msgs"][0,"value"]["LAST_PRICE"];
|
||||
|
||||
else if b["type"]=8 and b["msgs"][0,"id"]="DAX Index" then
|
||||
|
||||
c[1,1]:=b["msgs"][0,"value"]["LAST_PRICE"];
|
||||
|
||||
echo tostn(c),"\r\n";
|
||||
|
||||
return 1; //return false退出,如果一直返回真,就等到接收到系统结束的事件或者事件数达到maxEvent的规定。
|
||||
|
||||
end;
|
||||
|
||||
##### Html
|
||||
|
||||
###### 内容
|
||||
|
||||
- TextToHtml
|
||||
- TextToURL
|
||||
- HtmlToText
|
||||
- URLToText
|
||||
|
||||
###### TextToHtml
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Src:= "The First LETTER won\'t be replaced by \'one\', but the Second letter will.";
|
||||
|
||||
return TextToHtml(Src);
|
||||
|
||||
//结果:
|
||||
|
||||
The First LETTER won't be replaced by 'one', but the Second letter will.
|
||||
```
|
||||
|
||||
###### TextToURL
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
ASrc:= "#abcd 10";
|
||||
|
||||
return TextToURL(ASrc);
|
||||
|
||||
//结果:%23abcd%20%2010
|
||||
```
|
||||
|
||||
###### HtmlToText
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Src:="The First LETTER won't be replaced by 'one', but the Second letter will.";
|
||||
|
||||
RETURN HtmlToText(Src);
|
||||
|
||||
//结果:The First LETTER won't be replaced by 'one', but the Second letter will.
|
||||
```
|
||||
|
||||
###### URLToText
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
aSrc:= "%23abcd%20%2010";
|
||||
|
||||
return URLToText(aSrc);
|
||||
|
||||
//结果:#abcd 10
|
||||
```
|
||||
|
||||
##### do方式对外部语言的调用
|
||||
|
||||
语法:do extlanguage [paramlist] <scriptstring> [by config]
|
||||
|
||||
说明:
|
||||
|
||||
1、对外部语言的调用,in表示只送入,out表示只送出,var表示送入送出。
|
||||
|
||||
2、如果使用变量名,天软会默认将同名变量名送入到外部语言中。假如目标语言大小写相关,则必须用name关键字明确指定变量名。
|
||||
|
||||
3、对于不同的语言而言,可能有的语言存在返回值,有的语言是无返回值的。例如PYTHON没有返回值,而r有返回值。
|
||||
|
||||
4、如果只执行代码,参数等都可以省略。
|
||||
|
||||
5、对于某些语言,可能会存在其他配置的,可以通过by语法来送入。
|
||||
|
||||
6、目前extlanguage已经支持python,r,matlab,今后可能更多的语言会被扩展支持,底层用户也可以通过接口规范来扩展支持其他语言。
|
||||
|
||||
7、配合新的%%非转义字符串语法,对于调用其他语言会更方便。
|
||||
|
||||
下面是一个调python语言的示例:
|
||||
|
||||
```text
|
||||
a:=3;
|
||||
|
||||
c:=2;
|
||||
|
||||
do python in a name "A",out b,var c
|
||||
|
||||
%%
|
||||
|
||||
c=A*c
|
||||
|
||||
b=c*c
|
||||
|
||||
%%;
|
||||
```
|
||||
|
||||
结果c为6,b为36
|
||||
|
||||
##### COM接口
|
||||
|
||||
TSL内置了COM对象支持,支持通过创建外部com对象来调用外部组件的功能。
|
||||
|
||||
天软客户端也提供了COM服务,服务名为TSExpert.CoExec。利用COM访问天软平台,可以支撑包括MATLAB,SAS,EXCEL VBA,SPLUS,R等软件。
|
||||
|
||||
###### 内容
|
||||
|
||||
- 外部COM对象的创建
|
||||
- 天软客户端COM接口
|
||||
|
||||
###### 外部COM对象的创建
|
||||
|
||||
TSL内置了COM对象支持,支持通过创建外部com对象来调用外部组件的功能。
|
||||
|
||||
TSL中提供一个简单的方法GetOleObject来创建COM对象。
|
||||
|
||||
COM的调用和TSL的对象的调用是没有差异的,也非常类似于PASCAL以及VB等对COM对象的调用。每个COM对象方法或者属性的调用要么返回一个TSL基本类型,如数组,数字,字符串,NIL等,要么返回一个COM对象。
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
GetOleObject(“Excel.Application”,0,Obj);
|
||||
|
||||
Obj.WorkBooks.Open(“C:\\1.xls”);
|
||||
```
|
||||
|
||||
上边的代码Obj.WorkBooks隐含着返回了一个WorkBooks对象
|
||||
|
||||
###### 天软客户端COM接口
|
||||
|
||||
##### JAVA方法的调用
|
||||
|
||||
JAVA类型在TSL语言中是一个内置的对象。
|
||||
|
||||
利用TJObject可以创建Java的对象,利用TJClass可以获得Java的类。
|
||||
|
||||
使用Java对象或者Java的类和Java并无大的差异
|
||||
|
||||
==========tjclass的使用范例=============
|
||||
|
||||
```text
|
||||
systemClass:=new TJClass("java/lang/System");
|
||||
|
||||
properties:=systemClass.getProperties();
|
||||
|
||||
systemClass.out.println(properties.getProperty("java.class.path"));
|
||||
```
|
||||
|
||||
==========tjobject使用范例==============
|
||||
|
||||
```text
|
||||
//构造StringBuffer对象
|
||||
|
||||
sbObj:=new TJObject("java/lang/StringBuffer", "hello world");
|
||||
|
||||
//调用对象的insert方法
|
||||
|
||||
ret:=sbObj.insert(6, "天软");
|
||||
|
||||
//调用toString方法
|
||||
|
||||
str:=sbObj.toString();
|
||||
|
||||
//显示: hello 天软 world
|
||||
|
||||
echo str, "\r\n";
|
||||
```
|
||||
|
||||
###### 内容
|
||||
|
||||
- Java参数类型的转换
|
||||
|
||||
###### Java参数类型的转换
|
||||
|
||||
绝大多数的数据类型, TSL与Java之间会做隐式类型转换, TSL支持显式的数据类型转换这是由JavaEncode以及
|
||||
|
||||
JavaDecode来实现的
|
||||
|
||||
==============JavaEncode JavaDecode范例==================
|
||||
|
||||
```text
|
||||
//char[]构造, Unicode字符集, JavaEncode负责生成Unicode编码的char数组
|
||||
|
||||
charArr:=JavaEncode("chararray", "Tinysoft天软");
|
||||
|
||||
strObj:=new TJObject("java/lang/String", charArr);
|
||||
|
||||
SystemClass.out.println(strObj.toString());
|
||||
|
||||
//构造字符串
|
||||
|
||||
strObj:=new TJObject("java/lang/String", "天软科技");
|
||||
|
||||
//得到byte数组,系统默认字符集
|
||||
|
||||
byteArray:=strObj.getBytes();
|
||||
|
||||
//byte数组转换为字符串
|
||||
|
||||
str:=JavaDecode("String", byteArray);
|
||||
|
||||
echo str,"\r\n";
|
||||
```
|
||||
|
||||
========================================================
|
||||
|
||||
JavaEncode支持的显式转换的类型有:
|
||||
|
||||
"CharArray", "ByteArray", "CurrentClass"
|
||||
|
||||
JavaDecode支持的显式类型有
|
||||
|
||||
"String","WString"
|
||||
|
||||
由于绝大多数数据类型已经在隐式转换里自动支持,例如array(1.0,2.0)会映射到float[]
|
||||
|
||||
如存在有需要显式转换的其他类型今后将会根据具体需求进行升级
|
||||
|
||||
=========================================================
|
||||
|
||||
|
|
@ -5,9 +5,9 @@
|
|||
定位与边界:
|
||||
|
||||
- 本手册关注:语法结构、关键字、语言机制(函数/控制流/unit/class/异常/矩阵/TS-SQL/集合等)。
|
||||
- 本手册不覆盖:数学/统计教程等教学内容;函数库的详细 API 说明集中在 `function.md`。
|
||||
- 本手册不覆盖:数学/统计教程等教学内容;函数库的详细 API 说明集中在 [函数参考](function/index.md)。
|
||||
- 代码风格与命名属于工程规范:见 `docs/tsl/code_style.md`、`docs/tsl/naming.md`。
|
||||
- 为避免上下文膨胀,`function.md` 建议按需检索与引用相关片段。
|
||||
- 函数参考已拆分为42个模块化文件,建议使用索引导航或全局搜索查找特定函数。
|
||||
|
||||
## 目录
|
||||
|
||||
|
|
@ -19,4 +19,4 @@
|
|||
- [06 扩展语法(矩阵/集合/结果集过滤/TS-SQL)](06_extended_syntax.md)
|
||||
- [07 运行时与性能工具](07_debug_and_profiler.md)
|
||||
- [08 高级语言(新一代)](08_new_generation.md)
|
||||
- [TSL 函数大全)](function.md)
|
||||
- [TSL 函数参考(已拆分为42个模块)](function/index.md)
|
||||
|
|
|
|||
Loading…
Reference in New Issue