# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新 def handle_bar(context, bar_dict): ... if newPrice >= context.nextSellPrice: logger.info("执行高抛交易,对应价格:{}".format(newPrice)) amount = context.portfolio.positions[context.s1].quantity if amount >= context.tradeNumber: logger.info("执行高抛交易,对应数量:{}".format(context.tradeNumber)) order_shares(context.s1, -context.tradeNumber) plot("S", newPrice) elif amount >= 100: logger.info("执行高抛交易,对应数量:{}".format(amount)) order_shares(context.s1, -amount) plot("S", newPrice) calc_next_trade_price(context,newPrice) obj = { "nextSellPrice":context.nextSellPrice, "nextBuyPrice":context.nextBuyPrice, "curTradePrice":context.curTradePrice } context.buyTradeList.append(obj) if newPrice <= context.nextBuyPrice: logger.info("执行低吸交易,对应价格:{}".format(newPrice)) amount = int(context.portfolio.cash / newPrice / 100.0) 100 if amount >= context.tradeNumber: logger.info("执行低吸交易,对应数量:{}".format(context.tradeNumber)) order_shares(context.s1, context.tradeNumber) plot("B", newPrice) calc_next_trade_price(context,newPrice) obj = { "nextSellPrice":context.nextSellPrice, "nextBuyPrice":context.nextBuyPrice, "curTradePrice":context.curTradePrice } context.sellTradeList.append(obj)
选择回测时间段,点击右侧平台右侧按钮运行回测,结果页面如下从结果中可以看到,对招商银行[600036]这只股票进行价差网格交易,其参数设置在上涨8%的时候卖出,下跌8%的时候买入,最大连续下跌买入次数为3次回测收益:13.628%回测年化收益:17.096%比基准年化收益-6%高出非常之大,这是在股价波动的过程中可以进行执行该策略来不断的降低持仓成本从交易详情面板来看,这个策略可以通过参数调节交易频率,在上涨下跌比率较大的情况下,其交易次数是能控制的相对较少,结果图如下:2)日内做T策略同样的,只贴部分代码# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新 def handle_bar(context, bar_dict): ... newPrice = bar_dict[context.s1].last if newPrice >= context.nextSellPrice: context.lastTradeType = 1 logger.info("执行高抛交易,对应价格:{}".format(newPrice)) amount = context.portfolio.positions[context.s1].quantity #if amount - context.tradeNumber >= context.lockStockNumber: if amount - context.tradeNumber >= 0: logger.info("执行高抛交易,对应数量:{}".format(context.tradeNumber)) order_shares(context.s1, -context.tradeNumber) plot("S", newPrice) else: logger.info("股票数量不足,无法执行高抛交易,对应数量:{}".format(amount)) return calc_next_trade_price(context,newPrice) obj = { "nextSellPrice":context.nextSellPrice, "nextBuyPrice":context.nextBuyPrice, "curTradePrice":context.curTradePrice } context.buyTradeList.append(obj) if newPrice <= context.nextBuyPrice: context.lastTradeType = 0 logger.info("执行低吸交易,对应价格:{}".format(newPrice)) amount = int(context.portfolio.cash / newPrice / 100.0) 100 if amount >= context.tradeNumber: logger.info("执行低吸交易,对应数量:{}".format(context.tradeNumber)) order_shares(context.s1, context.tradeNumber) plot("B", newPrice) else: logger.info("现金不足,无法执行低吸交易,对应数量:{}".format(amount)) return calc_next_trade_price(context,newPrice) obj = { "nextSellPrice":context.nextSellPrice, "nextBuyPrice":context.nextBuyPrice, "curTradePrice":context.curTradePrice } context.sellTradeList.append(obj)
总体来说,代码逻辑还是比较简单,就是对价格的涨跌进行处理,其参数设置在日内上涨2%的时候卖出,下跌2%的时候买入,初始买入资金比例7成,锁定最低仓位5成然后运行回测,其结果如下回测收益:5.501%回测年化收益:6.839%基准收益:19.26%可以看到日内做T这种高频交易,在长期来看收益可能并不高,适合在短期价格内运行四、总结这个量化平台在笔者的熟悉情况下,它可以很方便的回测你的交易策略,但是在股价盯盘上,或者自定义逻辑上支持的不是很完善,很多功能也是需要收费才能使用本文基于Python,借助现有量化平台编写策略和回测分析,希望对大家的学习有所帮助(图片来源网络,侵删)
0 评论