网格交易策略(附策略源码与收益图)

网格交易策略简介

什么是网格交易策略?

网格交易是利用市场震荡行情获利的一种主动交易策略,其本质是利用投资标的在一段震荡行情中价格在网格区间内的反复运动以进行加仓减仓的操作以达到投资收益最大化的目的。通俗点讲就是根据建立不同数量.不同大小的网格,在突破网格的时候建仓,回归网格的时候减仓,力求能够捕捉到价格的震荡变化趋势,达到盈利的目的。

网格的设置与建仓

网格交易策略至关重要的一点就是网格的数量.间隔还有每个网格仓位数量的设置,但这会因不同的行情和相应判断而有所不同,建仓的数量不应过多,以防到多次触发网格建仓导致资金不足的情况。

网格交易策略实现(基于掘金量化平台)

策略思想

  • 本策略首先计算了SHFE.rb1801过去300个1min收盘价的均值和标准差
  • 并用均值加减2和3个标准差得到网格的区间分界线,分别配以0.3和0.5的仓位权重
  • 随后根据上突破区间开多仓,下突破区间开空仓,反向突破反向操作和回归平仓来进行相应仓位的调整

网格设置

    context.band = np.mean(timeseries) + np.array([-40, -3, -2, 2, 3, 40]) * np.std(timeseries)
    context.weight = [0.5, 0.3, 0.0, 0.3, 0.5]
    grid = pd.cut([bar.close], context.band, labels=[0, 1, 2, 3, 4])[0]

获取网格区间分界线和设置相应的仓位权重并得到相应的区间

获取多仓仓位

position_long = context.account().position(symbol=context.symbol, side=PositionSide_Long)

获取上一交易日可调用get_previous_trading_date函数,返回值为字符串格式:
  • symbol需要设置标的代码。
  • side需要设置枚举常量,PositionSide_Long为多仓,PositionSide_Short为空仓。

下单到目标比例

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,
                                 position_side=PositionSide_Long)

固定时间调仓可使用schedule函数进行定时任务配置:
  • symbol需要设置标的代码。
  • percent为比例,此处设置为相应网格对应的权重
  • order_type需要设置枚举常量,OrderType_Market为市价单,OrderType_Limit为限价单
  • side需要设置枚举常量,PositionSide_Long为多仓,PositionSide_Short为空仓。

策略回测分析

分析

0_1522392043791_result.png

 

  • 胜率(具有盈利的平仓次数与总平仓次数之比)达到了87%。

  • 卡玛比率(年化收益率与历史最大回撤之比)是使用最大回撤率来衡量风险。采用最大回撤率来衡量风险,关注的是最极端的情况。卡玛比率越高表示策略承受每单位最大损失获得的报酬越高。在这里卡玛比率超过了9.1。

  • 夏普比率(年化收益率与波动率之比)超过1.29,也即承受1单位的风险,会有超过1.29个单位的收益回报

  • 策略收益曲线较为稳定,在无止损条件的情况下,最大回撤控制在承受范围,并成功跑赢沪深300指数

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
网格交易是一种基于价格波动的交易策略,它通过在价格区间内设置一系列的买入和卖出订单,以期望在价格波动中实现收益。下面是一个用Python实现的基本的网格交易策略: ```python import ccxt # 初始化交易所 exchange = ccxt.binance({ 'apiKey': 'YOUR_API_KEY', 'secret': 'YOUR_SECRET', 'enableRateLimit': True, }) # 设置交易对和网格参数 symbol = 'BTC/USDT' grid_size = 10 # 网格大小 grid_num = 10 # 网格数量 price_precision = 2 # 价格精度 # 获取最新价格 ticker = exchange.fetch_ticker(symbol) last_price = ticker['last'] # 设置网格价格 grid_prices = [] for i in range(grid_num): grid_price = round(last_price * (1 - grid_size / 100) ** (grid_num / 2 - i), price_precision) grid_prices.append(grid_price) # 下单 for i in range(grid_num): buy_price = grid_prices[i] sell_price = grid_prices[i] * (1 + grid_size / 100) amount = 0.01 # 下单数量 buy_order = exchange.create_limit_buy_order(symbol, amount, buy_price) sell_order = exchange.create_limit_sell_order(symbol, amount, sell_price) ``` 这个代码使用了ccxt库来连接Binance交易所,并在BTC/USDT交易对上实现了网格交易策略。具体来说,它首先获取了最新价格,然后计算出了一系列的网格价格。接着,它使用了create_limit_buy_order()和create_limit_sell_order()函数来下买单和卖单。这里的例子中,我们设置了每个订单的数量为0.01BTC。 需要注意的是,这只是一个最基本的网格交易策略的实现,实际应用中还需要考虑很多因素,比如交易费用、风险控制等。另外,由于交易涉及到资金风险,建议在实际操作前进行充分的测试和风险评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值