1. 程式人生 > 其它 >Python量化交易學習筆記(十三)——按規則選股

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:\Python38\python.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)