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
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
时间: 2024-10-27 10:41:56

KDJ回测的相关文章

用Python编写的第一个回测程序

2016-08-06 1 def savfig(figureObj, fn_prefix1='backtest8', fn_prefix2='_1_'): 2 import datetime 3 fmt= '%Y_%m_%d_%H_%M_%S' 4 now = datetime.datetime.now() 5 fname_savfig = fn_prefix1 + fn_prefix2 + now.strftime(fmt)+ '.png' 6 figureObj.savefig(fname_

量化投资策略:常见的几种Python回测框架(库)

量化投资策略:常见的几种Python回测框架(库) 原文地址:http://blog.csdn.net/lawme/article/details/51454237 本文章为转载文章.这段时间在研究量化策略方向,研究了Zipline一段时间,但是后续发现他仅支持美国股票,收集量化策略文章,转载到博客中. 在实盘交易之前,必须对量化交易策略进行回测.在此,我们评价一下常用的Python回测框架(库).评价的尺度包括用途范围(回测.虚盘交易.实盘交易),易用程度(结构良好.文档完整)和扩展性(速度快

VNPY回测流程

又是好久没更新了,2月这一个月,工作上也忙,正好也是过年.加上前一段时间,一直在爬取某眼查的数据. 对VNPY的使用时间就减少了,不过最近还是完成了vnpy回测结构的思维导图.如下: 值得注意的是,vnpy本身提供两种回测统计功能:1.按日统计结果 2.按笔统计结果 这两种统计都是单利统计,与实盘操作上略有不同. 大家有需要的话,可以自己行改成复利统计,只需要在每笔的净利润上乘以手数,然后加总当前资金,得出新的当前资金,然后使用新的当前资金和仓位计算下笔开开仓手数即可. 最后还是老规矩,附上xm

如何减轻软件开发的回测压力?Facebook 已经用上了机器学习

如何减轻软件开发的回测压力,从而提高工程师的生产效率?MATEUSZ MACHALICA.ALEX SAMYLKIN 等人组成的 Facebook 研究团队提出使用一个利用机器学习的新系统来创建一个为特定代码更改选择回归测试的概率模型,从而更好地执行这种回归测试. 为了高效地开发新产品特征和更新,Facebook 研究团队使用基于主干的开发模型来管理对代码库的改动.一旦一位工程师的代码更改被接入主分支(主干),他们试图让它对从事该产品或服务的其他工程师快速可见.这种基于主干的开发模型比使用特征分

大类资产配置和历史回测服务流程图

大类资产配置1.1 流程图1.1 数据来源表需要返回数据为prdList,数据类型为List<dtl82013>,其中dtl82013的详细情况如下所示:字段 数据来源 说明prdId model server prdName DB query 查询fund_info表subCtgId model server amt model server weight model server 历史回测2.1 流程图2.2 数据来源表需要返回数据为testList(List<dtl82002>

量化学习 | GTquant量化回测框架之双均线策略(一)

做过量化投资或者对量化投资感兴趣的朋友想必对双均线策略是非常熟悉了. 作为技术分析中最基本的策略,双均线策略大概就是新手村的第一个任务,所以作为本系列第一篇,我们也从双均线策略开始吧! 双均线策略是非常经典的趋势交易策略,它的构造方式也非常简单:计算长期和短期均线,短线上穿长线则是买入信号,反之则为卖出信号.别看它简单,有的基金公司就是靠这两条线,赚了很多的钱呢! 均线,顾名思义就是平均线(好像说了一句废话..) 举个例子??,5日均线就是对前五日股票收盘价进行平均.比如下图中,蓝线为某股票每日

用Python徒手撸一个股票回测框架

通过纯Python完成股票回测框架的搭建. 什么是回测框架? 无论是传统股票交易还是量化交易,无法避免的一个问题是我们需要检验自己的交易策略是否可行,而最简单的方式就是利用历史数据检验交易策略,而回测框架就是提供这样的一个平台让交易策略在历史数据中不断交易,最终生成最终结果,通过查看结果的策略收益,年化收益,最大回测等用以评估交易策略的可行性. 代码地址在最后. 本项目并不是一个已完善的项目, 还在不断的完善. 回测框架 回测框架应该至少包含两个部分, 回测类, 交易类.回测类提供各种钩子函数,

市场回测与对冲套利

市场回测与对冲套利 冲套利交易:买入某种商品(合约),同时卖出的另一种商品(合约) ,赚取合约的价差. 套利交易特点:逻辑性 从套利机制上讲,商品期货的套利划分为两种套利类型:内因套利和关联套利 内因套利:是指当商品期货投资对象间价格关系因某种原因过分背离时,通过内在纠正力量而产生的套利行为. 例如:大豆和豆油期货的价格同向波动 :黄金和珠宝 关联套利:是指套利对象之间没有必然的内因约束,但价格受共同因素所主导,但受影响的程度不同,通过两种对象对同一影响因素表现不同而建立的套利关系称之为关联套利

RiceQuant米筐量化回测框架介绍

RiceQuant米筐量化回测框架介绍 一.RiceQuant平台 网址:https://www.ricequant.com/welcome/ 二.策略创建流程 1.1 创建策略 1.2 策略界面 2 完成一个策略所需做的事 选择策略的运行基本条件: 运行区间.初始资金 回测频率 编写策略: 选择的股票池 获取股票的行情.基本面数据 交易时间.数量的设置 分析回测结果: 策略指标的分析 2.1策略初始设置 基础设置:指定回测的起止日期.初始资金及回测频率 起止日期:策略运行的时间区间(自动选择交