(同花顺量化)100亿市值以内的无亏损企业_、开盘价在十日线左右、至少5根均线重合的股票

用户头像神盾局量子研究部
2023-08-31 发布

问财量化选股策略逻辑

  • 至少5根均线重合的股票
  • 开盘价在十日线左右
  • 100亿市值以内的无亏损企业

选股逻辑分析

  • 5根均线重合代表短期和中期趋势较为一致,有利于股票的稳定性和上涨潜力。
  • 开盘价在十日线左右,说明股票价格较为稳定,且具有一定的支撑力。
  • 100亿市值以内的无亏损企业,说明公司的经营状况较好,具有较好的投资价值。

有何风险?

  • 仅考虑了短期和中期趋势,忽略了长期趋势的影响。
  • 仅考虑了股票价格的稳定性和支撑力,忽略了其他因素的影响,如行业景气度、公司财务状况等。
  • 仅考虑了市值大小,忽略了其他因素的影响,如公司盈利能力、市场份额等。

如何优化?

  • 将长期趋势也纳入考虑,可以使用趋势指标如MACD等来判断。
  • 将其他因素也纳入考虑,可以使用财务指标如ROE、PB等来判断。
  • 将市值大小与盈利能力、市场份额等其他因素进行综合考虑,可以使用多因素量化策略来判断。

最终的选股逻辑

  • 使用5日、10日、20日、30日、60日均线,判断股票短期和中期趋势的重合度。
  • 使用开盘价与十日线的差值,判断股票价格的稳定性和支撑力。
  • 使用公司盈利能力、市场份额等其他因素,综合判断股票的投资价值。
  • 使用市值大小作为筛选条件,选择100亿市值以内的股票。

python代码参考

  • 以下是使用pandas和numpy库实现的代码示例:
import pandas as pd
import numpy as np

def get_ma_data(stock_data, n):
    ma_data = pd.DataFrame(index=stock_data.index)
    ma_data['ma_5'] = stock_data['close'].rolling(n).mean()
    ma_data['ma_10'] = stock_data['close'].rolling(n).mean()
    ma_data['ma_20'] = stock_data['close'].rolling(n).mean()
    ma_data['ma_30'] = stock_data['close'].rolling(n).mean()
    ma_data['ma_60'] = stock_data['close'].rolling(n).mean()
    return ma_data

def get_price_data(stock_data, n):
    price_data = pd.DataFrame(index=stock_data.index)
    price_data['price'] = stock_data['close']
    price_data['price_diff'] = price_data['price'] - price_data['close'].rolling(n).mean()
    return price_data

def get_factor_data(stock_data, factor_list):
    factor_data = pd.DataFrame(index=stock_data.index)
    for factor in factor_list:
        factor_data[factor] = stock_data[factor]
    return factor_data

def get筛选条件(data, n):
    ma_data = get_ma_data(data, n)
    price_data = get_price_data(data, n)
    factor_data = get_factor_data(data, ['ROE', 'PB'])
    return ma_data, price_data, factor_data

def get筛选结果(data, ma_data, price_data, factor_data):
    ma_data['筛选'] = ma_data.apply(lambda x: 1 if x['ma_5'] > x['ma_10'] and x['ma_10'] > x['ma_20'] and x['ma_20'] > x['ma_30'] and x['ma_30'] > x['ma_60'] else 0, axis=1)
    price_data['筛选'] = price_data.apply(lambda x: 1 if x['price_diff'] > 0 else 0, axis=1)
    factor_data['筛选'] = factor_data.apply(lambda x: 1 if x['ROE'] > 10 and x['PB'] < 2 else 0, axis=1)
    return ma_data, price_data, factor_data

def get_screened_data(data, ma_data, price_data, factor_data):
    ma_data筛选 = ma_data[ma_data['筛选'] == 1]
    price_data筛选 = price_data[price_data['筛选'] == 1]
    factor_data筛选 = factor_data[factor_data['筛选'] == 1]
    return ma_data筛选, price_data筛选, factor_data筛选

如何进行量化策略实盘?

请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

select_sentence = '市值小于100亿' #选股语句。

模板如何使用?

点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。

如果有任何问题请添加 下方的二维码进群提问。

94c5cde12014f99e262a302741275d05.png

收益&风险
源码

评论