做市商策略
1. 原理
做市商制度
做市商制度是一种报价驱动制度。做市商根据自己的判断,不断地报出买入报价和卖出报价,以自有资金与投资者进行交易。做市商获取的收益就是买入价和卖出价的价差。
假设做市商以6344卖出一手合约,同时以6333买入一手合约。如果都成交,做市商可净获利11个点。但如果当时合约价格持续走高或走低,做市商没有对手方能够成交,这时就不得不提高自己的买价或降低自己的卖价进行交易,做市商就会亏损。因此,做市商并不是稳赚不赔的。
2. 策略思路
第一步:订阅tick数据(只有最近3个月数据)
第二步:获取tick数据中的卖一和买一价格。
第三步:以买一价格开多,以卖一价格开空。以卖一价格平多,以买一价格平空。
回测标的:CZCE.CF801
回测时间: 2017-09-29 11:25:00 至 2017-09-29 11:30:00
回测初始资金:50万
注意:若修改回测期,需要修改对应的回测标的。
3. 策略代码
# coding=utf-8from __future__ import print_function, absolute_import, unicode_literalsfrom gm.api import *'''本策略通过不断对CZCE.CF801进行:买(卖)一价现价单开多(空)仓和卖(买)一价平多(空)仓来做市并以此赚取差价回测数据为:CZCE.CF801的tick数据回测时间为:2017-09-29 11:25:00到2017-09-29 11:30:00需要特别注意的是:本平台对于回测对限价单固定完全成交,本例子 仅供参考.敬请通过适当调整回测参数1.backtest_commission_ratio回测佣金比例2.backtest_slippage_ratio回测滑点比例3.backtest_transaction_ratio回测成交比例以及优化策略逻辑来达到更贴近实际的回测效果目前只支持最近三个月的tick数据,回测时间和标的需要修改'''def init(context):# 订阅CZCE.CF801的tick数据context.symbol = 'CZCE.CF801'subscribe(symbols=context.symbol, frequency='tick')def on_tick(context, tick):quotes = tick['quotes'][0]# 获取持有的多仓position_long = context.account().position(symbol=context.symbol, side=PositionSide_Long)# 获取持有的空仓position_short = context.account().position(symbol=context.symbol, side=PositionSide_Short)# 没有仓位则双向开限价单# 若有仓位则限价单平仓if not position_long:# 获取买一价price = quotes['bid_p']print('买一价为: ', price)order_target_volume(symbol=context.symbol, volume=1, price=price, order_type=OrderType_Limit,position_side=PositionSide_Long)print('CZCE.CF801开限价单多仓1手')else:# 获取卖一价price = quotes['ask_p']print('卖一价为: ', price)order_target_volume(symbol=context.symbol, volume=0, price=price, order_type=OrderType_Limit,position_side=PositionSide_Long)print('CZCE.CF801平限价单多仓1手')if not position_short:# 获取卖一价price = quotes['ask_p']print('卖一价为: ', price)order_target_volume(symbol=context.symbol, volume=1, price=price, order_type=OrderType_Limit,position_side=PositionSide_Short)print('CZCE.CF801卖一价开限价单空仓')else:# 获取买一价price = quotes['bid_p']print('买一价为: ', price)order_target_volume(symbol=context.symbol, volume=0, price=price, order_type=OrderType_Limit,position_side=PositionSide_Short)print('CZCE.CF801买一价平限价单空仓')if __name__ == '__main__':'''strategy_id策略ID,由系统生成filename文件名,请与本文件名保持一致mode实时模式:MODE_LIVE回测模式:MODE_BACKTESTtoken绑定计算机的ID,可在系统设置-密钥管理中生成backtest_start_time回测开始时间backtest_end_time回测结束时间backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POSTbacktest_initial_cash回测初始资金backtest_commission_ratio回测佣金比例backtest_slippage_ratio回测滑点比例backtest_transaction_ratio回测成交比例'''run(strategy_id='strategy_id',filename='main.py',mode=MODE_BACKTEST,token='token_id',backtest_start_time='2017-09-29 11:25:00',backtest_end_time='2017-09-29 11:30:00',backtest_adjust=ADJUST_PREV,backtest_initial_cash=500000,backtest_commission_ratio=0.00006,backtest_slippage_ratio=0.0001,backtest_transaction_ratio=0.5)
4. 回测结果
设定初始资金50万,手续费率为0.01%,滑点比率为0.01%。回测结果如下图所示。

回测期累计收益率为0.05%,年化收益率为16.87%,基准收益率为0,整体收益跑赢指数。最大回撤为0,胜率97.14%。
需要注意的是,本演示策略只是用作示例,在现实中,以买一和卖一挂单不一定会成交,实际收益率也达不到示例水平,需谨慎。
注:此策略只用于学习、交流、演示,不构成任何投资建议。