#coding:gbk
"""
在日线周期回测 每天取当日的分笔 遍历判断买卖点
运行前需要先下载对应时间段的分笔数据
注意点: 分笔数据中的价格时不复权的 要手动复权后 在发对应价格的买卖信号 前复权时除以之后的复权因子 后复权时乘以之后复权因子
"""
def init(C):
C.stock = C.stockcode + '.' + C.market
div_dict = C.get_divid_factors(C.stock, '')
C.div_dict = {timetag_to_datetime(i, "%Y%m%d") : div_dict[i][-1] for i in div_dict}
def handlebar(C):
d = C.barpos
t = C.get_bar_timetag(d)
bar_date = timetag_to_datetime(t, "%Y%m%d")
#示例 对20231121日的分笔遍历
stock = C.stock
#print(bar_date)
if bar_date == '20231121':
tick_data = C.get_market_data_ex([], [stock], period = 'tick', start_time = bar_date + '093000', end_time = bar_date + '145700', subscribe = False)
if stock not in tick_data or len(tick_data[stock]) == 0:
print(bar_date, f"未取到分笔数据 请检查是否下载过")
return
tick_data = tick_data[stock]
bought = False
for i in tick_data.index:
stime = tick_data.loc[i, 'stime'].split('.')[0]
current_price = tick_data.loc[i, 'lastPrice']
pre_price = tick_data.loc[i, 'lastClose']
open_price = tick_data.loc[i, 'open']
high_price = tick_data.loc[i, 'high']
low_price = tick_data.loc[i, 'low']
#可以打印各期数值
print(stime, f"昨收 {pre_price} 开盘价 {open_price} 当前价 {current_price} 最高价 {high_price} 最低价 {low_price}")
#示例买入条件
if not bought and current_price > open_price + 0.01:
#如果后边除权过 对价格除权
if stock in C.div_dict:
div_factor = 1
for date in C.div_dict:
if date >= bar_date:
div_factor *= C.div_dict[date]
if div_factor > 1:
print(f"对价格除权 除权因子 {div_factor}")
buy_price = round(current_price / div_factor,2)
else:
buy_price = current_price
msg =f"{stime} {buy_price} 买入 10000股"
print(msg)
passorder(23, 1101, 'test', stock, 11, buy_price, 10000, C)
bought = True
不清楚的内容可添加下方助理微信咨询,有其他 QMT 小技巧想学习的吗?欢迎在下方留言,笔者将根据大家的留言持续更新哦!
欢迎和我一起加入迅投组建的 QMT 实战交流社群,交流群内有许多做量化交易的高手和大佬,具有良好的分享和互助氛围。且迅投官方会不定期为多次分享、乐于助人的群友申请送投研专业版的机会。
只需扫描下方的二维码,名额有限,限时加入。一起分享见解、交换信息、并共同进步,就像群友说的:“就算周末,晚上也有地方沟通交流!”

|