期货网格易略(附源)

原 期货网格交易策略(附源码)

网格交易策略

网格交易策略简介

什么是网格交易策略?

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

网格的设置与建仓

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

行业轮动策略实现(基于掘金量化平台

策略思想

  • 本策略首先计算了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]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) = 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)(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为空仓。

 

策略回测分析

分析

​ 我们选取了2017年7月至2016年9月作为回测周期,可以看出:

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

  • <
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
无限网格交易策略是相对传统的固定网格交易策略而言的,它的特点是在价格波动的过程中,不断根据市场情况调整网格的买入和卖出价位。下面是一个简单的Python期货无限网格交易策略的示例: ```python import ccxt import time # 连接交易所 exchange = ccxt.okex3({ 'apiKey': 'YOUR_API_KEY', 'secret': 'YOUR_SECRET_KEY', }) # 设置交易品种和参数 symbol = 'BTC/USDT' grid_size = 100 # 网格大小(USDT) grid_num = 10 # 网格数量 buy_price = 0 # 买入价格 sell_price = 0 # 卖出价格 open_orders = [] # 开仓订单ID列表 while True: # 获取最新价格 ticker = exchange.fetch_ticker(symbol) last_price = ticker['last'] # 检查是否需要开仓 if not open_orders: for i in range(grid_num): buy_price = round(last_price - (i + 1) * grid_size, 2) sell_price = round(last_price + i * grid_size, 2) buy_order = exchange.create_limit_buy_order(symbol, 0.001, buy_price) sell_order = exchange.create_limit_sell_order(symbol, 0.001, sell_price) open_orders.append(buy_order['id']) open_orders.append(sell_order['id']) print(f'开仓成功!买入价格:{buy_price},卖出价格:{sell_price}') else: # 检查是否需要平仓 for order_id in open_orders: order = exchange.fetch_order(order_id, symbol) if order['side'] == 'buy' and order['price'] <= buy_price: exchange.create_limit_sell_order(symbol, 0.001, sell_price) open_orders.remove(order_id) print(f'平仓成功!买入价格:{order["price"]},卖出价格:{sell_price}') elif order['side'] == 'sell' and order['price'] >= sell_price: exchange.create_limit_buy_order(symbol, 0.001, buy_price) open_orders.remove(order_id) print(f'平仓成功!买入价格:{buy_price},卖出价格:{order["price"]}') # 等待一段时间 time.sleep(60) ``` 以上代码是一个基本的无限网格交易策略,它会根据当前价格动态调整买入和卖出价位,当价格达到某个价位时会自动平仓。需要注意的是,这只是一个示例代码,实际应用中需要根据交易所的API文档进行调整和优化。另外,由于期货交易的杠杆效应,需要注意风险控制和资金管理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值