量化合约对冲交易机器人app系统开发,I34-I633-53I9,开发案例,开发源代码,软件定制,平台搭建,模式定制
量化合约指的是目标或任务具体明确,可以清晰度量。根据不同情况,表现为数量多少,具体的统计数字,范围衡量,时间长度等等。所谓量化就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用接近的电平值来表示。经过抽样的图像,只是在空间上被离散成为像素(样本)的阵列。而每个样本灰度值还是一个由无穷多个取值的连续变化量,必须将其转化为有限个离散值,赋予不同码字才能真正成为数字图像。这种转化称为量化。
量化合约策略部署代码参考如下:
coding=utf-8
fromfutureimport print_function, absolute_import, unicode_literals
import numpy as np
import pandas as pd
from gm.api import *
'''
本策略标的为:SHFE.rb1901
价格中枢设定为:前一交易日的收盘价
从阻力位到压力位分别为:1.03open、1.02open、1.01open、open、0.99open、0.98open、0.97open
每变动一个网格,交易量变化100个单位
回测数据为:SHFE.rb1901的1min数据
回测时间为:2017-07-01 08:00:00到2017-10-01 16:00:00
'''
def init(context):
#策略标的为SHFE.rb1901context.symbol='SHFE.rb1901'#订阅SHFE.rb1901,bar频率为1minsubscribe(symbols=context.symbol,frequency='60s')#设置每变动一格,增减的数量context.volume=1#储存前一个网格所处区间,用来和网格所处区间作比较context.last_grid=0#以前一日的收盘价为中枢价格context.center=history_n(symbol=context.symbol,frequency='1d',end_time=context.now,count=1,fields='close')[0]['close']#记录上一次交易时网格范围的变化情况(例如从4区到5区,记为4,5)context.grid_change_last=[0,0]
def on_bar(context, bars):
bar=bars[0]#获取多仓仓位position_long=context.account().position(symbol=context.symbol,side=PositionSide_Long)#获取空仓仓位position_short=context.account().position(symbol=context.symbol,side=PositionSide_Short)#设置网格和当前价格所处的网格区域context.band=np.array([0.97,0.98,0.99,1,1.01,1.02,1.03])*context.center
grid=pd.cut([bar.close],context.band,labels=[1,2,3,4,5,6])[0]#如果价格超出网格设置范围,则提示调节网格宽度和数量ifnp.isnan(grid):
print('价格波动超过网格范围,可适当调节网格宽度和数量')#如果新的价格所处网格区间和前一个价格所处的网格区间不同,说明触碰到了网格线,需要进行交易#如果新网格大于前的网格,做空或平多ifcontext.last_grid<grid:#记录新旧格子范围(按照大小排序)
grid_change_new=[context.last_grid,grid]#几种例外:
#当last_grid=0时是初始阶段,不构成信号
#如果此时grid=3,说明当前价格仅在开盘价之下的3区域中,没有突破网格线
#如果此时grid=4,说明当前价格仅在开盘价之上的4区域中,没有突破网格线
ifcontext.last_grid==0:context.last_grid=grid
return
ifcontext.last_grid!=0:#如果前一次开仓是4-5,这一次是5-4,算是没有突破,不成交
ifgrid_change_new!=context.grid_change_last:#更新前一次的数据
context.last_grid=gridcontext.grid_change_last=grid_change_new#如果有多仓,平多
ifposition_long:order_volume(symbol=context.symbol,volume=context.volume,side=OrderSide_Sell,order_type=OrderType_Market,position_effect=PositionEffect_Close)
print('以市价单平多仓{}手'.format(context.volume))#否则,做空
ifnotposition_long:order_volume(symbol=context.symbol,volume=context.volume,side=OrderSide_Sell