一、简介大家好,我是雪球。今天分享给大家的内容是基于Python编程实现股票交易相关功能的开发。如果读者对股票或金融衍生品交易了解不多,比较感兴趣,可以自行查询相关资料。下面笔者就为大家介绍一下股票交易中几种常见的交易策略的实现思路和源码编写过程。如果您听说过量化交易这个词,您可能知道其中的交易策略。大概意思是交易股票、加密货币或金融衍生品,在价格波动的过程中,按照其交易策略不断买卖,不断套利,降低持仓成本,实现收益最大化。常见的交易策略有很多,如趋势型、网格型、剥头皮、概率法则、高频交易等,今天主要介绍两种低频交易策略,高卖低买的网格交易策略,日内交易T策略。其他的交易策略比较复杂,读者可以自行百度了解。笔者在此推荐一个量化交易网站,仅供参考。饭篮量化:https://www.ricequant.com/doc/quant/2.需求分析&实现思路每个交易日股票都会涨跌。在这个过程中,我们偶尔会想要监测一些股票的股价涨跌,或者自动交易。在这种需求的前提下,现有的券商和股票分析软件都会有机器人自动交易策略功能,其中大部分需要收费或者有些策略不能满足自己的需求。笔者在此提供两种实现思路:1、利用已有的量化平台编写策略和回测分析,再利用券商软件层面进行策略执行。2、自己编写功能代码监控估值,对股价波动进行特殊处理,满足特殊需求。首次实现成本低,但功能受平台限制;第二个实现成本无疑是比较高的,但是逻辑是可以自己控制的。3.借助现有量化平台编写策略和回测分析。在这里,需要注册一个账号,进入平台——作者攻略写攻略。该平台的功能可用于实施和分析您自己的交易策略。请参阅平台文档。笔者在此贴出作者自己编写的2种策略代码。本平台仅支持使用Python脚本。1)点差交易策略平台截图:部分代码如下,详细代码可以手写实现,也可以在文末获取:#你选择的证券的数据更新会触发这个logger.info("执行高位卖出交易,对应价格:{}".format(newPrice))amount=context.portfolio。positions[context.s1].quantityifamount>=context.tradeNumber:logger.info("执行高位成交,对应数量:{}".format(context.tradeNumber))order_shares(context.s1,-context.tradeNumber)plot("S",newPrice)elifamount>=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)ifnewPrice<=context.nextBuyPrice:logger.info("执行低吸交易,对应价格:{}".format(newPrice))amount=int(context.portfolio.cash/newPrice/100.0)*100ifamount>=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策略同理,只贴出部分代码#你选择的证券的数据更新会触发这个逻辑,比如日或分钟的历史数据切片或者实盘-时间数据切片更新defhandle_bar(context,bar_dict):...newPrice=bar_dict[context.s1].lastifnewPrice>=context.nextSellPrice:context.lastTradeType=1logger.info("执行高位卖出交易,对应价格:{}".format(newPrice))amount=context.portfolio.positions[context.s1].quantity#ifamount-context.tradeNumber>=context.lockStockNumber:ifamount-context.tradeNumber>=0:logger.info("执行高-卖出交易,对应数量:{}".format(context.tradeNumber))order_shares(context.s1,-context.tradeNumber)plot("S",newPrice)else:logger.info("库存数量不足,无法执行高卖成交,对应数量:{}".format(amount))returncalc_next_trade_price(context,newPrice)obj={"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.buyTradeList.append(obj)ifnewPrice<=context.nextBuyPrice:context.lastTradeType=0logger.info("执行低吸交易,对应价格:{}".format(newPrice))amount=int(context.portfolio.cash/newPrice/100.0)*100ifamount>=context.tradeNumber:logger.info("执行低吸transaction,对应数量:{}".format(context.tradeNumber))order_shares(context.s1,context.tradeNumber)plot("B",newPrice)else:logger.info("现金不足,无法执行低价抛售交易,对应数量:{}".format(amount))returncalc_next_trade_price(context,newPrice)obj={"nextSellPrice":context.nextSellPrice,"nextBuyPrice":context.nextBuyPrice,"curTradePrice":context.curTradePrice}context.sellTradeList.append(obj)总体来说代码逻辑比较简单,就是处理价格的涨跌。它的参数设置为一天内上涨2%时卖出,下跌2%时买入。初始申购资金比例为70%,锁仓最低仓位为50%,然后进行回测。结果如下回测回报率:5.501%回测年化回报率:6.839%基准回报率:19.26%可以看到T日内高频交易长期未必盈利不高,适合做空期限价格操作。4.总结我是雪球。就笔者对这个量化平台的熟悉程度而言,它可以轻松回测你的交易策略,但对股价跟踪或自定义逻辑的支持并不完善,很多功能需要付费才能使用。本文基于Python,利用已有的量化平台编写策略和回测分析。希望对大家的学习有所帮助。
