提交 8b94df79 编写于 作者: W wizardforcel

技术指标

上级 598fe00b
# 数据获取
## TuShare
获取 A 股数据。
安装(可能需要手动安装`lxml`):
```
pip install tushare
```
示例:
```py
import tushare as ts
ts.get_hist_data('600848') #一次性获取全部日k线数据
'''
open high close low volume p_change ma5 \
date
2012-01-11 6.880 7.380 7.060 6.880 14129.96 2.62 7.060
2012-01-12 7.050 7.100 6.980 6.900 7895.19 -1.13 7.020
2012-01-13 6.950 7.000 6.700 6.690 6611.87 -4.01 6.913
2012-01-16 6.680 6.750 6.510 6.480 2941.63 -2.84 6.813
2012-01-17 6.660 6.880 6.860 6.460 8642.57 5.38 6.822
2012-01-18 7.000 7.300 6.890 6.880 13075.40 0.44 6.788
2012-01-19 6.690 6.950 6.890 6.680 6117.32 0.00 6.770
2012-01-20 6.870 7.080 7.010 6.870 6813.09 1.74 6.832
ma10 ma20 v_ma5 v_ma10 v_ma20 turnover
date
2012-01-11 7.060 7.060 14129.96 14129.96 14129.96 0.48
2012-01-12 7.020 7.020 11012.58 11012.58 11012.58 0.27
2012-01-13 6.913 6.913 9545.67 9545.67 9545.67 0.23
2012-01-16 6.813 6.813 7894.66 7894.66 7894.66 0.10
2012-01-17 6.822 6.822 8044.24 8044.24 8044.24 0.30
2012-01-18 6.833 6.833 7833.33 8882.77 8882.77 0.45
2012-01-19 6.841 6.841 7477.76 8487.71 8487.71 0.21
2012-01-20 6.863 6.863 7518.00 8278.38 8278.38 0.23
'''
```
参数:
+ `code`:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
+ `start`:开始日期,格式YYYY-MM-DD
+ `end`:结束日期,格式YYYY-MM-DD
+ `ktype`:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
+ `retry_count`:当网络异常后重试次数,默认为3
+ `pause`:重试时停顿秒数,默认为0
返回值为`DataFrame`,列为:
+ `date`:日期
+ `open`:开盘价
+ `high`:最高价
+ `close`:收盘价
+ `low`:最低价
+ `volume`:成交量
+ `price_change`:价格变动
+ `p_change`:涨跌幅
+ `ma5`:5日均价
+ `ma10`:10日均价
+ `ma20`:20日均价
+ `v_ma5`:5日均量
+ `v_ma10`:10日均量
+ `v_ma20`:20日均量
+ `turnover`:换手率[注:指数无此项]
更多信息请见[官方文档](http://tushare.org/trading.html)
......@@ -2,7 +2,9 @@
这里是一些常见的技术指标。
这些指标不能单独使用,可以用于组成策略,或者用作模型的特征。
这些指标用于组成策略,或者用作模型的特征。
> 注:如果没有特殊说明,输入默认为收盘价。
## SMA(简单移动平均)
......@@ -97,3 +99,75 @@ def rsi(arr, wnd):
return sma(np.fmax(roc1, 0), wnd - 1) / \
sma(np.abs(roc1), wnd - 1)
```
## KDJ
首先计算 RSV,其中`c(t)`为收盘价,`l(t)`为最低价,`h(t)`为最高价。
$RSV(t) = \frac{c(t) - l(t)}{h(t) - l(t)}$
然后计算 K 和 D 值。
$K(t) = \frac{2}{3}K(t-1)+\frac{1}{3}RSV(t)$
$D(t) = \frac{2}{3}D(t-1)+\frac{1}{3}K(t)$
$K(1) = D(1) = 50$
最后计算 J 值。
$J(t) = 3K(t) - 2D(t)$
```py
def kdj(h, l, c):
assert len(h) == len(l) and \
len(l) == len(c)
rsv = (c - l) / (h - l)
k = np.zeros_like(rsv)
k[0] = 50
for i in range(1, len(k)):
k[i] = 2/3 * k[i - 1] + 1/3 * rsv[i]
d = np.zeros_like(k)
d[0] = 50
for i in range(1, len(d)):
d[i] = 2/3 * d[i - 1] + 1/3 * k[i]
j = 3 * k - 2 * d
return k, d, j
```
## CCI(顺势指标)
$TP(t) = \frac{h(t) + l(t) + c(t)}{3}$
$CCI(t,n) = \frac{TP(t) - SMA(t,n)}{0.015MSD(t,n)}$
```py
def cci(h, l, c, wnd):
assert len(h) == len(l) and \
len(l) == len(c)
tp = (h + l + c) / 3
tp = tp[wnd-1:]
sma_n = sma(c, n)
msd_n = msd(c, n)
return (tp - sma) / (0.015 * msd)
```
## MACD(移动平均聚散指标)
$DIF(t) = EMA(t, 12) - EMA(t, 26)$
$DEA(t) = EMA(DIF(t), 9)$
```py
def macd(arr):
dif = ema(arr, 12) - ema(arr, 26)
dea = ema(dif, 9)
return dif, dea
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册