经典量化模型分享之【做市商策略】,适用于加密币、期货、外汇(附源码)



  • 什么是做市策略

    做市策略(market-maker strategy)是一种风险中立(risk-neutral)盘口价差套利策略。其基本原理是:在盘口的卖一和买一价之间,插入委买单和委卖单,如果插入的两个单子都成交的话,做市商就吃到了买卖单之间的价差,而整个过程结束后,做市商所持有的头寸并没有变化。如果买卖单之间的价差扣除各种交易手续费之后还有盈余,那么该做市商就获得了相应的盈利。

    做市策略是一种增加交易所流动性的策略,一般来讲,成熟的交易市场为了提升自身的流动性,会用低佣金(甚至为做市商提供流动性奖励金)的办法,吸引做市商来该市场做市。

    做市策略需要注意的事项

    1 做市时机的选择

    做市商本质上是整个市场的交易对手方。如果市场呈现急剧的单边行情,做市商下达的买卖委托单会大概率出现单边成交的情况,因此做市商手中就会积累大量的风险头寸,这是做市商不想承担的风险。因此,做市商在选择是否下达做市指令之前,都会预判一下市场的趋势明显程度,如果市场短期内呈现非常明显的趋势信号,做市商就会相应地减少自己的做市单数量(甚至停止做市)

    2 净头寸的处理

    做市商手中累计的净头寸,可以通过很多种办法来处理,下面列举其中两种:

    (1)在下一次做市时,处理掉累积的净头寸。比如做市商目前净头寸有2BTC,下次做市时,他就可以下达一个卖3BTC的委卖单,一个买1BTC的委买单。这种做法好处是净头寸可以及时得到处理,坏处是净头寸处理的时机(价格)可能不是最优的。

    (2)第二种方法是开立另外一个独立的程序,对累积的净头寸进行成本计算,然后按照成本价*(1+一定比例的手续费+一定比例的profit margin),将该头寸反向甩出市场,甩出方法又有两种:a. 按限价单从价优到价劣依次甩出市场,超时不成交的部分则撤单,等待下次机会;b. 先按限价单从价优到价劣依次甩出市场,超时不成交的部分,则按市价单甩货。第一种方法的好处是甩货成本可控,但是甩货周期可能会拖得比较长;第二种方法则能有效地控制甩货周期,但是成本不可控,孰优孰劣,需要做市商根据自己的风险偏好慎重考虑。

    3 期货换合约(移仓)的处理

    期货合约都有一个到期日,在到期日结束时刻的前几个小时,我们不建议做市商继续做市,而是利用这几个小时,将即将到期的期货合约进行移仓。移仓的意思就是平掉当前期货合约的仓位,然后再开同样仓位大小的下周合约。当然,移仓也是需要考虑成本的。如果当前持仓是多头,那么我们希望移仓的时间点是在下周期货贴水最厉害的时候;反之,我们则希望移仓的时间点是在下周期货升水最厉害的时候。等移仓做完以后,做市策略继续恢复执行。

    # coding=utf-8
    from __future__ import print_function, absolute_import, unicode_literals
    from 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回测成交比例
    以及优化策略逻辑来达到更贴近实际的回测效果
    '''
    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]
        # 获取持有的多仓
        positio_long = context.account().position(symbol=context.symbol, side=PositionSide_Long)
        # 获取持有的空仓
        position_short = context.account().position(symbol=context.symbol, side=PositionSide_Short)
        print(quotes['bid_p'])
        print(quotes['ask_p'])
        # 没有仓位则双向开限价单
        # 若有仓位则限价单平仓
        if not positio_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_BACKTEST
        token绑定计算机的ID,可在系统设置-密钥管理中生成
        backtest_start_time回测开始时间
        backtest_end_time回测结束时间
        backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
        backtest_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)
    

 








  • 0_1558330551804_TIM截图20190520133517.png

    点击进入课程地址 适用人群

    面向对数字货币程序化感兴趣的初学者,需要有一定的实盘交易和简单的计算机基础。

    课程概述
    数字货币交易市场由于其特殊性越来越受到量化交易者的关注,实际上程序化交易已经是数字货币的主流,对冲做市等策略无时无刻不在活跃着市场。而编程基础薄弱的初学者想要进入这一领域,面对众多的交易所和多变的API,困难重重。发明者(FMZ)量化平台(原BotV)是目前最大的数字货币量化社区和平台,4年多来帮助成千上万的初学者走向了量化交易之路。
    本课程由发明者量化平台官方提供,将涵盖以下内容:
    1.数字货币量化交易简介(已更新)
    2.JavaScript快速入门(已更新)
    3.发明者量化交易平台使用指南(已更新)
    4.发明者量化交易平台编程指南(已更新)
    5.量化交易策略范例详解(已更新)

    据说后面会更新python 的相关入门教程。课程很便宜,适合对量化不懂想有个概念的群体学习。

    如果要说自己拥有一套盈利的量化策略,还是要走很长的学习路。各位加油!

    讨论群:482548322

    阅读更多
  • FXKUNLUN 昆仑国际操盘团队 2019年3月收益报告ℹ 观摩账户地址 (本观摩账户为FX110监管实盘账户-平台KVB昆仑国际) 💹 KVB开户地址 点击链接 ⏺ 4月份 净值收益 9.9% ⏺ 4月份 资金最大回撤率 0.82% ⏺ 4月份 交易准确率 80.08%

    0_1556673557669_1.png

    0_1556673565305_2.png

    0_1556673571653_3.png

    0_1556673578903_4.png

    阅读更多

暂无主题。