问财量化选股策略逻辑
- 至少5根均线重合的股票
- 换手率>2%且<9%
- 高点为两日最高
选股逻辑分析
- 该策略主要关注均线的重合情况,寻找均线密集的股票,这通常意味着股票价格走势比较稳定,比较容易出现趋势行情。
- 换手率的要求是为了筛选出比较活跃的股票,避免僵尸股。
- 高点为两日最高是为了筛选出短期涨幅比较大的股票,同时也避免了过快的上涨导致的回调风险。
有何风险?
- 该策略主要关注短期趋势,对于长期趋势的把握可能不够准确。
- 筛选出的股票可能存在较高的换手率,可能会导致交易成本的增加。
- 筛选出的股票可能存在较高的波动性,可能会导致交易风险的增加。
如何优化?
- 可以考虑加入更多均线的组合,例如10日、20日、60日等,以更好地把握趋势。
- 可以考虑加入成交量指标,以更好地筛选出活跃的股票。
- 可以考虑加入技术指标,例如MACD、RSI等,以更好地判断股票的走势。
最终的选股逻辑
- 选取至少5根均线重合的股票,例如5日、10日、20日、60日、120日均线重合的股票。
- 检查股票的换手率是否大于2%且小于9%。
- 检查股票的高点是否为两日最高。
- 如果满足以上条件,则将该股票加入股票池。
python代码参考
- 以下代码使用了问财量化交易的pandas库和ta-lib库。
import pandas as pd
import talib
def get_stock_data(stock_code):
# 获取股票的历史数据
df = pd.read_csv(f'https://query1.finance.yahoo.com/v7/finance/download/{stock_code}', index_col='Date')
df = df[['Adj Close']]
df = df.rename(columns={'Adj Close': stock_code})
df = df.set_index('Date')
return df
def get_stock_info(stock_code):
# 获取股票的基本信息
df = pd.read_csv(f'https://query1.finance.yahoo.com/v7/finance/quote/{stock_code}', index_col='Date')
df = df[['Open', 'High', 'Low', 'Close', 'Volume']]
df = df.rename(columns={'Open': 'Open Price', 'High': 'High Price', 'Low': 'Low Price', 'Close': 'Closing Price', 'Volume': 'Trading Volume'})
df = df.set_index('Date')
return df
def get_moving_average(df, n):
# 计算n日的移动平均线
ma = talib.MA(df, timeperiod=n)
return ma
def get_stock_pool():
# 获取所有A股的股票代码
codes = list(set(df['ts_code']))
df_pool = pd.DataFrame(index=codes)
return df_pool
def get_stock_data_pool():
# 获取所有A股的历史数据
df_pool = get_stock_pool()
df_pool = df_pool.apply(get_stock_data)
return df_pool
def get_stock_info_pool():
# 获取所有A股的基本信息
df_pool = get_stock_pool()
df_pool = df_pool.apply(get_stock_info)
return df_pool
def get_rolling_window(df, n):
# 获取n日的滚动窗口
df = df.rolling(window=n).mean()
return df
def get_rolling_window_moving_average(df, n):
# 获取n日的滚动窗口移动平均线
ma = talib.MA(df.rolling(window=n).mean(), timeperiod=n)
return ma
def get_stock_pool筛选条件(df_pool, n):
# 获取满足n日均线重合的股票
df = df_pool.copy()
df['5MA'] = get_rolling_window_moving_average(df, n)
df['10MA'] = get_rolling_window_moving_average(df, n)
df['20MA'] = get_rolling_window_moving_average(df, n)
df['60MA'] = get_rolling_window_moving_average(df, n)
df['120MA'] = get_rolling_window_moving_average(df, n)
df = df[df['5MA'] == df['10MA'] == df['20MA'] == df['60MA'] == df['120MA']]
return df
def get_stock_pool筛选条件2(df_pool, n):
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
