问财量化选股策略逻辑
- 今日增仓占比>5%
- 三连阴
- 100亿市值以内的无亏损企业
选股逻辑分析
- 今日增仓占比>5%:说明该股票在最近一段时间内有较多的机构投资者买入,这可能是由于该股票具有良好的投资价值或者市场预期。
- 三连阴:说明该股票在过去三天内连续下跌,这可能是由于市场对该股票的负面情绪或者市场走势的影响。
- 100亿市值以内的无亏损企业:说明该股票的市值较小,同时在过去没有出现亏损,这可能是由于该股票具有良好的基本面和盈利能力。
有何风险?
- 该策略可能会忽略一些具有潜力的股票,因为它们可能不符合这些条件。
- 该策略可能会过于保守,因为只有在股票价格下跌超过一定幅度时才会触发买入信号。
- 该策略可能会受到市场噪音的影响,因为股票价格的波动可能会导致机构投资者的增仓比例和股票价格的下跌程度出现较大的波动。
如何优化?
- 可以考虑加入更多的筛选条件,例如盈利能力、市盈率等,以更好地筛选具有潜力的股票。
- 可以考虑加入更多的技术分析指标,例如布林线、移动平均线等,以更好地判断股票价格的趋势和支撑位。
- 可以考虑加入更多的市场情绪指标,例如恐慌指数、贪婪指数等,以更好地判断市场情绪和市场走势。
最终的选股逻辑
- 今日增仓占比>5%
- 三连阴
- 100亿市值以内的无亏损企业
- 收益率>10%
- 盈利能力>20%
- 市盈率<20
python代码参考
import talib
import pandas as pd
def get_data():
# 获取股票数据
df = pd.read_csv('stock_data.csv')
# 计算今日增仓占比
df['today_percent_increase'] = df['net_percent_increase'] / df['avg_daily_volume'] * 100
# 计算三连阴
df['has_three_consecutive_days_loss'] = df['close'].diff() < 0.05 * df['close'].shift(1)
# 计算市值
df['market_cap'] = df['close'] * df['num_shares'] * df['float市值']
# 计算无亏损企业
df['has_no_loss'] = df['close'] > df['close'].shift(1)
# 计算收益率
df['return'] = df['close'] / df['close'].shift(1) - 1
# 计算盈利能力
df['profit_margin'] = df['net_income'] / df['revenue']
# 计算市盈率
df['pe_ratio'] = df['close'] / df['earnings_per_share']
# 返回数据框
return df
def get_signal(df):
# 获取今日增仓占比
today_percent_increase = df['today_percent_increase']
# 获取三连阴
has_three_consecutive_days_loss = df['has_three_consecutive_days_loss']
# 获取市值
market_cap = df['market_cap']
# 获取无亏损企业
has_no_loss = df['has_no_loss']
# 获取收益率
return df[df['today_percent_increase'] > 5][df['has_three_consecutive_days_loss']][df['market_cap'] < 100][df['has_no_loss']][df['return'] > 10]
def optimize_strategy(df):
# 计算收益率和盈亏比
df['return'] = df['return'].abs()
df['return_to_loss'] = df['return'] / df['return'].abs()
# 计算加权平均收益率
weights = df['return_to_loss'].rank(pct=True, ascending=False)
df['weighted_return'] = df['return'] * weights
# 计算组合收益
df['组合收益'] = df['weighted_return'].cumsum()
# 返回数据框
return df
def get_optimized_signal(df):
# 获取优化后的信号
df = optimize_strategy(df)
return df[df['组合收益'] > 0]
def main():
# 获取数据
df = get_data()
# 获取信号
signal = get_signal(df)
# 输出信号
print(signal)
if __name__ == '__main__':
main()
如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
如果有任何问题请添加 下方的二维码进群提问。


