KDJ回测
# -*- coding: utf-8 -*- import os
import pandas as pd # ========== 遍历数据文件夹中所有股票文件的文件名,得到股票代码列表stock_code_list
stock_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,统计这些股票在未来交易日中的收益情况
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))
KDJ回测的更多相关文章
- 用Python编写的第一个回测程序
用Python编写的第一个回测程序 2016-08-06 def savfig(figureObj, fn_prefix1='backtest8', fn_prefix2='_1_'): import ...
- WeQuant比特币交易策略回测记录
程序参数 PARAMS = { "start_time": "2017-02-01 00:00:00", "end_time": " ...
- 量化投资:第8节 A股市场的回测
作者: 阿布 阿布量化版权所有 未经允许 禁止转载 abu量化系统github地址(欢迎+star) 本节ipython notebook 之前的小节回测示例都是使用美股,本节示例A股市场的回测. 买 ...
- 量化框架zipline--分钟回测改写
转自:http://www.cnblogs.com/dxf813/p/7845398.html 基于zipline的分钟回测改写,其中数据源为自定义,使用bcolz的ctable,该数据格式与pand ...
- VNPY回测流程
又是好久没更新了,2月这一个月,工作上也忙,正好也是过年.加上前一段时间,一直在爬取某眼查的数据. 对VNPY的使用时间就减少了,不过最近还是完成了vnpy回测结构的思维导图.如下: 值得注意的是,v ...
- 量化投资策略:常见的几种Python回测框架(库)
量化投资策略:常见的几种Python回测框架(库) 原文地址:http://blog.csdn.net/lawme/article/details/51454237 本文章为转载文章.这段时间在研究量 ...
- 回测框架pybacktest简介(一)
pybacktest 教程 本教程让你快速了解 pybacktest's 的功能.为此,我们回测精典交易策略移动平均线MA交叉. MA快线上穿慢线时,买进做多 MA快线下穿慢线时,卖出做空 进场规则, ...
- 回测框架pybacktest简介(二)
pybacktest 的疑点 第(一)节“教程”原文,是用 ipython notebook 写成,程序代码是一些片段组成. 为了阅读方便,合并在一起. 本文转载于:http://blog.csdn. ...
- OnePy--构建属于自己的量化回测框架
本文主要记录我构建量化回测系统的学习历程. 被遗弃的项目:Chandlercjy/OnePy_Old 新更新中的项目:Chandlercjy/OnePy 目录 1. 那究竟应该学习哪种编程语言比较好呢 ...
随机推荐
- 编程练习:寻找发帖"水王"扩展问题一
回顾 寻找发帖水王的问题总结起来就是在一个数组中某一个元素出现次数超过了数组长度的一半,那么可以很顺利的找到这个元素,实现见"编程练习:寻找发帖水王" 扩展 上面的问题中,强调了某 ...
- P1404 平均数
题目描述 给一个长度为n的数列,我们需要找出该数列的一个子串,使得子串平均数最大化,并且子串长度>=m. 输入输出格式 输入格式: N+1行, 第一行两个整数n和m 接下来n行,每行一个整数a[ ...
- [洛谷P1407][国家集训队]稳定婚姻
题目大意:有$n$对夫妻和$m$对情人,如果一对情人中的两人都离婚了,那么他们可以结为夫妻.对于每一对夫妻,若他们离婚后所有人依然可以结婚,那么就是不安全的,否则是安全的.问每一对夫妻是否安全. 题解 ...
- [CF1019A]Elections
题目大意:有$n$个人,$m$个政党,每个人都想投一个政党,但可以用一定的钱让他选你想让他选的政党. 现在要$1$号政党获胜,获胜的条件是:票数严格大于其他所有政党.求最小代价 题解:暴力枚举其他政党 ...
- 12.25模拟赛T3
可以发现,答案O(根号)(因为链上答案最大,n/2,n/3...根号种) 每次求答案要二分 优秀的做法是: 对于小于根号n的暴力nlogn找,可能二分到同一个mid,记忆化一下最小的tot值 对于大于 ...
- CSS3边框会动的信封
<!DOCTYPE html><html> <head> <title>酷炫的CSS3</title> <meta charset=& ...
- Tumblr:150亿月浏览量背后的架构挑战
Tumblr:150亿月浏览量背后的架构挑战 2013/04/08 · IT技术, 开发 · 9.9K 阅读 · HBase, Tumblr, 架构 英文原文:High Scalability,编译: ...
- APP兼容性测试
一.APP兼容性范围以及问题 1.硬件 各个硬件结构 2.软硬件之间 硬件dll库(C++) 软硬件之间的通信,各个厂商提供的ROM 3.软件 浏览器.操作系统.数据库.手机.功能兼容性(功能修改,二 ...
- ubuntu12.04回归到经典的gnome界面
要想删除Unity恢复到经典Gnome桌面也很简单,几乎就是一条命令的事情--命令这种东西虽然不直观,但非常可靠和快捷,同时按住Ctrl+Alt+T三个键,调出系统终端,输入: sudoapt-get ...
- SpringBoot入门学习(一): Idea 创建 SpringBoot 的 HelloWorld
创建项目: 项目结构: 程序启动入口: 正式开始: package com.example.demo; import org.springframework.boot.SpringApplicatio ...