# 金融 / 技术分析 / 均线指标 / 计算公式

## `acd_f(n, m, type)`

声明：function

返回升降线

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数   | 类型    | 说明     |
| ------ | ------- | -------- |
| `n`    | integer | 天数     |
| `m`    | integer | 天数     |
| `type` | integer | 结果类型 |

返回：table

### 示例

范例01：计算白云机场截止日2011年9月8日的升降线

```tsl
// 计算白云机场截止日2011年9月8日的升降线。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N := 23;
M := 6;
v := ACD_f(N, M, 0);
return v;
```

范例02：计算白云机场截止2011年9月8日向前推共5天的升降线序列

```tsl
// 计算白云机场截止2011年9月8日向前推共5天的升降线序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N := 23;
M := 6;
v := ACD_f(N, M, 1);
return v;
```

## `amvMa_f(n, type)`

声明：function

返回成本价均线

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数   | 类型    | 说明     |
| ------ | ------- | -------- |
| `n`    | integer | 天数     |
| `type` | integer | 结果类型 |

返回：real/table

### 示例

范例01：计算白云机场截止日2011年9月8日的成本价均线

```tsl
// 计算白云机场截止日2011年9月8日的成本价均线。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N := 23;
v := AMVMa_f(N, 0);
return v;
// 输出：7.24
```

范例02：计算白云机场截止2011年9月8日向前推共5天的成本价均线序列

```tsl
// 计算白云机场截止2011年9月8日向前推共5天的成本价均线序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N := 23;
v := AMVMa_f(N, 1);
return v;
```

## `bbi_f(n_1, n_2, n_3, n_4)`

声明：function

返回多空指标

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数  | 类型                 | 说明 |
| ----- | -------------------- | ---- |
| `n_1` | integer              | 天数 |
| `n_2` | integer              | 天数 |
| `n_3` | integer              | 天数 |
| `n_4` | integer type:integer | 天数 |

返回：real/table

### 示例

范例01：计算白云机场截止日2011年9月8日的多空指标

```tsl
// 计算白云机场截止日2011年9月8日的多空指标。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N1 := 5;
N2 := 10;
N3 := 15;
N4 := 20;
v := BBI_f(N1, N2, N3, N4, 0);
return v;
// 输出：7.15
```

范例02：计算白云机场截止2011年9月8日向前推共5天的多空指标序列

```tsl
// 计算白云机场截止2011年9月8日向前推共5天的多空指标序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N1 := 5;
N2 := 10;
N3 := 15;
N4 := 20;
v := BBI_f(N1, N2, N3, N4, 1);
return v;
```

## `bbiboll_f(n, m, type)`

声明：function

返回BBIBOLL

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 BBIBOLL -->

| 参数   | 类型    | 说明       |
| ------ | ------- | ---------- |
| `n`    | integer | 天数；     |
| `m`    | integer | 天数；     |
| `type` | integer | 结果类型； |

返回：table

### 示例

范例01：计算白云机场截止日2011年9月8日的BBIBOLL

```tsl
// 计算白云机场截止日2011年9月8日的BBIBOLL。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N := 23;
M := 6;
v := BBIBOLL_f (N, M, 0);
return v;
```

范例02：计算白云机场截止2011年9月8日向前推共5天的BBIBOLL序列

```tsl
// 计算白云机场截止2011年9月8日向前推共5天的BBIBOLL序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N := 23;
M := 6;
v := BBIBOLL_f (N, M, 1);
return v;
```

## `cma_f(n, type)`

声明：function

返回收盘价移动平均

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数   | 类型    | 说明     |
| ------ | ------- | -------- |
| `n`    | integer | 天数     |
| `type` | integer | 结果类型 |

返回：float

### 示例

范例01：计算白云机场截止日2011年9月8日的23日收盘价移动平均

```tsl
// 计算白云机场截止日2011年9月8日的23日收盘价移动平均。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N := 23;
v := CMA_f(N, 0);
return v;
// 输出：7.2
```

范例02：计算白云机场截止2011年9月8日向前推共5天的23日收盘价移动平均序列

```tsl
// 计算白云机场截止2011年9月8日向前推共5天的23日收盘价移动平均序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N := 23;
v := CMA_f(N, 1);
return v;
```

## `dsma_i(exp, a, c_f, data_n)`

声明：function

返回求表达式X的指数移动平均, 与系统参数(证券、时间、周期、复权方式等)相关

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数     | 类型         | 说明                                                                                                                                                                            |
| -------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `exp`    | t_expression | TExpression型表达式，指标表达式                                                                                                                                                 |
| `a`      | real         | 实数，衰减因子值，取值[0,1]                                                                                                                                                     |
| `c_f`    | string       | 字符串，缓存标志，区别X表达式，若为nil则不进行缓存 特别说明:由于表达式无法区别，当调用DSMA_I求不同表达式的移动平均时， 若要缓存，需要用该标识来区别不同的表达式，以避免缓存误用 |
| `data_n` | integer      | 整型，向历史推移长度（一般>=100），若为nil或<=0,则默认推至上市日 若有效率要求，可设置该长度限制                                                                                 |

返回：real

### 示例

范例01：计算SH603260在20180827日收盘价的指数移动平均

```tsl
// 计算SH603260在20180827日收盘价的指数移动平均。
endt := 20180827T;
Setsysparam(pn_stock(), 'SH603260');
setsysparam(pn_cycle(), cy_day());
Setsysparam(pn_date(), endt);
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), endt);
return DSMA_I(@close(), 0.2); // 不做缓存
```

范例02：取股票在一段时间内收盘价与开盘价的指数移动平均

```tsl
// 取股票在一段时间内收盘价与开盘价的指数移动平均。
endt := 20180827T;
begt := 20180801T;
Setsysparam(pn_stock(), 'SH603260');
setsysparam(pn_cycle(), cy_day());
Setsysparam(pn_date(), endt);
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), endt);
n := tradedays(begt, endt);
// 第三个参数：若需要缓存，请注意，缓存标志是用户自己定义的串，不同表达式缓//存字符串必须不一样，否则会计算错误
return nday(n, 'date', sp_time(), 'dma1', DSMA_I(@close(), 0.2, 'close'), 'dma2', DSMA_I(@open(), 0.2, 'open'));
```

范例03：第四个参数：只向历史推导100次->对于表达式算法较为复杂的可考虑此用法

```tsl
setsysparam(pn_stock(), 'SZ002926');
setsysparam(pn_date(), 20200113T);
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), 20200113T);
a := 0.02;
AA := @(2*CLOSE()+LOW()+HIGH())/4;
BB := @stockzf3();
// 第四个参数：只向历史推导100次->对于表达式算法较为复杂的可考虑此用法
t1 := DSMA_I(AA, a, 'aa', 100);
t2 := DSMA_I(AA, a, 'aa2');
t3 := DSMA_I(BB, a, 'bb');
return array(t1, t2, t3);
// 输出：array(9.9581996332979,10.0810464635677);
```

## `dsma_ii(exp, expa, c_f, data_n)`

声明：function

返回求表达式Exp的动态指数移动平均，Expa为衰减因子，与DSMA_I相比这里Expa为动态值，表达式数据类型。 与系统参数(证券、时间、周期、复权方式等)相关

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 DSMA_I -->

| 参数     | 类型         | 说明                                                                                                                                                                                     |
| -------- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `exp`    | t_expression | TExpression型表达式，指标表达式                                                                                                                                                          |
| `expa`   | t_expression | TExpression型表达式，衰减因子表达式，该表达式值域在[0,1]                                                                                                                                 |
| `c_f`    | string       | 字符串，缓存标志，区别X表达式与a表达式，若为nil则不进行缓存 特别说明:由于表达式无法区别，当调用DSMA_I求不同表达式的移动平均时， 若要缓存，需要用该标识来区别不同的表达式，以避免缓存误用 |
| `data_n` | integer      | 整型，向历史推移长度（一般>=100），若为nil或<=0,则默认推至上市日 若有效率要求，可设置该长度限制。 注:若dataN有长度限制，取时间序列（例如Nday)时，因有历史缓存，则推导长度可能会>dataN    |

返回：real

### 示例

范例01：计算SH603260在20180827日收盘价的按当日换手率加权的动态移动平均

```tsl
// 计算SH603260在20180827日收盘价的按当日换手率加权的动态移动平均。
endt := 20180827T;
Setsysparam(pn_stock(), 'SH603260');
setsysparam(pn_cycle(), cy_day());
Setsysparam(pn_date(), endt);
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), endt);
return DSMA_II(@close(), @stockhsl3()/100); // 不做缓存
```

范例02：取股票在一段时间内收盘价的动态移动平均

```tsl
// 取股票在一段时间内收盘价的动态移动平均。
begt := 20180801T;
endt := 20180827T;
Setsysparam(pn_stock(), 'SH603260');
setsysparam(pn_cycle(), cy_day());
Setsysparam(pn_date(), endt);
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), endt);
n := tradedays(begt, endt);
return nday(n, 'date', sp_time(), 'dma', DSMA_II(@close(), @stockhsl3()/100, 'close&stockhsl3')); // 缓存
```

范例03：第三个参数：若需要缓存，请注意，缓存标志是用户自己定义的串，不同表达式(表达式一，表达式二有任何不一致时)缓存字符串必须不一样，否则会计算错误

```tsl
setsysparam(pn_stock(), 'SZ002926'); // SZ002926
setsysparam(pn_date(), 20200113T); // 20180312T
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), 20200113T);
N := 30;
AA := @(2*CLOSE()+LOW()+HIGH())/4;
BB := @MA(CLOSE(), N);
CC := @(ABS(eval(AA)-eval(BB))/eval(BB));
DD := @stockzf3()/100;
// 第三个参数：若需要缓存，请注意，缓存标志是用户自己定义的串，不同表达式(表达式一，表达式二有任何不一致时)缓存字符串必须不一样，否则会计算错误
// 第四个参数：只向历史推导100次->对于表达式算法较为复杂的可考虑此用法
t1 := DSMA_II(AA, CC, 'aa');
t2 := DSMA_II(AA, CC, 'cc', 100);
t3 := DSMA_II(AA, DD, 'dd', 100);
return array(t1, t2, t3);
// 输出：array(10.65002510798311,10.6416859095779,9.390332085877599)
```

## `ema_f(n, type)`

声明：function

返回成本价均线

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数   | 类型    | 说明     |
| ------ | ------- | -------- |
| `n`    | integer | 天数     |
| `type` | integer | 结果类型 |

返回：real/table

### 示例

范例01：计算白云机场截止日2011年9月8日23天内的成本价均线

```tsl
// 计算白云机场截止日2011年9月8日23天内的成本价均线。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N := 23;
v := Ema_f(N, 0);
return v;
// 输出：7.26
```

范例02：计算白云机场截止2011年9月8日向前推总共5天，对每一天计算上述例子中的指标得到的结果序列

```tsl
// 计算白云机场截止2011年9月8日向前推总共5天，对每一天计算上述例子中的指标得到的结果序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N := 23;
v := Ema_f(N, 1);
return v;
```

## `hma_f(n, type)`

声明：function

返回最高价移动平均

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数   | 类型    | 说明     |
| ------ | ------- | -------- |
| `n`    | integer | 天数     |
| `type` | integer | 结果类型 |

返回：real/table

### 示例

范例01：计算白云机场截止日2011年9月8日的最高价移动平均

```tsl
// 计算白云机场截止日2011年9月8日的最高价移动平均。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N := 23;
v := Hma_f(N, 0);
return v;
// 输出：7.25
```

范例02：计算白云机场截止2011年9月8日向前推共5天的最高价移动平均序列

```tsl
// 计算白云机场截止2011年9月8日向前推共5天的最高价移动平均序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N := 23;
v := Hma_f(N, 1);
return v;
```

## `hullma(exp, n)`

声明：function

返回赫尔移动平均Hull Moving Average，HMA,与系统参数（股票、时间、周期、复权相关）

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 HMA -->

| 参数  | 类型    | 说明        |
| ----- | ------- | ----------- |
| `exp` | integer | 整型,表达式 |
| `n`   | integer | 整型,N日    |

返回：real

### 示例

范例01：调用 Hullma

```tsl
setsysparam(pn_stock(), 'SZ000002');
setsysparam(pn_date(), 20210629T);
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), 20210629T);
return HullMA(@close(), 180); // 输出：26.5981426744856
```

## `lma_f(n, type)`

声明：function

返回最低价移动平均

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 -->

| 参数   | 类型    | 说明     |
| ------ | ------- | -------- |
| `n`    | integer | 天数     |
| `type` | integer | 结果类型 |

返回：real/table

### 示例

范例01：计算白云机场截止日2011年9月8日的最低价移动平均

```tsl
// 计算白云机场截止日2011年9月8日的最低价移动平均。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
N := 23;
v := lma_f(N, 0);
return v;
// 输出：7.12
```

范例02：计算白云机场截止2011年9月8日向前推共5天的最低价移动平均序列

```tsl
// 计算白云机场截止2011年9月8日向前推共5天的最低价移动平均序列。
oV := BackUpSystemParameters2();
setsysparam(pn_stock(), 'SH600004');
setsysparam(pn_cycle(), cy_day());
setsysparam(pn_rate(), 0);
setsysparam(pn_date(), inttodate(20110908));
setsysparam(pn_nday(), 5);
N := 23;
v := lma_f(N, 1);
return v;
```

## `weightedma(exp, n)`

声明：function

返回线性加权移动平均(Weighted Moving Average, WMA),与系统参数（股票、时间、周期、复权相关）

<!-- tags: 金融 技术分析 均线指标 计算公式 返回 获取 WMA -->

| 参数  | 类型    | 说明        |
| ----- | ------- | ----------- |
| `exp` | integer | 整型,表达式 |
| `n`   | integer | 整型,N日    |

返回：real

### 示例

范例01：调用 Weightedma

```tsl
setsysparam(pn_stock(), 'SZ000002');
setsysparam(pn_date(), 20210629T);
setsysparam(pn_rate(), 1);
setsysparam(pn_rateday(), 20210629T);
return WeightedMA(@close(), 180);  // 输出：28.3411325966851
```
