Python量化交易学习笔记(16)——策略筛股

在完成指标计算之后,我们就可以写程序遍历所有股票数据,来筛选出满足条件股票了。

在笔记(14)中,我们看到在几组回测实验中,选取5日线及60日线的金叉买入、死叉卖出策略,最终能获取最高(仅限于几组实验数据)的资产。本文将尝试选取出前一日5日线金叉60日线的股票。

实验数据截止至2020年3月20日,即我们的策略要选取截止至2020年3月20日,最新的两根K线出现5日线金叉60日线的股票,相关代码为:

# 判断金叉
def golden_crossover(df, fast, slow):
    # K线数目不足,次新股
    if df.shape[0] < slow:
        return False
    # 技术指标名称    
    fast_indicator = 'ma_%d' % fast
    slow_indicator = 'ma_%d' % slow
    # 最后一日短期均线在长期均线上方,且倒数第二日短期均线在长期均线下方
    return df[fast_indicator][df.index[0]] > df[slow_indicator][df.index[0]] \
        and df[fast_indicator][df.index[1]] < df[slow_indicator][df.index[1]

如果股票数据满足金叉条件,代码返回True,否则返回False。代码先判断当前股票的K线是否能计算出长期均线的值,来排除一些次新股K线数目不足的干扰。然后通过比较最后两日短期均线和长期均线的关系来判断是否金叉。

通过遍历股票数据,共筛选出满足条件股票25只:000150,000720,…,603633,603955。

我们来抽两只看下K线图,观察最后两根K线及均线情况,白色均线为5日线,黄色均线为60日线。

000150:
在这里插入图片描述
603633:
在这里插入图片描述
可以看到,两只股票在3月20日均出现5日线与60日线的金叉,验证了我们程序的正确性。

友情提示:本系列学习笔记只做数据分析,记录个人学习过程,不作为交易依据,盈亏自负。

策略筛股代码:

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)
import datetime  # 用于datetime对象操作
import os.path  # 用于管理路径
import sys  # 用于在argvTo[0]中找到脚本名称
import pandas as pd

# 判断金叉
def golden_crossover(df, fast, slow):
    # K线数目不足,次新股
    if df.shape[0] < slow:
        return False
    # 技术指标名称    
    fast_indicator = 'ma_%d' % fast
    slow_indicator = 'ma_%d' % slow
    # 最后一日短期均线在长期均线上方,且倒数第二日短期均线在长期均线下方
    return df[fast_indicator][df.index[0]] > df[slow_indicator][df.index[0]] \
        and df[fast_indicator][df.index[1]] < df[slow_indicator][df.index[1]]

# 读入股票代码
stk_code_file = '../TQDat/TQDown2020v1/data/stock_code_update.csv'
stk_pools = pd.read_csv(stk_code_file, encoding = 'gbk')
out_df = pd.DataFrame(columns=['code'], dtype = str)
# 对每个股票进行判断
for stk_code in stk_pools['code']:
    stk_code = '%06d' % stk_code
    # 读入数据
    input_file = './tmp/' + stk_code + '.csv'
    df = pd.read_csv(input_file, index_col = 0)
    df = df.sort_index(ascending = False)
    if golden_crossover(df, 5, 60):
        out_df = out_df.append({'code': stk_code}, ignore_index = True)
        print(stk_code)
out_df.to_csv('./output/stock_picking.csv')

博客内容只用于交流学习,不构成投资建议,盈亏自负!

个人博客:http://coderx.com.cn/(优先更新)
项目最新代码:https://gitee.com/sl/quant_from_scratch
欢迎大家转发、留言。有微信群用于学习交流,感兴趣的读者请扫码加微信!
如果认为博客对您有帮助,可以扫码进行捐赠,感谢!

微信二维码微信捐赠二维码
在这里插入图片描述在这里插入图片描述
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值