Squashed 'docs/standards/playbook/' changes from b529012..a854534
a854534 ✨ feat(plan_progress): auto-detect env for blocked plans 0d9a8ec 🐛 fix(playbook): honor no_backup for sync 2d401fa ✅ test(templates): update prompts validation e23474e 📝 docs(playbook): update prompts and sync notes 60ff3cd 🐛 fix(playbook): sync templates per file 816f036 ✅ test(playbook): add sync and vendor coverage 625cabb 📝 docs(memory_bank): reformat templates 2554c87 📝 docs(prompts): refresh prompt templates 6774a9d ✨ feat(plan_progress): track plan status in progress.md 73d5c26 🔧 chore(playbook): split sync_templates into sections 278750e ✨ feat(playbook): add plan progress tracking and rules updates 6efd637 🐛 fix(sync): keep agents block blank lines ea00d43 🐛 fix(playbook): support toml without tomllib ab0dd11 📝 docs(playbook): drop docs/plans snapshots 398696c ✨ feat(playbook): merge unified cli d959f80 🎨 style(docs): format markdown b4f712a 🗑️ remove(legacy): drop old scripts and tests 0c4cd0e ✨ feat(actions): add install_skills and format_md 3d1582c ✨ feat(sync): add templates and standards actions 49bbfa1 ✨ feat(vendor): add playbook snapshot generation 8cfcc25 ✨ feat(cli): parse toml config and dispatch actions 05903c3 ✨ feat(cli): add toml config and dispatch order 65d216e ✅ test(cli): add basic playbook cli tests f0bcf54 📝 docs(plans): add unified playbook cli plan 0885309 📝 docs(plans): add unified playbook cli design 3483d8a 🔧 chore(git): ignore .worktrees dir eb75036 🔧 chore(templates): align agent templates and docs efb93f1 📝 docs(playbook): drop todo/confirm mentions 4a85306 🗑️ remove(workflow): drop todo/confirm artifacts 9c5ee9f 🎨 style(markdown): format docs with prettier 5a2925f 🐛 fix(scripts): repair windows script parsing 26a35e0 ✅ test(ci): update required skills list 8df3883 🐛 fix(test): skip external root doc links b067fc1 📦 deps(skills): sync superpowers c03cda0 🔧 chore(ci): sync from origin main 55e05cb 🔧 chore(ci): use superpowers sync script 73c97f3 🔧 chore(ci): centralize superpowers sync 945704f 🔧 chore(ci): add superpowers sync workflow e5d2c93 🗑️ remove(skills): drop duplicate workflows 3ae9708 🐛 fix(ci): update tests for flag-only scripts c44b9aa 🔧 chore(scripts): require flag-driven args e4e1d14 🔧 chore(scripts): unify single-dash options b2eb475 ✅ test(templates): add template coverage fc230b7 🎨 style(markdown): format markdown files 8dc8924 🔧 chore(markdown): add prettier config and usage 2045dd4 ✨ feat(vendor_playbook): add apply-templates option 872d8cf ✨ feat(templates): add sync templates scaffolding 5b1ca45 📝 docs(skills): clarify todo-plan template 054967a ✨ feat(skills): add todo-plan skill cc340f1 🔧 chore(ci): align standards-check workflow template e9de0aa 🔧 chore(ci): drop removed skill check e5dd7d9 🔧 fix(sync): avoid backtick expansion 087b0b9 🔧 chore(sync): align agents block across ps1/bat 9481510 🔧 chore(sync): scope agents block to existing langs b0ca842 🔧 fix(sync): rewrite docs path in agents c98d65c 🔧 chore(sync): rewrite agents docs paths c33611c 🗑️ remove(skills): drop unused skills and update references 2b37860 🎨 style(markdown): format markdown files e3ecd26 📝 docs(tsl): align syntax annotations and examples 37546fe 🐛 fix(playbook): enforce rulesets to agents flow f2df89d 🐛 fix(scripts): include language list in AGENTS.md c0d0737 🐛 fix(playbook): add agents mirror for sync 3b8b99b 🎨 style(markdown): normalize md headings and lists 31f3000 ♻️ refactor(playbook): rename agents template directory to rulesets 11b2bed ✨ feat(markdown): add ruleset and sync support 5b89580 ✅ test(scripts): quiet git init warnings 5822a87 ♻️ refactor(playbook): streamline agents and refresh tsl docs git-subtree-dir: docs/standards/playbook git-subtree-split: a85453439f65b0c0aa05a5bbece773a02216ce76
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
# 天软 pyTSL 接口使用说明
|
||||
|
||||
## 定位
|
||||
|
||||
- 官方 Python SDK,面向取数/执行/批量/异步与数据转换。
|
||||
|
||||
## 结构索引
|
||||
|
||||
- 安装与配置
|
||||
- pyTSL 接口说明(Client / AsyncClient / async_util / Batch / Task / Const / TSResultValue)
|
||||
- pyTSLPy 兼容说明
|
||||
- 示例与数据类型转换
|
||||
- 附录与常见问题
|
||||
|
||||
## 安装方式(摘要)
|
||||
|
||||
- `pip install tspytsl`(在线安装)
|
||||
- 离线安装与手动部署
|
||||
|
||||
## 核心类与模块
|
||||
|
||||
- `pyTSL.Client`:同步客户端
|
||||
- `pyTSL.AsyncClient`:异步客户端
|
||||
- `pyTSL.async_util`:异步工具函数
|
||||
- `TSBatch` / `Task`:批量与任务
|
||||
- `TSResultValue`:统一返回结果封装
|
||||
- `pyTSL.Const`:常量与字段
|
||||
|
||||
## 关键方法(常用)
|
||||
|
||||
- `login` / `logout`
|
||||
- `exec` / `call` / `query`
|
||||
- `download_list` / `download` / `upload` / `remove`
|
||||
- `DatetimeToDouble` / `DoubleToDatetime`
|
||||
- `EncodeStream` / `DecodeStream`
|
||||
- `DataFrameToTSArray`
|
||||
|
||||
## 示例(Python)
|
||||
|
||||
```python
|
||||
import pyTSL
|
||||
|
||||
c = pyTSL.Client("user", "password")
|
||||
c.login()
|
||||
|
||||
result = c.query("select close from market where stock = 'SZ000001' end")
|
||||
print(result.dataframe())
|
||||
|
||||
c.logout()
|
||||
```
|
||||
@@ -0,0 +1,66 @@
|
||||
# 策略回测框架 TSBackTesting
|
||||
|
||||
## 定位
|
||||
|
||||
- 提供统一的策略回测框架(股票/期货/期权/组合等),覆盖资金、交易约束、清算与绩效输出。
|
||||
|
||||
## 结构索引
|
||||
|
||||
- 策略回测流程
|
||||
- 成员变量
|
||||
- 成员方法
|
||||
- 查询用接口
|
||||
- 回测范例
|
||||
- 债券品种回测说明
|
||||
- 期权组合策略回测说明
|
||||
- 常见问题
|
||||
|
||||
## 回测流程概览
|
||||
|
||||
- 组合类型选择 → 交易数据准备 → 回测执行 → 结果查询与分析。
|
||||
|
||||
## 组合类型
|
||||
|
||||
- 比例类组合:提供目标权重。
|
||||
- 数量类组合:提供成交量/成交价等交易明细。
|
||||
|
||||
## 关键成员变量(分组摘要)
|
||||
|
||||
- **时间与周期**:`FBegT`、`FEndT`、`FCycle`
|
||||
- **组合类型**:`FGroupType`(比例类/数量类)
|
||||
- **资金与价格**:`FIniCash`、`FPriceType`、`FPriceType1..4`
|
||||
- **交易约束**:`FNoZT`、`FNoDT`、`FMinVol`、`FMinAmount`、`FMaxVolPercent`、`FMaxAmountPercent`
|
||||
- **费用与分红**:`FFeeType`、`FlowestFeeType`、`FDividendType`
|
||||
- **期权与期货特性**:`FOptionRs`、`FMainFutureMap`
|
||||
- **基准与输出**:`FBMType`、`FBMDetail`、`FBMOption`、`FHFDataOutPut`
|
||||
|
||||
> 详细取值及说明以实际接口定义为准。
|
||||
|
||||
## 关键成员方法(常用)
|
||||
|
||||
- `BackTest`:执行回测
|
||||
- `GetTimeSeries`:返回净值/收益率时间序列
|
||||
- `GetTradeOrder`:返回调仓/成交数据
|
||||
- `GetNetAssetValue` / `GetAssetData` / `GetHoldData`:资产与持仓
|
||||
- `GetPercent`、`GetIRRReturn`、`ReturnBenchmark`:绩效指标
|
||||
- `GetClearancePrice` / `GetIntVol` / `GetOtherData`:扩展查询
|
||||
|
||||
## 最小流程示例(概念化)
|
||||
|
||||
```tsl
|
||||
// 1) 初始化参数
|
||||
backtest := new TSBackTesting();
|
||||
backtest.FBegT := 20240101T;
|
||||
backtest.FEndT := 20241231T;
|
||||
backtest.FGroupType := 1; // 比例类
|
||||
backtest.FIniCash := 1000000;
|
||||
|
||||
// 2) 设置交易数据(比例类:目标持仓)
|
||||
// backtest.SetTradeData(trade_data);
|
||||
|
||||
// 3) 执行回测
|
||||
backtest.BackTest();
|
||||
|
||||
// 4) 获取结果
|
||||
return backtest.GetTimeSeries();
|
||||
```
|
||||
@@ -0,0 +1,46 @@
|
||||
# 天软平台和 Python 的交互
|
||||
|
||||
## 摘要
|
||||
|
||||
- 覆盖三类交互:Python 调用 TSL、TSL 调用 Python、落地服务器开启 Python 服务。
|
||||
- 提供 COM/远程登录两种路径,以及 `PyRun`/`PyCall` 体系。
|
||||
|
||||
## 结构索引
|
||||
|
||||
- 支持版本
|
||||
- Python 调用 TSL:配置步骤 / 接口说明 / 范例
|
||||
- TSL 调用 Python:配置步骤 / 接口说明 / 范例
|
||||
- do Python 方式
|
||||
- 落地服务器开启 Python 服务
|
||||
- sklearn 机器学习接口
|
||||
- 附录与 FAQ
|
||||
|
||||
## Python 调用 TSL(核心步骤)
|
||||
|
||||
1. 配置环境变量(天软目录、Python 目录)。
|
||||
2. 加载 TSLPy 模块(直接加载或修改包名)。
|
||||
3. 选择连接方式(COM / 远程登录)。
|
||||
|
||||
## 主要接口(Python 侧)
|
||||
|
||||
- 服务器:`ConnectServer` / `LoginServer` / `Disconnect`
|
||||
- 执行:`RemoteExecute` / `RemoteCallFunc`
|
||||
- 系统参数:`SetSysParam` / `GetSysParam`
|
||||
- 日期转换:`EncodeDate` / `DecodeDate` / `EncodeDateTime` / `DecodeDateTime`
|
||||
|
||||
## TSL 调用 Python(核心接口)
|
||||
|
||||
- `PyPutVar` / `PyGetVar`
|
||||
- `PyRun`(执行脚本)
|
||||
- `PyCall`(调用 Python 函数,支持命名参数)
|
||||
- `PyError` / `PyRelease` / `PyEnsure`
|
||||
|
||||
## do Python 方式
|
||||
|
||||
- 适合快速执行 Python 脚本,省去显式接口调用。
|
||||
|
||||
## 注意事项(精简)
|
||||
|
||||
- Python 与 TSL 位数必须一致。
|
||||
- 多版本 Python 需同步设置 `PYTHONHOME`。
|
||||
- TSL 调 Python 不支持网格调用。
|
||||
@@ -0,0 +1,60 @@
|
||||
# 发送微信消息使用说明
|
||||
|
||||
## 摘要
|
||||
|
||||
- 通过“天软科技服务号”向微信客户端发送模板消息。
|
||||
- 支持同步/异步发送,异步可用消息 ID 查询状态。
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 用户关注并绑定天软科技服务号,获得 `userid`。
|
||||
- 给他人发送消息需对方授权其 `userid`。
|
||||
|
||||
## 核心接口
|
||||
|
||||
- `send_wechat_message(userid, url, title, first, remark[, k1..k6])`
|
||||
- 同步发送;成功返回 `success`,否则返回错误信息。
|
||||
- `send_wechat_message_async(userid, url, title, first, remark[, k1..k6])`
|
||||
- 异步发送;返回 16 位消息 ID(时间戳 + 随机数)。
|
||||
- `get_wechat_message_status(userid, username, wechat_message_id)`
|
||||
- 查询异步发送结果;返回 “成功” 或错误信息。
|
||||
|
||||
## 参数说明(模板消息)
|
||||
|
||||
- `userid`:绑定账户后获取的用户标识(必需)。
|
||||
- `url`:详情地址(必需,可为空字符串)。
|
||||
- `title`:模板消息标题(必需)。
|
||||
- `first`:副标题(一般需要)。
|
||||
- `remark`:备注(一般需要)。
|
||||
- `k1..k6`:模板关键字参数(根据模板类型变化)。常见模板示例:
|
||||
- 监控报告通知:运行状态/时间
|
||||
- 系统运行简报:系统名称/简报内容/发布时间
|
||||
- 告警通知:告警内容/发生时间
|
||||
|
||||
## 同步 vs 异步
|
||||
|
||||
- 同步:阻塞等待结果,适合紧急通知。
|
||||
- 异步:立即返回,适合非紧急通知;用 `get_wechat_message_status` 查询。
|
||||
|
||||
## 示例(TSL)
|
||||
|
||||
```tsl
|
||||
// 定义参数
|
||||
url := "http://tinysoft.com.cn";
|
||||
user_id := "190F1826267E0EB45658FB81836636A7";
|
||||
|
||||
title := "监控报告通知";
|
||||
first := "运行状态";
|
||||
keyword_1 := "运行正常";
|
||||
keyword_2 := "";
|
||||
DateTimeToString(keyword_2, "YYYY-MM-DD HH:NN:SS", Now());
|
||||
remark := "如有疑问请与技术人员联系!";
|
||||
|
||||
// 同步发送
|
||||
echo send_wechat_message(user_id, url, title, first, remark, keyword_1, keyword_2);
|
||||
|
||||
// 异步发送
|
||||
wechat_message_id := send_wechat_message_async(user_id, url, title, first, remark, keyword_1, keyword_2);
|
||||
// 获取结果
|
||||
echo get_wechat_message_status(user_id, "username", wechat_message_id);
|
||||
```
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,14 +7,11 @@
|
||||
- [02 控制流与异常](#02-控制流与异常)
|
||||
- [目录](#目录)
|
||||
- [流程控制语句](#流程控制语句)
|
||||
- [内容](#内容)
|
||||
- [条件语句](#条件语句)
|
||||
- [内容](#内容-1)
|
||||
- [IF](#if)
|
||||
- [IF 表达式](#if-表达式)
|
||||
- [CASE](#case)
|
||||
- [循环语句](#循环语句)
|
||||
- [内容](#内容-2)
|
||||
- [WHILE](#while)
|
||||
- [REPEAT](#repeat)
|
||||
- [FOR](#for)
|
||||
@@ -22,7 +19,6 @@
|
||||
- [CONTINUE](#continue)
|
||||
- [GOTO](#goto)
|
||||
- [错误控制,以及调试语句](#错误控制以及调试语句)
|
||||
- [内容](#内容-3)
|
||||
- [异常处理 Try Except/Finally](#异常处理-try-exceptfinally)
|
||||
- [ExceptObject 异常对象](#exceptobject-异常对象)
|
||||
- [RAISE](#raise)
|
||||
@@ -35,34 +31,17 @@
|
||||
|
||||
## 流程控制语句
|
||||
|
||||
### 内容
|
||||
|
||||
- 条件语句
|
||||
- 循环语句
|
||||
- GOTO
|
||||
- 错误控制,以及调试语句
|
||||
- 函数的返回和退出
|
||||
|
||||
### 条件语句
|
||||
|
||||
#### 内容
|
||||
|
||||
- IF
|
||||
- IF 表达式
|
||||
- CASE
|
||||
|
||||
#### IF
|
||||
|
||||
IF 语句是由一个布尔表达式和两个供选择的操作序列组成。运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。有两种形式的 IF 语句:
|
||||
if 语句是由一个布尔表达式和两个供选择的操作序列组成。运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。有两种形式的 if 语句:
|
||||
|
||||
```text
|
||||
If <布尔表达式> then <语句>;
|
||||
```
|
||||
```tsl
|
||||
if <布尔表达式> then <语句> ;
|
||||
|
||||
```text
|
||||
If <布尔表达式> then <语句1>
|
||||
|
||||
else <语句2>;
|
||||
if <布尔表达式> then <语句1>
|
||||
else <语句2> ;
|
||||
```
|
||||
|
||||
当布尔表达式的值为真,执行 then 后面的语句;当值为假时则有两种情况:要么什么也不做,要么执行 else 后面的语句。
|
||||
@@ -72,47 +51,34 @@ else <语句2>;
|
||||
else 前面没有分号,因为分号是两个语句之间的分隔符,而 else 并非语句。如果在该处添了分号,则远程服务器在编译的时候就会认为 if 语句到此结束,而把 else 当作另一句的开头,这样就会输出出错信息。
|
||||
|
||||
语句可以是一条语句或是一组语句,如果是一组语句时,这组语句必须使用 Begin …
|
||||
End 标识符来限定,写成复合语句。在用 if 语句连续嵌套时,如果你插入适量的复合语句,有利于程序的阅读和理解。
|
||||
end 标识符来限定,写成复合语句。在用 if 语句连续嵌套时,如果你插入适量的复合语句,有利于程序的阅读和理解。
|
||||
|
||||
例 2:求 y=f(x),当 x>0 时,y=1,当 x=0 时,y=0,当 x<0 时,y=-1。
|
||||
|
||||
```text
|
||||
Function IfExample();
|
||||
|
||||
Begin
|
||||
|
||||
if x>0 then y:=1
|
||||
|
||||
else if x=0 then y:=0
|
||||
|
||||
else y:=-1;
|
||||
|
||||
return y;
|
||||
|
||||
End;
|
||||
```tsl
|
||||
function IfExample(x);
|
||||
begin
|
||||
if x > 0 then
|
||||
y := 1;
|
||||
else if x = 0 then
|
||||
y := 0;
|
||||
else
|
||||
y := -1;
|
||||
return y;
|
||||
end;
|
||||
```
|
||||
|
||||
例 3:当 x>0 时候,计算 x*x,并且输出 x*x,否则输出 0。
|
||||
|
||||
```text
|
||||
FunctionIfExample2(x);
|
||||
|
||||
begin
|
||||
|
||||
if x>=0 then
|
||||
|
||||
begin
|
||||
|
||||
x1:=x*x;
|
||||
|
||||
return x1;
|
||||
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
return 0;
|
||||
|
||||
```tsl
|
||||
function IfExample2(x);
|
||||
begin
|
||||
if x >= 0 then
|
||||
begin
|
||||
x1 := x * x;
|
||||
return x1;
|
||||
end
|
||||
else return 0;
|
||||
end;
|
||||
```
|
||||
|
||||
@@ -128,9 +94,7 @@ if 表达式:会计算一个结果,这个结果可以赋值给变量、作
|
||||
|
||||
其基本形式通常如下:
|
||||
|
||||
```text
|
||||
if 条件 then 值1 else 值2
|
||||
```
|
||||
|
||||
例如 if a>1 then 2 else 1,如果 a 大于 1,整个表达式的结果就是 2,否则是 1。
|
||||
|
||||
@@ -140,19 +104,17 @@ if 表达式必须存在 else 部分,主要是为了确保表达式始终有
|
||||
|
||||
示例:
|
||||
|
||||
```text
|
||||
ret:=if x>0 then x*x else 0;
|
||||
|
||||
```tsl
|
||||
ret := if x > 0 then x * x else 0;
|
||||
return ret;
|
||||
```
|
||||
|
||||
当 x>0,返回 x\*x;x<=0 时,返回 0。
|
||||
|
||||
//多个分支
|
||||
|
||||
```text
|
||||
ret:=if x>0 then x*x else if x<0 then -(x*x) else 0;
|
||||
多个分支:
|
||||
|
||||
```tsl
|
||||
ret := if x > 0 then x * x else if x < 0 then - (x * x) else 0;
|
||||
return ret;
|
||||
```
|
||||
|
||||
@@ -164,65 +126,49 @@ return ret;
|
||||
|
||||
语法一:普通语法。
|
||||
|
||||
CASE <Expression> OF
|
||||
|
||||
<情况标号表 1>: 语句 1;
|
||||
|
||||
<情况标号表 2>: 语句 2;
|
||||
|
||||
...
|
||||
|
||||
<情况标号表 N>: 语句 N;
|
||||
|
||||
[Else 例外语句;]
|
||||
|
||||
End;
|
||||
```tsl
|
||||
case <Expression> of
|
||||
<情况标号表 1>: 语句 1;
|
||||
<情况标号表 2>: 语句 2;
|
||||
...
|
||||
<情况标号表 N>: 语句 N;
|
||||
[else 例外语句;]
|
||||
end;
|
||||
```
|
||||
|
||||
情况标号表的语法为:
|
||||
|
||||
CASE 区间 1[,CASE 区间 2..CASE 区间 N]
|
||||
|
||||
CASE 区间的语法为:
|
||||
|
||||
区间开始值[TO 区间结束值]
|
||||
```tsl
|
||||
case 区间 1[, case 区间 2 .. case 区间 N]
|
||||
区间开始值 [to 区间结束值]
|
||||
```
|
||||
|
||||
如果没有 TO 语句,则结束值和开始值相同。
|
||||
|
||||
例:
|
||||
|
||||
```text
|
||||
Function CaseExample(Age);
|
||||
|
||||
Begin
|
||||
|
||||
Case Age Of
|
||||
|
||||
0: Writeln("婴儿");
|
||||
|
||||
1 ,2: Writeln("婴幼儿");
|
||||
|
||||
3 TO 6: Writeln("幼儿");
|
||||
|
||||
7 TO 14: Writeln("少年");
|
||||
|
||||
15 TO 17: Writeln("青少年");
|
||||
|
||||
Else
|
||||
|
||||
Writeln("成年");
|
||||
|
||||
End;
|
||||
|
||||
End;
|
||||
```tsl
|
||||
function CaseExample(Age);
|
||||
begin
|
||||
case Age of
|
||||
0: Writeln("婴儿");
|
||||
1, 2: Writeln("婴幼儿");
|
||||
3 to 6: Writeln("幼儿");
|
||||
7 to 14: Writeln("少年");
|
||||
15 to 17: Writeln("青少年");
|
||||
else
|
||||
Writeln("成年");
|
||||
end;
|
||||
end;
|
||||
```
|
||||
|
||||
语法二:支持 Case 表达式,在该种情况下,分支语句不支持语句段,只能是单语句表达式。
|
||||
|
||||
B:= CASE <Expression> OF
|
||||
|
||||
<情况标号表 1>: 表达式 1;
|
||||
|
||||
<情况标号表 2>: 表达式 2;
|
||||
```tsl
|
||||
B := case <Expression> of
|
||||
<情况标号表 1> : 表达式 1;
|
||||
<情况标号表 2> : 表达式 2;
|
||||
```
|
||||
|
||||
…(其它的与普通用法一致)
|
||||
|
||||
@@ -230,82 +176,50 @@ B:= CASE <Expression> OF
|
||||
|
||||
范例一:
|
||||
|
||||
```text
|
||||
a:=3;
|
||||
|
||||
b:=case a of
|
||||
|
||||
1,2:"1/2";
|
||||
|
||||
3,4:"3/4";
|
||||
|
||||
else
|
||||
|
||||
"OTHER";
|
||||
|
||||
```tsl
|
||||
a := 3;
|
||||
b := case a of
|
||||
1, 2: "1/2";
|
||||
3, 4: "3/4";
|
||||
else "OTHER";
|
||||
end;
|
||||
|
||||
return b;
|
||||
```
|
||||
|
||||
//结果:3/4
|
||||
结果:3/4
|
||||
|
||||
范例二:
|
||||
|
||||
```text
|
||||
a:=3;
|
||||
|
||||
b:=case a of
|
||||
|
||||
1,2:echo "1/2";
|
||||
|
||||
3,4:echo "3/4";
|
||||
|
||||
else
|
||||
|
||||
"OTHER";
|
||||
|
||||
```tsl
|
||||
a := 3;
|
||||
b := case a of
|
||||
1, 2: echo "1/2";
|
||||
3, 4: echo "3/4";
|
||||
else "OTHER";
|
||||
end;
|
||||
|
||||
return b;
|
||||
```
|
||||
|
||||
//结果:0。打印窗口:3/4
|
||||
结果:0。打印窗口:3/4
|
||||
|
||||
范例三:表达式的用法
|
||||
|
||||
```text
|
||||
b:=@case a of
|
||||
|
||||
1,2:"1/2";
|
||||
|
||||
3,4:"3/4";
|
||||
|
||||
else
|
||||
|
||||
"OTHER";
|
||||
|
||||
```tsl
|
||||
b := @case a of
|
||||
1, 2: "1/2";
|
||||
3, 4: "3/4";
|
||||
else "OTHER";
|
||||
end;
|
||||
|
||||
a:=2;
|
||||
|
||||
a := 2;
|
||||
return eval(b);
|
||||
```
|
||||
|
||||
//结果:1/2
|
||||
结果:1/2
|
||||
|
||||
### 循环语句
|
||||
|
||||
当需要重复执行一条或是一组语句时,可以使用循环控制语句。TSL 中的循环控制语句有 While 语句和 For 语句。
|
||||
|
||||
#### 内容
|
||||
|
||||
- WHILE
|
||||
- REPEAT
|
||||
- FOR
|
||||
- BREAK
|
||||
- CONTINUE
|
||||
|
||||
#### WHILE
|
||||
|
||||
while 语句用于"当满足某一条件时重复执行语句"的情况。while 语句的语法格式:
|
||||
@@ -317,31 +231,21 @@ while 布尔表达式 do 语句;
|
||||
说明:
|
||||
|
||||
语句可以是一条语句或是一组语句,如果是一组语句时,这组语句必须使用 Begin …
|
||||
End 标识符来限定,写成复合语句。
|
||||
end 标识符来限定,写成复合语句。
|
||||
|
||||
例 4:计算从 0 到某个数之间的和。
|
||||
|
||||
```text
|
||||
Function sums(limit);
|
||||
|
||||
```tsl
|
||||
function sums(limit);
|
||||
begin
|
||||
|
||||
sum:=0;
|
||||
|
||||
num:=0;
|
||||
|
||||
while num<=limit do
|
||||
|
||||
begin
|
||||
|
||||
sum:=sum+num;
|
||||
|
||||
num++;
|
||||
|
||||
end;
|
||||
|
||||
return sum;
|
||||
|
||||
sum := 0;
|
||||
num := 0;
|
||||
while num <= limit do
|
||||
begin
|
||||
sum := sum + num;
|
||||
num++;
|
||||
end;
|
||||
return sum;
|
||||
end;
|
||||
```
|
||||
|
||||
@@ -349,11 +253,9 @@ end;
|
||||
|
||||
repeat 语句用于”重复执行语句直到满足某一条件”的情况。repeat 语句的语法格式:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
repeat
|
||||
|
||||
语句段;
|
||||
|
||||
// 语句段;
|
||||
until 布尔表达式;
|
||||
```
|
||||
|
||||
@@ -366,42 +268,32 @@ repeat 与 while 不同之处有几点:
|
||||
2,repeat 的判断条件是结束条件,而 while 的判定条件是开始做的条件;
|
||||
|
||||
3,repeat 和 util 之间可以有语句段,不需要 begin
|
||||
end 来限定,而 while 由于没有结束的特殊标识符,因此当使用语句段的时候必须用 Begin
|
||||
end 来限定,而 while 由于没有结束的特殊标识符,因此当使用语句段的时候必须用 begin
|
||||
end 来约束。
|
||||
|
||||
例 5:求第一个阶乘超过指定值的值
|
||||
|
||||
```text
|
||||
Function MinMultiValue(limit);
|
||||
|
||||
```tsl
|
||||
function MinMultiValue(limit);
|
||||
begin
|
||||
|
||||
multi:=1;
|
||||
|
||||
value:=1;
|
||||
|
||||
repeat
|
||||
|
||||
multi:=multi*value;
|
||||
|
||||
value++;
|
||||
|
||||
until multi>limit;
|
||||
|
||||
return value;
|
||||
|
||||
multi := 1;
|
||||
value := 1;
|
||||
repeat
|
||||
multi := multi * value;
|
||||
value++;
|
||||
until multi > limit;
|
||||
return value;
|
||||
end;
|
||||
```
|
||||
|
||||
#### FOR
|
||||
|
||||
```tsl
|
||||
for 语句用来描述已知重复次数的循环结构。for 语句有三种形式:
|
||||
|
||||
(1) for 控制变量:=初值 to 终值 [step 步长] do 语句;
|
||||
|
||||
(2) for 控制变量:=初值 downto 终值 [step 步长] do 语句;
|
||||
|
||||
(3) for 控制变量 1,控制变量 2 IN 数组 Do 语句;
|
||||
(1) for 控制变量 := 初值 to 终值 [step 步长] do 语句;
|
||||
(2) for 控制变量 := 初值 downto 终值 [step 步长] do 语句;
|
||||
(3) for 控制变量 1,控制变量 2 in 数组 do 语句;
|
||||
```
|
||||
|
||||
第一种形式的 for 语句是递增循环。
|
||||
|
||||
@@ -419,37 +311,23 @@ for 语句用来描述已知重复次数的循环结构。for 语句有三种形
|
||||
|
||||
例如:计算 1+2+3+……+99+100 的值
|
||||
|
||||
```text
|
||||
Function PlusFor();
|
||||
|
||||
```tsl
|
||||
function PlusFor();
|
||||
begin
|
||||
|
||||
sum:=0;
|
||||
|
||||
for i:=1 to 100 do //缺省步长,默认步长为1
|
||||
|
||||
sum:=sum+i;
|
||||
|
||||
return sum;
|
||||
|
||||
sum := 0;
|
||||
for i := 1 to 100 do sum := sum + i; // 缺省步长,默认步长为 1
|
||||
return sum;
|
||||
end;
|
||||
```
|
||||
|
||||
例如:计算 1+3+5+……+99 的值
|
||||
|
||||
```text
|
||||
Function PlusFor2();
|
||||
|
||||
```tsl
|
||||
function PlusFor2();
|
||||
begin
|
||||
|
||||
sum:=0;
|
||||
|
||||
for i:=1 to 100 step 2 do
|
||||
|
||||
sum:=sum+i;
|
||||
|
||||
return sum;
|
||||
|
||||
sum := 0;
|
||||
for i := 1 to 100 step 2 do sum := sum + i;
|
||||
return sum;
|
||||
end;
|
||||
```
|
||||
|
||||
@@ -457,7 +335,7 @@ end;
|
||||
|
||||
对数组中的每一行(第一维)进行遍历,当前行的下标存放在第一个控制变量中,该行对应的值存放在第二个控制变量中。从第一行开始,将行标与当前行的值分别赋值给控制变量 1 与控制变量 2 后,执行循环体,在执行了循环体之后,自动将 2 个控制变量的值赋值为下一行的下标及该行值,当遍历完最后一行之后,退出 for 循环,执行 for 语句之后的语句。
|
||||
|
||||
For … IN 遍历的用法说明
|
||||
for … in 遍历的用法说明
|
||||
|
||||
语法:For i,v IN TArray DO 语句;说明:对数据的遍历。
|
||||
|
||||
@@ -473,42 +351,28 @@ TArray:需要被遍历的数组。
|
||||
|
||||
范例一:一维数组的应用
|
||||
|
||||
```text
|
||||
data:=array('a':1,'b':5,'c':3,'d':-2);
|
||||
|
||||
s:=0;
|
||||
|
||||
for i,v in data do
|
||||
|
||||
s+=v;
|
||||
|
||||
```tsl
|
||||
data := array('a': 1, 'b': 5, 'c': 3, 'd': -2);
|
||||
s := 0;
|
||||
for i, v in data do s += v;
|
||||
return s;
|
||||
|
||||
//返回实数7
|
||||
```
|
||||
|
||||
返回:7
|
||||
|
||||
范例二:二维数组的应用
|
||||
|
||||
```text
|
||||
data:=rand(array('a','b','c'),array('AA','BB','CC','DD'));
|
||||
|
||||
s:=0;
|
||||
|
||||
t:=1;
|
||||
|
||||
for i,v in data do //data是二维数组,所以第一维中,v的值是一个一维数组,即当前行。
|
||||
|
||||
for j,v1 in v do
|
||||
|
||||
begin
|
||||
|
||||
s+=v1;
|
||||
|
||||
t*=v1;
|
||||
|
||||
end
|
||||
|
||||
return array(s,t);
|
||||
```tsl
|
||||
data := rand(array('a', 'b', 'c'), array('AA', 'BB', 'CC', 'DD'));
|
||||
s := 0;
|
||||
t := 1;
|
||||
for i, v in data do // data 是二维数组,所以第一维中 v 的值是当前行的一维数组
|
||||
for j, v1 in v do
|
||||
begin
|
||||
s += v1;
|
||||
t *= v1;
|
||||
end;
|
||||
return array(s, t);
|
||||
```
|
||||
|
||||
返回:array(12,1)
|
||||
@@ -516,63 +380,43 @@ return array(s,t);
|
||||
#### BREAK
|
||||
|
||||
在执行 WHILE 和 FOR 以及 REPEAT
|
||||
UNTIL 循环语句时,可以用 BREAK 语句随时从当前循环的语句段中跳出来,并继续执行循环语句后面的语句。
|
||||
until 循环语句时,可以用 break 语句随时从当前循环的语句段中跳出来,并继续执行循环语句后面的语句。
|
||||
|
||||
注意:Break 语句只是从当前的语句循环中跳出来,如果要从多个嵌套的循环语句中跳出,则需要通过多个对应的 Break 语句来完成。
|
||||
|
||||
例 7:我们用 While 语句和 Break 语句重新来例 5 中的 1+2+3+……+99+100 值
|
||||
|
||||
```text
|
||||
Function PlusWhile();
|
||||
|
||||
```tsl
|
||||
function PlusWhile();
|
||||
begin
|
||||
|
||||
sum:=0;
|
||||
|
||||
i:=0;
|
||||
|
||||
while True do
|
||||
|
||||
begin
|
||||
|
||||
i++;
|
||||
|
||||
if i>100 then
|
||||
|
||||
|
||||
break;
|
||||
|
||||
|
||||
sum:=sum+i;
|
||||
|
||||
end;
|
||||
|
||||
return sum; //BREAK后执行的第一行语句。
|
||||
|
||||
sum := 0;
|
||||
i := 0;
|
||||
while true do
|
||||
begin
|
||||
i++;
|
||||
if i > 100 then break;
|
||||
sum := sum + i;
|
||||
end;
|
||||
return sum; // break 后执行的第一行语句
|
||||
end;
|
||||
```
|
||||
|
||||
#### CONTINUE
|
||||
|
||||
CONTINUE 语句和 BREAK 语句一样,都可以改变 WHILE 循环语句和 FOR 循环语句以及 REPEAT
|
||||
UNTIL 的执行顺序。
|
||||
until 的执行顺序。
|
||||
|
||||
BREAK 是强制地从一个循环语句中跳出来,提前结束循环,而 CONTINUE 语句则强制地结束当前循环开始进入下一次循环。
|
||||
|
||||
如:
|
||||
|
||||
```text
|
||||
While true do
|
||||
|
||||
Begin
|
||||
|
||||
i++;
|
||||
|
||||
if i=100 then continue;//跳过100
|
||||
|
||||
if i>=1000 then break; //到1000结束
|
||||
|
||||
End;
|
||||
```tsl
|
||||
while true do
|
||||
begin
|
||||
i++;
|
||||
if i = 100 then continue; // 跳过 100
|
||||
if i >= 1000 then break; // 到 1000 结束
|
||||
end;
|
||||
```
|
||||
|
||||
### GOTO
|
||||
@@ -581,103 +425,63 @@ End;
|
||||
|
||||
一个 GOTO 的案例:
|
||||
|
||||
```text
|
||||
for i := 0 to length(data) -1 do
|
||||
|
||||
begin
|
||||
|
||||
for j := 0 to length(data[i])-1 do
|
||||
|
||||
begin
|
||||
|
||||
if data[i][j] = target then
|
||||
|
||||
begin
|
||||
|
||||
|
||||
goto finded;
|
||||
|
||||
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
```tsl
|
||||
for i := 0 to length(data) - 1 do
|
||||
begin
|
||||
for j := 0 to length(data[i]) - 1 do
|
||||
begin
|
||||
if data[i][j] = target then
|
||||
begin
|
||||
goto finded;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
label finded;
|
||||
|
||||
|
||||
//在一个二维数组中查找只要查找到则结束
|
||||
// 在二维数组中查找,找到即结束
|
||||
```
|
||||
|
||||
GOTO 有一个特性,就是只能从内层往外层跳转(且不能跨越函数)
|
||||
goto 有一个特性,就是只能从内层往外层跳转(且不能跨越函数)
|
||||
|
||||
### 错误控制,以及调试语句
|
||||
|
||||
#### 内容
|
||||
|
||||
- 异常处理 Try Except/Finally
|
||||
- ExceptObject 异常对象
|
||||
- RAISE
|
||||
- DEBUGRETURN
|
||||
- DebugRunEnv 与 DebugRunEnvDo
|
||||
- MTIC,MTOC 计算运算时间
|
||||
- SetProfiler,GetProfilerInfo 优化信息
|
||||
- 调用信息与代码行号
|
||||
|
||||
#### 异常处理 Try Except/Finally
|
||||
|
||||
某些函数在执行的过程中可能会自动抛出异常,或者被手动 Raise 抛出异常,这个时候如果没有异常处理运行就会终止。
|
||||
|
||||
使用异常处理则可以保护程序继续执行,并可以对异常进行相应的处理。异常的信息可以由 ExceptObject 对象获得,异常处理使用如下模式:
|
||||
|
||||
```text
|
||||
Try
|
||||
|
||||
被保护的程序执行段
|
||||
|
||||
Except
|
||||
|
||||
异常处理程序段
|
||||
|
||||
End;
|
||||
```tsl
|
||||
try
|
||||
// 被保护的程序执行段
|
||||
except
|
||||
// 异常处理程序段
|
||||
end;
|
||||
```
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
Try
|
||||
|
||||
I:=StrToInt(S); //当S不能转换为整数的时候会产生异常。
|
||||
|
||||
Except
|
||||
|
||||
I:=0; //当发生异常的时候设置I为0;
|
||||
|
||||
Writeln(ExceptObject.ErrInfo);
|
||||
|
||||
End;
|
||||
```tsl
|
||||
try
|
||||
I := StrToInt(S); // 当 S 不能转换为整数时会产生异常
|
||||
except
|
||||
I := 0; // 当发生异常时设置 I 为 0
|
||||
Writeln(ExceptObject.ErrInfo);
|
||||
end;
|
||||
```
|
||||
|
||||
对于某个程序段可能出现中途返回或者退出,或者中途被异常中断,而某些代码必需要在其后执行的,则采用如下模式:
|
||||
|
||||
```text
|
||||
Try
|
||||
|
||||
被保护的程序执行段
|
||||
|
||||
Finally
|
||||
|
||||
|
||||
保证执行的处理程序段,即便Try Finally之间的语句有返回或者异常产生。
|
||||
|
||||
End;
|
||||
```tsl
|
||||
try
|
||||
// 被保护的程序执行段
|
||||
finally
|
||||
// 保证执行的处理程序段,即便Try Finally之间的语句有返回或者异常产生。
|
||||
end;
|
||||
```
|
||||
|
||||
注:try...Except...end 可以使程序在报错时继续向下运行,即主程序不终止。
|
||||
|
||||
try...Finally...end 则是该报错时就会报错,即发生错误时程序会报错且终止,只是在中断前会执行完 Finally 中的命令行。
|
||||
try...finally...end 则是该报错时就会报错,即发生错误时程序会报错且终止,只是在中断前会执行完 finally 中的命令行。
|
||||
|
||||
#### ExceptObject 异常对象
|
||||
|
||||
@@ -693,19 +497,13 @@ ExceptObject. ErrNo 错误号
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
a:=100;
|
||||
|
||||
```tsl
|
||||
a := 100;
|
||||
try
|
||||
|
||||
a:=1+'a';
|
||||
|
||||
a := 1 + 'a';
|
||||
except
|
||||
|
||||
echo ExceptObject.ErrInfo;
|
||||
|
||||
echo ExceptObject.ErrInfo;
|
||||
end;
|
||||
|
||||
return a;
|
||||
```
|
||||
|
||||
@@ -720,10 +518,9 @@ type error
|
||||
|
||||
如:
|
||||
|
||||
```text
|
||||
A:=-1;
|
||||
|
||||
If a<0 then raise “a不能小于0”;
|
||||
```tsl
|
||||
A := -1;
|
||||
if a < 0 then raise “a不能小于0”;
|
||||
```
|
||||
|
||||
运行时报错如:
|
||||
@@ -734,21 +531,14 @@ If a<0 then raise “a不能小于0”;
|
||||
|
||||
如下面示例,返回为 3 而不是 4:
|
||||
|
||||
```text
|
||||
A:=abcd(3);
|
||||
|
||||
Return A+1;
|
||||
|
||||
|
||||
Function abcd(bb);
|
||||
|
||||
Begin
|
||||
|
||||
|
||||
debugreturn
|
||||
bb;
|
||||
|
||||
End;
|
||||
```tsl
|
||||
A := abcd(3);
|
||||
return A + 1;
|
||||
function abcd(bb);
|
||||
begin
|
||||
debugreturn
|
||||
bb;
|
||||
end;
|
||||
```
|
||||
|
||||
#### DebugRunEnv 与 DebugRunEnvDo
|
||||
@@ -769,17 +559,12 @@ DebugRunEnvDo FunctionXX(….)
|
||||
|
||||
一般使用:以上代码可以计算所耗费的秒数
|
||||
|
||||
```text
|
||||
```tsl
|
||||
MTIC
|
||||
;
|
||||
|
||||
A:=0;
|
||||
|
||||
For i:=0 to 99999 do
|
||||
|
||||
 A++;
|
||||
|
||||
Return
|
||||
A := 0;
|
||||
for i := 0 to 99999 do  A++;
|
||||
return
|
||||
MTOC
|
||||
;
|
||||
```
|
||||
@@ -788,32 +573,20 @@ MTOC
|
||||
|
||||
默认 MTOC 和上次 MTIC 匹配,但是也可以指定某个 MTIC 的返回来计算时间
|
||||
|
||||
```text
|
||||
T1:=
|
||||
```tsl
|
||||
T1 :=
|
||||
MTIC
|
||||
;
|
||||
|
||||
For i:=0 to 9999 do
|
||||
|
||||
A++;
|
||||
|
||||
TE1:=
|
||||
for i := 0 to 9999 do A++;
|
||||
TE1 :=
|
||||
MTOC(T1)
|
||||
;
|
||||
|
||||
|
||||
MTIC;
|
||||
|
||||
|
||||
For j:=0 to 9999 do
|
||||
|
||||
A++;
|
||||
|
||||
TE2:=
|
||||
for j := 0 to 9999 do A++;
|
||||
TE2 :=
|
||||
MTOC(T1)
|
||||
;
|
||||
|
||||
Return array(TE1,TE2,
|
||||
return array(TE1, TE2,
|
||||
MTOC
|
||||
);
|
||||
```
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1864
-4446
File diff suppressed because it is too large
Load Diff
+1931
-3766
File diff suppressed because it is too large
Load Diff
@@ -5,46 +5,33 @@
|
||||
## 目录
|
||||
|
||||
- [#网格计算操作符](#网格计算操作符)
|
||||
- [内容](#内容)
|
||||
- [#网格计算操作符简介](#网格计算操作符简介)
|
||||
- [网格计算案例](#网格计算案例)
|
||||
- [网格计算代入系统参数的案例](#网格计算代入系统参数的案例)
|
||||
- [网格计算设置任务超时时间](#网格计算设置任务超时时间)
|
||||
- [TSL 全局缓存的应用说明](#tsl全局缓存的应用说明)
|
||||
- [内容](#内容-1)
|
||||
- [TSL 全局缓存的应用说明](#tsl-全局缓存的应用说明)
|
||||
- [全局缓存管理](#全局缓存管理)
|
||||
- [内容](#内容-2)
|
||||
- [全局缓存管理的函数](#全局缓存管理的函数)
|
||||
- [全局缓存的使用](#全局缓存的使用)
|
||||
- [全局缓存的过期与回收策略](#全局缓存的过期与回收策略)
|
||||
- [全局缓存管理的初始化和监控](#全局缓存管理的初始化和监控)
|
||||
- [未升级的系统对新代码的使用](#未升级的系统对新代码的使用)
|
||||
- [初始化 TSL 和监控管理的 TSL](#初始化tsl和监控管理的tsl)
|
||||
- [内容](#内容-3)
|
||||
- [初始化 TSL 和监控管理的 TSL](#初始化-tsl-和监控管理的-tsl)
|
||||
- [功能设计](#功能设计)
|
||||
|
||||
## #网格计算操作符
|
||||
|
||||
### 内容
|
||||
|
||||
- #网格计算操作符简介
|
||||
- 网格计算案例
|
||||
- 网格计算代入系统参数的案例
|
||||
- 网格计算设置任务超时时间
|
||||
|
||||
### #网格计算操作符简介
|
||||
|
||||
什么是网格计算?
|
||||
|
||||
随着计算技术的发展,计算机已经得到了大规模普及,计算资源随处可见。另一方面,随着 CPU 制程技术提高的门槛越来越高,制造工艺成为了单一 CPU 内核计算性能提升的瓶颈。CPU 的主流发展从主频的提高逐步向多核迈进,而在应用层面上,以往单服务器计算逐渐被集群式计算所代替。在处理数据规模越来越大,计算模型越来越复杂的趋势下,传统单任务串行计算越来越成为了技术瓶颈,对于多 CPU 多内核以及多服务器群而言,成为了计算资源的巨大浪费,这个时候,对并行计算的研究成为了未来发展的主流,而网格计算则成为了并行计算研究中的热点。
|
||||
|
||||
并行计算在超算中心的大型主机应用中被广泛应用,依靠硬件技术,成千上万台主机被联接成为一个大型主机,这样使得在其上的开发对于用户而言,后台成千上万的主机只是一台拥有成千上万个计算核心的计算,用户不用关注数据的同步,用户也不用关注计算将派发到哪里。但是超算中心的建设和使用成本都非常巨大,而且还受到超算中心的数据管理麻烦的制约。
|
||||
|
||||
普通 PC 服务器的 CPU 核心数都非常有限,单机并行计算无法充分利用起计算机资源,这个时候,网格计算就孕育而生了。
|
||||
网格计算用于并行执行函数调用,把任务分发到可用计算资源并异步返回句柄。适用于大量独立任务的批量计算;对强顺序依赖的流程不适用。
|
||||
|
||||
网格使用格式:
|
||||
|
||||
R[i]:=#函数名(参数…) with array(系统参数列表…) timeout N;
|
||||
```tsl
|
||||
R[i] := #函数名(参数…) with array(系统参数列表…) timeout N;
|
||||
```
|
||||
|
||||
其中,with 语句可指定网格运算子程中的系统参数,此输入可省
|
||||
|
||||
@@ -59,45 +46,26 @@ N 为指定网格运算子程序运行的超时时间,若运行超过设定时
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
A:=Array();
|
||||
|
||||
B:=Array('SZ000001','SZ000002','SH600000');
|
||||
|
||||
for i:=0 to length(B)-1 do
|
||||
|
||||
begin
|
||||
|
||||
A[I]:=
|
||||
###
|
||||
CalcStock(B[I]);
|
||||
|
||||
end;
|
||||
|
||||
//--对结果进行访问,用来等待所有网格运行完成,并得到运行结果
|
||||
|
||||
r:=array();
|
||||
|
||||
for j:=0 to length(A)-1 do
|
||||
|
||||
r[j]:=dupvalue(A[j]);//复制网格子程序结果-》即等待网格运行完成
|
||||
|
||||
Return r;
|
||||
```tsl
|
||||
A := array();
|
||||
B := array('SZ000001', 'SZ000002', 'SH600000');
|
||||
for i := 0 to length(B) - 1 do
|
||||
begin
|
||||
A[i] := #CalcStock(B[i]);
|
||||
end;
|
||||
// 对结果进行访问,用来等待所有网格运行完成并取得结果
|
||||
r := array();
|
||||
for j := 0 to length(A) - 1 do r[j] := dupvalue(A[j]); // 复制网格子程序结果
|
||||
return r;
|
||||
```
|
||||
|
||||
//---需要被网格调用的函数 CalcStock
|
||||
需要被网格调用的函数 `CalcStock`:
|
||||
|
||||
```text
|
||||
Function CalcStock(StockId);
|
||||
|
||||
|
||||
Begin
|
||||
|
||||
|
||||
//…………………
|
||||
|
||||
|
||||
End;
|
||||
```tsl
|
||||
function CalcStock(StockId);
|
||||
begin
|
||||
// ...
|
||||
end;
|
||||
```
|
||||
|
||||
### 网格计算代入系统参数的案例
|
||||
@@ -106,12 +74,11 @@ CalcStock(B[I]);
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
A[i]:=#Close()
|
||||
with Array(pn_Stock():StockId,pn_Date():ToDay()-1)
|
||||
```tsl
|
||||
A[i] := #Close() with array(pn_stock():StockId, pn_date():Today() - 1);
|
||||
```
|
||||
|
||||
就可以获得指定的股票昨天的收盘价,\*实际中我们不会用网格计算去调用收盘价函数,因为网格存在开销那样的效率会更低,这只是一个例子。
|
||||
就可以获得指定股票昨日的收盘价。实际使用时不建议用网格计算调用收盘价函数,这里仅作示例。
|
||||
|
||||
### 网格计算设置任务超时时间
|
||||
|
||||
@@ -120,47 +87,34 @@ N 对该子进程进行设置超时时间,若网格运行的程序运行时间
|
||||
|
||||
如有网格运行目标程序:
|
||||
|
||||
```text
|
||||
Function testdo();
|
||||
|
||||
```tsl
|
||||
function TestDo();
|
||||
begin
|
||||
|
||||
sleep(10*1000);
|
||||
|
||||
return getsysparam(pn_stock());
|
||||
|
||||
sleep(10 * 1000);
|
||||
return getsysparam(pn_stock());
|
||||
end;
|
||||
```
|
||||
|
||||
在网格中设置超时间为 3 秒,调用如下:
|
||||
|
||||
```text
|
||||
r:=# testDo() timeout 3000;
|
||||
|
||||
t:=dupvalue(r);
|
||||
|
||||
return t;
|
||||
```tsl
|
||||
r := #TestDo() timeout 3000;
|
||||
t := dupvalue(r);
|
||||
return t;
|
||||
```
|
||||
|
||||
在网格中通过 with 传入系统参数的同时设置超时间为 3 秒,调用如下:
|
||||
|
||||
```text
|
||||
r:=# testDo() with array(pn_stock():"SZ000002") timeout 3000;
|
||||
|
||||
t:=dupvalue(r);
|
||||
|
||||
return t;
|
||||
```tsl
|
||||
r := #TestDo() with array(pn_stock():"SZ000002") timeout 3000;
|
||||
t := dupvalue(r);
|
||||
return t;
|
||||
```
|
||||
|
||||
超时报错 Grid timeout,示例如下:
|
||||
|
||||
## TSL 全局缓存的应用说明
|
||||
|
||||
### 内容
|
||||
|
||||
- 全局缓存管理
|
||||
- 初始化 TSL 和监控管理的 TSL
|
||||
|
||||
### 全局缓存管理
|
||||
|
||||
TSL 设计的全局缓存是一套极为高效的内存缓存机制,其以 COPYONWRITE 的模式实现了设置和写入完全分离,允许存在多份使用中的版本,使得更新数据和读数据无冲突。
|
||||
@@ -175,48 +129,25 @@ TSL 的全局缓存主要应用于数组和矩阵两种类型,也支持其他
|
||||
|
||||
由于我们对 TSL 全局缓存的透明处理,因为普通函数无法分辨全局缓存还是标准数据类型,除非采用特殊的函数。
|
||||
|
||||
#### 内容
|
||||
|
||||
- 全局缓存管理的函数
|
||||
- 全局缓存的使用
|
||||
- 全局缓存的过期与回收策略
|
||||
- 全局缓存管理的初始化和监控
|
||||
- 未升级的系统对新代码的使用
|
||||
|
||||
#### 全局缓存管理的函数
|
||||
|
||||
##### 内容
|
||||
|
||||
- SetGlobalCache
|
||||
- GetGlobalCache
|
||||
- CheckGlobalCacheExpired
|
||||
- GetGlobalCacheInfo
|
||||
- ListGlobalCache
|
||||
- ListGlobalCacheRemoved
|
||||
- IfCache
|
||||
|
||||
##### SetGlobalCache
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
a:=rand(1000,100);
|
||||
|
||||
return SetGlobalCache("LLL",a,now()+1); //设置一个名为”LLL”的全局缓存,生存周期为1天
|
||||
```tsl
|
||||
a := rand(1000, 100);
|
||||
return SetGlobalCache("LLL", a, now() + 1); // 设置一个名为”LLL”的全局缓存,生存周期为1天
|
||||
```
|
||||
|
||||
##### GetGlobalCache
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
mtic;
|
||||
|
||||
for i:=0 to 999999 do
|
||||
|
||||
getglobalCache("LLL",V);
|
||||
|
||||
return array(V,mtoc);
|
||||
for i := 0 to 999999 do getglobalCache("LLL", V);
|
||||
return array(V, mtoc);
|
||||
```
|
||||
|
||||
这个例子告诉我们,对于全局缓存数据,无论全局缓存数据本身多大,例如这个是 1000\*1000 的矩阵,获取 100 万次花费的时间也是微乎其微的。这样我们的数据准备工作所耗费的时间几乎就不存在了。
|
||||
@@ -225,36 +156,28 @@ mtic;
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Setglobalcache("VVV",rand(1000,100));
|
||||
|
||||
Getglobalcache("VVV",V);
|
||||
|
||||
expired1:=CheckGlobalCacheExpired(V);
|
||||
|
||||
setglobalcache("VVV",rand(1000,100));//重置,V过期
|
||||
|
||||
return array("重置前":expired1,"重置后":CheckGlobalCacheExpired(V));
|
||||
```tsl
|
||||
Setglobalcache("VVV", rand(1000, 100));
|
||||
Getglobalcache("VVV", V);
|
||||
expired1 := CheckGlobalCacheExpired(V);
|
||||
setglobalcache("VVV", rand(1000, 100)); // 重置,V过期
|
||||
return array("重置前":expired1, "重置后":CheckGlobalCacheExpired(V));
|
||||
```
|
||||
|
||||
##### GetGlobalCacheInfo
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
if GetGlobalCache("LLL",V) then
|
||||
|
||||
|
||||
return GetGlobalCacheInfo(V);
|
||||
```tsl
|
||||
if GetGlobalCache("LLL", V) then return GetGlobalCacheInfo(V);
|
||||
```
|
||||
|
||||
##### ListGlobalCache
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
getglobalcache("LLL",v);
|
||||
|
||||
```tsl
|
||||
getglobalcache("LLL", v);
|
||||
return listglobalcache();
|
||||
```
|
||||
|
||||
@@ -266,32 +189,24 @@ Owners 列里是缓存使用中的用户列表
|
||||
|
||||
范例 1:
|
||||
|
||||
```text
|
||||
SetGlobalCache("CCC",array(1,2,3));
|
||||
|
||||
Getglobalcache("CCC",V); //v指向全局缓存
|
||||
|
||||
setglobalcache("CCC",array(1,2,3,4));//v的版本已经过期
|
||||
|
||||
return listglobalcacheremoved();
|
||||
```tsl
|
||||
SetGlobalCache("CCC", array(1, 2, 3));
|
||||
Getglobalcache("CCC", V); // v指向全局缓存
|
||||
setglobalcache("CCC", array(1, 2, 3, 4)); // v的版本已经过期
|
||||
return listglobalcacheremoved();
|
||||
```
|
||||
|
||||
存在一份 CCC 的过期版本。
|
||||
|
||||
范例 2:
|
||||
|
||||
```text
|
||||
SetGlobalCache("CCC",array(1,2,3));
|
||||
|
||||
Getglobalcache("CCC",V); //v指向全局缓存
|
||||
|
||||
setglobalcache("CCC",array(1,2,3,4));//V已经过期
|
||||
|
||||
//return listglobalcacheremoved();
|
||||
|
||||
V:=nil;//V释放了没有过期版本
|
||||
|
||||
return listglobalcacheremoved();
|
||||
```tsl
|
||||
SetGlobalCache("CCC", array(1, 2, 3));
|
||||
Getglobalcache("CCC", V); // v指向全局缓存
|
||||
setglobalcache("CCC", array(1, 2, 3, 4)); // V已经过期
|
||||
// return listglobalcacheremoved();
|
||||
V := nil; // V释放了没有过期版本
|
||||
return listglobalcacheremoved();
|
||||
```
|
||||
|
||||
返回结果:空数组。
|
||||
@@ -300,117 +215,71 @@ SetGlobalCache("CCC",array(1,2,3));
|
||||
|
||||
#### 全局缓存的使用
|
||||
|
||||
##### 内容
|
||||
|
||||
- 全局缓存的基础函数和子矩阵的支持
|
||||
- 全局缓存的算符支持
|
||||
- 支持 SELECT
|
||||
- 写入实例化
|
||||
|
||||
##### 全局缓存的基础函数和子矩阵的支持
|
||||
|
||||
绝大多数的函数已经可以完全支持全局缓存,当成和原始数据类型对待,而子矩阵这类的操作也毫无问题。
|
||||
|
||||
```text
|
||||
a:=array();
|
||||
|
||||
for i:=1 to 9 do
|
||||
|
||||
for j:=1 to 9 do
|
||||
|
||||
a[i-1,j-1]:=i*j;
|
||||
|
||||
setglobalcache("99MT",a);
|
||||
|
||||
Getglobalcache("99MT",V);
|
||||
|
||||
return array(sum(sum(V)),length(V),mcols(V),ifarray(V),V[8,8],V[0:3,0:3]);
|
||||
```tsl
|
||||
a := array();
|
||||
for i := 1 to 9 do for j := 1 to 9 do
|
||||
a[i - 1, j - 1] := i * j;
|
||||
setglobalcache("99MT", a);
|
||||
Getglobalcache("99MT", V);
|
||||
return array(sum(sum(V)), length(V), mcols(V), ifarray(V), V[8, 8], V[0:3, 0:3]);
|
||||
```
|
||||
|
||||
##### 全局缓存的算符支持
|
||||
|
||||
对于四则运算等算符,以及矩阵运算符,还有集合运算符号等等,全局缓存和原始类型一致。
|
||||
|
||||
```text
|
||||
a:=array();
|
||||
|
||||
for i:=1 to 9 do
|
||||
|
||||
for j:=1 to 9 do
|
||||
|
||||
a[i-1,j-1]:=i*j;
|
||||
|
||||
setglobalcache("99MT",a);
|
||||
|
||||
Getglobalcache("99MT",V);
|
||||
|
||||
return V+100;
|
||||
```tsl
|
||||
a := array();
|
||||
for i := 1 to 9 do for j := 1 to 9 do
|
||||
a[i - 1, j - 1] := i * j;
|
||||
setglobalcache("99MT", a);
|
||||
Getglobalcache("99MT", V);
|
||||
return V + 100;
|
||||
```
|
||||
|
||||
##### 支持 SELECT
|
||||
|
||||
对于 SELECT 而言,全局缓存的表现和其原始数据没有任何差异。
|
||||
|
||||
```text
|
||||
a:=array();
|
||||
|
||||
for i:=1 to 9 do
|
||||
|
||||
for j:=1 to 9 do
|
||||
|
||||
a[i-1,j-1]:=i*j;
|
||||
|
||||
setglobalcache("99MT",a);
|
||||
|
||||
Getglobalcache("99MT",V);
|
||||
|
||||
return select * from V order by [0] desc end;
|
||||
```tsl
|
||||
a := array();
|
||||
for i := 1 to 9 do for j := 1 to 9 do
|
||||
a[i - 1, j - 1] := i * j;
|
||||
setglobalcache("99MT", a);
|
||||
Getglobalcache("99MT", V);
|
||||
return select * from V order by [0] desc end;
|
||||
```
|
||||
|
||||
##### 写入实例化
|
||||
|
||||
当对全局缓存进行各式写入操作时,无论是数据设置,还是 UPDATE,INSERT 等 SQL 操作,我们均会将全局缓存实例化,在用户使用的时候和传统数据复制后进行写入操作毫无差异,这样最大化地保证了易用性。
|
||||
|
||||
```text
|
||||
a:=array();
|
||||
|
||||
for i:=1 to 9 do
|
||||
|
||||
for j:=1 to 9 do
|
||||
|
||||
a[i-1,j-1]:=i*j;
|
||||
|
||||
setglobalcache("99MT",a);
|
||||
|
||||
Getglobalcache("99MT",V);
|
||||
|
||||
b:=ifcache(V);//是缓存 ,b为真
|
||||
|
||||
V[0,0]:=100; //设置完成后,ifcache就为假了
|
||||
|
||||
return array(b,ifcache(V),V);
|
||||
```tsl
|
||||
a := array();
|
||||
for i := 1 to 9 do for j := 1 to 9 do
|
||||
a[i - 1, j - 1] := i * j;
|
||||
setglobalcache("99MT", a);
|
||||
Getglobalcache("99MT", V);
|
||||
b := ifcache(V); // 是缓存 ,b为真
|
||||
V[0, 0] := 100; // 设置完成后,ifcache就为假了
|
||||
return array(b, ifcache(V), V);
|
||||
```
|
||||
|
||||
使用 SQL 的 Update 更新全局缓存也引发数据的实例化
|
||||
|
||||
```text
|
||||
a:=array();
|
||||
|
||||
for i:=1 to 9 do
|
||||
|
||||
for j:=1 to 9 do
|
||||
|
||||
a[i-1,j-1]:=i*j;
|
||||
|
||||
setglobalcache("99MT",a);
|
||||
|
||||
Getglobalcache("99MT",V);
|
||||
|
||||
b:=ifcache(V);//是缓存 ,b为真
|
||||
|
||||
update v set [0]=1 end; //update后V也不再是globalcache
|
||||
|
||||
return array(b,ifcache(V),V);
|
||||
```tsl
|
||||
a := array();
|
||||
for i := 1 to 9 do for j := 1 to 9 do
|
||||
a[i - 1, j - 1] := i * j;
|
||||
setglobalcache("99MT", a);
|
||||
Getglobalcache("99MT", V);
|
||||
b := ifcache(V); // 是缓存 ,b为真
|
||||
update v set [0] = 1 end; // update后V也不再是globalcache
|
||||
return array(b, ifcache(V), V);
|
||||
```
|
||||
|
||||
#### 全局缓存的过期与回收策略
|
||||
@@ -423,10 +292,6 @@ TSL 为全局缓存建立了一套回收规则,结合了系统的剩余内存
|
||||
|
||||
一旦遇到这类的问题,用户应该检查模型使用这些全局缓存是否存在问题。由于全局缓存的获取效率以及使用效率均极高,用户不应该将全局缓存放在系统变量,TSL 的 GLOBAL 存贮等等中,用户应尽量直接使用缓存,并审慎长期占用缓存的模式。
|
||||
|
||||
##### 内容
|
||||
|
||||
- 配置
|
||||
|
||||
##### 配置
|
||||
|
||||
配置在 plugin\FileMgr.ini 中
|
||||
@@ -445,14 +310,6 @@ ExpiredLoadLimit=5 //允许过期的全局缓存占用的物理内存百分比
|
||||
|
||||
ExpiredAvailLimit=16777216 //允许过期的全局缓存占用的物理内存大小,单位 KB
|
||||
|
||||
###### 内容
|
||||
|
||||
- MemoryLoadLimit
|
||||
- MemoryAvailLimit
|
||||
- ExpiredSecondsCheck
|
||||
- ExpiredLoadLimit
|
||||
- ExpiredAvailLimit
|
||||
|
||||
###### MemoryLoadLimit
|
||||
|
||||
单位:百分数
|
||||
@@ -485,27 +342,18 @@ ExpiredAvailLimit=16777216 //允许过期的全局缓存占用的物理内存大
|
||||
|
||||
#### 全局缓存管理的初始化和监控
|
||||
|
||||
##### 内容
|
||||
|
||||
- 有瑕疵的全局缓存管理方式
|
||||
- 期望的方式
|
||||
- 不推荐的模式
|
||||
- 全局缓存的初始化
|
||||
- 全局缓存的更新监控
|
||||
|
||||
##### 有瑕疵的全局缓存管理方式
|
||||
|
||||
全局缓存的生成,一种模式是在由应用模型内来设置:
|
||||
|
||||
例如: if not GetGlobalCache(CacheName,V) then
|
||||
|
||||
Begin
|
||||
|
||||
V:=CalcDataCall();
|
||||
|
||||
SetGlobalCache(Cache,V);
|
||||
|
||||
End;
|
||||
```tsl
|
||||
begin
|
||||
V := CalcDataCall();
|
||||
SetGlobalCache(Cache, V);
|
||||
end;
|
||||
```
|
||||
|
||||
但这样存在几个问题:
|
||||
|
||||
@@ -515,15 +363,13 @@ ExpiredAvailLimit=16777216 //允许过期的全局缓存占用的物理内存大
|
||||
|
||||
三是我们很难知道何时适合于进行缓存的准备工作以及缓存的更新工作,因为缓存总有失效的时候,如果要解决失效问题,我们还得将代码变成如下:
|
||||
|
||||
if not GetGlobalCache(CacheName,V) or IsDataNeedReCalc(V) then
|
||||
|
||||
Begin
|
||||
|
||||
V:=CalcDataCall();
|
||||
|
||||
SetGlobalCache(Cache,V);
|
||||
|
||||
End
|
||||
```tsl
|
||||
if not GetGlobalCache(CacheName, V) or IsDataNeedReCalc(V) then
|
||||
begin
|
||||
V := CalcDataCall();
|
||||
SetGlobalCache(Cache, V);
|
||||
end;
|
||||
```
|
||||
|
||||
我们需要在 IsDataNeedReCalc 里来检查诸如外部数据的版本是否发生了变更等工作,往往这种检查对事件的耗费远远大于全局缓存的获取,这样又会影响到用户模型的效率。
|
||||
|
||||
@@ -531,15 +377,17 @@ if not GetGlobalCache(CacheName,V) or IsDataNeedReCalc(V) then
|
||||
|
||||
如果全局缓存的生成和更新,交由系统,那么我们期望的应用开发是如下模式:
|
||||
|
||||
if not GetGlobalCache(CacheName,V) then
|
||||
|
||||
V:=CalcDataCall();
|
||||
```tsl
|
||||
if not GetGlobalCache(CacheName, V) then V := CalcDataCall();
|
||||
```
|
||||
|
||||
由于全局缓存系统管了生成,所以我们只需要取即可,如果系统未生成,我们直接进入计算模式。
|
||||
|
||||
##### 不推荐的模式
|
||||
|
||||
GetGlobalCache(CacheName,V);
|
||||
```tsl
|
||||
GetGlobalCache(CacheName, V);
|
||||
```
|
||||
|
||||
有的开发者会在升级应用后,将取数程序变成了最简单的模式,假设缓存的获得会成功,这样在项目实施中并无不可,假设数据的初始化和数据变更确定性由系统其他部分完成了,这样也带来了数据底层来源和上层应用分离的优势。
|
||||
|
||||
@@ -583,17 +431,8 @@ GetGlobalCache(CacheName,V);
|
||||
|
||||
注:初始化 TSL 只运行一次,而监控的线程不会退出,当 TSL 运行完毕后会重新调用运行。
|
||||
|
||||
#### 内容
|
||||
|
||||
- 功能设计
|
||||
|
||||
#### 功能设计
|
||||
|
||||
##### 内容
|
||||
|
||||
- WEB 模块的初始化和监控
|
||||
- 平台的初始化和监控
|
||||
|
||||
##### WEB 模块的初始化和监控
|
||||
|
||||
Apache 的模块,设置在 TSL.INI 中。
|
||||
@@ -604,11 +443,6 @@ automonthreads=1 //监控线程的个数
|
||||
|
||||
initrun=1 //是否运行初始化 TSL
|
||||
|
||||
###### 内容
|
||||
|
||||
- 初始化
|
||||
- 监控及管理线程
|
||||
|
||||
###### 初始化
|
||||
|
||||
初始化 InitRun.TSL 位于进程或者模块所在目录,进程所在目录优先。
|
||||
@@ -636,13 +470,6 @@ Automonthreads 设置的是启动的监控管理线程的数量。
|
||||
|
||||
监控进程目前并未支持调用网格计算。
|
||||
|
||||
###### 内容
|
||||
|
||||
- 初始化
|
||||
- 监控及管理线程
|
||||
- 平台的初始化和监控 TSL 的管理
|
||||
- 平台的初始化和监控的权限管控
|
||||
|
||||
###### 初始化
|
||||
|
||||
初始化的启动是通过参数-i 来设定的,例如 Exec64.exe -i 则表明需要启动初始化。
|
||||
@@ -672,6 +499,8 @@ Automonthreads 设置的是启动的监控管理线程的数量。
|
||||
|
||||
###### 平台的初始化和监控的权限管控
|
||||
|
||||
如果初始化和监控 TSL 需要调用内外部的 TSL 函数来进行数据准备,设计者推荐用户采用 data:=sudo("modeluser",getcalcdata())的模式来进行数据的一些准备工作,因为 GetCalcData()这类的函数往往不需要任何特殊权限,这样可以最大限度地防止非授权代码的运行。
|
||||
```tsl
|
||||
// 如果初始化和监控 TSL 需要调用内外部的 TSL 函数来进行数据准备,设计者推荐用户采用 data:=sudo("modeluser",getcalcdata())的模式来进行数据的一些准备工作,因为 GetCalcData()这类的函数往往不需要任何特殊权限,这样可以最大限度地防止非授权代码的运行。
|
||||
```
|
||||
|
||||
如果我们仅仅只是利用初始化和监控进行一些系统性操作,设计者强烈建议不需要使用一些中间函数,将除了二进制函数外的实现直接在.TSL 里完成,这样做可以让这些代码可以独立运行。如果无法保障这一点,强烈建议将无需权限运行的内容以 sudo 模式来运行。
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,86 +0,0 @@
|
||||
# TSL 函数大全(已迁移)
|
||||
|
||||
> ⚠️
|
||||
> **本文件已弃用** - 原文件因体积过大(221,389行,4.2MB)影响编辑器性能,已拆分为多个模块化文件。
|
||||
|
||||
## 🚀 请使用新版本
|
||||
|
||||
**新版函数参考入口:** **[function/index.md](./function/index.md)**
|
||||
|
||||
### 快速跳转
|
||||
|
||||
| 你要查找... | 跳转到... |
|
||||
| ------------------------------ | ----------------------------------------------------- |
|
||||
| 数学、字符串、日期等基础函数 | [TSL函数](./function/tsl/index.md) |
|
||||
| 股票、行情、技术分析、财务函数 | [金融函数](./function/financial/index.md) |
|
||||
| 数据查询、时间序列函数 | [数据仓库函数](./function/03_datawarehouse.md) |
|
||||
| 算法交易相关函数 | [算法交易支撑函数](./function/04_algo_trading.md) |
|
||||
| 服务器连接、执行函数 | [服务器交互函数](./function/05_server_interaction.md) |
|
||||
| Excel/Word/PDF处理 | [文档处理函数](./function/06_document_processing.md) |
|
||||
| 其他工具函数 | [函数参考总目录](./function/index.md) |
|
||||
|
||||
## 📊 拆分说明
|
||||
|
||||
原文件已拆分为 **42个独立文件**:
|
||||
|
||||
```
|
||||
function/
|
||||
├── index.md # 总索引(从这里开始)
|
||||
│
|
||||
├── tsl/ # TSL函数(10个文件)
|
||||
│ ├── index.md
|
||||
│ ├── math.md # 数学函数 (14K行)
|
||||
│ ├── base.md # 基础函数 (10K行)
|
||||
│ ├── system.md # 系统相关函数
|
||||
│ └── ...
|
||||
│
|
||||
├── financial/ # 金融函数(23个文件)
|
||||
│ ├── index.md
|
||||
│ ├── stock.md # 股票 (20K行)
|
||||
│ ├── market_data.md # 行情 (11K行)
|
||||
│ ├── financial_analysis.md # 财务分析 (46K行)
|
||||
│ └── ...
|
||||
│
|
||||
└── 03_datawarehouse.md # 其他9个独立章节
|
||||
04_algo_trading.md
|
||||
...
|
||||
```
|
||||
|
||||
## 🔍 如何查找函数
|
||||
|
||||
### 方法 1:使用索引导航(推荐)
|
||||
|
||||
1. 打开 [function/index.md](./function/index.md)
|
||||
2. 根据功能分类找到对应章节
|
||||
3. 点击链接进入具体文件
|
||||
|
||||
### 方法 2:全局搜索(最快)
|
||||
|
||||
在编辑器中使用全局搜索(`Ctrl+Shift+F` 或 `Cmd+Shift+F`):
|
||||
|
||||
- 搜索范围:`docs/tsl/syntax_book/function/`
|
||||
- 搜索关键词:函数名或功能描述
|
||||
|
||||
### 方法 3:查看历史备份
|
||||
|
||||
如需查看原始完整文件,请从历史版本获取(当前仓库不保留备份文件)。
|
||||
|
||||
## 💡 拆分的好处
|
||||
|
||||
| 拆分前 | 拆分后 |
|
||||
| -------------------------- | ----------------------- |
|
||||
| ❌ 单文件 221,389 行 | ✅ 最大文件 < 50,000 行 |
|
||||
| ❌ 编辑器打开需要 10-30 秒 | ✅ 任意文件打开 < 1 秒 |
|
||||
| ❌ Git diff 无法有效查看 | ✅ Git diff 清晰可读 |
|
||||
| ❌ 搜索定位困难 | ✅ 模块化搜索,精准定位 |
|
||||
| ❌ 难以维护和更新 | ✅ 按模块独立维护 |
|
||||
|
||||
## 📅 迁移时间
|
||||
|
||||
- 原始文件:保留至 `function.md.backup`
|
||||
- 拆分完成时间:2026-01-07
|
||||
- 拆分方式:按三级标题(###)分为11个主章节,再对TSL函数和金融函数进行二级拆分
|
||||
|
||||
---
|
||||
|
||||
**立即开始使用:** **[→ 前往新版函数参考](./function/index.md)**
|
||||
@@ -0,0 +1,40 @@
|
||||
# 01 TSL函数
|
||||
|
||||
> 本模块包含数学、系统、基础、图形等通用函数,适用于各种TSL脚本开发场景。
|
||||
|
||||
**完整内容请查阅:**
|
||||
|
||||
**→ [TSL函数模块详细文档](./tsl/index.md)**
|
||||
|
||||
## 快速概览
|
||||
|
||||
### 数学与计算
|
||||
|
||||
- **[数学函数](./tsl/math.md)** (14,396行) - 数值计算、三角函数、统计函数
|
||||
|
||||
### 系统与平台
|
||||
|
||||
- **[系统相关函数](./tsl/system.md)** (1,647行) - 系统信息、环境变量、进程控制
|
||||
- **[平台函数](./tsl/platform.md)** (553行) - 平台特定功能
|
||||
- **[客户端函数](./tsl/client.md)** (409行) - 客户端交互、界面控制
|
||||
|
||||
### 基础功能
|
||||
|
||||
- **[基础函数](./tsl/base.md)** (10,660行) - 字符串、数组、日期时间、文件操作
|
||||
- **[图形函数](./tsl/graphics.md)** (698行) - 绘图、图表、可视化
|
||||
|
||||
### 资源与交互
|
||||
|
||||
- **[资源访问函数](./tsl/resource.md)** (4,897行) - 文件读写、数据库、网络通信
|
||||
- **[第三方交互函数](./tsl/third_party.md)** (610行) - 第三方库调用、外部程序交互
|
||||
|
||||
### 工具函数
|
||||
|
||||
- **[压缩和解压函数](./tsl/compression.md)** (108行) - 数据压缩、解压缩
|
||||
- **[信息摘要及编码](./tsl/digest_encoding.md)** (172行) - 哈希算法、加密、编码转换
|
||||
|
||||
---
|
||||
|
||||
**共计 10 个子文件,总计 34,150 行**
|
||||
|
||||
详细目录和完整内容请访问:**[tsl/index.md](./tsl/index.md)**
|
||||
@@ -0,0 +1,58 @@
|
||||
# 02 金融函数
|
||||
|
||||
> 本模块涵盖股票、行情、技术分析、财务等金融专用功能,是量化分析和金融建模的核心函数库。
|
||||
|
||||
**完整内容请查阅:**
|
||||
|
||||
**→ [金融函数模块详细文档](./financial/index.md)**
|
||||
|
||||
## 快速概览
|
||||
|
||||
### 行情数据
|
||||
|
||||
- **[股票](./financial/stock.md)** (20,893行) - 股票代码、名称、上市信息、交易状态
|
||||
- **[行情](./financial/market_data.md)** (11,748行) - 实时行情、历史行情、K线数据
|
||||
- **[指数](./financial/index_data.md)** (2,237行) - 指数数据、指数成分股
|
||||
|
||||
### 技术分析
|
||||
|
||||
- **[技术分析](./financial/technical_analysis.md)** (11,373行) - 均线、MACD、KDJ、RSI等技术指标
|
||||
|
||||
### 资产类别
|
||||
|
||||
- **[债券](./financial/bond.md)** (2,827行) - 债券信息、收益率曲线、债券估值
|
||||
- **[期权](./financial/option.md)** (1,573行) - 期权定价、希腊字母、隐含波动率
|
||||
- **[基金](./financial/fund.md)** (10,681行) - 基金净值、持仓、业绩
|
||||
- **[期货](./financial/futures.md)** (1,248行) - 期货合约、持仓量、基差
|
||||
- **[权证](./financial/warrant.md)** (125行) - 权证信息、行权价
|
||||
- **[外汇](./financial/forex.md)** (116行) - 汇率、外汇行情
|
||||
|
||||
### 财务与基本面
|
||||
|
||||
- **[财务分析](./financial/financial_analysis.md)** (46,778行) ⚠️ **最大文件** - 三大报表、财务比率
|
||||
- **[基本面](./financial/fundamentals.md)** (6,139行) - 公司信息、行业分类、股东结构
|
||||
- **[宏观](./financial/macro.md)** (789行) - 宏观经济数据、GDP、CPI
|
||||
|
||||
### 板块与分类
|
||||
|
||||
- **[板块](./financial/sector.md)** (24,819行) ⚠️ **大文件** - 行业板块、概念板块、板块轮动
|
||||
|
||||
### 量化分析
|
||||
|
||||
- **[金融工程](./financial/financial_engineering.md)** (6,564行) - 风险模型、因子模型、组合优化
|
||||
- **[组合评价](./financial/portfolio_evaluation.md)** (3,656行) - 绩效评估、风险调整收益
|
||||
- **[天软因子](./financial/ts_factor.md)** (186行) - 天软自定义因子库
|
||||
|
||||
### 工具与框架
|
||||
|
||||
- **[框架构造Tools](./financial/framework_tools.md)** (71行) - 策略框架构建工具
|
||||
- **[网格池](./financial/grid_pool.md)** (301行) - 网格交易、池化管理
|
||||
- **[日志](./financial/logging.md)** (53行) - 交易日志、事件日志
|
||||
- **[数据提取](./financial/data_extraction.md)** (50行) - 批量数据提取工具
|
||||
- **[评价分析算法函数](./financial/evaluation_algorithms.md)** (18行) - 评价算法接口
|
||||
|
||||
---
|
||||
|
||||
**共计 22 个子文件,总计 152,245 行**
|
||||
|
||||
详细目录和完整内容请访问:**[financial/index.md](./financial/index.md)**
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -33,59 +33,23 @@
|
||||
|
||||
范例 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";
|
||||
```tsl
|
||||
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
|
||||
@@ -109,53 +73,30 @@ Files\Tinysoft\Analyse.NET\Plugin
|
||||
|
||||
第二步:在tslclient.ini添加以下内容:
|
||||
|
||||
```text
|
||||
```ini
|
||||
[TSLClient Config]
|
||||
|
||||
;调用是登陆的别名
|
||||
|
||||
[test]
|
||||
|
||||
;本地许可
|
||||
|
||||
Permit=local
|
||||
|
||||
;用户名
|
||||
|
||||
LoginName=
|
||||
|
||||
;密码
|
||||
|
||||
LoginPass=
|
||||
|
||||
;服务器 地址
|
||||
|
||||
Address=tsl.tinysoft.com.cn
|
||||
|
||||
;端口
|
||||
|
||||
Port=443
|
||||
|
||||
;---以下为代理服务器
|
||||
|
||||
;代理服务器端口
|
||||
|
||||
ProxyPort=
|
||||
|
||||
;代理服务器地址
|
||||
|
||||
ProxyAddress=
|
||||
|
||||
;代理身份验证用户名
|
||||
|
||||
ProxyUser=
|
||||
|
||||
;验证密码
|
||||
|
||||
ProxyPass=
|
||||
|
||||
;代理模式 http模式设置为0, SOCKS5模式设置为5
|
||||
|
||||
ProxyAuthMode=
|
||||
```
|
||||
|
||||
@@ -181,50 +122,24 @@ ProxyAuthMode=
|
||||
|
||||
#### 异步回调函数以及实时订阅系统参数说明
|
||||
|
||||
<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>
|
||||
| 系统参数名 | 类型 | 说明 |
|
||||
| ---------- | -------------- | ------------------------------ |
|
||||
| channel | 整数 | 通道ID,和SendExecute返回值一致 |
|
||||
| recvtype | 整数 | 参阅:服务器返回信息类型 |
|
||||
| errno | 整数 | 错误号,非0错误 |
|
||||
| errmsg | 字符串 | 错误信息 |
|
||||
| result | 订阅为数组类型 | 结果集,订阅为推送类型 |
|
||||
|
||||
#### 服务器返回信息类型
|
||||
|
||||
<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>
|
||||
| 返回类型 | 值 | 说明 |
|
||||
| ---------------- | ------ | ---- |
|
||||
| 执行函数返回 | 0x0201 | |
|
||||
| 执行委托函数返回 | 0x0301 | |
|
||||
| ECHO返回 | 0x0401 | |
|
||||
| 客户请求返回 | 0x0402 | |
|
||||
| 实时订阅返回 | 0x0501 | |
|
||||
| 错误信息返回 | 0 | |
|
||||
|
||||
#### EndExecute
|
||||
|
||||
@@ -238,31 +153,21 @@ ECHO返回</td><td>
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
####python交互范例,python代码
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.append('D:\\tinysoft\\Analyse.NET\\')
|
||||
|
||||
import TSLPy3 as ts
|
||||
|
||||
data=ts.DefaultConnectAndLogin("test")
|
||||
|
||||
data := ts.DefaultConnectAndLogin("test")
|
||||
print(ts.Logined())
|
||||
|
||||
print("远程登录地址",ts.RemoteAddress())
|
||||
|
||||
print("服务器设置:",ts.GetService())
|
||||
|
||||
print("远程登录地址", ts.RemoteAddress())
|
||||
print("服务器设置:", ts.GetService())
|
||||
ts.SetComputeBitsOption(64) #设置计算单位
|
||||
|
||||
print("计算位数设置:",ts.GetComputeBitsOption())
|
||||
|
||||
print("计算位数设置:", ts.GetComputeBitsOption())
|
||||
ts.Disconnect() #断开连接
|
||||
```
|
||||
|
||||
//结果
|
||||
结果
|
||||
|
||||
#### RemotePort
|
||||
|
||||
@@ -295,14 +200,11 @@ ts.Disconnect() #断开连接
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
rdo2 TSTaskAdmin("oa",CmdReturn,BroadCastMsg,ErrMsg,3000,1000);
|
||||
|
||||
```tsl
|
||||
rdo2 TSTaskAdmin("oa", CmdReturn, BroadCastMsg, ErrMsg, 3000, 1000);
|
||||
return CmdReturn;
|
||||
```
|
||||
|
||||
返回结果:
|
||||
|
||||
#### SetComputeService
|
||||
|
||||
#### GetComputebitsOption
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -49,25 +49,13 @@ ECHO和WRITE,WRITELN等输出函数被重定向,不再输出,用UnSetEchoStr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//先输出111222,接着另起一行显示空白,再接着另起一行输出333
|
||||
|
||||
|
||||
writeln("111","222");
|
||||
|
||||
|
||||
```tsl
|
||||
// 先输出111222,接着另起一行显示空白,再接着另起一行输出333
|
||||
writeln("111", "222");
|
||||
writeln("333");
|
||||
|
||||
|
||||
{结果页面中,运行信息下打印:
|
||||
|
||||
|
||||
111222
|
||||
|
||||
|
||||
333
|
||||
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
@@ -75,26 +63,14 @@ writeln("333");
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//先输出123456,接着另起一行输出789
|
||||
|
||||
|
||||
write("123","456");
|
||||
|
||||
|
||||
write("789");
|
||||
|
||||
|
||||
return ;
|
||||
|
||||
|
||||
{在结果页面中打印:
|
||||
|
||||
|
||||
123456
|
||||
|
||||
|
||||
789}
|
||||
```tsl
|
||||
// 先输出123456,接着另起一行输出789
|
||||
write("123", "456");
|
||||
write("789");
|
||||
return;
|
||||
{在结果页面中打印:
|
||||
123456
|
||||
789}
|
||||
```
|
||||
|
||||
#### CGI变量以及环境相关函数
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -105,140 +105,52 @@ tsl --buildexe=TSLDemo01.tsl --output=test01.exe
|
||||
|
||||
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>
|
||||
| 命令 | 功能说明 | 备注 |
|
||||
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| tsl.exe /? | 查看命令列表帮助,或TSL /? | 注意/前有一个空格 |
|
||||
| -COMPILE\|-COMPILEC [/S] [-S] tslfiename | 将tsl/tsf文件编译为二进制格式文件。<br>-COMPILE命令生成的文件后缀为.TSB<br>- COMPILEC命令生成的文件后缀为.TSC<br>可选项<br>/S:递归模式,即加上该可选命令后,会从子目录中查找该函数。默认只在当前目录下查找。<br>-S:安静模式,不打印执行结果的信息 | 默认生成的文件与原文件同目录,如:<br>Tsl -COMPILE TsfDemo01.tsf<br>作用:编译成二进制文件后,函数与脚本照样可以正常调用,可以用于隐藏源代码。 |
|
||||
| 编译指令 | | |
|
||||
| --buildexe=tslfilename | 将指定tsl文件编译成可执行(.exe)文件,默认生成文件名为default.exe,可执行文件默认图标为tsl编译器图标 | |
|
||||
| 其可选项 | -buildgui<br>指定编译的可执行文件为Windows UI应用程序 | 默认为控制台应用程序 |
|
||||
| | --buildico=xxx.ico<br>指定可执行文件的图标 | 默认为TSL.exe的图标 |
|
||||
| --buildlib=tsl(tsf)filename | 将指定tsl/tsf文件编译成动态库(.dll)文件 | 默认生成文件名为default.dll |
|
||||
| 其可选项 | `--exports=func1[:exp1][,…]`<br>将指定函数名输出在动态库中 | 指定多个函数用逗号分割 |
|
||||
| --build=tslfilename | 将指定tsl文件编译成.tsg包文件,默认生成文件名为default.tsg | 可以通过函数获取包中资源内容rs:<br>getglobalcache("@@tsl-resource@@",rs) |
|
||||
| 编译指令的可选项 | --buildexe\|--buildlib\|--build通用的可选项 | |
|
||||
| --output=filename | 给输出目标指定文件路径与名称 | 默认为<br>default.exe\|default.dll\|default.tsg<br>默认生成在当前路径下 |
|
||||
| -strong | 编译所有引用,将所有依赖的引用都进行编译<br>缺省为仅编译调用的 | 解决调用了某些动态库不能被检测到的函数。 |
|
||||
| --depends=fun1,fun2,… | 指定额外需要编译的函数列表 | 多个函数或路径用,分隔 |
|
||||
| --dependsdir=dir1,dir2,… | 指定额外需要编译的函数路径 | |
|
||||
| --excludes=fun1,fun2,… | 不编译某些函数 | |
|
||||
| --resourcedir=foldername | 指定编译资源文件目录 | |
|
||||
| --resourcepat=pat1,pat2,… | 指定资源文件的匹配串 | 需要搭配--resourcedir=一起使用 |
|
||||
| -resourcekeepdir | 资源名保留相对路径 | |
|
||||
| --extresource=filename1<br>[:keyname1],filename2… | 指定额外的资源 | |
|
||||
| 运行指令 | | |
|
||||
| --runpkg=packagename | 执行包文件 | 如:tsl --runpkg=runpkg.tsg |
|
||||
| -eval tslstring | 执行TSL脚本串 | 如:tsl -eval “inttostr(100)” |
|
||||
| tslfilename | 执行TSL脚本文件 | 如:tsl test.tsl |
|
||||
| 其可选项 | -LIBPATH | 扩展函数查找路径 |
|
||||
| | -TESTMULTITHREAD N | 线程调用,N为线程数 |
|
||||
| | -NODEBUGSERVER | 不启用调试服务器 |
|
||||
| | -DEBUGSERVER | 开启调试服务器 |
|
||||
| | -DEBUGPORT port | 指定调试监听端口 |
|
||||
| | -DEBUGLISTEN ip | 指定调试监听地址 |
|
||||
| | -DEBUGTHREADS N | 指定调试用于网络通信的线程数 |
|
||||
| | -WAITATTACH | 运行时等待调试程序连接 |
|
||||
| | -DEBUGLOGIN 1\|0 | 是否需要进行用户登陆 |
|
||||
| | --data-dir=datapath | 使用指定文件夹中的配置文件 |
|
||||
| | --pkg=pgk1,pkg2… | 加载指定包中的函数 |
|
||||
| 其它指令 | | |
|
||||
| -ENCODE configstring | 生成加密串 | 用于数据库配置串加密 |
|
||||
| -ENCODEDEBUGPASS | 生成密码串的加密串 | 用于远程调试配置中密码的加密 |
|
||||
|
||||
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>
|
||||
| 命令 | 说明 | 备注 |
|
||||
| ------------------------------------- | ---------------- | ------------------- |
|
||||
| TSL /? | 查看命令列表帮助 | 注意TSL后有一个空格 |
|
||||
| 其它命令参考Windows命令集,注意大小写 | | |
|
||||
|
||||
##### 命令集详细解析
|
||||
|
||||
@@ -291,15 +203,10 @@ tsl -COMPILE C:\DoTSL\CompileToExe\TsfDemo01.tsf
|
||||
|
||||
如:被编译的文件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>
|
||||
| 执行命令 | 结果说明 |
|
||||
| ------------------------------------------------------------ | -------------------------------------------------------------------- |
|
||||
| 默认情况下进行编译<br>命令行:tsl -COMPILE TsfFuncB.tsf | 执行结果:编译失败,找不到目标文件,原因是默认只在当前路径下查找。 |
|
||||
| 在递归模式下进行编译<br>命令行:tsl -COMPILE /S TsfFuncB.tsf | 执行结果:编译成功,递归模式下,还会在当前目录下的子目录下进行查找。 |
|
||||
|
||||
执行具体表现如下:
|
||||
|
||||
@@ -350,30 +257,19 @@ tsl -COMPILE C:\DoTSL\CompileToExe\TsfDemo01.tsf
|
||||
|
||||
以下是上述Test_GUIexe.tsl文件中的代码,仅供参考。执行下述案例中用到了界面tslvcl工具包。
|
||||
|
||||
```text
|
||||
```tsl
|
||||
uses tslvcl;
|
||||
|
||||
app := initializeapplication();
|
||||
|
||||
app.createform(class(tfm),fm);
|
||||
|
||||
app.createform(class(tfm), fm);
|
||||
fm.show();
|
||||
|
||||
app.run();
|
||||
|
||||
type tfm=class(TVCForm)
|
||||
|
||||
uses tslvcl;
|
||||
|
||||
function Create(AOwner);
|
||||
|
||||
begin
|
||||
|
||||
type tfm = class(TVCForm)
|
||||
uses tslvcl;
|
||||
function Create(AOwner);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end;
|
||||
end;
|
||||
```
|
||||
|
||||
####### 可选项:--buildico= 指定图标
|
||||
@@ -488,55 +384,34 @@ ExePath
|
||||
|
||||
其中,TestDemo01.tsl?的源代码如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
uses TSLUnitDemo01;
|
||||
|
||||
a:=10;
|
||||
|
||||
t:=FuncA(a);
|
||||
|
||||
echo "TSLUnitDemo01.FuncA",t;
|
||||
|
||||
sleep(10*1000);
|
||||
|
||||
a := 10;
|
||||
t := FuncA(a);
|
||||
echo "TSLUnitDemo01.FuncA", t;
|
||||
sleep(10 * 1000);
|
||||
return t;
|
||||
```
|
||||
|
||||
TSLUnitDemo01单元的源代码如下:
|
||||
|
||||
```text
|
||||
Unit TSLUnitDemo01;
|
||||
|
||||
Interface
|
||||
|
||||
```tsl
|
||||
unit TSLUnitDemo01;
|
||||
interface
|
||||
function FuncA(a);
|
||||
|
||||
function FuncB(a);
|
||||
|
||||
Implementation
|
||||
|
||||
implementation
|
||||
function FuncA(a);
|
||||
|
||||
begin
|
||||
|
||||
return a+20;
|
||||
|
||||
return a + 20;
|
||||
end;
|
||||
|
||||
function FuncB(a);
|
||||
|
||||
begin
|
||||
|
||||
a:=TD_Test(a);
|
||||
|
||||
return a*a;
|
||||
|
||||
a := TD_Test(a);
|
||||
return a * a;
|
||||
end;
|
||||
|
||||
Initialization
|
||||
|
||||
FuncA(2);
|
||||
|
||||
FuncA(2);
|
||||
Finalizationend.
|
||||
```
|
||||
|
||||
@@ -613,17 +488,12 @@ Finalizationend.
|
||||
|
||||
Test_resourcepat.tsl中代码如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
echo "\r\n";
|
||||
|
||||
echo "Running!!\r\n";
|
||||
|
||||
getglobalcache("@@tsl-resource@@",rs);//获取可执行文件中的所有资源文件信息
|
||||
|
||||
getglobalcache("@@tsl-resource@@", rs); // 获取可执行文件中的所有资源文件信息
|
||||
echo tostn(rs);
|
||||
|
||||
sleep(20 * 1000);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -671,17 +541,12 @@ return 1;
|
||||
|
||||
其中Test01_TD.tsl?的源程序如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
echo "\r\n";
|
||||
|
||||
echo "Running!!\r\n";
|
||||
|
||||
getglobalcache("@@tsl-resource@@",rs);//获取包中的资源文件信息
|
||||
|
||||
getglobalcache("@@tsl-resource@@", rs); // 获取包中的资源文件信息
|
||||
echo tostn(rs);
|
||||
|
||||
sleep(20 * 1000);
|
||||
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -699,11 +564,9 @@ return 1;
|
||||
|
||||
其中,包中目标文件的的源代码如下:
|
||||
|
||||
```text
|
||||
content:="test_runpkg";
|
||||
|
||||
writefile(rwraw(),"","D:\\test\\tslCmdTest\\runpkg\\test_runpkg.txt",0,1000,content);
|
||||
|
||||
```tsl
|
||||
content := "test_runpkg";
|
||||
writefile(rwraw(), "", "D:\\test\\tslCmdTest\\runpkg\\test_runpkg.txt", 0, 1000, content);
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -727,70 +590,45 @@ return 1;
|
||||
|
||||
包main.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
echo evalData(0);
|
||||
|
||||
function evalData(n)
|
||||
|
||||
begin
|
||||
|
||||
```tsl
|
||||
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);
|
||||
|
||||
0:SumVol(data);
|
||||
1:AvgVol(data);
|
||||
2:SumAmount(data);
|
||||
3:AvgAmount(data);
|
||||
end;
|
||||
|
||||
return ret;
|
||||
|
||||
end
|
||||
end;
|
||||
```
|
||||
|
||||
包data.tsg对应的TSL代码如下:
|
||||
|
||||
```text
|
||||
```tsl
|
||||
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
|
||||
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
|
||||
```tsl
|
||||
function SumVol(data)
|
||||
|
||||
begin
|
||||
|
||||
return sum(data[:,"成交量"]);
|
||||
|
||||
end
|
||||
return sum(data[:, "成交量"]);
|
||||
end;
|
||||
```
|
||||
|
||||
###### 生成加密串
|
||||
@@ -910,28 +748,22 @@ TsfFuncA函数的路径如下:
|
||||
|
||||
范例01:查找函数的依赖关系
|
||||
|
||||
```text
|
||||
obj:=Findfunction("stockzf");
|
||||
|
||||
v:=SysGetFuncdepends(obj,2+4+8,v1,v2);
|
||||
|
||||
return array("依赖的函数信息":v,"二进制函数信息":v1,"二进制类信息":v2);
|
||||
```tsl
|
||||
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);
|
||||
```tsl
|
||||
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
@@ -3,7 +3,7 @@
|
||||
#### 内容
|
||||
|
||||
- TSL的Web支持
|
||||
- .Web Tools
|
||||
- Web 工具(.Web Tools)
|
||||
|
||||
#### TSL的Web支持
|
||||
|
||||
@@ -18,23 +18,19 @@
|
||||
|
||||
##### 介绍
|
||||
|
||||
TSL可用于Web开发,下面是一个简单的示例
|
||||
TSL 可用于 Web 开发,下面是一个简单示例:
|
||||
|
||||
```text
|
||||
<?tslx>
|
||||
|
||||
<HTML>
|
||||
|
||||
<Title>TSL Web Page</Title>
|
||||
|
||||
<Body>
|
||||
|
||||
<html>
|
||||
<title>TSL Web Page</title>
|
||||
<body>
|
||||
<?tsl
|
||||
|
||||
writeln("First Tsl Web page");
|
||||
|
||||
>
|
||||
|
||||
</Body>
|
||||
WriteLn("First TSL Web page");
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
与 PHP类似, TSL代码被嵌入HTML代码中做一些事情,
|
||||
|
||||
@@ -51,6 +47,7 @@ Tsl脚本可以以纯cgi的模式执行,也可以用Apache 1.x, 2.x的Module
|
||||
以下是各类WEB服务器的配置方法:
|
||||
|
||||
###### 内容
|
||||
|
||||
- IIS
|
||||
- Apache 2.2
|
||||
- Apache 1.x
|
||||
@@ -60,6 +57,7 @@ Tsl脚本可以以纯cgi的模式执行,也可以用Apache 1.x, 2.x的Module
|
||||
注意:需要在IIS管理器里的Web服务扩展里允许所有CGI扩展和所有未知ISAPI
|
||||
|
||||
####### 内容
|
||||
|
||||
- IIS Module模式
|
||||
- IIS CGI模式
|
||||
|
||||
@@ -76,122 +74,123 @@ Tsl脚本可以以纯cgi的模式执行,也可以用Apache 1.x, 2.x的Module
|
||||
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中加入:
|
||||
在 httpd.conf 中加入:
|
||||
|
||||
LoadModule tsl_module C:/Tinysoft/tsl/MOD_TSL2.dll
|
||||
|
||||
AddType tslscript-handler .tsl
|
||||
|
||||
AddHandler tslscript-handler .tsl
|
||||
```text
|
||||
LoadModule tsl_module C:/Tinysoft/tsl/MOD_TSL2.dll
|
||||
AddType tslscript-handler .tsl
|
||||
AddHandler tslscript-handler .tsl
|
||||
```
|
||||
|
||||
####### Apache 2.X CGI模式:
|
||||
|
||||
在httpd.conf中加入:
|
||||
在 httpd.conf 中加入:
|
||||
|
||||
```text
|
||||
<Directory "C:/Tinysoft/tsl">
|
||||
|
||||
AllowOverride None
|
||||
|
||||
Options None
|
||||
|
||||
Order allow,deny
|
||||
|
||||
Allow from all
|
||||
|
||||
</Directory>
|
||||
|
||||
AddHandler tslscript-handler .tsl
|
||||
AddHandler tslscript-handler .tsl
|
||||
ScriptAlias /tsl/ "c:/Tinysoft/tsl/"
|
||||
Action tslscript-handler "/tsl/TSLCgi.exe"
|
||||
```
|
||||
|
||||
ScriptAlias /tsl/ "c:/Tinysoft/tsl/"
|
||||
或者:
|
||||
|
||||
Action tslscript-handler "/tsl/TSLCgi.exe"
|
||||
```text
|
||||
AddHandler cgi-script .tsl
|
||||
```
|
||||
|
||||
或者在httpd.conf中加入:
|
||||
并在 `.tsl` 第一行加入:
|
||||
|
||||
AddHandler cgi-script .tsl
|
||||
|
||||
并且在.tsl的第一行加入#!C:/Tinysoft/tsl/tslCgi.exe
|
||||
```text
|
||||
#!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中加入:
|
||||
在 httpd.conf 中加入:
|
||||
|
||||
LoadModule tsl_module C:/tsl/mod_tsl1.dll
|
||||
|
||||
AddModule mod_tsl.c
|
||||
|
||||
AddType application/tslscript .tsl
|
||||
|
||||
AddHandler tslscript-handler .tsl
|
||||
```text
|
||||
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中加入:
|
||||
在 httpd.conf 中加入:
|
||||
|
||||
```text
|
||||
<Directory "C:/Tinysoft/tsl">
|
||||
|
||||
AllowOverride None
|
||||
|
||||
Options None
|
||||
|
||||
Order allow,deny
|
||||
|
||||
Allow from all
|
||||
|
||||
</Directory>
|
||||
|
||||
ScriptAlias /tsl/ "c:/Tinysoft/tsl/"
|
||||
ScriptAlias /tsl/ "c:/Tinysoft/tsl/"
|
||||
AddHandler application/tslcgi .tsl
|
||||
Action application/tslcgi "/tsl/tslcgi.exe"
|
||||
```
|
||||
|
||||
AddHandler application/tslcgi .tsl
|
||||
或者:
|
||||
|
||||
Action application/tslcgi "/tsl/tslcgi.exe"
|
||||
```text
|
||||
AddHandler cgi-script .tsl
|
||||
```
|
||||
|
||||
或者在httpd.conf中加入:
|
||||
并在 `.tsl` 第一行加入:
|
||||
|
||||
AddHandler cgi-script .tsl
|
||||
|
||||
并且在.tsl的第一行加入#!C:/Tinysoft/tsl/tslCgi.exe
|
||||
```text
|
||||
#!C:/Tinysoft/tsl/tslCgi.exe
|
||||
```
|
||||
|
||||
##### 程序结构
|
||||
|
||||
与PHP不同TSL脚本默认是程序,而非HTML文本。
|
||||
与 PHP 不同,TSL 脚本默认是程序而非 HTML 文本。
|
||||
|
||||
下面的脚本会直接执行
|
||||
下面的脚本会直接执行:
|
||||
|
||||
s:="this is a tsl script";
|
||||
```tsl
|
||||
message := "this is a tsl script";
|
||||
WriteLn(message);
|
||||
```
|
||||
|
||||
writeln(s);
|
||||
若要输出完整 HTML 结构,可显式输出:
|
||||
|
||||
如果要输出完整的HTML结构,需要编写下面的代码
|
||||
|
||||
write("
|
||||
|
||||
<HTML>
|
||||
|
||||
<Body>
|
||||
|
||||
<p>TSL Script</p>
|
||||
|
||||
</Body>
|
||||
|
||||
</HTML>
|
||||
|
||||
");
|
||||
```tsl
|
||||
Write(
|
||||
"<html>\n" +
|
||||
"<body>\n" +
|
||||
"<p>TSL Script</p>\n" +
|
||||
"</body>\n" +
|
||||
"</html>\n"
|
||||
);
|
||||
```
|
||||
|
||||
###### 内容
|
||||
|
||||
- <?tslx> 标记
|
||||
- <?tsl … ?>块
|
||||
|
||||
@@ -199,103 +198,84 @@ write("
|
||||
|
||||
###### <?tslx> 标记
|
||||
|
||||
标记下面文字是HTML代码,代码将会原文输出到网页上.直到出现<?tsl ,
|
||||
标记后续文本为 HTML 代码,原文输出到网页上,直到出现 `<?tsl`。
|
||||
|
||||
上面的代码可以使用这种标记方式:
|
||||
|
||||
```text
|
||||
<?tslx>
|
||||
|
||||
<HTML>
|
||||
|
||||
<Body>
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<p>TSL Script</p>
|
||||
|
||||
</Body>
|
||||
|
||||
</HTML>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
###### <?tsl … ?>块
|
||||
|
||||
```text
|
||||
<?tsl
|
||||
|
||||
//这里可以写TSL代码…
|
||||
|
||||
>
|
||||
这里可以写 TSL 代码…
|
||||
?>
|
||||
```
|
||||
|
||||
当代码应用了<?tslx>标记后,以后的代码都被解析成文本,如果仍然需要在<?tslx>后执行TSL代码,就需要把代码写在<?tsl和 ?>中间。标识符和代码可以写在一行或多行,如果写在一行,<?tsl和代码必须用空格分开。代码中可以出现多次<?tsl … ?>块。但是不能嵌套。
|
||||
|
||||
上面的代码可以写成:
|
||||
|
||||
```text
|
||||
<?tslx>
|
||||
|
||||
<HTML>
|
||||
|
||||
<Body>
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<p>
|
||||
|
||||
<?tsl write("TSL Script");?>
|
||||
|
||||
<?tsl Write("TSL Script");?>
|
||||
</p>
|
||||
|
||||
</Body>
|
||||
|
||||
</HTML>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
###### <?= ?>块
|
||||
|
||||
在<?tslx>环境下,可以使用<?= ?>来简化输出,输出的模式为:
|
||||
在 `<?tslx>` 环境下,可以使用 `<?= ?>` 简化输出,模式为:
|
||||
|
||||
<?=<p1>[,p2..pn]?>
|
||||
```text
|
||||
<?= <p1>[, p2 .. pn] ?>
|
||||
```
|
||||
|
||||
例如要输出当前时间:
|
||||
|
||||
<?="现在是:",DateTimeToStr(Now())?>
|
||||
```text
|
||||
<?="现在是:", DateTimeToStr(Now())?>
|
||||
```
|
||||
|
||||
##### 输出
|
||||
|
||||
TSL使用Write()和Writeln()2个函数把内容输出到网页中。
|
||||
TSL 使用 `Write()`/`WriteLn()` 输出内容,格式为 `Write(p1, p2, ..., pn)`。
|
||||
`WriteLn()` 会追加换行,但浏览器可能忽略连续空白。
|
||||
|
||||
格式为 Write(p1,p2,…,pn);
|
||||
|
||||
把参数p1、p2、…、pn连接起来输出.
|
||||
|
||||
Writeln()和write的参数一样,同时输出回车和换行。但是浏览器解释HTML有时会忽略换行回车,把连在一起的空白字符解析成一个空格,这一点需要注意。
|
||||
|
||||
TSL还可以使用echo操作符号输出内容,使用的效果和write相同,但是:
|
||||
|
||||
格式为Echo <p1>[,p2…pn]
|
||||
|
||||
此外,在<?TSLX>块中还可以采用<?=<p1>[,p2..pn] ?>的模式来输出。
|
||||
TSL 也支持 `echo` 操作符:`echo <p1>[, p2 .. pn]`。
|
||||
在 `<?tslx>` 块中还可使用 `<?= <p1>[, p2 .. pn] ?>` 简化输出。
|
||||
|
||||
##### HTML表单处理
|
||||
|
||||
当一个表单体交给 TSL 脚本时,表单中的信息会自动在脚本中可用。TSL可以轻松的访问这些信息,例如下面的表单:
|
||||
|
||||
```text
|
||||
<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!" />
|
||||
|
||||
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 可以通过 `HttpGetQueryValueByName(name: string): string` 取表单字段。
|
||||
|
||||
示例:
|
||||
|
||||
<?tsl
|
||||
|
||||
write("Name:",HttpGetQueryValueByName("name"),"<br>");
|
||||
|
||||
write("Email:",HttpGetQueryValueByName("email"));
|
||||
|
||||
>
|
||||
```tsl
|
||||
Write("Name:", HttpGetQueryValueByName("name"), "<br>");
|
||||
Write("Email:", HttpGetQueryValueByName("email"));
|
||||
```
|
||||
|
||||
为了使用简单,TSL使用HttpGetQueryValueByName方法,也可以提取get表单数据,和
|
||||
|
||||
@@ -303,13 +283,16 @@ Query_String 方式(URL中在之后的信息)的数据。
|
||||
|
||||
示例:
|
||||
|
||||
```text
|
||||
http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
```
|
||||
|
||||
可以用上面的方式提取数据
|
||||
|
||||
#### .Web Tools
|
||||
#### Web 工具(.Web Tools)
|
||||
|
||||
##### 内容
|
||||
|
||||
- 表格样式
|
||||
- 单元格
|
||||
- 图形配置
|
||||
@@ -319,6 +302,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
##### 表格样式
|
||||
|
||||
###### 内容
|
||||
|
||||
- Web_tb_arrow
|
||||
- Web_tb_bar
|
||||
- Web_tb_gradient
|
||||
@@ -368,6 +352,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
##### 单元格
|
||||
|
||||
###### 内容
|
||||
|
||||
- 背景
|
||||
- 富文本
|
||||
- 迷你图
|
||||
@@ -375,6 +360,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
###### 背景
|
||||
|
||||
####### 内容
|
||||
|
||||
- Web_css_bgbar
|
||||
- Web_css_bgcolor
|
||||
- Web_css_bghist
|
||||
@@ -400,6 +386,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
###### 富文本
|
||||
|
||||
####### 内容
|
||||
|
||||
- Web_richtext_zdbgcolor
|
||||
|
||||
####### Web_richtext_zdbgcolor
|
||||
@@ -409,6 +396,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
###### 迷你图
|
||||
|
||||
####### 内容
|
||||
|
||||
- Web_spark_hist
|
||||
- Web_spark_nphist
|
||||
|
||||
@@ -425,6 +413,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
##### 图形配置
|
||||
|
||||
###### 内容
|
||||
|
||||
- Web_fig_box
|
||||
- Web_fig_heatmap
|
||||
- Web_fig_histogram
|
||||
@@ -489,6 +478,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
##### 展示范例
|
||||
|
||||
###### 内容
|
||||
|
||||
- Demo_framestyle_constyle_dotweb
|
||||
- Demo_framestyle_constyle_net
|
||||
- Demo_framestyle_heatmaptb_net
|
||||
@@ -553,6 +543,7 @@ http://www.webiste.com/foo.tsl?name=jack&email=jack@abc.com
|
||||
##### 中间函数
|
||||
|
||||
###### 内容
|
||||
|
||||
- Kerneldensityestimator
|
||||
- Web_color_theme
|
||||
- Web_color_triscale
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,40 +10,29 @@
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
// "MA110C2375"在20210322日的开仓手续费额
|
||||
|
||||
|
||||
SetSysParam(PN_Date(),20210322T);
|
||||
|
||||
|
||||
return GetDataByMd("MA110C2375.SP",1);
|
||||
|
||||
//结果:0.5
|
||||
SetSysParam(PN_Date(), 20210322T);
|
||||
return GetDataByMd("MA110C2375.SP", 1);
|
||||
// 结果:0.5
|
||||
```
|
||||
|
||||
##### GetDataByMd2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
// "MA110C2375"在20210322日的开仓手续费额
|
||||
|
||||
|
||||
SetSysParam(PN_Date(),20210322T);
|
||||
|
||||
|
||||
return GetDataByMd2("MA110C2375.SP",1);
|
||||
|
||||
//结果:0.5
|
||||
SetSysParam(PN_Date(), 20210322T);
|
||||
return GetDataByMd2("MA110C2375.SP", 1);
|
||||
// 结果:0.5
|
||||
```
|
||||
|
||||
##### StockIndustryLowerArr
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
// 在20201207的申万一级行业列表
|
||||
|
||||
return StockIndustryLowerArr("SWHY110000",20201207T);
|
||||
return StockIndustryLowerArr("SWHY110000", 20201207T);
|
||||
```
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
data:=spec(FundNAWZFQk(20240308t,20240831t,cy_day(),0,0), "OF000001");
|
||||
|
||||
t := sselect ["净值收益率(%)"] from data end;
|
||||
|
||||
return Hurst(t);// 0.47
|
||||
```tsl
|
||||
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
@@ -15,101 +15,78 @@
|
||||
|
||||
###### ForExrateMidPrice
|
||||
|
||||
用途:汇率相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//2020年4月20日美元/人民币的中间价
|
||||
|
||||
SetSysParam(PN_Stock(),'FXUSDCNY');
|
||||
|
||||
return ForExrateMidPrice(20200420T);
|
||||
|
||||
//返回7.0657
|
||||
```tsl
|
||||
// 2020年4月20日美元/人民币的中间价
|
||||
SetSysParam(PN_Stock(), 'FXUSDCNY');
|
||||
return ForExrateMidPrice(20200420T);
|
||||
// 返回7.0657
|
||||
```
|
||||
|
||||
###### ForExrateMidPriceBegTEndT
|
||||
|
||||
用途:汇率相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//2020年4月20日到4月30日美元/人民币的中间价数据
|
||||
|
||||
SetSysParam(PN_Stock(),'FXUSDCNY');
|
||||
|
||||
begt:=20200420T;
|
||||
|
||||
endt:=20200430T;
|
||||
|
||||
return ForExrateMidPriceBegTEndT(begt,endt);
|
||||
```tsl
|
||||
// 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>
|
||||
| 日期 | 代码 | 中间价 |
|
||||
| -------- | -------- | ------ |
|
||||
| 20200420 | FXUSDCNY | 7.0657 |
|
||||
| 20200421 | FXUSDCNY | 7.0752 |
|
||||
| 20200422 | FXUSDCNY | 7.0903 |
|
||||
| 20200423 | FXUSDCNY | 7.0887 |
|
||||
| 20200424 | FXUSDCNY | 7.0803 |
|
||||
| 20200427 | FXUSDCNY | 7.0703 |
|
||||
| 20200428 | FXUSDCNY | 7.071 |
|
||||
| 20200429 | FXUSDCNY | 7.0704 |
|
||||
| 20200430 | FXUSDCNY | 7.0571 |
|
||||
|
||||
###### GetCurrencyCodeBySecurityCode
|
||||
|
||||
用途:汇率相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//港股长和00001对应的货币对代码
|
||||
|
||||
```tsl
|
||||
// 港股长和00001对应的货币对代码
|
||||
return GetCurrencyCodeBySecurityCode('HK00001');
|
||||
|
||||
//返回 HKD
|
||||
// 返回 HKD
|
||||
```
|
||||
|
||||
###### ForExRateZf
|
||||
|
||||
用途:汇率相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
算法
|
||||
|
||||
(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
|
||||
```tsl
|
||||
// 2020年4月20日到4月30日美元/人民币的收益率
|
||||
SetSysParam(PN_Stock(), 'FXUSDCNY');
|
||||
begt := 20200420T;
|
||||
endt := 20200430T;
|
||||
return ForExRateZf(BegT, EndT);
|
||||
// 返回 -0.20786786956644
|
||||
```
|
||||
|
||||
@@ -19,28 +19,23 @@
|
||||
|
||||
####### GetTreeSumByClassPath
|
||||
|
||||
用途:进行数值统计计算。
|
||||
参数:arg1,arg2,arg3,arg4,arg5,arg6(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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);
|
||||
```tsl
|
||||
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);
|
||||
```
|
||||
|
||||
##### 参数调整
|
||||
@@ -51,20 +46,22 @@ Data:=array(
|
||||
|
||||
###### pmstand_array
|
||||
|
||||
用途:参数调整相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
范例1
|
||||
|
||||
```text
|
||||
V:=2;
|
||||
|
||||
return pmstand_array(v);//array(2);
|
||||
```tsl
|
||||
V := 2;
|
||||
return pmstand_array(v); // array(2);
|
||||
```
|
||||
|
||||
范例2
|
||||
|
||||
```text
|
||||
V:="abc";
|
||||
|
||||
return pmstand_array(v);//array("abc");
|
||||
```tsl
|
||||
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
@@ -10,47 +10,17 @@
|
||||
|
||||
接口汇总:
|
||||
|
||||
<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>
|
||||
| 所属分类 | 接口名称 | 说明 | 备注 |
|
||||
| ------------ | ---------------- | ---------------- | ------------------- |
|
||||
| 总接口 | fastmap | 调用网格执行函数 | |
|
||||
| 日志 | gridLogo | 网格写日志 | |
|
||||
| 等分划分方式 | splitDiv | 度等分划分 | 参数为度(int) |
|
||||
| | splitDiv2 | 长度等分划分 | |
|
||||
| | SplitArrayQK | 数组等分划分 | 参数为数组(array) |
|
||||
| | SplitArrayQK2 | 数组等分划分 | |
|
||||
| 用户数据相关 | DeleteTablebyReg | 批量删除用户数据 | 正则匹配 |
|
||||
| | GettablebyReg | 获取用户数据 | 正则匹配 |
|
||||
| | TryInsetTable | 添加用户数据 | 正则匹配 |
|
||||
|
||||
网格使用经验:
|
||||
|
||||
@@ -86,127 +56,67 @@ VS 0.4s
|
||||
|
||||
####### 提取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);
|
||||
|
||||
```tsl
|
||||
// **********************参数设置***********************//
|
||||
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;
|
||||
|
||||
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);
|
||||
|
||||
|
||||
```tsl
|
||||
// **********************参数设置***********************//
|
||||
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);
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
```
|
||||
|
||||
@@ -218,12 +128,15 @@ end;
|
||||
|
||||
####### GridLogo
|
||||
|
||||
用途:MultiProc_unit相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//在C:\\temp\\Gridlog默认路径下写日志文件
|
||||
|
||||
Return unit(MultiProc_unit).gridLogo('测试');
|
||||
```tsl
|
||||
// 在C:\\temp\\Gridlog默认路径下写日志文件
|
||||
return unit(MultiProc_unit).gridLogo('测试');
|
||||
```
|
||||
|
||||
###### 中间函数
|
||||
@@ -242,60 +155,77 @@ Return unit(MultiProc_unit).gridLogo('测试');
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).splitDiv(14,5); // array(0,2,4,6,8,14)
|
||||
```tsl
|
||||
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)
|
||||
```tsl
|
||||
return unit(MultiProc_unit).splitDiv2(14, 5); // array(0,3,6,9,12,14)
|
||||
```
|
||||
|
||||
####### SplitArrayQK
|
||||
|
||||
用途:MultiProc_unit相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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))
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:MultiProc_unit相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
arr := array(2,1,3,4,9,5,7,8,9,10,11,12,13,15);
|
||||
|
||||
return unit(MultiProc_unit).SplitArrayQK2(arr,5);
|
||||
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:MultiProc_unit相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).DeleteTablebyReg('test');
|
||||
```tsl
|
||||
return unit(MultiProc_unit).DeleteTablebyReg('test');
|
||||
```
|
||||
|
||||
####### GettablebyReg
|
||||
|
||||
用途:MultiProc_unit相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).GettablebyReg('test');
|
||||
```tsl
|
||||
return unit(MultiProc_unit).GettablebyReg('test');
|
||||
```
|
||||
|
||||
####### TryInsetTable
|
||||
|
||||
用途:MultiProc_unit相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return unit(MultiProc_unit).TryInsetTable('test',array(1,2,3));
|
||||
```tsl
|
||||
return unit(MultiProc_unit).TryInsetTable('test', array(1, 2, 3));
|
||||
```
|
||||
|
||||
@@ -31,10 +31,12 @@
|
||||
### 财务与基本面
|
||||
|
||||
- **[财务分析](./financial_analysis.md)** (46,778行) ⚠️ **最大文件**
|
||||
|
||||
- 资产负债表、利润表、现金流量表
|
||||
- 财务比率、财务指标、财务预测
|
||||
|
||||
- **[基本面](./fundamentals.md)** (6,139行)
|
||||
|
||||
- 公司基本信息、行业分类、股东结构
|
||||
- 分红、配股、增发等公司行为
|
||||
|
||||
@@ -49,10 +51,12 @@
|
||||
### 量化分析
|
||||
|
||||
- **[金融工程](./financial_engineering.md)** (6,564行)
|
||||
|
||||
- 风险模型、因子模型、组合优化
|
||||
- 回测框架、绩效归因
|
||||
|
||||
- **[组合评价](./portfolio_evaluation.md)** (3,656行)
|
||||
|
||||
- 夏普比率、最大回撤、收益波动
|
||||
- 组合绩效评估、风险调整收益
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,42 +11,33 @@
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
logger_debug(1234);
|
||||
|
||||
return 1;
|
||||
return 1;
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
##### logger_info
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
logger_info("当前执行第100个");
|
||||
|
||||
return 1;
|
||||
return 1;
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
##### logger_warning
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
logger_warning("当前执行第100个");
|
||||
|
||||
return 1;
|
||||
return 1;
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
##### logger_info2
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
logger_info2("异常","类型不能大于",3);
|
||||
```tsl
|
||||
logger_info2("异常", "类型不能大于", 3);
|
||||
```
|
||||
|
||||
@@ -22,12 +22,15 @@
|
||||
|
||||
###### CU_ChinaCode
|
||||
|
||||
用途:基本信息相关函数。
|
||||
参数:无。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
return CU_ChinaCode();
|
||||
|
||||
//结果:SS.000001
|
||||
// 结果:SS.000001
|
||||
```
|
||||
|
||||
##### 财政支出
|
||||
@@ -280,34 +283,40 @@ return CU_ChinaCode();
|
||||
|
||||
###### HG_StockSettlementBalance
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间证券交易结算资金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockSettlementBalance(20170101T,20181008T);
|
||||
|
||||
//结果:
|
||||
```tsl
|
||||
// 返回2017年1月1日到2018年10月8日的区间证券交易结算资金余额
|
||||
setsysparam(pn_stock(), "HG000001");
|
||||
return HG_StockSettlementBalance(20170101T, 20181008T);
|
||||
// 结果:
|
||||
```
|
||||
|
||||
###### HG_StockSettlementBalanceByEndT
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2018年10月8日的证券交易结算资金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockSettlementBalanceByEndT(20181008T);
|
||||
|
||||
//结果:1220500000000
|
||||
```tsl
|
||||
// 返回2018年10月8日的证券交易结算资金余额
|
||||
setsysparam(pn_stock(), "HG000001");
|
||||
return HG_StockSettlementBalanceByEndT(20181008T);
|
||||
// 结果:1220500000000
|
||||
```
|
||||
|
||||
###### HG_StockPeriodBalance
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
算法
|
||||
|
||||
从证券及股票期权投资者资金余额及变动(813)表中获取三个表:
|
||||
@@ -321,108 +330,112 @@ setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
返回三个表中‘截止日’相同的数据。范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间证券交易结算资金、融资融券担保资金、股票期权保证金余额情况
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockPeriodBalance(20170101T,20181008T);
|
||||
|
||||
//结果:
|
||||
```tsl
|
||||
// 返回2017年1月1日到2018年10月8日的区间证券交易结算资金、融资融券担保资金、股票期权保证金余额情况
|
||||
setsysparam(pn_stock(), "HG000001");
|
||||
return HG_StockPeriodBalance(20170101T, 20181008T);
|
||||
// 结果:
|
||||
```
|
||||
|
||||
###### HG_OptionMarginBalanceByEndT
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2018年10月8日的股票期权保证金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_OptionMarginBalanceByEndT(20181008T);
|
||||
|
||||
//结果:5974000000
|
||||
```tsl
|
||||
// 返回2018年10月8日的股票期权保证金余额
|
||||
setsysparam(pn_stock(), "HG000001");
|
||||
return HG_OptionMarginBalanceByEndT(20181008T);
|
||||
// 结果:5974000000
|
||||
```
|
||||
|
||||
###### HG_MoneyRollIn
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间资金转入额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_MoneyRollIn(20170101T,20181008T);
|
||||
|
||||
//结果:11452969000000
|
||||
```tsl
|
||||
// 返回2017年1月1日到2018年10月8日的区间资金转入额
|
||||
setsysparam(pn_stock(), "HG000001");
|
||||
return HG_MoneyRollIn(20170101T, 20181008T);
|
||||
// 结果:11452969000000
|
||||
```
|
||||
|
||||
###### HG_OptionMarginBalance
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间股票期权保证金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_OptionMarginBalance(20170101T,20181008T);
|
||||
|
||||
//结果:
|
||||
```tsl
|
||||
// 返回2017年1月1日到2018年10月8日的区间股票期权保证金余额
|
||||
setsysparam(pn_stock(), "HG000001");
|
||||
return HG_OptionMarginBalance(20170101T, 20181008T);
|
||||
// 结果:
|
||||
```
|
||||
|
||||
###### HG_StockGuaranteeBalanceByEndT
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2018年10月8日的融资融券担保资金余额
|
||||
|
||||
setsysparam(pn_stock(),"HG000001");
|
||||
|
||||
Return HG_StockGuaranteeBalanceByEndT(20181008T);
|
||||
|
||||
//结果:147600000000
|
||||
```tsl
|
||||
// 返回2018年10月8日的融资融券担保资金余额
|
||||
setsysparam(pn_stock(), "HG000001");
|
||||
return HG_StockGuaranteeBalanceByEndT(20181008T);
|
||||
// 结果:147600000000
|
||||
```
|
||||
|
||||
###### HG_MoneyNetRollIn
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间资金净转入额
|
||||
|
||||
|
||||
Return HG_MoneyNetRollIn(20170101T,20181008T);
|
||||
|
||||
|
||||
//结果:-248651000000
|
||||
```tsl
|
||||
// 返回2017年1月1日到2018年10月8日的区间资金净转入额
|
||||
return HG_MoneyNetRollIn(20170101T, 20181008T);
|
||||
// 结果:-248651000000
|
||||
```
|
||||
|
||||
###### HG_MoneyRollOut
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间资金转出额
|
||||
|
||||
|
||||
Return HG_MoneyRollOut(20170101T,20181008T);
|
||||
|
||||
//结果:11701620000000
|
||||
```tsl
|
||||
// 返回2017年1月1日到2018年10月8日的区间资金转出额
|
||||
return HG_MoneyRollOut(20170101T, 20181008T);
|
||||
// 结果:11701620000000
|
||||
```
|
||||
|
||||
###### HG_StockGuaranteeBalance
|
||||
|
||||
用途:银证转账相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//返回2017年1月1日到2018年10月8日的区间融资融券担保资金余额列表。
|
||||
|
||||
|
||||
Return HG_StockGuaranteeBalance(20170101T,20181008T);
|
||||
```tsl
|
||||
// 返回2017年1月1日到2018年10月8日的区间融资融券担保资金余额列表。
|
||||
return HG_StockGuaranteeBalance(20170101T, 20181008T);
|
||||
```
|
||||
|
||||
##### 行业宏观
|
||||
@@ -776,14 +789,15 @@ Return HG_MoneyRollOut(20170101T,20181008T);
|
||||
|
||||
###### HG_DL_InterestRate
|
||||
|
||||
用途:人民币存贷款利率相关函数。
|
||||
参数:无。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//活期存款在20210302的人民币存贷款利率
|
||||
|
||||
setsysparam(pn_stock(),"IR000001");
|
||||
|
||||
setsysparam(pn_date(),20210302T);
|
||||
|
||||
return HG_DL_InterestRate(); //结果: 0.35
|
||||
```tsl
|
||||
// 活期存款在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
@@ -42,34 +42,29 @@
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
ManagerID := "1533";
|
||||
|
||||
FMtype := 1; //股混型
|
||||
|
||||
RDate := 20220630;
|
||||
|
||||
return FundManager_GetStockHoldings(ManagerID,FMtype,RDate);
|
||||
FMtype := 1; // 股混型
|
||||
RDate := 20220630;
|
||||
return FundManager_GetStockHoldings(ManagerID, FMtype, RDate);
|
||||
```
|
||||
|
||||
########## FundManager_js_gpgmjz
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
EndT := 20220812T;
|
||||
|
||||
return FundManager_js_gpgmjz(EndT);
|
||||
return FundManager_js_gpgmjz(EndT);
|
||||
```
|
||||
|
||||
########## FundManager_js_hyjqd
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
RDate := 20220630;
|
||||
|
||||
return FundManager_js_hyjqd(RDate);
|
||||
return FundManager_js_hyjqd(RDate);
|
||||
```
|
||||
|
||||
##### 基金
|
||||
@@ -96,16 +91,12 @@ RDate := 20220630;
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
FundID := "OF000001";
|
||||
|
||||
begt := 20200101t;
|
||||
|
||||
endt := 20240301t;
|
||||
|
||||
RollNYearArr := array(1,3); //持有1年,持有3年
|
||||
|
||||
return Fund_PF_HoldFeeling_Stat(FundID,begt,endt,RollNYearArr);
|
||||
begt := 20200101t;
|
||||
endt := 20240301t;
|
||||
RollNYearArr := array(1, 3); // 持有1年,持有3年
|
||||
return Fund_PF_HoldFeeling_Stat(FundID, begt, endt, RollNYearArr);
|
||||
```
|
||||
|
||||
返回:
|
||||
@@ -114,18 +105,13 @@ FundID := "OF000001";
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
FundID := "OF000001";
|
||||
|
||||
begt := 20200101t;
|
||||
|
||||
endt := 20240301t;
|
||||
|
||||
MANum := 60;
|
||||
|
||||
delta := 20;
|
||||
|
||||
return Fund_PF_HoldFeeling_Trend(FundID,begt,endt,MANum,delta);
|
||||
```tsl
|
||||
FundID := "OF000001";
|
||||
begt := 20200101t;
|
||||
endt := 20240301t;
|
||||
MANum := 60;
|
||||
delta := 20;
|
||||
return Fund_PF_HoldFeeling_Trend(FundID, begt, endt, MANum, delta);
|
||||
```
|
||||
|
||||
返回:
|
||||
@@ -138,11 +124,15 @@ FundID := "OF000001";
|
||||
|
||||
####### GetAllThemespools
|
||||
|
||||
用途:基金相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
EndT := 20230919T;
|
||||
|
||||
return GetAllThemespools(EndT);
|
||||
```
|
||||
|
||||
@@ -164,22 +154,18 @@ return GetAllThemespools(EndT);
|
||||
|
||||
范例01:获取指定ETF在指定日的资金净流入
|
||||
|
||||
```text
|
||||
return ETF_MT_NetINflowAmount(20250922T,array("OF512000"));
|
||||
```tsl
|
||||
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
|
||||
```tsl
|
||||
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
|
||||
```
|
||||
|
||||
@@ -9,9 +9,11 @@
|
||||
|
||||
### 核心函数库
|
||||
|
||||
- **[TSL函数](./tsl/index.md)** - 数学、系统、基础、图形等通用函数
|
||||
- **[金融函数](./financial/index.md)** - 股票、行情、技术分析、财务等金融专用函数
|
||||
- **[数据仓库函数](./03_datawarehouse.md)**
|
||||
- **[01 TSL函数](./01_tsl_functions.md)** - 数学、系统、基础、图形等通用函数
|
||||
- 详细内容:[tsl/index.md](./tsl/index.md) (10个子文件,34,113行)
|
||||
- **[02 金融函数](./02_financial_functions.md)** - 股票、行情、技术分析、财务等金融专用函数
|
||||
- 详细内容:[financial/index.md](./financial/index.md) (23个子文件,169,893行)
|
||||
- **[03 数据仓库函数](./03_datawarehouse.md)**
|
||||
(7,270行) - 数据查询、时间序列、市场板块函数
|
||||
|
||||
### 专业领域
|
||||
|
||||
+4963
-4702
File diff suppressed because it is too large
Load Diff
@@ -82,23 +82,33 @@
|
||||
|
||||
####### DelPrecodeCallBack
|
||||
|
||||
用途:结果处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
return DelPrecodeCallBack('SH600000');
|
||||
```
|
||||
|
||||
//结果:’ 600000’
|
||||
结果:’ 600000’
|
||||
|
||||
####### IncPrecodeCallBack
|
||||
|
||||
用途:结果处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
return IncPrecodeCallBack('000002.SZ');
|
||||
```
|
||||
|
||||
//结果:’SZ000002’
|
||||
结果:’SZ000002’
|
||||
|
||||
###### 层次表格的展开
|
||||
|
||||
@@ -115,88 +125,79 @@ return IncPrecodeCallBack('000002.SZ');
|
||||
|
||||
####### ExtractData
|
||||
|
||||
用途:结果处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
r:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),
|
||||
|
||||
"名称",CurrentStockName(),
|
||||
|
||||
"股票.分红送股",infoarray(18));
|
||||
|
||||
return ExtractData(r,1,0);
|
||||
```tsl
|
||||
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);
|
||||
```tsl
|
||||
r := Query("", "SH600000;SZ000002", true, "", "代码", DefaultStockID(),
|
||||
"名称", CurrentStockName(),
|
||||
"名称2", CurrentStockName(),
|
||||
"名称3f", CurrentStockName(),
|
||||
"股票.分红送股", infoarray(18));
|
||||
return ExtractDataEx(r, 1, 0, 1);
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
####### ExtractDataEx2
|
||||
|
||||
用途:结果处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
// 数据展开范例
|
||||
|
||||
r:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),
|
||||
|
||||
"名称",CurrentStockName(),
|
||||
|
||||
"名称2",CurrentStockName(),
|
||||
|
||||
"名称3f",CurrentStockName(),
|
||||
|
||||
"股票.分红送股",infoarray(18));
|
||||
|
||||
return ExtractDataEx2(r,1,0,1,1);
|
||||
r := Query("", "SH600000;SZ000002", true, "", "代码", DefaultStockID(),
|
||||
"名称", CurrentStockName(),
|
||||
"名称2", CurrentStockName(),
|
||||
"名称3f", CurrentStockName(),
|
||||
"股票.分红送股", infoarray(18));
|
||||
return ExtractDataEx2(r, 1, 0, 1, 1);
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
####### ExtractDataLocalRun
|
||||
|
||||
####### ExtractDataLocalRun2
|
||||
|
||||
用途:结果处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
// 数据展开范例
|
||||
|
||||
r:=Query("","SH600000;SZ000002",True,"","代码",DefaultStockID(),
|
||||
|
||||
"名称",CurrentStockName(),
|
||||
|
||||
"名称2",CurrentStockName(),
|
||||
|
||||
"名称3f",CurrentStockName(),
|
||||
|
||||
"股票.分红送股",infoarray(18));
|
||||
|
||||
setsysparam(pn_data(),r);
|
||||
|
||||
return ExtractDataLocalRun2(0,1);
|
||||
r := Query("", "SH600000;SZ000002", true, "", "代码", DefaultStockID(),
|
||||
"名称", CurrentStockName(),
|
||||
"名称2", CurrentStockName(),
|
||||
"名称3f", CurrentStockName(),
|
||||
"股票.分红送股", infoarray(18));
|
||||
setsysparam(pn_data(), r);
|
||||
return ExtractDataLocalRun2(0, 1);
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
###### 简单统计
|
||||
|
||||
####### 内容
|
||||
@@ -206,17 +207,18 @@ return ExtractDataLocalRun2(0,1);
|
||||
|
||||
####### SimpleStat
|
||||
|
||||
用途:结果处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
data:=array(1,2,3,4,5);
|
||||
|
||||
|
||||
```tsl
|
||||
data := array(1, 2, 3, 4, 5);
|
||||
return SimpleStat(Data);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
####### SimpleStatLocal
|
||||
|
||||
###### 品种管理
|
||||
@@ -230,13 +232,18 @@ return SimpleStat(Data);
|
||||
|
||||
####### GetTypeOfStock
|
||||
|
||||
用途:结果处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return GetTypeOfStock('OF000001');
|
||||
```tsl
|
||||
return GetTypeOfStock('OF000001');
|
||||
```
|
||||
|
||||
//结果:4
|
||||
结果:4
|
||||
|
||||
##### 错误处理
|
||||
|
||||
@@ -262,24 +269,25 @@ Return GetTypeOfStock('OF000001');
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return RaiseError('function1','无效的语段');
|
||||
```tsl
|
||||
return raise Error('function1', '无效的语段');
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
###### ThisFuncOnlyForFund
|
||||
|
||||
###### ASSERT
|
||||
|
||||
用途:错误处理相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return ASSERT(0,'无效的语段');
|
||||
```tsl
|
||||
return ASSERT(0, '无效的语段');
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
##### 客户端行为控制函数
|
||||
|
||||
###### 内容
|
||||
@@ -295,17 +303,14 @@ return ASSERT(0,'无效的语段');
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//在客户端内创建函数,函数名为TSExpert_ClientConfig,函数体内的函数如下
|
||||
|
||||
r:=array();
|
||||
|
||||
r["AutoRun"][0]:='TS_ClientDemo';// TS_ClientDemo为预先设定好的函数,在下次登陆客户端时会自动运行该函数。其中TS_ClientDemo的代码为rdo2 MessageBox("欢迎登陆天软客户端","您好",rdo2 mb_DefButton1());
|
||||
|
||||
return r;
|
||||
```tsl
|
||||
// 在客户端内创建函数,函数名为TSExpert_ClientConfig,函数体内的函数如下
|
||||
r := array();
|
||||
r["AutoRun"][0] := 'TS_ClientDemo'; // TS_ClientDemo为预先设定好的函数,在下次登陆客户端时会自动运行该函数。其中TS_ClientDemo的代码为rdo2 MessageBox("欢迎登陆天软客户端","您好",rdo2 mb_DefButton1());
|
||||
return r;
|
||||
```
|
||||
|
||||
//效果: 重新启动客户端时,会弹出下面对话框
|
||||
效果: 重新启动客户端时,会弹出下面对话框
|
||||
|
||||
该函数的返回值为一个数组,该数组的下标定义如下:
|
||||
|
||||
@@ -369,40 +374,23 @@ name列,类型为字符串,表示函数的名称。
|
||||
|
||||
范例
|
||||
|
||||
```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++;
|
||||
|
||||
```tsl
|
||||
// 在原窗口输出个数,无需加Nwdow参数
|
||||
n := 0;
|
||||
while n < 100 do
|
||||
begin
|
||||
Echo n;
|
||||
SendRunningData(n);
|
||||
n++;
|
||||
end;
|
||||
|
||||
Return 1;
|
||||
return 1;
|
||||
// 在新窗口输出数组,则需要加Nwdow参数,代码如下:
|
||||
n := 0;
|
||||
while n < 100 do
|
||||
begin
|
||||
Echo n;
|
||||
SendRunningData(rand(10), "新窗口");
|
||||
n++;
|
||||
end;
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -18,13 +18,10 @@ ZIP和RAR是最常见的文件压缩格式,为此天软提供了ZIP文件压
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//把文件d:\a.txt压缩到d:\a.zip文件中的/hello/world/a.txt中
|
||||
|
||||
```tsl
|
||||
// 把文件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文件中
|
||||
|
||||
// 将d:\tmp目录压缩到d:\a.zip文件中
|
||||
ZipCompress('', 'd:\\a.zip', '', 'd:\\tmp', 'test');
|
||||
```
|
||||
|
||||
@@ -32,19 +29,17 @@ ZipCompress('', 'd:\\a.zip', '', 'd:\\tmp', 'test');
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//将ZIP文件解压,可以使用ZipExtract函数,例如将d:\a.zip文件解压到d:\tmp目录
|
||||
|
||||
ZipExtract('', 'd:\\a.zip', '', 'd:\\tmp', '123') ;
|
||||
```tsl
|
||||
// 将ZIP文件解压,可以使用ZipExtract函数,例如将d:\a.zip文件解压到d:\tmp目录
|
||||
ZipExtract('', 'd:\\a.zip', '', 'd:\\tmp', '123');
|
||||
```
|
||||
|
||||
##### RarExtract
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//将RAR文件解压,可以使用RarExtract函数,例如将d:\a.rar文件解压到d:\tmp目录
|
||||
|
||||
```tsl
|
||||
// 将RAR文件解压,可以使用RarExtract函数,例如将d:\a.rar文件解压到d:\tmp目录
|
||||
RarExtract('', 'd:\\a.rar', '', 'd:\\tmp', '123');
|
||||
```
|
||||
|
||||
@@ -56,19 +51,27 @@ ZipCompress函数可以将由filename指定的文件或目录压缩到由zip_fil
|
||||
|
||||
函数中所指定的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>
|
||||
```tsl
|
||||
ZipCompress('', 'd:\\a.zip', '', 'd:\\a.txt', 'hello/world/a.txt');
|
||||
```
|
||||
|
||||
又如我们要将d:\tmp目录压缩到d:\a.zip文件中的根下,可以使用这样的语句:
|
||||
|
||||
<table><tbody><tr><td>ZipCompress('', 'd:\\a.zip', '', 'd:\\tmp', 'test');<br/></td></tr></tbody></table>
|
||||
```tsl
|
||||
ZipCompress('', 'd:\\a.zip', '', 'd:\\tmp', 'test');
|
||||
```
|
||||
|
||||
要将ZIP文件解压,可以使用ZipExtract函数,例如将d:\a.zip文件解压到d:\tmp目录:
|
||||
|
||||
<table><tbody><tr><td>ZipExtract('', 'd:\\a.zip', '', 'd:\\tmp', '123') ;<br/></td></tr></tbody></table>
|
||||
```tsl
|
||||
ZipExtract('', 'd:\\a.zip', '', 'd:\\tmp', '123') ;
|
||||
```
|
||||
|
||||
要将RAR文件解压,可以使用RarExtract函数,例如将d:\a.rar文件解压到d:\tmp目录:
|
||||
|
||||
<table><tbody><tr><td>RarExtract('', 'd:\\a.rar', '', 'd:\\tmp', '123');<br/></td></tr></tbody></table>
|
||||
```tsl
|
||||
RarExtract('', 'd:\\a.rar', '', 'd:\\tmp', '123');
|
||||
```
|
||||
|
||||
##### unicompress
|
||||
|
||||
@@ -76,15 +79,11 @@ ZipCompress函数可以将由filename指定的文件或目录压缩到由zip_fil
|
||||
|
||||
本地运行下面脚本:
|
||||
|
||||
```text
|
||||
data:="Holle Tinysoft天软";
|
||||
|
||||
s:=unicompress("zstd",data);
|
||||
|
||||
echo s,"\r\n";
|
||||
|
||||
echo uniuncompress("zstd",s),"\r\n";
|
||||
|
||||
```tsl
|
||||
data := "Holle Tinysoft天软";
|
||||
s := unicompress("zstd", data);
|
||||
echo s, "\r\n";
|
||||
echo uniuncompress("zstd", s), "\r\n";
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -92,16 +91,11 @@ return 1;
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
data:="Holle Tinysoft天软";
|
||||
|
||||
len:=length(data);
|
||||
|
||||
s:=unicompress("zstd",data);
|
||||
|
||||
echo s,"\r\n";
|
||||
|
||||
echo uniuncompress("zstd",s,len),"\r\n";
|
||||
|
||||
```tsl
|
||||
data := "Holle Tinysoft天软";
|
||||
len := length(data);
|
||||
s := unicompress("zstd", data);
|
||||
echo s, "\r\n";
|
||||
echo uniuncompress("zstd", s, len), "\r\n";
|
||||
return 1;
|
||||
```
|
||||
|
||||
@@ -19,10 +19,35 @@
|
||||
|
||||
###### 摘要函数使用说明
|
||||
|
||||
<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>
|
||||
```tsl
|
||||
filename := "d:\\test.txt";
|
||||
teststr := "hello";
|
||||
alias := ""; //别名
|
||||
return array(
|
||||
"filename":filename,
|
||||
"GetMsgDigest(crc32_str)":GetMsgDigest(teststr,0),
|
||||
"GetMsgDigest(md5_str)":GetMsgDigest(teststr,1),
|
||||
"GetMsgDigest(sha1_str)":GetMsgDigest(teststr,2),
|
||||
"GetMsgDigest(sha224_str)":GetMsgDigest(teststr,3),
|
||||
"GetMsgDigest(sha256_str)":GetMsgDigest(teststr,4),
|
||||
"GetMsgDigest(sha384_str)":GetMsgDigest(teststr,5),
|
||||
"GetMsgDigest(sha512_str)":GetMsgDigest(teststr,6),
|
||||
"GetMsgDigest(alias, filename, crc32_str)":GetMsgDigest(alias,filename,0),
|
||||
"GetMsgDigest(alias, filename, md5_str)":GetMsgDigest(alias,filename,1),
|
||||
"GetMsgDigest(alias, filename, sha1_str)":GetMsgDigest(alias,filename,2),
|
||||
"GetMsgDigest(alias, filename, sha224_str)":GetMsgDigest(alias,filename,3),
|
||||
"GetMsgDigest(alias, filename, sha256_str)":GetMsgDigest(alias,filename,4),
|
||||
"GetMsgDigest(alias, filename, sha384_str)":GetMsgDigest(alias,filename,5),
|
||||
"GetMsgDigest(alias, filename, sha512_str)":GetMsgDigest(alias,filename,6)
|
||||
);
|
||||
```
|
||||
|
||||
###### GetMsgDigest
|
||||
|
||||
用途:信息摘要函数相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
- 摘要函数使用说明
|
||||
- GetMsgDigest
|
||||
- GetMsgDigest(文件)
|
||||
@@ -41,22 +66,36 @@
|
||||
|
||||
###### 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>
|
||||
```tsl
|
||||
//常量定义
|
||||
test_str := 'hello world';
|
||||
//BASE64
|
||||
base64 := StrToBase64(test_str); //转换为BASE64编码
|
||||
orig_str := Base64ToStr(base64); //BASE64编码转换为字符串
|
||||
```
|
||||
|
||||
###### StrToBase64
|
||||
|
||||
用途:将字符串转换为对应类型。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:转换后的数值或日期。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return rdo2 strtobase64('a12');//返回字符串:YTEy
|
||||
```tsl
|
||||
return rdo2 StrToBase64('a12'); // 返回字符串:YTEy
|
||||
```
|
||||
|
||||
###### Base64ToStr
|
||||
|
||||
用途:将输入值转换为字符串。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:字符串。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return rdo2 base64tostr('YTEy');//返回字符串:a12
|
||||
```tsl
|
||||
return rdo2 Base64ToStr('YTEy'); // 返回字符串:a12
|
||||
```
|
||||
|
||||
##### URI EnCode函数
|
||||
@@ -106,66 +145,65 @@ encoderadixstr("天软","0x",0x40000000+16)结果为"0xcc0xec0xc80xed" 小写字
|
||||
|
||||
###### EncodeRadixstr
|
||||
|
||||
用途:进制编码函数相关函数。
|
||||
参数:arg1,arg2,arg3(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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’,二进制
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:进制编码函数相关函数。
|
||||
参数:arg1,arg2,arg3(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return decoderadixstr('0x310x310x320x32',2,16); //返回'1122'
|
||||
|
||||
//注:这里的第二个参数是前缀或后缀的串的长度,并非指定串
|
||||
```tsl
|
||||
return DecodeRadixstr('0x310x310x320x32', 2, 16); // 返回'1122'
|
||||
// 注:这里的第二个参数是前缀或后缀的串的长度,并非指定串
|
||||
```
|
||||
|
||||
###### Decoderadixwstr
|
||||
|
||||
用途:进制编码函数相关函数。
|
||||
参数:arg1,arg2,arg3(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
return decoderadixwstr('0x00310x00310x00320x0032',2,16); //返回'1122'
|
||||
|
||||
//注:这里的第二个参数是前缀或后缀的串的长度,并非指定串
|
||||
```tsl
|
||||
return Decoderadixwstr('0x00310x00310x00320x0032', 2, 16); // 返回'1122'
|
||||
// 注:这里的第二个参数是前缀或后缀的串的长度,并非指定串
|
||||
```
|
||||
|
||||
###### Encoderadixwstr
|
||||
|
||||
用途:进制编码函数相关函数。
|
||||
参数:arg1,arg2,arg3(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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',二进制
|
||||
```tsl
|
||||
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',二进制
|
||||
```
|
||||
|
||||
@@ -28,104 +28,72 @@
|
||||
|
||||
###### Graph
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1,arg2,arg3(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
范例一:
|
||||
|
||||
```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);
|
||||
```tsl
|
||||
// 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);
|
||||
```tsl
|
||||
// 折线图
|
||||
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
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1,arg2,arg3,arg4(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
VolData := Nday2(GfVol() , Vol() , gfColor() , ifthen ( Close()> Open() , ClRed() , ClGreen() ) );
|
||||
|
||||
```tsl
|
||||
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);
|
||||
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来显示。
|
||||
@@ -135,224 +103,155 @@ DecodeGraphGroup EncodeGraphGroup DecodeGraph EncodeGraph
|
||||
|
||||
###### MergeGraph
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1,arg2,arg3,arg4(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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);
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1,arg2(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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());
|
||||
```tsl
|
||||
// 取万科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
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1,arg2,arg3(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
VolData := Nday2(GfVol() , Vol() , gfColor() , ifthen ( Close()> Open() , ClRed() , ClGreen() ) );
|
||||
|
||||
```tsl
|
||||
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;//返回分解后的柱状图
|
||||
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
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1,arg2,arg3,arg4,arg5(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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);
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1,arg2,arg3,arg4(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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());
|
||||
```tsl
|
||||
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
|
||||
@@ -375,12 +274,15 @@ return EncodeGraph(gtkline(),'KLine',t1,array());
|
||||
|
||||
###### GetColorByIndex
|
||||
|
||||
用途:作图函数相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:整数。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
return GetColorByIndex(1);
|
||||
|
||||
//返回:16711680
|
||||
// 返回:16711680
|
||||
```
|
||||
|
||||
##### 图形类型函数
|
||||
|
||||
@@ -16,10 +16,12 @@ TSL函数包含数学、系统、基础、图形等通用函数,适用于各
|
||||
### 系统与平台
|
||||
|
||||
- **[系统相关函数](./system.md)** (1,647行)
|
||||
|
||||
- 系统信息、环境变量、进程控制
|
||||
- 内存管理、性能监控
|
||||
|
||||
- **[平台函数](./platform.md)** (553行)
|
||||
|
||||
- 平台特定功能、系统调用
|
||||
|
||||
- **[客户端函数](./client.md)** (409行)
|
||||
@@ -28,6 +30,7 @@ TSL函数包含数学、系统、基础、图形等通用函数,适用于各
|
||||
### 基础功能
|
||||
|
||||
- **[基础函数](./base.md)** (10,660行)
|
||||
|
||||
- 字符串处理、数组操作、日期时间
|
||||
- 类型转换、条件判断、数据结构
|
||||
- 文件操作、流程控制
|
||||
@@ -38,6 +41,7 @@ TSL函数包含数学、系统、基础、图形等通用函数,适用于各
|
||||
### 资源与交互
|
||||
|
||||
- **[资源访问函数](./resource.md)** (4,897行)
|
||||
|
||||
- 文件读写、数据库访问、网络通信
|
||||
- 配置文件、资源管理
|
||||
|
||||
@@ -47,6 +51,7 @@ TSL函数包含数学、系统、基础、图形等通用函数,适用于各
|
||||
### 工具函数
|
||||
|
||||
- **[压缩和解压函数](./compression.md)** (108行)
|
||||
|
||||
- 数据压缩、解压缩、归档
|
||||
|
||||
- **[信息摘要及编码](./digest_encoding.md)** (172行)
|
||||
|
||||
+5929
-7231
File diff suppressed because it is too large
Load Diff
@@ -24,9 +24,13 @@
|
||||
|
||||
###### LoadTableEx
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
return LoadTableEx('repitle');
|
||||
```
|
||||
|
||||
@@ -42,54 +46,72 @@ return LoadTableEx('repitle');
|
||||
|
||||
####### UserDataUpLoad
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//dir为用户本地用户数据的存贮目录
|
||||
|
||||
Filedir:='C:\\Users\\xxxx\\Tinysoft\\Analyse.NET\\D254A848\\xxx\\UserDB\\hex_74657374646174613031.stm';
|
||||
|
||||
return UserDataUpLoad(Filedir); //返回上传结果提示信息。
|
||||
```tsl
|
||||
// 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
|
||||
```tsl
|
||||
// 将用户数据名转化为可读串
|
||||
str := 'hex_74657374646174613031.stm';
|
||||
return HexToString(str); // 返回testdata01
|
||||
```
|
||||
|
||||
####### TransFileName
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:整数。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//获取本地用户数据列表
|
||||
|
||||
dir:='C:\\Users\\xxxx\\Tinysoft\\Analyse.NET\\D254A848\\xxx\\UserDB';
|
||||
|
||||
return TransFileName(dir); //返回用户数据列表
|
||||
```tsl
|
||||
// 获取本地用户数据列表
|
||||
dir := 'C:\\Users\\xxxx\\Tinysoft\\Analyse.NET\\D254A848\\xxx\\UserDB';
|
||||
return TransFileName(dir); // 返回用户数据列表
|
||||
```
|
||||
|
||||
###### LoadTable
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//将savetable范例中保存的用户数据testA提取出来
|
||||
|
||||
Return loadTable('testA');
|
||||
```tsl
|
||||
// 将savetable范例中保存的用户数据testA提取出来
|
||||
return LoadTable('testA');
|
||||
```
|
||||
|
||||
参考TestTable SaveTable ListTable DeleteTable
|
||||
|
||||
###### SaveTable
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
注意:
|
||||
|
||||
在保存用户数据的时候可以分目录保存,只需在目录层次间添加‘\\’即可;在不同的目录下可以将数据保存为相同的数据名称。
|
||||
@@ -100,30 +122,22 @@ Return loadTable('testA');
|
||||
|
||||
范例一:直接在根目录下保存
|
||||
|
||||
```text
|
||||
//将r保存为用户数据testA
|
||||
|
||||
r:=rand(10,10);
|
||||
|
||||
Return savetable('testA',r);
|
||||
|
||||
//结果:-1
|
||||
```tsl
|
||||
// 将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);
|
||||
|
||||
```tsl
|
||||
// 将生成的10行10列的随机数据保存到目录:mydata\目录下,保存
|
||||
// 文件名称为testA
|
||||
r := rand(10, 10);
|
||||
ret := SaveTable('mydata\\testA', r);
|
||||
return ret;
|
||||
|
||||
//结果:-1
|
||||
// 结果:-1
|
||||
```
|
||||
|
||||
用户数据的查看:
|
||||
@@ -132,16 +146,12 @@ return ret;
|
||||
|
||||
范例三:新旧流格式数据保存操作及结果对比,在新版客户端+下一代服务器下执行以下操作
|
||||
|
||||
```text
|
||||
t:=getdatademo();//返回一个数组--测试者数据举例
|
||||
|
||||
r1:= savetable("TestSTData01",t);//缺省情况下保存用户数据
|
||||
|
||||
r2:= savetable("TestSTData02",t,0);//指定保存为原始流格式
|
||||
|
||||
r3:= savetable("TestSTData03",t,1);//指定保存为新流格式
|
||||
|
||||
return array(r1,r2,r3);
|
||||
```tsl
|
||||
t := getdatademo(); // 返回一个数组--测试者数据举例
|
||||
r1 := SaveTable("TestSTData01", t); // 缺省情况下保存用户数据
|
||||
r2 := SaveTable("TestSTData02", t, 0); // 指定保存为原始流格式
|
||||
r3 := SaveTable("TestSTData03", t, 1); // 指定保存为新流格式
|
||||
return array(r1, r2, r3);
|
||||
```
|
||||
|
||||
保存后,用户数据中列表大小显示如下:新流格式数据大小为源始流格式的55%,数据大小有明显的变小
|
||||
@@ -158,21 +168,30 @@ return array(r1,r2,r3);
|
||||
|
||||
###### TestTable
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Return testTable('testA');//测试用户数据"testA"是否存在。返回值为1,即存在,0即不存在。
|
||||
```tsl
|
||||
return TestTable('testA'); // 测试用户数据"testA"是否存在。返回值为1,即存在,0即不存在。
|
||||
```
|
||||
|
||||
参考SaveTable LoadTable ListTable DeleteTable
|
||||
|
||||
###### SaveBk
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
SaveBk("MySector","我的一级分类\\我的二级分类",Array("SZ000001","SZ000002"));
|
||||
|
||||
```tsl
|
||||
SaveBk("MySector", "我的一级分类\\我的二级分类", array("SZ000001", "SZ000002"));
|
||||
{在"我的一级分类\\我的二级分类"目录生成一个名为"MySector "的板块,该板块的成分为SZ000001,SZ000002}
|
||||
```
|
||||
|
||||
@@ -180,10 +199,15 @@ SaveBk("MySector","我的一级分类\\我的二级分类",Array("SZ000001","SZ0
|
||||
|
||||
###### DeleteBk
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
DeleteBk ("MySector");
|
||||
```tsl
|
||||
DeleteBk("MySector");
|
||||
```
|
||||
|
||||
参考SaveBk
|
||||
@@ -191,9 +215,13 @@ http://www.tinysoft.com.cn/TSDN/HelpDoc/SearchContent.tsl?r=ref&KeyWord=
|
||||
|
||||
###### ListTable
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:无。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
return ListTable();
|
||||
```
|
||||
|
||||
@@ -203,42 +231,35 @@ return ListTable();
|
||||
|
||||
###### DeleteTable
|
||||
|
||||
用途:自有数据维护函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
范例一:删除指定目录下的用户数据
|
||||
|
||||
```text
|
||||
//删除存在目录:“mydata\目录下”的用户数据testA
|
||||
|
||||
ret:=deleteTable('mydata\\testA');
|
||||
|
||||
```tsl
|
||||
// 删除存在目录:“mydata\目录下”的用户数据testA
|
||||
ret := DeleteTable('mydata\\testA');
|
||||
return ret;
|
||||
|
||||
//结果:-1
|
||||
// 结果:-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();
|
||||
```tsl
|
||||
// 删除存在目录:“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
|
||||
@@ -264,58 +285,64 @@ deleteTable(data[i]);
|
||||
|
||||
###### tsAppServer
|
||||
|
||||
用途:平台执行信息相关函数。
|
||||
参数:无。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
a:=rand(10,10);
|
||||
|
||||
|
||||
```tsl
|
||||
a := rand(10, 10);
|
||||
return tsAppServer();
|
||||
|
||||
|
||||
//结果:192.168.101.45:3328(Z:\server\bin5)
|
||||
// 结果:192.168.101.45:3328(Z:\server\bin5)
|
||||
```
|
||||
|
||||
###### TsAppServerName
|
||||
|
||||
用途:平台执行信息相关函数。
|
||||
参数:无。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
return TsAppServerName();
|
||||
```
|
||||
|
||||
//结果:192.168.101.26:z:\server\bin\exec64.exe
|
||||
结果: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
|
||||
```tsl
|
||||
// 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
|
||||
```tsl
|
||||
return TS_ModuleInfo();
|
||||
```
|
||||
|
||||
//结果:
|
||||
|
||||
差异说明Windows:任何版本。
|
||||
|
||||
Linux:自2024-07-10之后的版本,开始支持;之前的版本不支持。
|
||||
@@ -335,20 +362,20 @@ Linux:自2024-07-10之后的版本,开始支持;之前的版本不支持
|
||||
|
||||
###### User
|
||||
|
||||
用途:用户和函数相关函数相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
//执行用户jrtzsupport 共享的大师策略的函数Show_DSXG_211
|
||||
|
||||
begt:=inttodate(20130101);
|
||||
|
||||
endt:=inttodate(20140101);
|
||||
|
||||
return user('jrtzsupport').Show_DSXG_211(begt,endt,0);
|
||||
```tsl
|
||||
// 执行用户jrtzsupport 共享的大师策略的函数Show_DSXG_211
|
||||
begt := inttodate(20130101);
|
||||
endt := inttodate(20140101);
|
||||
return User('jrtzsupport').Show_DSXG_211(begt, endt, 0);
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
参考SYSTEM
|
||||
|
||||
###### UserName
|
||||
@@ -387,25 +414,18 @@ return user('jrtzsupport').Show_DSXG_211(begt,endt,0);
|
||||
|
||||
我们看一个案例,这个案例就是获得每个股票的Beta值:
|
||||
|
||||
Stks:=GetBk("深证A股;上证A股");
|
||||
|
||||
Result:=Array();
|
||||
|
||||
for i:=0 to length(Stks)-1 do
|
||||
|
||||
```tsl
|
||||
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"];
|
||||
|
||||
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;
|
||||
return Result;
|
||||
```
|
||||
|
||||
由于调用Beta的时候,计算效率会稍微低,我们利用Echo把当前运行的信息打印到了客户端,客户端的窗口内容如下:
|
||||
|
||||
@@ -413,25 +433,18 @@ Return Result;
|
||||
|
||||
对于运行中间得到的结果是一个复杂结果的,例如数组等内容,那么就没办法直接Echo这个结果,这就要结合tostn函数来输出调试了。
|
||||
|
||||
Stks:=GetBk("深证A股;上证A股");
|
||||
|
||||
Result:=Array();
|
||||
|
||||
for i:=0 to length(Stks)-1 do
|
||||
|
||||
```tsl
|
||||
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);
|
||||
|
||||
SetSysParam(pn_Stock(), Stks[i]);
|
||||
Result[i]["StockID"] := Stks[i];
|
||||
Result[i]["Beta"] := StockBeta4("SH000300", 10); // 最近一年的Beta
|
||||
Echo tostn(Result);
|
||||
end;
|
||||
|
||||
Return Result;
|
||||
return Result;
|
||||
```
|
||||
|
||||
每一行的内容会显示在右边部分,这个时候我们可以利用转换数据按钮把字符串以数据的方式来显示。
|
||||
|
||||
@@ -449,25 +462,16 @@ Return Result;
|
||||
|
||||
例如:我们在运行的时候要导出一组股票的交易明细数据到客户机上。
|
||||
|
||||
```text
|
||||
Stks:=GetBK("深证A股;上证A股");
|
||||
|
||||
Day:=Today();
|
||||
|
||||
for i:=0 to length(Stks)-1 do
|
||||
|
||||
```tsl
|
||||
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);//导出数据
|
||||
|
||||
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;
|
||||
```
|
||||
|
||||
@@ -511,7 +515,7 @@ RDo2调用的默认是300秒超时的,也就是说默认情况下当客户端
|
||||
|
||||
如果需要设置超时的时间,可以用TimeOut来设置超时,例如RDo2
|
||||
ImportFile(ftCsv(),"","C:\\1.csv",Data) TimeOut 30;
|
||||
//调用ImportFile函数的超时时间为30秒。
|
||||
调用ImportFile函数的超时时间为30秒。
|
||||
|
||||
参考:RDo,RDo2
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -43,44 +43,40 @@ version=3
|
||||
|
||||
###### PyRun
|
||||
|
||||
用途:Python支持函数相关函数。
|
||||
参数:arg1(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
s:="a=1
|
||||
|
||||
b=1
|
||||
|
||||
if a==1:
|
||||
|
||||
b=2
|
||||
|
||||
```tsl
|
||||
s := "a=1
|
||||
b := 1
|
||||
if a == 1:
|
||||
b := 2
|
||||
";
|
||||
|
||||
pyrun(s);
|
||||
|
||||
return array("a":pygetvar("a"),"b":pygetvar("b"));
|
||||
PyRun(s);
|
||||
return array("a":pygetvar("a"), "b":pygetvar("b"));
|
||||
```
|
||||
|
||||
本地执行返回结果:
|
||||
|
||||
###### PyCall
|
||||
|
||||
用途:Python支持函数相关函数。
|
||||
参数:arg1,arg2,arg3,arg4(按示例顺序传入)。
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
```tsl
|
||||
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);
|
||||
// 不给状态值,默认方式下调用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
|
||||
@@ -91,44 +87,36 @@ return pycall('numpy.random','randint',high:9,low:6);
|
||||
|
||||
例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;
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:获取最近一次 Python 调用错误信息。
|
||||
参数:无。
|
||||
返回:错误信息字符串。
|
||||
|
||||
范例
|
||||
|
||||
本地执行以下脚本
|
||||
|
||||
```text
|
||||
pyrun("a=math.pi");//此处会报错因为没有 import math
|
||||
|
||||
return pyerror();
|
||||
```tsl
|
||||
pyrun("a=math.pi"); // 此处会报错因为没有 import math
|
||||
return PyError();
|
||||
```
|
||||
|
||||
//返回: name 'math' is not defined
|
||||
返回: name 'math' is not defined
|
||||
|
||||
##### R支持函数
|
||||
|
||||
@@ -320,15 +308,11 @@ b:=RDO2 MGetVar("MatlabB");
|
||||
|
||||
范例代码:
|
||||
|
||||
```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);
|
||||
|
||||
```tsl
|
||||
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");
|
||||
```
|
||||
|
||||
@@ -360,36 +344,23 @@ return rdo2 mGetVar("C");
|
||||
|
||||
###### 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");
|
||||
下属例子为订阅两支指数的最新价格,价格到达则回调hello函数。
|
||||
|
||||
```tsl
|
||||
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的规定。
|
||||
|
||||
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
|
||||
|
||||
@@ -402,52 +373,63 @@ end;
|
||||
|
||||
###### TextToHtml
|
||||
|
||||
用途:Html相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
Src:= "The First LETTER won\'t be replaced by \'one\', but the Second letter will.";
|
||||
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:Html相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
ASrc:= "#abcd 10";
|
||||
|
||||
```tsl
|
||||
ASrc := "#abcd 10";
|
||||
return TextToURL(ASrc);
|
||||
|
||||
//结果:%23abcd%20%2010
|
||||
// 结果:%23abcd%20%2010
|
||||
```
|
||||
|
||||
###### HtmlToText
|
||||
|
||||
用途:Html相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```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.
|
||||
```tsl
|
||||
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
|
||||
|
||||
用途:Html相关函数。
|
||||
参数:
|
||||
|
||||
返回:处理后的结果值。
|
||||
|
||||
范例
|
||||
|
||||
```text
|
||||
aSrc:= "%23abcd%20%2010";
|
||||
|
||||
```tsl
|
||||
aSrc := "%23abcd%20%2010";
|
||||
return URLToText(aSrc);
|
||||
|
||||
//结果:#abcd 10
|
||||
// 结果:#abcd 10
|
||||
```
|
||||
|
||||
##### do方式对外部语言的调用
|
||||
@@ -472,19 +454,13 @@ return URLToText(aSrc);
|
||||
|
||||
下面是一个调python语言的示例:
|
||||
|
||||
```text
|
||||
a:=3;
|
||||
|
||||
c:=2;
|
||||
|
||||
do python in a name "A",out b,var c
|
||||
|
||||
```tsl
|
||||
a := 3;
|
||||
c := 2;
|
||||
do python in a name"A", out b, var c
|
||||
%%
|
||||
|
||||
c=A*c
|
||||
|
||||
b=c*c
|
||||
|
||||
c := A * c
|
||||
b := c * c
|
||||
%%;
|
||||
```
|
||||
|
||||
@@ -512,9 +488,8 @@ COM的调用和TSL的对象的调用是没有差异的,也非常类似于PASCA
|
||||
|
||||
例如:
|
||||
|
||||
```text
|
||||
GetOleObject(“Excel.Application”,0,Obj);
|
||||
|
||||
```tsl
|
||||
GetOleObject(“Excel.Application”, 0, Obj);
|
||||
Obj.WorkBooks.Open(“C:\\1.xls”);
|
||||
```
|
||||
|
||||
@@ -532,31 +507,22 @@ JAVA类型在TSL语言中是一个内置的对象。
|
||||
|
||||
==========tjclass的使用范例=============
|
||||
|
||||
```text
|
||||
systemClass:=new TJClass("java/lang/System");
|
||||
|
||||
properties:=systemClass.getProperties();
|
||||
|
||||
```tsl
|
||||
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
|
||||
|
||||
```tsl
|
||||
// 构造StringBuffer对象
|
||||
sbObj := new TJObject("java/lang/StringBuffer", "hello world");
|
||||
// 调用对象的insert方法
|
||||
ret := sbObj.insert(6, "天软");
|
||||
// 调用toString方法
|
||||
str := sbObj.toString();
|
||||
// 显示: hello 天软 world
|
||||
echo str, "\r\n";
|
||||
```
|
||||
|
||||
@@ -572,28 +538,18 @@ JavaDecode来实现的
|
||||
|
||||
==============JavaEncode JavaDecode范例==================
|
||||
|
||||
```text
|
||||
//char[]构造, Unicode字符集, JavaEncode负责生成Unicode编码的char数组
|
||||
|
||||
charArr:=JavaEncode("chararray", "Tinysoft天软");
|
||||
|
||||
strObj:=new TJObject("java/lang/String", charArr);
|
||||
|
||||
```tsl
|
||||
// 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";
|
||||
// 构造字符串
|
||||
strObj := new TJObject("java/lang/String", "天软科技");
|
||||
// 得到byte数组,系统默认字符集
|
||||
byteArray := strObj.getBytes();
|
||||
// byte数组转换为字符串
|
||||
str := JavaDecode("String", byteArray);
|
||||
echo str, "\r\n";
|
||||
```
|
||||
|
||||
========================================================
|
||||
|
||||
Reference in New Issue
Block a user