Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

增加20种常用的技术指标算法 #670

Merged
merged 1 commit into from
May 28, 2018
Merged

Conversation

liaocyintl-deprecated
Copy link
Contributor

@liaocyintl-deprecated liaocyintl-deprecated commented May 27, 2018

通过get_k_data()获取个股数据后,通过各个指标算法计算出相关数据。
包括MA,MD,EMA,MACD,KDJ,RSI,BOLL,WNR,DMI,BIAS,ASI,VR,ARBR,DPO,TRIX,BBI,MTM,OBV指标。
例1:获取工商银行(601398)自2018-01-01到2018-05-27的MACD指标:
import tushare as ts
data = ts.get_k_data("601398", start="2018-01-01", end="2018-05-27")
#数据按日期升序列排序
data = data.sort_values(by=["date"], ascending=True)
MACD = ts.indictor.macd(data, quick_n=12, slow_n=26, dem_n=9)

例2:绘制工商银行(601398)自2018-01-01到2018-05-27全部指标图表:
import tushare as ts
data = ts.get_k_data("601398", start="2018-01-01", end="2018-05-27")
data = data.sort_values(by=["date"], ascending=True)
ts.indictor.plot_all(data, is_show=True, output=None)

缺陷与注意事项:
1 只对计算结果正确性做了最初步的判断和检查,不能完全保证正确,需要金融界专业人士判断并指正。
2 一部分需要设置统计时长n,例如移动平均值MA(n=10),数据的前n条不可信,可以使用的有效数据应避开前n行。
3 其他指标将陆续添加。

输出图例:
601398

@jimmysoa jimmysoa merged commit 73c49f9 into waditu:master May 28, 2018
@wangzili
Copy link

@liaocyintl 文档中 “data:pandas.DataFrame
通过 get_h_data 取得的股票数据” 应该是通过get_k_data取得的股票数据吧

@liaocyintl-deprecated
Copy link
Contributor Author

@wangzili 是的不好意思。勘误,我改一下。

@wangzili
Copy link

@liaocyintl 1. 指标数据中ma函数计算结果是错误的,len(values)== n 应该改为 len(values) > n
2. ema函数中如果 get_k_data参数中start不从每年第一个交易日会报错,

    for index, row in enumerate(data.itertuples(index=False)):
        if index == 0:
            past_ema = getattr(row, val_name)
            EMA.append(getattr(row, val_name))
        else:
            # Y=[2*X+(N-1)*Y’]/(N+1)
            today_ema = (2 * getattr(row, val_name) + (n - 1) * past_ema) / (n + 1)
            past_ema = today_ema
            EMA.append(today_ema)

以上是我修改过的,虽然可能会因为数据量少而导致结果不准确

@liaocyintl-deprecated
Copy link
Contributor Author

@wangzili 感谢修正
第一个问题:
是的,我先前已发现并作出修正,请参考:
liaocyintl@3786cdb
显然您的大于判断要比我的n+1更鲁棒一些,我考虑修改我的代码
第二个问题:
我尽快看一下代码。

@wangzili
Copy link

好的,我其实对指标不是很专业,只是尝试在用

@hanwofacai
Copy link

在调用ema()方法的时候,出现未定义变量past_ema的错误。。

@liaocyintl-deprecated
Copy link
Contributor Author

df['kdj_d'] = kdj(df)[1]
请问是这样用的不,这算出来 跟同花顺上面的不一样啊。

Hi, 目前暂时没有时间做更新了,请使用 TA-lib 做指标计算,链接我放在下面:
http://ta-lib.org/

@liaocyintl-deprecated
Copy link
Contributor Author

在调用ema()方法的时候,出现未定义变量past_ema的错误。。

Hi, 目前暂时没有时间做更新了,请使用 TA-lib 做指标计算,链接我放在下面:
http://ta-lib.org/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants