量化合約對沖交易機(jī)器人app系統(tǒng)開發(fā),I34-I633-53I9,開發(fā)案例,開發(fā)源代碼,軟件定制,平臺搭建,模式定制
量化合約指的是目標(biāo)或任務(wù)具體明確,可以清晰度量。根據(jù)不同情況,表現(xiàn)為數(shù)量多少,具體的統(tǒng)計數(shù)字,范圍衡量,時間長度等等。所謂量化就是把經(jīng)過抽樣得到的瞬時值將其幅度離散,即用一組規(guī)定的電平,把瞬時抽樣值用接近的電平值來表示。經(jīng)過抽樣的圖像,只是在空間上被離散成為像素(樣本)的陣列。而每個樣本灰度值還是一個由無窮多個取值的連續(xù)變化量,必須將其轉(zhuǎn)化為有限個離散值,賦予不同碼字才能真正成為數(shù)字圖像。這種轉(zhuǎn)化稱為量化。
量化合約策略部署代碼參考如下:
coding=utf-8
fromfutureimport print_function, absolute_import, unicode_literals
import numpy as np
import pandas as pd
from gm.api import *
'''
本策略標(biāo)的為:SHFE.rb1901
價格中樞設(shè)定為:前一交易日的收盤價
從阻力位到壓力位分別為:1.03open、1.02open、1.01open、open、0.99open、0.98open、0.97open
每變動一個網(wǎng)格,交易量變化100個單位
回測數(shù)據(jù)為:SHFE.rb1901的1min數(shù)據(jù)
回測時間為:2017-07-01 08:00:00到2017-10-01 16:00:00
'''
def init(context):
#策略標(biāo)的為SHFE.rb1901context.symbol='SHFE.rb1901'#訂閱SHFE.rb1901,bar頻率為1minsubscribe(symbols=context.symbol,frequency='60s')#設(shè)置每變動一格,增減的數(shù)量context.volume=1#儲存前一個網(wǎng)格所處區(qū)間,用來和網(wǎng)格所處區(qū)間作比較context.last_grid=0#以前一日的收盤價為中樞價格context.center=history_n(symbol=context.symbol,frequency='1d',end_time=context.now,count=1,fields='close')[0]['close']#記錄上一次交易時網(wǎng)格范圍的變化情況(例如從4區(qū)到5區(qū),記為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)#設(shè)置網(wǎng)格和當(dāng)前價格所處的網(wǎng)格區(qū)域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]#如果價格超出網(wǎng)格設(shè)置范圍,則提示調(diào)節(jié)網(wǎng)格寬度和數(shù)量ifnp.isnan(grid):
print('價格波動超過網(wǎng)格范圍,可適當(dāng)調(diào)節(jié)網(wǎng)格寬度和數(shù)量')#如果新的價格所處網(wǎng)格區(qū)間和前一個價格所處的網(wǎng)格區(qū)間不同,說明觸碰到了網(wǎng)格線,需要進(jìn)行交易#如果新網(wǎng)格大于前的網(wǎng)格,做空或平多ifcontext.last_grid<grid:#記錄新舊格子范圍(按照大小排序)
grid_change_new=[context.last_grid,grid]#幾種例外:
#當(dāng)last_grid=0時是初始階段,不構(gòu)成信號
#如果此時grid=3,說明當(dāng)前價格僅在開盤價之下的3區(qū)域中,沒有突破網(wǎng)格線
#如果此時grid=4,說明當(dāng)前價格僅在開盤價之上的4區(qū)域中,沒有突破網(wǎng)格線
ifcontext.last_grid==0:context.last_grid=grid
return
ifcontext.last_grid!=0:#如果前一次開倉是4-5,這一次是5-4,算是沒有突破,不成交
ifgrid_change_new!=context.grid_change_last:#更新前一次的數(shù)據(jù)
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