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)

欢迎大家关注、点赞、转发、留言,感谢支持!
微信群用于学习交流,感兴趣的读者请扫码加微信!
QQ群(676186743)用于资料共享,欢迎加入!

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46603114/article/details/112911293
今日推荐