博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KDJ回测
阅读量:6182 次
发布时间:2019-06-21

本文共 2482 字,大约阅读时间需要 8 分钟。

# -*- coding: utf-8 -*-import osimport pandas as pd# ========== 遍历数据文件夹中所有股票文件的文件名,得到股票代码列表stock_code_liststock_code_list = []for root, dirs, files in os.walk('all_stock_data'):# 注意:这里请填写数据文件在您电脑中的路径    if files:        for f in files:            if '.csv' in f:                stock_code_list.append(f.split('.csv')[0])# ========== 根据上一步得到的代码列表,遍历所有股票,将这些股票合并到一张表格all_stock中all_stock = pd.DataFrame()# 遍历每个创业板的股票for code in stock_code_list:    print(code)    # 从csv文件中读取该股票数据    stock_data = pd.read_csv('all_stock_data/' + code + '.csv',                             parse_dates=[1],encoding='gbk')    stock_data.sort_values('日期', inplace=True)    # 计算KDJ指标    low_list=stock_data['最低价'].rolling(window=9).min()    low_list.fillna(value=stock_data['最低价'].expanding().min(), inplace=True)    high_list = stock_data['最高价'].rolling(window=9).max()    high_list.fillna(value=stock_data['最高价'].expanding().max(), inplace=True)    rsv = (stock_data['收盘价'] - low_list) / (high_list - low_list) * 100    stock_data['KDJ_K'] = rsv.ewm(com=2).mean()    stock_data['KDJ_D'] = stock_data['KDJ_K'].ewm(com=2).mean()    stock_data['KDJ_J'] = 3 * stock_data['KDJ_K'] - 2 * stock_data['KDJ_D']    # 计算KDJ指标金叉、死叉情况    stock_data['KDJ_金叉死叉'] = ''    kdj_position = stock_data['KDJ_J'] > 0    p2 = stock_data['成交量'] < stock_data['成交量'].shift()#shift()表示昨天如果按早到晚排序,参数为正,表示前些天,参数为负,表现后些天    stock_data.loc[kdj_position[(kdj_position == True) & (kdj_position.shift() == False)&p2==True].index, 'KDJ_金叉死叉'] = '金叉'    stock_data.loc[kdj_position[(kdj_position == False) & (kdj_position.shift() == True)].index, 'KDJ_金叉死叉'] = '死叉'    # 计算接下来几个交易日的收益率    for n in [1, 2, 3, 5, 10, 20]:        stock_data['接下来'+str(n)+'个交易日涨跌幅'] = stock_data['收盘价'].shift(-1*n) / stock_data['收盘价'] - 1.0    # 删除所有有空值的数据行    stock_data.dropna(how='any', inplace=True)    # 筛选出KDJ金叉的数据,并将这些数据合并到all_stock中    stock_data = stock_data[(stock_data['KDJ_金叉死叉'] == '金叉')]    if stock_data.empty:        continue    all_stock = all_stock.append(stock_data, ignore_index=True)# ========== 根据上一步得到的所有股票KDJ金叉数据all_stock,统计这些股票在未来交易日中的收益情况#printprint('历史上所有股票出现KDJ金叉的次数为%d,这些股票在:' %all_stock.shape[0])#printfor n in [1, 2, 3, 5, 10, 20]:    print("金叉之后的%d个交易日内," % n)    print("平均涨幅为%.2f%%," % (all_stock['接下来'+str(n)+'个交易日涨跌幅'].mean() * 100))    print("其中上涨股票的比例是%.2f%%。" % \          (all_stock[all_stock['接下来'+str(n)+'个交易日涨跌幅'] > 0].shape[0]/float(all_stock.shape[0]) * 100))    #print

 

转载于:https://www.cnblogs.com/wumac/p/6240934.html

你可能感兴趣的文章
AngularJS分别RequireJS做文件合并压缩的那些坑
查看>>
外网访问内网Jetty
查看>>
javascript 中 parentNode,childNodes、children 应用
查看>>
Codeigniter + Doctrine + Smarty 如虎添翼!
查看>>
sigprocmask和sigpending函数
查看>>
tomcat 由于虚拟内存不够无法启动 解决办法
查看>>
我的友情链接
查看>>
Zabbix监控Memcached PHP-FPM Tomcat Nginx MySQL 网站日志
查看>>
Linux 配置 ftp服务碰到的几个问题
查看>>
oracle expdp导出指定表的部分数据
查看>>
python利用新浪API实现数据的抓取\python微博数据爬虫
查看>>
Endless icon: 每天都更新的图标集
查看>>
DedeCMS织梦自定义表单发送指定邮件
查看>>
17种新型的响应式开发框架
查看>>
关于mysql的笔记-1
查看>>
linux tigase (IM服务器)安装
查看>>
Reverse Nodes in k-Group
查看>>
通用二进制格式安装mariadb
查看>>
j2ee 简单网站搭建:(四)将 freemaker 模板引擎作为 spring-mvc 展现层
查看>>
异步社区本周半价电子书
查看>>