我们在回测的时候,有时需要获得过去每一日涨停的股票数据 以下代码是运行在QMT平台中的,可以获取回测时每个交易日涨停的数据 import pandas as pd
def init(c):
c.stock_list = c.get_stock_list_in_sector('沪深A股')
# 去除掉创业板,科创板的股票
c.stock_list = [stock for stock in c.stock_list if
not (stock.startswith("30") or stock.startswith("68") or stock.endswith(".BJ"))]
# 如果没有数据,需要先下载数据
for stock in c.stock_list:
download_history_data(stock, '1d', '20240701', '20240807')
print("下载完成...")
# print(c.stock_list)
# print(len(c.stock_list))
def handlebar(c):
bar_date = timetag_to_datetime(c.get_bar_timetag(c.barpos), '%Y%m%d')
print(bar_date)
# 获取前收盘价和收盘价,用于计算涨幅
local_data = c.get_market_data_ex(['preClose', 'close'], c.stock_list, end_time=bar_date, period=c.period,
dividend_type='none', count=1)
# print(local_data)
data_list = []
for stock, df in local_data.items():
if df['preClose'].iloc[0] == 0: # 过滤掉前收盘价为0的数据
continue
curr_date = df.index[0]
growth_rate = (df['close'].iloc[0] - df['preClose'].iloc[0]) / df['preClose'].iloc[0] * 100
growth_rate = round(growth_rate, 2) # 涨幅
# print(curr_date,growth_rate)
temp_dict = {
'stock': stock,
'date': curr_date,
'涨跌幅': growth_rate
}
data_list.append(temp_dict) # 列表套字典
if len(data_list) == 0:
return
result_df = pd.DataFrame(data_list)
# print(result_df)
high_limit_df = result_df[result_df['涨跌幅'] > 9.5]
high_limit_df = high_limit_df.reset_index(drop=True) # 重置索引
print(high_limit_df)
回测2024-8-5日数据,打印如下:
后续会发布一些QMT使用上的小技巧,每个小技巧如同散落的珍珠,循序渐进,用线将每个珍珠串起来,可以形成实用的策略,可以我的微信公众号
来自圈子: 新手入门 |