量化合約對(duì)沖交易機(jī)器人app系統(tǒng)開發(fā),I34-I633-53I9,開發(fā)案例,開發(fā)源代碼,軟件定制,平臺(tái)搭建,模式定制
量化合約指的是目標(biāo)或任務(wù)具體明確,可以清晰度量。根據(jù)不同情況,表現(xiàn)為數(shù)量多少,具體的統(tǒng)計(jì)數(shù)字,范圍衡量,時(shí)間長(zhǎng)度等等。所謂量化就是把經(jīng)過抽樣得到的瞬時(shí)值將其幅度離散,即用一組規(guī)定的電平,把瞬時(shí)抽樣值用接近的電平值來表示。經(jīng)過抽樣的圖像,只是在空間上被離散成為像素(樣本)的陣列。而每個(gè)樣本灰度值還是一個(gè)由無窮多個(gè)取值的連續(xù)變化量,必須將其轉(zhuǎn)化為有限個(gè)離散值,賦予不同碼字才能真正成為數(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
價(jià)格中樞設(shè)定為:前一交易日的收盤價(jià)
從阻力位到壓力位分別為:1.03open、1.02open、1.01open、open、0.99open、0.98open、0.97open
每變動(dòng)一個(gè)網(wǎng)格,交易量變化100個(gè)單位
回測(cè)數(shù)據(jù)為:SHFE.rb1901的1min數(shù)據(jù)
回測(cè)時(shí)間為: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è)置每變動(dòng)一格,增減的數(shù)量context.volume=1#儲(chǔ)存前一個(gè)網(wǎng)格所處區(qū)間,用來和網(wǎng)格所處區(qū)間作比較context.last_grid=0#以前一日的收盤價(jià)為中樞價(jià)格context.center=history_n(symbol=context.symbol,frequency='1d',end_time=context.now,count=1,fields='close')[0]['close']#記錄上一次交易時(shí)網(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)前價(jià)格所處的網(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]#如果價(jià)格超出網(wǎng)格設(shè)置范圍,則提示調(diào)節(jié)網(wǎng)格寬度和數(shù)量ifnp.isnan(grid):
print('價(jià)格波動(dòng)超過網(wǎng)格范圍,可適當(dāng)調(diào)節(jié)網(wǎng)格寬度和數(shù)量')#如果新的價(jià)格所處網(wǎng)格區(qū)間和前一個(gè)價(jià)格所處的網(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時(shí)是初始階段,不構(gòu)成信號(hào)
#如果此時(shí)grid=3,說明當(dāng)前價(jià)格僅在開盤價(jià)之下的3區(qū)域中,沒有突破網(wǎng)格線
#如果此時(shí)grid=4,說明當(dāng)前價(jià)格僅在開盤價(jià)之上的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('以市價(jià)單平多倉{}手'.format(context.volume))#否則,做空
ifnotposition_long:order_volume(symbol=context.symbol,volume=context.volume,side=OrderSide_Sell