Python量化交易學習筆記(十三)——按規則選股
阿新 • • 發佈:2021-06-23
下載數資料深滬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)