# -*- coding: utf-8 -*-
import os
import pandas as pd # ========== 遍历数据文件夹中所有股票文件的文件名,得到股票代码列表stock_code_list
stock_code_list = []
for root, dirs, files in os.walk('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('stock data/' + code + '.csv',
parse_dates=[1])# 注意:这里请填写数据文件在您电脑中的路径
stock_data.sort('date', inplace=True)# 对数据按照【date】交易日期从小到大排序 # 计算KDJ指标
low_list = pd.rolling_min(stock_data['low'], 9)
low_list.fillna(value=pd.expanding_min(stock_data['low']), inplace=True)
high_list = pd.rolling_max(stock_data['high'], 9)
high_list.fillna(value=pd.expanding_max(stock_data['high']), inplace=True)
rsv = (stock_data['close'] - low_list) / (high_list - low_list) * 100
stock_data['KDJ_K'] = pd.ewma(rsv, com=2)
stock_data['KDJ_D'] = pd.ewma(stock_data['KDJ_K'], com=2)
stock_data['KDJ_J'] = 3 * stock_data['KDJ_K'] - 2 * stock_data['KDJ_D']
# 计算KDJ指标金叉、死叉情况
stock_data['KDJ_金叉死叉'] = ''
kdj_position = stock_data['KDJ_K'] > stock_data['KDJ_D']
stock_data.loc[kdj_position[(kdj_position == True) & (kdj_position.shift() == False)].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['adjust_price'].shift(-1*n) / stock_data['adjust_price'] - 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,统计这些股票在未来交易日中的收益情况
#print
print('历史上所有股票出现KDJ金叉的次数为%d,这些股票在:' %all_stock.shape[0])
#print for 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

以上是pandas0.17版本。

以下是pandas0.19版本。

import os
import pandas as pd # 从csv文件中读取该股票数据
stock_data = pd.read_csv('000078.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_K'] > stock_data['KDJ_D']
stock_data.loc[kdj_position[(kdj_position == True) & (kdj_position.shift() == False)].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_金叉死叉'] == '金叉')] print('历史上股票出现KDJ金叉的次数为%d,这些股票在:' %stock_data.shape[0])
for n in [1, 2, 3, 5, 10, 20]:
print('金叉之后的%d个交易日内,' % n)
print('平均涨幅为%.2f%%,' % (stock_data['接下来'+str(n)+'个交易日涨跌幅'].mean()*100))
print('其中上涨股票的比例是%.2f%%。' % \
(stock_data[stock_data['接下来'+str(n)+'个交易日涨跌幅'] > 0].shape[0]/float(stock_data.shape[0]) * 100))

KDJ金叉测试的更多相关文章

  1. Python量化分析,计算KDJ

    Python: v3.6 Pandas: v0.23.4 使用以下方法计算与国内财经软件显示一致 low_list = df['最低价'].rolling(9, min_periods=9).min( ...

  2. 操盘策略:KDJ三线合一 必定孕育大牛股

    日周月KDJ指标三周期合一是孕育大牛股的必要条件: 炒股看一下周.月线十分有必要,很多时候,周.月线已经死叉下行,中长线趋势走坏,但日线偏偏发出金叉,K线也走好,量价配合也好,而此时介入,多数情况下就 ...

  3. KDJ回测

    # -*- coding: utf-8 -*- import os import pandas as pd # ========== 遍历数据文件夹中所有股票文件的文件名,得到股票代码列表stock_ ...

  4. WeQuant交易策略—KDJ

    KDJ随机指标策略策略介绍KDJ指标又叫随机指标,是一种相当新颖.实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具.随机指标KDJ ...

  5. SQLite如何测试

    原文 http://www.sqlite.org/testing.html 目录 1. 介绍 1.1. 执行总结 2. 测试套件 3.异常测试 3.1 内存溢出测试 3.2 I/O错误测试 3.3 c ...

  6. MACD、BOLL、KDJ 三大组合精准把握趋势与买卖!

    先看示意图,下图是布林线的3个轨道,其他都是股价走势 图1 股价,在布林线上轨.下轨之间运作.准确说,这话是不符合逻辑的,不是先有的轨道,然后股价再按照轨道运动.因为轨道是跟股价同时变化的.但是,股价 ...

  7. SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]

    目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...

  8. Apache Ignite之集群应用测试

    集群发现机制 在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单.而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧. 在Apache ...

  9. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

随机推荐

  1. 软工实践 - 第二十七次作业 Beta 冲刺(5/7)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10134471.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...

  2. htm,html,xhtml,xml,xsl,dhtml,shtm和shtml的区分

    介绍一下htm,html,xhtml,xml,shtml的区分,以下内容来自百度后的知识整理. HTML和htm: HTML(Hypertext Markup Language)超文本传输语言,是ww ...

  3. 学习MVC中出现的一个BUG

    BUG描述:No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.S ...

  4. 处理大并发量订单处理的 KafKa部署总结

    处理大并发量订单处理的 KafKa部署总结 今天要介绍的是消息中间件KafKa,应该说是一个很牛的中间件吧,背靠Apache 与很多有名的中间件搭配起来用效果更好哦 ,为什么不用RabbitMQ,因为 ...

  5. poj3347 Kadj Squares (计算几何)

    D - Kadj Squares Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Su ...

  6. 【BZOJ 3907】网格 组合数学

    大家说他是卡特兰数,其实也不为过,一开始只是用卡特兰数来推这道题,一直没有怼出来,后来发现其实卡特兰数只不过是一种组合数学,我们可以退一步直接用组合数学来解决,这道题运用组合数的思想主要用到补集与几何 ...

  7. 线程 condition_variable

    http://www.cnblogs.com/haippy/p/3252041.html 理解wait():当前线程调用 wait() 后将被阻塞(此时当前线程应该获得了锁(mutex).在线程被阻塞 ...

  8. More on understanding sort_buffer_size

    There have been a few posts by Sheeri and Baron today on the MySQL sort_buffer_size variable. I want ...

  9. Educational Codeforces Round 11 A

    A. Co-prime Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  10. DIV + CSS问题收集

    div里面有三列数据,怎么让他竖向排列,在css中怎么设置 https://zhidao.baidu.com/question/712007772597664245.html css设置块元素在div ...