Files
playbook/skills/tsl-api-reference/references/codegen/dotnet/math/numerical_calculation-other.md
T

6.4 KiB
Raw Blame History

数学函数 / 数值计算 / 其他

generateCombinations(list, ret, start, n, combine)

声明:function

生成一维数组的全部非空组合

参数 类型 说明
list array 输入的一维数组
ret array 接收生成的组合
start integer 可选。开始选取的位置,默认 0
n integer 可选。当前组合的写入位置,默认 0
combine array 可选。递归生成过程中使用的组合缓存

返回:integer

示例

范例01:生成三个元素的全部非空组合

list := array("a", "b", "c");
ret := array();
generateCombinations(list, ret);
return ret;
// 输出:
// array(
// ("a"),
// ("a","b"),
// ("a","b","c"),
// ("a","c"),
// ("b"),
// ("b","c"),
// ("c"))

betainc(x, a, b, tail)

声明:function

不完全贝塔函数

参数 类型 说明
x array (一维数字数组,实数) 变量 要求0<=x<=1;
a float float 不完全贝塔函数的参数 要求a>=0;
b float float 不完全贝塔函数的参数 要求b>=0;
tail string 返回类型

返回:array

示例

a := 3;
b := 4;
tail := 'upper';
x := rand(10);
return array(betainc(x, a, b), betainc(x, a, b, tail));

maxDrawDown(data, updn, interval, ifabs)

声明:function

最大回撤

参数 类型 说明
data array 一维数字序列
updn bool 涨跌标示符。1为求最大涨,0为求最大跌(默认值)
interval integer 最大区间,为空或者小于1时,求整个区间(默认值)
ifabs float 预留字段,暂时没有实际意义,可不给值 。

返回:real/table

示例

范例01

// 计算一组序列的最大涨幅
data := array(3, 1, 7, 5, 6, 3);
return maxDrawDown(data, 1);
// 输出:
// 1
// 2
// 6
// 6
// 入点为 data[1],出点为 data[2],两者差为 6,最大涨幅比例差为 6

范例02

// ------计算100日股票的最大跌幅
setSysParam(pn_stock(), 'SZ000002');
setSysParam(pn_date(), 20181031T);
setSysParam(pn_rate(), 1);
setSysParam(pn_rateday(), 20181031T);
setSysParam(pn_cycle(), cy_day());
data := nDay3(100, close());
t := maxDrawDown(data);
return t;
// 输出:
// 12
// 43
// 6.96759
// 0.25765
// 注:若需计算最大跌幅率,则只需t[3] * 100即可。

minRecoveryTime(r, n1, n2)

声明:function

最小恢复时间

参数 类型 说明
r array (一维数字数组) 序列,
n1 integer Int 买入点位置,
n2 integer Int 卖出点位置

返回:integer

示例

// 科大讯飞(SZ002230)在20201220最近十个交易日序列中第一天购买第二天卖出后的最小恢复时间
setSysParam(pn_stock(), "SZ002230");
setSysParam(PN_Date(), 20201220t);
r := nDay(10, "close", close())[:, "close"];
return minRecoveryTime(r, 0, 1);
// 输出:6

nchoosek(n, k)

声明:function

样本组合

参数 类型 说明
n array 样本(一维数组)
k integer 每组样本数量(整数)

返回:array

示例

范例01:从四个样本中选取两个进行组合

return nchoosek(array('a', 'b', 'c', 'd'), 2);
// 输出:
// array(
// ("d", "c"),
// ("d", "b"),
// ("d", "a"),
// ("c", "b"),
// ("c", "a"),
// ("b", "a"))

percentage(y, per, style)

声明:function

百分位去极值

参数 类型 说明
y array 数字数组,待处理数据
per real|array 实数或者一维数字数组,去极值百分位;5表示 5%;
style integer 整数,0 或者不输入时 去 百分位大于 per 和小于per的;1, 去除小于per的;2 去除 大于per的 数据

返回:array

示例

y := rand(100, 2);
per := 20;
style := 0;
return percentage(y, per, style);

percentileOfScore(data, score, _type)

声明:function

百分位占比(%)

参数 类型 说明
data array 数组 待处理数据,
score float float 待排序值,
_type integer 算法

返回:array

示例

// 去除随机数组的极值
data := array(1, 2, 2, 4);
ret := array();
n := 0;
for i := 0 to 5 do
begin
    ret[n, 'score'] := i;
    for j, kind in array('rank', 'strict', 'weak', 'mean')do
    begin
        ret[n, kind] := percentileOfScore(data, i, j);
    end
    ret[n, 'percenrank'] := percentrank(data, i);
    n++;
end;
return ret;

perms(x)

声明:function

样本排列

参数 类型 说明
x array 样本,数组或数字

返回:array

示例

范例01:求10的阶乘

return perms(10);
// 输出:3628800

范例02:排列组合

return perms(array("a", "b", "c"));
// 输出:
// array(
// ("c", "b", "a"),
// ("c", "a", "b"),
// ("b", "c", "a"),
// ("b", "a", "c"),
// ("a", "b", "c"),
// ("a", "c", "b"))

范例03:返回数组Array(('A','B'),('C', 'D'))中任意两个数据的排列组合

v := Array(('A', 'B'), ('C', 'D'));
return perms(v, 2);

范例04:对排列组合的每列求和

func := new funcExe();
a := array("A", "B", "C");
return perms(a, 3, func);

type funcExe = class
public
    Data;
    function create();
    begin
        Data := "";
    end;
    function Exe(dat);
    begin
        Data += dat;
    end;
end;