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

下载数数据深沪6000多家公司、扩展因子、测试选股规则后,按照规则进行选股的过程。

选股规则

本文就选股规则所测试规则相同,即:

  • 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]
    

      

    结果分析

    选出的所有满足选股规则的股票,都会保存在csv文件中。
    本文发布日期为2021年6月23日,当日只选出2只符合条件的股票,耗时880秒,csv文件截图如下。

  • C:Python38python.exe F:/test/src/com/gzh/demo49.py
    sz002285
    sz300627
    程序所耗时间: 880.6239831447601
    

      

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



  • 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_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)
    

      

    为了便于相互交流学习,新建了微信群,感兴趣的读者请加微信。

原文地址:https://www.cnblogs.com/gzhbk/p/14922489.html