问财量化选股策略逻辑
根据以上描述的选股逻辑,我们可以使用以下代码进行筛选:
import talib
def check_cooperation(ma1, ma2, ma3, ma4, ma5):
# 计算五根均线的交叉点
cross = talib.CROSS(ma1, ma2) + talib.CROSS(ma2, ma3) + talib.CROSS(ma3, ma4) + talib.CROSS(ma4, ma5) + talib.CROSS(ma5, ma1)
# 判断交叉点的数量是否为5
if len(cross) == 5:
return True
else:
return False
def check_price_position(price, ma10):
# 计算股票的开盘价是否在十日线附近
if price >= ma10 and price <= ma10 + (ma10 * 0.1):
return True
else:
return False
def check_average_direction(average):
# 判断三十日平均线是否向上
if average > average.shift(-30):
return True
else:
return False
def check_cooperation_and_price_position(price, ma10, ma30):
# 判断股票是否符合以上三个条件
if check_cooperation(price, ma10, ma30, ma40, ma50) and check_price_position(price, ma10):
return True
else:
return False
def get_cooperation_and_price_position股票池:
# 获取符合条件的股票池
cooperation_and_price_position = stock池[stock池['ma1'] <= stock池['ma10'] and stock池['ma30'] > stock池['ma10']]
return cooperation_and_price_position
def get_stock_list(stock_pool):
# 获取股票列表
stock_list = stock_pool.index.tolist()
return stock_list
def get_filtered_stock_list(stock_list):
# 获取符合条件的股票列表
filtered_stock_list = []
for stock in stock_list:
if check_cooperation_and_price_position(stock, stock池['ma10'], stock池['ma30']):
filtered_stock_list.append(stock)
return filtered_stock_list
def get_stock_data(stock_list):
# 获取股票数据
stock_data = stock池.loc[stock_list]
return stock_data
def get_stock_data_with_average_direction(stock_list):
# 获取股票数据并计算三十日平均线
stock_data = stock池.loc[stock_list]
average = stock_data['close'].rolling(window=30).mean()
return stock_data, average
def get_stock_data_with_average_direction_and_cooperation(stock_list):
# 获取股票数据并计算三十日平均线和五根均线的交叉点
stock_data = stock池.loc[stock_list]
average = stock_data['close'].rolling(window=30).mean()
cross = talib.CROSS(stock_data['close'], average)
return stock_data, average, cross
def get_stock_data_with_average_direction_and_price_position(stock_list):
# 获取股票数据并计算三十日平均线、五根均线的交叉点和股票的开盘价是否在十日线附近
stock_data = stock池.loc[stock_list]
average = stock_data['close'].rolling(window=30).mean()
cross = talib.CROSS(stock_data['close'], average)
price = stock_data['open']
return stock_data, average, cross, price
def get_stock_data_with_average_direction_and_price_position_and_cooperation(stock_list):
# 获取股票数据并计算三十日平均线、五根均线的交叉点、股票的开盘价是否在十日线附近和股票是否符合以上三个条件
stock_data = stock池.loc[stock_list]
average = stock_data['close'].rolling(window=30).mean()
cross = talib.CROSS(stock_data['close'], average)
price = stock_data['open']
return stock_data, average, cross, price
def get_stock_data_with_average_direction_and_price_position_and_cooperation_and_filter(stock_list):
# 获取股票数据并计算三十日平均线、五根均线的交叉点、股票的开盘价是否在十日线附近、股票是否符合以上三个条件和股票是否在股票池中
stock_data = stock池.loc[stock_list]
average = stock_data['close'].rolling(window=30).mean()
cross = talib.CROSS(stock_data['close'], average)
price = stock_data['open']
return stock_data, average, cross, price
def get_filtered_stock_data(stock_data, average, cross, price):
# 获取符合条件的股票数据
filtered_stock_data = []
for stock in stock_data
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


