what 量化合約交易系統開發原始碼丨 clear 合約量化系統開發技術(Demo 案例)

nice1022發表於2023-03-07

1、做多

  啟動後按照設定好的開倉額度自動馬上開多,使用者可設定是否開倉加倍。當行情下跌後,機器人按照使用者設定好的補倉倍數及滿足補倉價差後進行補倉。系統開發I34-案例I633-演示53I9,使用者可自定義補倉倍數/補倉價差(等於之前的補倉跌幅,因做空時為行情漲了補倉,因此這裡叫價差)。

2、做空

  啟動後系統開發I34-案例I633-演示53I9,按照設定好的開倉額度自動馬上開空,使用者可設定是否開倉加倍。當行情上漲後,機器人按照使用者設定好的補倉倍數及滿足補倉價差後進行補倉。使用者可自定義補倉倍數/補倉價差(等於之前的補倉跌幅,因做空時為行情漲了補倉,因此這裡叫價差)。

  備註:目前做多做空只開通一倍(之後可以開通最高 10 倍,開通高倍率後,使用者設定補倉價差不得高於倍數的 80%,因高倍率有爆倉漲幅或跌幅,如 10 倍,漲跌 10 個點即爆倉,設定補倉價差不得高於 8).與做現貨一樣,只是多了一個方向選擇,因現貨每次的買入都看漲,等於合約裡面的做多,而合約可以在行情相對熊市時做空。讓使用者多一些選擇。但因合約高槓杆倍數存在爆倉風險,使用者謹慎使用。

3、多空

  啟動後按照設定好的開倉額度多空同時建倉,上漲時做多單不斷買入賣出實現盈利(止盈加回撥平倉),此時做空採用補倉價差➕趨勢補倉,下跌時做空單不斷買入賣出實現盈利(止盈加回撥平倉),此時做多采用補倉價差➕趨勢補倉。

// base_dict.py
 
import sys
 
def price_lis(mktdata, key):
    y_10_price = mktdata.groupby('mktdate', group_keys=False, sort=False)[key].apply(
        lambda x: -x.diff(-10).fillna(x - x.iloc[-1])
    ).values
    return y_10_price
 
price_tick_dic = {
    'IF00': 0.2, 'IH00': 0.2, 'IC00': 0.2, 'TF00': 0.005, 'T00': 0.005,
 
    'cu00': 10.0, 'al00': 5.0, 'zn00': 5.0, 'ni00': 10.0, 'sn00': 10.0, 'au00': 0.05, 'ag00': 1.0,
    'rb00': 1.0, 'fu00': 1.0, 'bu00': 2.0, 'ru00': 5,
 
    'm00': 1.0, 'y00': 2.0, 'a00': 1.0, 'p00': 2.0, 'c00': 1.0, 'cs00': 1.0, 'l00': 5.0, 'v00': 1.0,
    'eg00': 1.0, 'pp00': 1.0, 'j00': 0.5, 'jm00': 0.5, 'i00': 0.5, 'pg00': 1.0,
 
    'SR00': 1.0, 'CF00': 5, 'ZC00': 0.2, 'FG00': 1.0, 'TA00': 2.0, 'MA00': 1.0, 'SA00': 1.0,
    'OI00': 1.0, 'RM00': 1.0, 'AP00': 1.0, 'CJ00': 5.0, 'PF00': 2.0,
 
    'sc00': 0.1, 'sc01': 0.1,
    'AgTD': 1.0, 'hc00': 1,
}
factor_dic = {
    'IF00': 300, 'IH00': 300, 'IC00': 200, 'TF00': 10000, 'T00': 10000,
 
    'cu00': 5.0, 'al00': 5.0, 'zn00': 5.0, 'ni00': 1.0, 'sn00': 1.0, 'au00': 1000, 'ag00': 15,
    'rb00': 10.0, 'fu00': 10.0, 'bu00': 10.0, 'ru00': 10,
 
    'm00': 10, 'y00': 10, 'a00': 10, 'p00': 10, 'c00': 10, 'cs00': 10, 'l00': 5, 'v00': 5,
    'eg00': 10, 'pp00': 5.0, 'j00': 100, 'jm00': 60, 'i00': 100, 'pg00': 20,
 
    'SR00': 10, 'CF00': 5, 'ZC00': 100, 'FG00': 20, 'TA00': 5.0, 'MA00': 10.0, 'SA00': 20,
    'OI00': 10.0, 'RM00': 10.0, 'AP00': 10.0, 'CJ00': 5.0, 'PF00': 5.0,
 
    'sc00': 1000, 'sc01': 1000,
    'AgTD': 1, 'hc00': 10,
}
 
fees_dic = {
    'IF00': 0.23/10000,
    'rb00': 0.5 * 1/10000,
    'ru00': -0.75,
    'ag00': 0.05 * 1/1000 * 1/2 * 1,
    'v00': -1 * 0.3,
    'TA00': -2.1,
    'CF00': -3.01,
    'i00': 1/10000,
    'sn00': -1.5,
    'p00': -2.5 * 0.6,
    'zn00': -3 * 0.5 * 0.5,
    'eg00': -3 * 0.3,
}
 
instrument_dic = {
    'IF00': {
        'price_tick': 0.2,
        'factor': 300,
 
def dateToContract(instrument, date):
    dateList = instrument_dic[instrument]['date_list']
    leadingList = instrument_dic[instrument]['leading_list']
 
    if len(dateList) != len(leadingList):
        sys.exit('dismatch')
 
    for ii in range(len(leadingList)):
        if dateList[ii][0] <= int(date) <= dateList[ii][1]:
            return leadingList[ii]
 
    return False
 
 
import numpy as np
 
def clear_off_trading(df, axis, off_range=[(23000000, 90000000),  # (230000000, 240000000),
  (113000000, 133000000), (150000000, 210000000)]):
    mask = np.zeros(len(df), dtype=bool)
    for r in off_range:
        mask |= (df[axis] > r[0]) & (df[axis] < r[1])
    df.drop(df.index[mask], axis=0, inplace=True)
 
 
if __name__ == '__main__':
    v00_main_contract = dateToContract(instrument='v00', date='20221020')
    eg00_main_contract = dateToContract(instrument='eg00', date='20221020')
    print("v00_main_contract: " + str(v00_main_contract))
    print("eg00_main_contract: " + str(eg00_main_contract))



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2938449/,如需轉載,請註明出處,否則將追究法律責任。

相關文章