Python量化交易学习笔记(49)——按规则选股

本文记录按照笔记464748下载数据、扩展因子、测试选股规则后,按照规则进行选股的过程。

选股规则

本文就选股规则与笔记48所测试规则相同,即:

  • 2日前倍量暴涨9%以上。
  • 随后两日缩量调整。
  • 收盘价在20日线上方。
  • 20、30、60、120、250日线多头排列。

选股规则代码如下:

        condition = df['value_boom_2a'].iloc[-1] and \
                    df['volume_2a'].iloc[-1] >= 2 * df['volume_3a'].iloc[-1] and \
                    df['volume_2a'].iloc[-1] > df['volume_1a'].iloc[-1] and \
                    df['volume_2a'].iloc[-1] > df['volume'].iloc[-1] and \
                    df['close'].iloc[-1] < df['close_2a'].iloc[-1] and \
                    df['close_1a'].iloc[-1] < df['close_2a'].iloc[-1] and \
                    df['close'].iloc[-1] > df['ma_20'].iloc[-1] and df['ma_30'].iloc[-1] > df['ma_60'].iloc[-1] \
                    > df['ma_120'].iloc[-1] > df['ma_250'].iloc[-1]

可以看出,选股规则代码与笔记48进行规则测试代码非常相近,只是把所有的iloc索引值变成了-1,即只访问所有股票数据最后一行,也就是当前收盘后的数据。

结果分析

选出的所有满足选股规则的股票,都会保存在csv文件中。
本文发布日期为2021年1月20日,当日只选出1只符合条件的股票,耗时156.9秒,csv文件截图如下。
在这里插入图片描述
来看一下300243的日线图。
在这里插入图片描述
1月18日倍量暴涨,然后19日、20日两天缩量回调,收盘价位于20日线上方,20、30、60、120、250日线多头排列,满足选股条件。

小结

通过近4篇笔记,走通了基于历史数据的规则验证以及选股流程。这样就可以先找到靠谱的规则,然后在每日盘后自动选出满足规则的股票,再做交易。有历史数据分析做支撑,至少不会成为韭菜里最高的那一波。

完整代码:

import datetime
import time
import sys
import os
import pandas as pd

# 获取当前目录
proj_path = os.path.dirname(os.path.abspath(sys.argv[0])) + '/../'

if __name__ == '__main__':
    # 程序开始时的时间
    time_start = time.time()
    # 读入股票代码
    stk_code_file = proj_path + 'data/tdx/all_stock_codes.csv'
    codes = pd.read_csv(stk_code_file, encoding='unicode_escape')['code']
    code_list = []
    for code in codes:
        input_file = proj_path + 'data/extension/d/hard_rules/' + code + '.csv'
        df = pd.read_csv(input_file, index_col=0)
        condition = df['value_boom_2a'].iloc[-1] and \
                    df['volume_2a'].iloc[-1] >= 2 * df['volume_3a'].iloc[-1] and \
                    df['volume_2a'].iloc[-1] > df['volume_1a'].iloc[-1] and \
                    df['volume_2a'].iloc[-1] > df['volume'].iloc[-1] and \
                    df['close'].iloc[-1] < df['close_2a'].iloc[-1] and \
                    df['close_1a'].iloc[-1] < df['close_2a'].iloc[-1] and \
                    df['close'].iloc[-1] > df['ma_20'].iloc[-1] and df['ma_30'].iloc[-1] > df['ma_60'].iloc[-1] \
                    > df['ma_120'].iloc[-1] > df['ma_250'].iloc[-1]
        if condition:
            code_list.append(code)
            print(code)
    pd.DataFrame(data=code_list, columns=['code']).to_csv(proj_path + 'data/temp/' + datetime.datetime.strftime(
        datetime.datetime.now(), '%Y-%m-%d-%H-%M-%S') + '.csv', index=False)
    # 程序结束时系统时间
    time_end = time.time()
    print('程序所耗时间:', time_end - time_start)

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

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

微信二维码微信捐赠二维码
在这里插入图片描述在这里插入图片描述
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值