本文记录按照笔记46、47、48下载数据、扩展因子、测试选股规则后,按照规则进行选股的过程。
本文就选股规则与笔记48所测试规则相同,即:
选股规则代码如下:
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)用于资料共享,欢迎加入!