掘金量化平臺提供策略開發(fā)服務包(SDK)用于策略開發(fā)者實現自己的策略。SDK下載地址請點擊這里。Python SDK支持Windows + Python2.7/3.6 + 32位/64位、Linux Python2/3 x64共六種版本,下載時找到對應本地安裝的Python版本的SDK包。需要注意的是,此處所指的32位/64位不是指系統(tǒng)的版本,而是本地Python的版本。
在Windows系統(tǒng),需要解壓下載的SDK包,雙擊安裝程序進行安裝。在安裝過程中,安裝程序會自行尋找Python安裝路徑,若提示找不到Python,需要手動添加注冊信息或重新安裝Python。若Python3.6不是安裝在個人文件夾下,需要以管理員權限運行SDK安裝程序。
在Linux系統(tǒng),解壓ZIP文件,運行pip install xxxx.whl
命令進行安裝;python3使用pip3 install xxxxx.whl
。Wheel文件名稱以發(fā)布為準。
方式一,直接使用例子運行
解壓SDK包,使用examples中的例子項目。
方式二,創(chuàng)建自己的策略
以下是一個完整的策略代碼示例額,策略邏輯:每收到一筆Tick行情,以最新價買入100股。
from gmsdk.api import StrategyBaseclass MyStrategy(StrategyBase): def __init__(self, *args, **kwargs): super(MyStrategy, self).__init__(*args, **kwargs) def on_tick(self, tick): self.open_long(tick.exchange, tick.sec_id, tick.last_price, 100) print("OpenLong: exchange %s, sec_id %s, price %s" % (tick.exchange, tick.sec_id, tick.last_price))if __name__ == '__main__': ret = MyStrategy( username='username', password='password', strategy_id='strategy_2', subscribe_symbols='SHSE.600000.tick', mode=2 ).run() print(('exit code: ', ret))
4.編譯策略并運行。策略運行起來后,控制臺打印策略的每一筆下單記錄,在掘金終端的模擬交易中可查看該策略的運行詳情。
構建策略的三種方式:
1.掘金終端構建自己的策略,然后在構建的策略類中重寫基類方法
2.修改SDK包中的例子,構建自己的策略類
3.參考API定義文檔,自定義策略類
策略類應繼承自StrategyBase基類,并以方法重寫的方式滿足策略開發(fā)需求。然后調用子類實例的run()
方法,運行策略。
class Strategy(StrategyBase): ...strategy.run()
策略在運行前,必須先初始策略對象。需要指定挖金子賬戶、密碼、策略ID、訂閱代碼和運行模式。
示例:策略初始化并訂閱上交所浦發(fā)銀行的實時Tick數據和1min的Bar數據
方式一:以參數方式初始化策略
ret = Strategy( username='demo@myquant.cn', password='123456', strategy_id='strategy_2', subscribe_symbols='SHSE.600000.bar.60', mode=2 )
策略支持四種運行模式及對應參數值:
1.不接收行情流:1
2.接收實時行情:2
3.模擬行情模式:3
4.回測模式:4
方式二:以配置文件方式初始化策略
策略初始化配置可以保存在*.ini為文件中,然后以文件路徑為參數初始化策略。
ret = Strategy(config_file='strategy.ini')
strategy.ini文件配置示例:
[strategy];掘金用戶名username=-;掘金密碼password=-;策略IDstrategy_id=3c7e70be-7e02-11e5-b293-5ec5d48ea63a;訂閱證券代碼或合約代碼列表subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60;行情模式,2-實時行情模式,3-模擬行情模式,4-回放行情模式mode=2;交易服務地址,使用掘金終端交易時,地址為localhost:8001, 如果此項配置為空,則訂單發(fā)往掘金云服務器td_addr=localhost:8001
完善策略邏輯后,先初始化策略,然后運行策略。策略運行后,策略開始接收數據并執(zhí)行策略邏輯
strategy.run()
1.直接關閉程序來停止策略2.調用api方式停止策略
strategy.stop()
策略支持三種運行模式:
1.實時行情模式:訂閱行情服務器推送的實時行情,也就是交易所的實時行情,只在交易時段提供。適用的場景是策略仿真交易和實盤交易階段。
2.模擬行情模式:模擬行情是近期的歷史行情,行情服務器將7*24小時不間斷循環(huán)推送,推送頻率近似實時行情。適用的場景是策略開發(fā)階段,主要就是能方便隨時隨地都能有數據,能開發(fā)/調試策略,不受交易時段的限制。
3.回測模式:訂閱指定時段、指定交易代碼、指定數據類型的行情,行情服務器將按指定條件全速回放對應的行情數據。適用的場景是策略回測階段,快速驗證策略的績效是否符合預期。
策略使用回測模式初始化,并配置回測相關參數,即進入回測。
示例:回測上交所浦發(fā)銀行的daily數據, 回測時間為 2015-04-15 09:00:00
到 2015-05-15 15:00:00
, 策略初始資金為1,000,000, 委托成交為全部成交, 手續(xù)費率為零, 滑點比率為零, 數據使用前復權.
方式一:在策略初始化后調用backtest_config()方法
strategy = Strategy( username='demo@myquant.cn', password='123456', strategy_id='strategy_2', subscribe_symbols='SHSE.600000.bar.daily', mode=4, td_addr='localhost:8001')strategy.backtest_config( start_time='2015-04-15 9:00:00', end_time='2015-05-15 15:00:00', initial_cash=1000000, transaction_ratio=1, commission_ratio=0, slippage_ratio=0, price_type=1, bench_symbol='SHSE.000300')
方式二:在配置文件中指定參數
strategy = Strategy(config_file='strategy.ini')
在strategy.ini配置文件中添加backtest節(jié)點
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;策略回測參數配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[backtest];歷史數據回放開始時間start_time=2015-04-15 09:00:00;歷史數據回放結束時間end_time=2015-05-15 15:00:00;策略初始資金initial_cash=1000000;委托量成交比率,默認=1(每個委托100%成交)transaction_ratio=1;手續(xù)費率,默認=0(不計算手續(xù)費)commission_ratio=0;滑點比率,默認=0(無滑點)slippage_ratio=0;行情復權模式,0=不復權,1=前復權price_type=1;基準bench_symbol=SHSE.000300
首先需關聯模擬交易通道。
示例:訂閱上交所浦發(fā)銀行Tick行情和1min的Bar的模擬行情
方式一,通過參數的方式設置:
ret = strategy("your user name", "your password", "strategy id", "SHSE.600000.tick,SHSE.600000.bar.60", 3, "localhost:8001")
方式二,通過配置方式初始化策略,策略的配置文件subscribe_symbols和mode節(jié)點設置如下:
;訂閱證券代碼或合約代碼列表subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60;行情模式,2-實時行情模式,3-模擬行情模式,4-回放行情模式mode=3
首先需關聯仿真交易通道。
示例:訂閱上交所浦發(fā)銀行Tick行情和1min的Bar的實時行情
方式一,通過參數的方式設置:
ret = strategy("your user name", "your password", "strategy id", "SHSE.600000.tick,SHSE.600000.bar.60", 2, "localhost:8001")
方式二,通過配置方式初始化策略,策略的配置文件strategy節(jié)點設置如下:
;訂閱證券代碼或合約代碼列表subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60;行情模式,2-實時行情模式,3-模擬行情模式,4-回放行情模式mode=2
1.關聯實盤交易通道。
2.參考如何設置策略仿真交易,接收實時行情即可開始實盤交易。
策略的基類提供策略3類事件:
1.登錄事件:策略初始化時觸發(fā)
2.行情數據事件:接收實時行情數據時觸發(fā),主要有Tick行情事件和Bar行情事件
3.交易相關事件:交易時觸發(fā),主要有下單、撤單、訂單回報事件
用戶重寫自己關注事件的回調方法完善策略邏輯。
策略在初始化時將觸發(fā)登錄事件,可以在自己的策略類中重寫策略基類的on_login方法,以便策略初始化時進行自定義操作
class Strategy(StrategyBase): def on_login(self): ...
掘金SDK提供回測行情、模擬行情、實時行情及歷史行情數據
1.回測行情、模擬行情和實時行情在訂閱了symbol后,在策略的on_tick方法和on_bar方法中接收行情數據
2.各頻率的歷史行情數據提供對應的API提取。
數據類型分為tick數據和bar數據
1.Tick行情是指按交易所實際發(fā)送的行情數據
2.Bar數據是指各種頻率的行情數據,可訂閱 1分、15分、60分的實時Bar數據。
方式一,策略對象也提供行情接口,請參考如何初始化策略
方式二,獲取行情對象實例,然后調用行情接口獲取數據,該方式下僅獲取數據
from gmsdk import mdret = md.init("your user name", "your password")
訂閱上交所浦發(fā)銀行和深交所平安銀行的Tick行情數據,訂閱的證券代碼格式定義詳細介紹請點擊這里。
方式一,通過策略類對象訂閱實時行情
1.策略初始化時訂閱
ret = Strategy("your user name", "your password", "strategy id", "SHSE.600000.tick,SZSE.000001.tick", 2, "localhost:8001")
2.策略程序運行中訂閱
ret = strategy.subscribe("SHSE.600000.tick,SHSE.600000.bar.60")
方式二,通過行情類對象訂閱實時行情,該方式僅提供行情數據
1.行情類對象初始化時訂閱
from gmsdk import mdret = md.init("your user name", "your password", 2, "SHSE.600000.tick,SZSE.000001.tick")
2.程序運行過程中訂閱
ret = md.subscribe("SHSE.600000.tick,SZSE.000001.tick")
示例:訂閱上交所浦發(fā)銀行的1min Bar行情和深交所平安銀行的30s Bar行情
方式一,通過策略類對象訂閱實時行情
1.策略初始化時訂閱
ret = strategy("your user name", "your password", "strategy id", "SHSE.600000.bar.60,SZSE.000001.bar.30", 3, "localhost:8001")
2.策略運行過程中訂閱
ret = strategy.subscribe("SHSE.600000.bar.60,SZSE.000001.bar.30")
方式二,通過行情類對象訂閱實時行情,該方式僅提供行情數據
1.行情類對象初始化時訂閱
ret = md.init("your user name", "your password", 2, "SHSE.600000.bar.60,SZSE.000001.bar.30")
2.程序運行過程中訂閱
ret = md.subscribe("SHSE.600000.bar.60,SZSE.000001.bar.30")
日頻行情(DailyBar)僅在策略回測時訂閱使用,其他策略運行模式下訂閱將接收不到日頻行情
示例:訂閱上交所浦發(fā)銀行的日頻行情和深交所平安銀行的日頻行情
通過策略類對象訂閱實時行情
1.策略初始化時訂閱
ret = strategy("your user name", "your password", "strategy id", "SHSE.600000.bar.daily,SZSE.000001.bar.daily", 3, "localhost:8001")
2.策略運行中訂閱
ret = strategy.subscribe("SHSE.600000.daily,SZSE.000001.daily")
示例:退訂上交所浦發(fā)銀行的tick行情和深交所平安銀行的1min Bar行情
方式一,通過策略類對象退訂:
ret = strategy.unsubscribe("SHSE.600000.tick,SZSE.000001.bar.60")
方式二,通過行情類對象退訂:
ret = md.unsubscribe("SHSE.600000.tick,SZSE.000001.bar.60")
示例:提取上交所浦發(fā)銀行和深交所平安銀行 2015-10-29 9:30:00
到 2015-10-29 15:00:00
的Tick數據
方式一,通過策略類對象接口提取
ticks = strategy.get_ticks("SHSE.600000,SZSE.000001", "2015-10-29 9:30:00", "2015-10-29 15:00:00")
方式二,通過行情類對象接口提取
ticks = md.get_ticks("SHSE.600000,SZSE.000001", "2015-10-29 9:30:00", "2015-10-29 15:00:00")
示例:提取上交所浦發(fā)銀行和深交所平安銀行2015-10-29 10:00:00到2015-10-29 15:00:00的1min Bar數據,提取30s、5min頻率的bar數據修改參數bar_type為30、300即可。
方式一,通過策略類對象接口提取
bars = strategy.get_bars("SHSE.600000,SZSE.000001", 60, "2015-10-29 10:00:00", "2015-10-29 15:00:00")
方式二,通過行情類對象接口提取
bars = md.get_bars("SHSE.600000,SZSE.000001", 60, "2015-10-29 10:00:00", "2015-10-29 15:00:00")
示例:提取上交所浦發(fā)銀行和深交所平安銀行2014-10-29到2015-10-29 的日頻數據(DailyBar)。
方式一,通過策略類對象接口提取
daily_bars = strategy.get_dailybars("SHSE.600000,SZSE.000001", "2014-10-29", "2015-10-29")
方式二,通過行情類對象接口提取
daily_bars = md.get_dailybars("SHSE.600000,SZSE.000001","2014-10-29", "2015-10-29")
示例:提取上交所浦發(fā)銀行和深交所平安銀行最近100筆Tick數據
方式一,通過策略類對象接口提取
ticks = strategy.get_last_n_ticks("SHSE.600000,SZSE.000001", 100)
方式二,通過行情類對象接口提取
ticks = md.get_last_n_ticks("SHSE.600000,SZSE.000001", 100)
示例:提取上交所浦發(fā)銀行和深交所平安銀行最近20筆1min頻率的Bar數據,提取30s、5min頻率的bar數據修改參數bar_type為30、300即可。
方式一,通過策略類對象接口提取
bars = strategy.get_last_n_bars("SHSE.600000,SZSE.000001", 60, 20)
方式二,通過行情類對象接口提取
bars = md.get_last_n_bars("SHSE.600000,SZSE.000001", 60, 20)
示例:提取上交所浦發(fā)銀行和深交所平安銀行最近20筆日頻數據(DailyBar)
方式一,通過策略類對象接口提取
daily_bars = strategy.get_last_n_dailybars("SHSE.600000,SZSE.000001", 20)
方式二,通過行情類對象接口提取
daily_bars = md.get_last_n_dailybars("SHSE.600000,SZSE.000001", 20)
示例:提取上交所浦發(fā)銀行和深交所平安銀行最近1筆Tick數據
方式一,通過策略類對象接口提取
ticks = strategy.get_last_ticks("SHSE.600000,SZSE.000001")
方式二,通過行情類對象接口提取
ticks = md.get_last_ticks("SHSE.600000,SZSE.000001")
示例:提取上交所浦發(fā)銀行和深交所平安銀行最近1個1min頻率的Bar數據,提取30s、5min頻率的bar數據修改參數bar_type為30、300即可。
方式一,通過策略類對象接口提取
bars = strategy.get_last_bars("SHSE.600000,SZSE.000001", 60)
方式二,通過行情類對象接口提取
bars = md.get_last_bars("SHSE.600000,SZSE.000001", 60)
示例:提取上交所浦發(fā)銀行和深交所平安銀行最近1筆日頻數據(DailyBar)
方式一,通過策略類對象接口提取
daily_bars = strategy.get_last_dailybars("SHSE.600000,SZSE.000001")
方式二,通過行情類對象接口提取
daily_bars = md.get_last_dailybars("SHSE.600000,SZSE.000001")
tick、bar事件在接收實時行情時觸發(fā),在tick和bar事件的回調方法on_tick、on_bar中可接收訂閱的Tick行情和Bar行情
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_tick、on_bar方法。
class Strategy(StrategyBase): def on_tick(self, tick): ... def on_bar(self, bar): ...
方式二,在純行情模式中處理
1.編寫tick事件和bar事件的回調方法
def on_tick(tick): ...def on_bar(bar): ...
2.訂閱tick事件和bar事件
md.ev_tick += on_tickmd.ev_bar += on_bar
在自己的策略類中重寫策略基類的on_md_event方法,行情狀態(tài)事件在開盤、收盤、回放行情結束時觸發(fā)
class Strategy(StrategyBase): def on_md_event(self, evt): ...
交易涉及到持倉Position、委托Order、成交回報ExecRpt、資金Cash、績效指標Indicator等數據類型。
示例:市價買入1000股上交所浦發(fā)銀行股票,市價開1手IF1512的多單
注意:股票、基金等現貨品種只有買入和賣出,對應下單類型是開多倉open_long和平多倉close_long;
方式一,調用開多倉的異步接口open_long
1.在策略類的方法中調用,必須在策略執(zhí)行了Run方法后調用有效
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): self.open_long("SHSE", "600000", 0, 1000) self.open_long("CFFEX", "IF1512", 0, 1)Strategy(...).run()
2.通過交易服務類對象調用,必須執(zhí)行對象的Run方法后調用有效
from gmsdk import tddef on_some_event(): td.open_long("SHSE", "600000", 0, 1000) td.open_long("CFFEX", "IF1512", 0, 1)td.ev_some_event += on_some_eventtd.init(...)td.run()
方式二,調用開多倉的同步接口open_long_sync,無需策略執(zhí)行Run方法
1.通過策略類對象調用
strategy = Strategy(...)strategy.open_long_sync("SHSE", "600000", 0, 1000)strategy.open_long_sync("CFFEX", "IF1512", 0, 1)
2.通過交易服務類對象調用
from gmsdk import tdtd.init(...)td.open_long_sync("SHSE", "600000", 0, 1000)td.open_long_sync("CFFEX", "IF1512", 0, 1)
示例:市價賣出1000股上交所浦發(fā)銀行股票,市價平1手IF1512的多單
注意:股票、基金等現貨品種只有買入和賣出,對應下單類型是開多倉open_long和平多倉close_long;
方式一,調用平多倉的異步接口close_long
1.在策略類的方法中調用接口,必須在策略執(zhí)行了Run方法后調用有效
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): self.close_long("SHSE", "600000", 0, 1000) self.close_long("CFFEX", "IF1512", 0, 1)Strategy(...).run()
2.通過交易服務類對象調用接口,必須執(zhí)行對象的Run方法后調用有效
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): td.close_long("SHSE", "600000", 0, 1000) td.close_long("CFFEX", "IF1512", 0, 1)td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
方式二,調用平多倉的同步接口close_long_sync,無需策略執(zhí)行Run方法
1.通過策略類對象調用接口
strategy = Strategy(...)strategy.close_long_sync("SHSE", "600000", 0, 1000)strategy.close_long_sync("CFFEX", "IF1512", 0, 1)
2.通過交易服務類對象調用接口
from gmsdk import tdtd.init(...)td.close_long_sync("SHSE", "600000", 0, 1000)td.close_long_sync("CFFEX", "IF1512", 0, 1)
示例:市價開1手IF1512的空單
方式一,調用開空倉的異步接口open_short
1.在策略類的方法中調用接口,必須在策略執(zhí)行了Run方法后調用有效
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): self.open_short("CFFEX", "IF1512", 0, 1)Strategy(...).run()
2.通過交易服務類對象調用接口,必須執(zhí)行對象的Run方法后調用有效
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): td.open_short("CFFEX", "IF1512", 0, 1)td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
方式二,調用開空倉的同步接口open_short_sync,無需策略執(zhí)行Run方法
1.通過策略類對象調用接口
strategy = Strategy(...)order_ret = strategy.open_short_sync("CFFEX", "IF1512", 0, 1)
2.通過交易服務類對象調用接口
from gmsdk import tdtd.init(...)td.open_short_sync("CFFEX", "IF1512", 0, 1)
示例:市價平1手IF1512的空單
方式一,調用平空倉的異步接口close_short
1.在策略類的方法中調用接口,必須在策略執(zhí)行了Run方法后調用有效
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): self.close_short("CFFEX", "IF1512", 0, 1)Strategy(...).run()
2.通過交易服務類對象調用接口,必須執(zhí)行對象的Run方法后調用有效
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): td.close_short("CFFEX", "IF1512", 0, 1)td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
方式二,調用平空倉的同步接口close_short_sync,無需策略執(zhí)行Run方法
1.通過策略類對象調用接口
strategy = Strategy(...)order_ret = strategy.close_short_sync("CFFEX", "IF1512", 0, 1)
2.通過交易服務類對象調用接口
from gmsdk import tdtd.init(...)td.close_short_sync("CFFEX", "IF1512", 0, 1)
示例:市價開1手IF1512的多單
定義委托單對象
order = Order()order.exchange = "CFFEX"order.sec_id = "IF1512"order.side = 1order.position_effect = 1order.price = 0order.volume = 1
說明:
order.side: 設置買賣方向OrderSide
order.position_effect:設置開平類型PositionEffect,上期所可設置平今平昨
order.price:價格為0則表示市價單,否則為限價單
方式一,調用原生下單的異步接口place_order
1.在策略類的方法中調用接口,必須在策略執(zhí)行了Run方法后調用有效
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): self.place_order(order)Strategy(...).run()
2.通過交易服務類對象調用接口,必須執(zhí)行對象的Run方法后調用有效
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): td.place_order(order)td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
方式二,調用原生下單的同步接口place_order_sync,無需策略執(zhí)行Run方法
1.通過策略類對象調用接口
strategy = Strategy(...)strategy.place_order_sync(order)
2.通過交易服務類對象調用接口
from gmsdk import tdtd.init(...)td.place_order_sync(order);
方式一,調用異步撤單接口cancel_order
1.在策略類的方法中調用接口,必須在策略執(zhí)行了Run方法后調用有效
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): self.cancel_order(order_id)Strategy(...).run()
2.通過交易服務類對象調用接口,必須執(zhí)行對象的Run方法后調用有效
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): td.cancel_order(order_id)td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
方式二,調用同步撤單接口cancel_order_sync,無需策略執(zhí)行Run方法
1.通過策略類對象調用接口
strategy = Strategy(...)strategy.cancel_order(order_id)
2.通過交易服務類對象調用接口
from gmsdk import tdtd.init(...)td.cancel_order(order_id)
1.在策略類的方法中調用接口
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): order = self.get_order(order_id)Strategy(...).run()
2.通過交易服務類對象調用接口
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): order = td.get_order(order_id)td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
訂單的回報以交易事件的方式給出,當前提供的交易事件有:
委托執(zhí)行回報事件
訂單拒絕事件
訂單被柜臺接受事件
訂單狀態(tài)變更事件
訂單全部成交事件
訂單部分成交事件
訂單停止成交事件
訂單撤單成功事件
訂單撤單拒絕事件
具體事件處理請參考交易事件處理章節(jié)
調用get_cash方法查詢當前策略的資金信息。
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): cash = self.get_cash()Strategy(...).run()
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): cash = td.get_cash()td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
調用get_position方法查詢單一交易品種的持倉情況。
示例:獲取上交所浦發(fā)銀行持倉情況
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): postion = self.get_position("SHSE", "600000", 1)Strategy(...).run()
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): postion = td.get_position("SHSE", "600000", 1)td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
調用get_positions方法獲取當前策略的全部持倉信息。
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): pos_list = self.get_positions()Strategy(...).run()
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): pos_list = td.get_positions()td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
調用get_indicator方法獲取當前策略的績效指標。
class Strategy(StrategyBase): def on_some_event(self): ## eg. def on_tick(self, tick): indicator = self.get_indicator()Strategy(...).run()
from gmsdk import tddef on_some_event(): ##eg. def on_tick(tick): indicator = td.get_indicator()td.ev_some_event += on_some_event ##eg. td.ev_tick += on_ticktd.init(...)td.run()
當我們在程序下一筆委托單到交易服務時,將產生一系列交易事件
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_execrpt方法,on_execrpt方法在委托執(zhí)行時觸發(fā),訂單的任何執(zhí)行回報都會觸發(fā)本事件
class Strategy(StrategyBase): def on_execrpt(self, rpt): ...Strategy(...).run()
方式二,通過交易服務類對象處理
def on_execrpt(rpt): ...
from gmsdk import tdtd.ev_execrpt += on_execrpttd.init(...).run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_rejected方法,on_order_rejected方法在訂單拒絕時觸發(fā)
class Strategy(StrategyBase): def on_order_rejected(self, order): ...Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_rejected(order): ...
from gmsdk import tdtd.ev_order_rejected += on_order_rejectedtd.init(...)td.run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_new方法,當訂單已被交易所接受時觸發(fā)
class Strategy(StrategyBase): def on_order_new(self, order): ...ret = Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_new(order): ...
from gmsdk import tdtd.ev_order_new += on_order_newtd.init(...)td.run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_status方法,當訂單狀態(tài)更新時觸發(fā)
class Strategy(StrategyBase): def on_order_status(self, order): ...ret = Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_status(order): ...
from gmsdk import tdtd.ev_order_status += on_order_statustd.init(...)td.run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_filled方法,當一筆訂單完全成交時觸發(fā)
class Strategy(StrategyBase): def on_order_filled(self, order): ...Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_filled(order): ...
from gmsdk import tdtd.ev_order_filled += on_order_filledtd.init(...)td.run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_partially_filled方法,當一筆訂單有部分成交時觸發(fā)
class Strategy(StrategyBase): def on_order_partially_filled(self, order): ...Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_partially_filled(order): ...
from gmsdk import tdtd.ev_order_partially_filled += on_order_partially_filledtd.init(...)td.run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_stop_executed方法,當訂單停止執(zhí)行時觸發(fā),例如限價單收市時還未成交
class Strategy(StrategyBase): def on_order_stop_executed(self, order): ...Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_stop_executed(order): ...
from gmsdk import tdtd.ev_order_stop_executed += on_order_stop_executedtd.init(...)td.run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_cancel_rejected方法,當撤單拒絕時觸發(fā)
class Strategy(StrategyBase): def on_order_cancel_rejected(self, order): ...Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_cancel_rejected(rpt): ...
from gmsdk import tdtd.ev_order_cancel_rejected += on_order_cancel_rejectedtd.init(...)td.run()
方式一,在策略類中處理
在自己的策略類中重寫策略基類的on_order_cancelled方法,當委托單的狀態(tài)發(fā)生變化時觸發(fā)
class Strategy(StrategyBase): def on_order_cancelled(self, order): ...Strategy(...).run()
方式二,通過交易服務類對象處理
def on_order_cancelled(order): ...
from gmsdk import tdtd.ev_order_cancelled += on_order_cancelledtd.init(...)td.run()
調用get_version方法。
import gmsdkgmsdk.get_version()
API返回值及錯誤事件的參數值都有統(tǒng)一的定義,調用get_strerror方法獲取返回值對應的文本信息。
在自己的策略類中重寫策略基類的on_error方法,當策略執(zhí)行過程有任何錯誤都會回調該方法,通過參數獲取錯誤信息
class Strategy(StrategyBase): def on_error(self, error_code, error_msg): ...Strategy(...).run()
訂單狀態(tài)。
OrderStatus_New = 1, #已報OrderStatus_PartiallyFilled = 2, #部成OrderStatus_Filled = 3, #已成OrderStatus_DoneForDay = 4, #OrderStatus_Canceled = 5, #已撤OrderStatus_PendingCancel = 6, #待撤OrderStatus_Stopped = 7, #停止OrderStatus_Rejected = 8, #已拒絕OrderStatus_Suspended = 9, #掛起OrderStatus_PendingNew = 10, #待報OrderStatus_Calculated = 11, #計算OrderStatus_Expired = 12, #已過期OrderStatus_AcceptedForBidding = 13, #接受競價OrderStatus_PendingReplace = 14 #待修改
訂單拒絕原因。
OrderRejectReason_UnknownReason = 1, #未知原因OrderRejectReason_RiskRuleCheckFailed = 2, #不符合風控規(guī)則OrderRejectReason_NoEnoughCash = 3, #資金不足OrderRejectReason_NoEnoughPosition = 4, #倉位不足OrderRejectReason_IllegalStrategyID = 5, #非法策略IDOrderRejectReason_IllegalSymbol = 6, #非法交易標的OrderRejectReason_IllegalVolume = 7, #非法委托量OrderRejectReason_IllegalPrice = 8, #非法委托價OrderRejectReason_NoMatchedTradingChannel = 9, #沒有匹配的交易通道OrderRejectReason_AccountForbidTrading = 10, #交易賬號被禁止交易OrderRejectReason_TradingChannelNotConnected = 11, #交易通道未連接OrderRejectReason_StrategyForbidTrading = 12, #策略不允許交易OrderRejectReason_NotInTradingSession = 13 #非交易時段CancelOrderRejectReason_OrderFinalized = 101 #訂單已是最終狀態(tài)CancelOrderRejectReason_UnknownOrder = 102 #未知訂單CancelOrderRejectReason_BrokerOption = 103 #柜臺拒絕CancelOrderRejectReason_AlreadyInPendingCancel = 104 #重復撤單
訂單方向。
OrderSide_Bid = 1 ## 多方向OrderSide_Ask = 2 ## 空方向
訂單類型。
OrderType_LMT = 0, ## 限價委托(limit) OrderType_BOC = 1, ## 對方最優(yōu)價格(best of counterparty) OrderType_BOP = 2, ## 己方最優(yōu)價格(best of party) OrderType_B5TC = 3, ## 最優(yōu)五檔剩余撤銷(best 5 then cancel) OrderType_B5TL = 4, ## 最優(yōu)五檔剩余轉限價(best 5 then limit) OrderType_IOC = 5, ## 即時成交剩余撤銷(immediately or cancel)OrderType_FOK = 6, ## 即時全額成交或撤銷(fill or kill) OrderType_AON = 7, ## 全額成交或不成交(all or none) OrderType_MTL = 8, ## 市價剩余轉限價(market then limit) OrderType_EXE = 9 ## 期權行權(option execute)
訂單執(zhí)行回報類型。
ExecType_New = 1 ## 交易所已接受訂單ExecType_DoneForDay = 4ExecType_Canceled = 5 ## 已撤ExecType_PendingCancel = 6 ## 待撤ExecType_Stopped = 7 ## 已停ExecType_Rejected = 8 ## 已拒絕ExecType_Suspended = 9 ## 暫停ExecType_PendingNew = 10 ## 待接受ExecType_Calculated = 11 ## 已折算ExecType_Expired = 12 ## 過期ExecType_Restated = 13 ## 重置ExecType_PendingReplace = 14 ## 待修改ExecType_Trade = 15 ## 交易ExecType_TradeCorrect = 16 ## 交易更正ExecType_TradeCancel = 17 ## 交易取消ExecType_OrderStatus = 18 ## 更新訂單狀態(tài)ExecType_CancelRejected = 19 ## 撤單被拒絕
開平倉類型。
PositionEffect_Open = 1 ## 開倉PositionEffect_Close = 2 ## 平倉PositionEffect_CloseToday = 3 ## 平今倉PositionEffect_CloseYesterday = 4 ## 平昨倉
交易數據類型主要包括委托,執(zhí)行回報,資金,持倉,績效等數據類型。
委托訂單。
class Order(object): def __init__(self): self.strategy_id = '' ## 策略ID self.account_id = '' ## 交易賬號 self.cl_ord_id = '' ## 客戶端訂單ID self.order_id = '' ## 柜臺訂單ID self.ex_ord_id = '' ## 交易所訂單ID self.exchange = '' ## 交易所代碼 self.sec_id = '' ## 證券ID self.position_effect = 0 ## 開平標志 self.side = 0 ## 買賣方向 self.order_type = 0 ## 訂單類型 self.order_src = 0 ## 訂單來源 self.status = 0 ## 訂單狀 self.ord_rej_reason = 0 ## 訂單拒絕原因 self.ord_rej_reason_detail = '' ## 訂單拒絕原因描述 self.price = 0.0 ## 委托價 self.stop_price = 0.0; ## 止損價 self.volume = 0.0 ## 委托量 self.filled_volume = 0.0 ## 已成交量 self.filled_vwap = 0.0 ## 已成交均價 self.filled_amount = 0.0 ## 已成交額 self.sending_time = 0.0 ## 委托下單時間 self.transact_time = 0.0 ## 最新一次成交時間
委托執(zhí)行回報。
class ExecRpt(object): def __init__(self): self.strategy_id = '' ## 策略ID self.cl_ord_id = '' ## 客戶端訂單ID self.order_id = '' ## 交易所訂單ID self.exec_id = '' ## 訂單執(zhí)行回報ID self.exchange = '' ## 交易所代碼 self.sec_id = '' ## 證券ID self.position_effect = 0 ## 開平標志 self.side = 0 ## 買賣方向 self.ord_rej_reason = 0 ## 訂單拒絕原因 self.ord_rej_reason_detail = '' ## 訂單拒絕原因描述 self.exec_type = 0 ## 訂單執(zhí)行回報類型 self.price = 0.0 ## 成交價 self.volume = 0.0 ## 成交量 self.amount = 0.0 ## 成交額 self.transact_time = 0.0 ## 交易時間
資金。
class Cash(object): def __init__(self): self.strategy_id = '' ## 策略ID self.account_id = '' ## 賬戶id self.currency = 0 ## 幣種 self.nav = 0.0 ## 資金余額 self.fpnl = 0.0 ## 浮動收益 self.pnl = 0.0 ## 凈收益 self.profit_ratio = 0.0 ## 收益率 self.frozen = 0.0 ## 持倉凍結金額 self.order_frozen = 0.0 ## 掛單凍結金額 self.available = 0.0 ## 可用資金 self.cum_inout = 0.0 ## 累計出入金 self.cum_trade = 0.0 ## 累計交易額 self.cum_pnl = 0.0 ## 累計收益 self.cum_commission = 0.0 ## 累計手續(xù)費 self.last_trade = 0.0 ## 最新一筆交易額 self.last_pnl = 0.0 ## 最新一筆交易收益 self.last_commission = 0.0 ## 最新一筆交易手續(xù)費 self.last_inout = 0.0 ## 最新一次出入金 self.change_reason = 0 ## 變動原因 self.transact_time = 0.0 ## 交易時間
持倉。
class Position(object): def __init__(self): self.strategy_id = '' ## 策略ID self.account_id = '' ## 賬戶id self.exchange = '' ## 交易所代碼 self.sec_id = '' ## 證券ID self.side = 0 ## 買賣方向 self.volume = 0.0 ## 持倉量 self.volume_today = 0.0 ## 今倉量 self.amount = 0.0 ## 持倉額 self.vwap = 0.0 ## 持倉均價 self.price = 0.0 ## 當前行情價格 self.fpnl = 0.0 ## 持倉浮動盈虧 self.cost = 0.0 ## 持倉成本 self.order_frozen = 0.0 ## 掛單凍結倉位 self.available = 0.0 ## 可平倉位 self.available_today = 0.0 ## 可平今倉位(volume_today-order_frozen_today) self.available_yesterday = 0.0 ## 可平昨倉位(available - available_today) self.order_frozen_today = 0.0 ## 掛單凍結今倉 self.last_price = 0.0 ## 上一筆成交價 self.last_volume = 0.0 ## 上一筆成交量 self.init_time = 0.0 ## 初始建倉時間 self.transact_time = 0.0 ## 上一倉位變更時間
績效。
class Indicator(object): def __init__(self): self.strategy_id = '' ## 策略ID self.account_id = '' ## 賬號ID self.nav = 0.0 ## 凈值(cum_inout + cum_pnl + fpnl - cum_commission) self.pnl = 0.0 ## 凈收益(nav-cum_inout) self.profit_ratio = 0.0 ## 收益率(pnl/cum_inout) self.profit_ratio_bench = 0.0 ## 基準收益率 self.sharp_ratio = 0.0 ## 夏普比率 self.risk_ratio = 0.0 ## 風險比率 self.trade_count = 0 ## 交易次數 self.win_count = 0 ## 盈利次數 self.lose_count = 0 ## 虧損次數 self.win_ratio = 0.0 ## 勝率 self.max_profit = 0.0 ## 最大收益 self.min_profit = 0.0 ## 最小收益 self.max_single_trade_profit = 0.0 ## 最大單次交易收益 self.min_single_trade_profit = 0.0 ## 最小單次交易收益 self.daily_max_single_trade_profit = 0.0 ## 今日最大單次交易收益 self.daily_min_single_trade_profit = 0.0 ## 今日最小單次交易收益 self.max_position_value = 0.0 ## 最大持倉市值或權益 self.min_position_value = 0.0 ## 最小持倉市值或權益 self.max_drawdown = 0.0 ## 最大回撤 self.daily_pnl = 0.0 ## 今日收益 self.daily_return = 0.0 ## 今日收益率 self.annual_return = 0.0 ## 年化收益率 self.cum_inout = 0.0 ## 累計出入金 self.cum_trade = 0.0 ## 累計交易額 self.cum_pnl = 0.0 ## 累計平倉收益(沒扣除手續(xù)費) self.cum_commission = 0.0 ## 累計手續(xù)費 self.transact_time = 0.0 ## 指標計算時間
柜臺賬戶
class BrokerAccount(object): def __init__(self): self.account_id = '' # 柜臺賬號ID self.username = '' # 柜臺賬號 self.permissible = 0 # 允許交易 self.status = 0 # 賬號當前狀態(tài)
策略參數
class StrategyParameter(object): def __init__(self): self.name = '' # 參數名 self.value = 0.0 # 參數值 self.min = 0.0 # 可設置的最小值 self.max = 0.0 # 可設置的最大值 self.readonly = false # 是否只讀 self.group = '' # 組名 self.intro = '' # 參數說明
策略交易標的
class StrategySymbol(object): def __init__(self): self.symbol = '' # 交易代碼 self.exchange = '' # 交易所代碼 self.sec_id = '' # 證券ID
行情數據類型有Tick,Bar,DailyBar。
逐筆行情數據。
class Tick(object): def __init__(self): self.exchange = '' ## 交易所代碼 self.sec_id = '' ## 證券ID self.utc_time = 0.0 ## 行情時間戳 self.strtime = '' ## 可視化時間 self.last_price = 0.0 ## 最新價 self.open = 0.0 ## 開盤價 self.high = 0.0 ## 最高價 self.low = 0.0 ## 最低價 self.cum_volume = 0.0 ## 成交總量/最新成交量,累計值 self.cum_amount = 0.0 ## 成交總金額/最新成交額,累計值 self.cum_position = 0.0 ## 合約持倉量(期),累計值 self.last_volume = 0 ## 瞬時成交量(中金所提供) self.last_amount = 0.0 ## 瞬時成交額 self.upper_limit = 0.0 ## 漲停價 self.lower_limit = 0.0 ## 跌停價 self.settle_price = 0.0 ## 今日結算價 self.trade_type = 0 ## (保留)交易類型,對應多開,多平等類型 0:'上一個tick沒有成交量', 1:'雙開', 2: '雙平', 3: '多開', 4:'空開', 5: '空平', 6:'多平', 7:'多換', 8:'空換' self.pre_close = 0.0 ## 昨收價 self.bids = [] ## [(price, volume), (price, volume), ...] ## 1-5檔買價,量 self.asks = [] ## [(price, volume), (price, volume), ...] ## 1-5檔賣價,量
各種周期的Bar數據。
class Bar(object): def __init__(self): self.exchange = '' ## 交易所代碼 self.sec_id = '' ## 證券ID self.bar_type = 0 ## bar類型,以秒為單位,比如1分鐘bar, bar_type=60 self.strtime = '' ## Bar開始時間 self.utc_time = 0.0 ## Bar開始時間 self.strendtime = '' ## Bar結束時間 self.utc_endtime = 0.0 ## Bar結束時間 self.open = 0.0 ## 開盤價 self.high = 0.0 ## 最高價 self.low = 0.0 ## 最低價 self.close = 0.0 ## 收盤價 self.volume = 0.0 ## 成交量 self.amount = 0.0 ## 成交額 self.pre_close ## 前收盤價 self.position; ## 持倉量 self.adj_factor ## 復權因子 self.flag ## 除權出息標記
日頻數據,在Bar數據的基礎上,還包含結算價,漲跌停價等靜態(tài)數據。
class Dailybar(object): def __init__(self): self.exchange = '' ## 交易所代碼 self.sec_id = '' ## 證券ID self.bar_type = 0 ## bar類型 self.strtime = '' ## 可視化時間 self.utc_time = 0.0 ## 行情時間戳 self.open = 0.0 ## 開盤價 self.high = 0.0 ## 最高價 self.low = 0.0 ## 最低價 self.close = 0.0 ## 收盤價 self.volume = 0.0 ## 成交量 self.amount = 0.0 ## 成交額 self.position = 0.0 ## 倉位 self.settle_price = 0.0 ## 結算價 self.upper_limit = 0.0 ## 漲停價 self.lower_limit = 0.0 ## 跌停價 self.pre_close ## 前收盤價 self.adj_factor ## 復權因子 self.flag ## 除權出息,停牌等標記
交易代碼數據類型
class Instrument(object): def __init__(self): self.symbol = '' ## 交易代碼 self.sec_type = 0 ## 代碼類型 self.sec_name = '' ## 代碼名稱 self.multiplier = 0.0 ## 合約乘數 self.margin_ratio = 0.0 ## 保證金比率 self.price_tick = 0.0 ## 價格最小變動單位 self.upper_limit = 0.0 ## 當天漲停板 self.lower_limit = 0.0 ## 當天跌停板 self.is_active = 0 ## 當天是否交易 self.update_time = '' ## 更新時間
成份股數據類型
class Constituent(object): def __init__(self): self.symbol = '' ## 交易代碼 self.weight = 0.0 ## 代碼權重
財務指標
class FinancialIndex(object): def __init__(self): self.symbol = '' #股票代碼 self.pub_date = '' #公告日期 self.eps = 0.0 #每股收益 self.bvps = 0.0 #每股凈資產 self.cfps = 0.0 #每股現金流 self.afps = 0.0 #每股公積金 self.total_asset = 0.0 #總資產 self.current_asset = 0.0 #流動資產 self.fixed_asset = 0.0 #固定資產 self.liability = 0.0 #負債合計 self.current_liability = 0.0 #流動負債 self.longterm_liability = 0.0 #長期負債 self.equity = 0.0 #所有者權益 self.income = 0.0 #主營業(yè)務收入 self.operating_profit = 0.0 #主營業(yè)務利潤 self.net_profit = 0.0 #凈利潤
股本指標
class ShareIndex(Object): def __init__(self): self.symbol = '' #股票代碼 self.pub_date = '' #公告日期 self.total_share = 0.0 #總股本 self.flow_a_share = 0.0 #流通A股 self.nonflow_a_share = 0.0 #限售流通A股
市場指標
class MarketIndex(Object): def __init__(self): self.symbol = '' #股票代碼 self.pub_date = '' #公告日期 self.pe_ratio = 0.0 #市盈率 self.pb_ratio = 0.0 #市凈率 self.ps_ratio = 0.0 #市銷率 self.market_value = 0.0 #市值 self.market_value_flow = 0.0 #流通市值
交易日類型
class TradeDate(object): def __init__(self): self.utc_time = 0.0 ## UTC時間戳[帶毫秒] self.strtime = '' ## 交易日
復權因子
class StockAdjustFactor(object): def __init__(self): self.symbol ##股票代碼 self.trade_date ##交易日 self.adj_factor ##復權因子
分紅送股事件明細
class StockDivident(object): def __init__(self): self.symbol ##股票代碼 self.div_date ##除權除息日 self.cash_div ##每股派現 self.share_div_ratio ##每股送股比例 self.share_trans_ratio ##每股轉增股比例 self.allotment_ratio ##每股配股比例 self.allotment_price ##配股價
虛擬合約明細
class VirtualContract(object): def __init__(self): self.vsymbol ##主力合約或連接合約代碼 self.symbol ##真實symbol self.trade_date ##交易日
初始化策略,設置服務地址,賬號密碼,策略ID,以及需要訂閱的symbol列表。策略自動連接服務,并登陸,訂閱對應的行情,準備好運行。
函數原型:
__init__(self, username, password, strategy_id, subscribe_symbols='', mode=2, td_addr='', config_file=None, config_file_encoding='utf-8')
參數:
參數名 | 類型 | 說明 |
---|---|---|
username | string | 掘金終端賬號 |
password | string | 掘金終端密碼 |
strategy_id | string | 策略ID |
subscribe_symbols | string | 行情訂閱的代碼列表 |
mode | int | 枚舉類型,行情模式 |
td_addr | string | 交易服務器uri, 如設置為localhost:8001,則終端用戶指向本地客戶端 , 如果設置為空, 則使用掘金云端服務 |
返回值:
示例:
初始化時訂閱上交所浦發(fā)銀行的tick和1min bar實時行情
ret = Strategy("your user name", "your password", "strategy id", "SHSE.600000.tick,SHSE.600000.bar.60", 2, "localhost:8001")
注意項:
symbol_list 訂閱代碼表,參數格式如下:
訂閱串有三節(jié)或四節(jié)組成,用'.'分隔,格式:
對應交易所exchange.代碼code.數據類型data_type.周期類型 bar_type
只有訂閱bar數據時, 才用到第四節(jié), 周期類型才有作用交易所exchange統(tǒng)一四個字節(jié):
CFFEX-中金所 SHFE-上期所 DCE-大商所 CZCE-鄭商所 SHSE-上交所 SZSE-深交所
支持6種格式的訂閱,使用如下:
SHSE.* : 上交所,所有數據
SHSE.600000.* : 上交所,600000,所有數據
SHSE.600000.tick : 上交所,600000, tick數據
SHSE.600000.bar.60: 上交所, 600000, 1分鐘(60秒)Bar數據
SHSE.600000.*,SHSE.600004.* : 上交所,600000和600004所有數據(訂閱多個代碼)
使用配置文件初始化策略,配置文件已設置服務地址,賬號密碼,策略ID,行情模式以及需要訂閱的symbol列表
函數原型:
__init__(self, username, password, strategy_id, subscribe_symbols='', mode=2, td_addr='', config_file=None, config_file_encoding='utf-8')
參數:
參數名 | 類型 | 說明 |
---|---|---|
config_file | string | 策略配置文件路徑 |
config_file_encoding | string | 策略配置文件編碼 |
返回值:
示例:
strategy.ini文件配置:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;策略基本配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[strategy];掘金用戶名username=-;掘金密碼password=-;策略IDstrategy_id=3c7e70be-7e02-11e5-b293-5ec5d48ea63a;訂閱證券代碼或合約代碼列表subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60;行情模式,2-實時行情模式,3-模擬行情模式,4-回放行情模式mode=2;交易服務地址,使用掘金終端交易時,地址為localhost:8001, 如果此項配置為空,則訂單發(fā)往掘金云服務器td_addr=localhost:8001;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;策略回測參數配置;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[backtest];歷史數據回放開始時間start_time=2014-10-25 09:30:00;歷史數據回放結束時間end_time=2015-10-29 15:15:00;策略初始資金initial_cash=1000000;委托量成交比率,默認=1(每個委托100%成交)transaction_ratio=1;手續(xù)費率,默認=0(不計算手續(xù)費)commission_ratio=0.0008;滑點比率,默認=0(無滑點)slippage_ratio=0.246;行情復權模式,0=不復權,1=前復權price_type=1;基準bench_symbol=SHSE.000300
ret = Strategy(config_file="strategy.ini")
回測參數設置, 僅在回測模式下有效
函數原型:
backtest_config(self, start_time, end_time, initial_cash=1000000, transaction_ratio=1, commission_ratio=0, slippage_ratio=0, price_type=1, bench_symbol='SHSE.000300', check_cache=1)
參數:
參數名 | 類型 | 說明 |
---|---|---|
start_time | string | 回放行情開始時間,格式:yyyy-mm-dd HH:MM:SS |
end_time | string | 回放行情結束時間,格式:yyyy-mm-dd HH:MM:SS |
initial_cash | float | 回測初始資金,默認1000000 |
transaction_ratio | float | 委托量成交比率,默認1,按委托量全部成交 |
commission_ratio | float | 手續(xù)費率,默認0,無手續(xù)費 |
slippage_ratio | float | 滑點比率,默認0,無滑點 |
price_type | int | 復權方式,0-不復權,1-前復權 |
bench_symbol | string | 基準代碼 |
check_cache | int | 回測時是否使用本地緩存數據,0-不使用,1-使用, 默認為值為 1 |
返回值:
運行策略
函數原型:
run()
參數:
無
返回值:
停止策略
參數:
無
返回值:
無
訂閱行情,策略類和行情服務了都提供該接口。
函數原型:
subscribe(symbol_list)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 訂閱代碼列表 |
返回值:
示例:
通過策略對象訂閱上交所浦發(fā)銀行Tick和1分鐘 注意項: symbol_list 訂閱代碼表的參數格式當在回測模式下,需要顯式關閉本地緩存api才能正常工作, 如何關閉本地緩存,請參見 backtest_config 退訂指定行情,策略類和行情服務了都提供該接口。 函數原型: 參數:unsubscribe
unsubscribe(symbol_list)
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 訂閱代碼列表 |
返回值:
示例:
通過策略對象退訂上交所浦發(fā)銀行Tick和1分鐘 注意項: symbol_list 訂閱代碼表的參數格式當在回測模式下,需要顯式關閉本地緩存api才能正常工作, 如何關閉本地緩存,請參見 backtest_config 重置訂閱條件,相當于先退訂原來所有行情,再重新訂閱指定的行情 函數原型: 參數:resubscribe
resubscribe(symbol_list)
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 訂閱代碼列表 |
返回值:
symbol_list 訂閱代碼表的參數格式當在回測模式下,需要顯式關閉本地緩存api才能正常工作, 如何關閉本地緩存,請參見 backtest_config
提取指定時間段的歷史Tick數據,支持單個代碼提取或多個代碼組合提取。策略類和行情服務類都提供該接口。
函數原型:
get_ticks(symbol_list, begin_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000,同時支持多只代碼 |
begin_time | string | 開始時間, 如2015-10-30 09:30:00 |
end_time | string | 結束時間, 如2015-10-30 15:00:00 |
返回值:
Tick列表
示例:
通過策略對象提取上交所浦發(fā)銀行和深交所平安銀行2015-10-30 09:30:00到2015-10-30 15:00:00時間段的所有Tick數據
ticks = strategy.get_ticks("SHSE.600000,SZSE.000001", "2015-10-30 09:30:00", "2015-10-30 15:00:00")
提取指定時間段的歷史Bar數據,支持單個代碼提取或多個代碼組合提取。策略類和行情服務類都提供該接口。
函數原型:
get_bars(symbol_list, bar_type, begin_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000,同時支持多只代碼 |
bar_type | int | bar周期,以秒為單位,比如60即1分鐘bar |
begin_time | string | 開始時間, 如2015-10-30 09:30:00 |
end_time | string | 結束時間, 如2015-10-30 15:00:00 |
返回值:
Bar列表
示例:
通過策略對象提取上交所浦發(fā)銀行和深交所平安銀行2015-10-30 09:30:00到2015-10-30 15:00:00時間段的1分鐘Bar數據
bars = strategy.get_bars("SHSE.600000,SZSE.000001", 60, "2015-10-30 09:30:00", "2015-10-30 15:00:00")
提取指定時間段的歷史日周期Bar數據,支持單個代碼提取或多個代碼組合提取。DailyBar比Bar多了部分靜態(tài)數據,如結算價,漲跌停等。策略類和行情服務類都提供該接口。
函數原型:
get_dailybars(symbol_list, begin_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000,同時支持多只代碼 |
begin_time | string | 開始日期, 如2015-10-19 |
end_time | string | 結束日期, 如2015-10-30 |
返回值:
DailyBar列表
示例:
通過策略對象提取上交所浦發(fā)銀行和深交所平安銀行2015-10-19到2015-10-30時間段的DailyBar數據
var dailybars = strategy.get_dailybars("SHSE.600000,SZSE.000001", "2015-10-19 00:00:00", "2015-10-30 00:00:00")
提取最新的1條Tick數據,支持單個代碼提取或多個代碼組合提取。策略類和行情服務類都提供該接口。
函數原型:
get_last_ticks(symbol_list)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000,同時支持多只代碼 |
返回值:
Tick列表
示例:
通過策略對象提取上交所浦發(fā)銀行和深交所平安銀行的最近一筆Tick數據
ticks = strategy.get_last_ticks("SHSE.600000,SZSE.000001")
提取最新1條Bar數據,支持單個代碼提取或多個代碼組合提取。策略類和行情服務類都提供該接口。
函數原型:
get_last_bars(symbol_list, bar_type)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000,同時支持多只代碼 |
bar_type | int | bar周期,以秒為單位,比如60即1分鐘bar |
返回值:
Bar列表
示例:
通過策略對象提取上交所浦發(fā)銀行和深交所平安銀行的最新的1筆1min Bar數據
bars = strategy.get_last_bars("SHSE.600000,SZSE.000001", 60)
提取最新1條DailyBar數據,支持單個代碼提取或多個代碼組合提取。策略類和行情服務類都提供該接口。
函數原型:
get_last_dailybars(symbol_list)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000,同時支持多只代碼 |
返回值:
DailyBar列表
示例:
通過策略對象提取上交所浦發(fā)銀行和深交所平安銀行的最近一筆DailyBar數據
dailybars = strategy.get_last_dailybars("SHSE.600000,SZSE.000001")
提取單個代碼最新n條Tick數據,策略類和行情服務類都提供該接口。
函數原型:
get_last_n_ticks(symbol, n, end_time='')
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000 |
n | int | 提取的數據條數 |
end_time | string | 指定截止時間, 如2015-10-30 15:00:00 |
返回值:
Tick列表
示例:
通過策略對象提取上交所浦發(fā)銀行的最近10筆Tick數據
dailybars = strategy.get_last_n_ticks("SHSE.600000")
提取單個代碼的最新n條Bar數據,策略類和行情服務類都提供該接口。
函數原型:
get_last_n_bars(symbol, bar_type, n, end_time='')
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000 |
bar_type | int | bar周期,以秒為單位,比如60即1分鐘bar |
n | int | 提取的數據條數 |
end_time | string | 指定截止時間, 如2015-10-30 15:00:00 |
返回值:
Bar列表
示例:
通過策略對象提取上交所浦發(fā)銀行的最近10筆1分鐘Bar數據
dailybars = strategy.get_last_n_bars("SHSE.600000", 60, 10)
提取單個代碼的最新n條DailyBar數據, 策略類和行情服務類都提供該接口。
函數原型:
get_last_n_dailybars(symbol, n, end_time='')
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 證券代碼, 帶交易所代碼以確保唯一,如SHSE.600000 |
n | int | 提取的數據條數 |
end_time | string | 指定截止時間, 如2015-10-30 15:00:00 |
返回值:
Bar列表
示例:
通過策略對象提取上交所浦發(fā)銀行的最近10筆1min DailyBar數據
dailybars = strategy.get_last_n_dailybars("SHSE.600000", 10)
提取交易代碼。策略類和行情服務類都提供該接口。
函數原型:
get_instruments(exchange, sec_type, is_active)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼 |
sec_type | int | 代碼類型:1 股票,2 基金,3 指數,4 期貨,5 ETF |
is_active | int | 當天是否交易:1 是,0 否 |
返回值:
Instrument對象列表
根據期貨品種提取交易代碼。策略類和行情服務類都提供該接口。
函數原型:
get_instruments_by_name(name)
參數:
參數名 | 類型 | 說明 |
---|---|---|
name | string | 期貨品種,如'ag', 'ic' |
返回值:
Instrument對象列表
提取指數的成分股代碼。策略類和行情服務類都提供該接口。
函數原型:
get_constituents(index_symbol)
參數:
參數名 | 類型 | 說明 |
---|---|---|
index_symbol | string | 指數代碼 |
返回值:
Constituent對象列表
按時間周期提取FinancialIndex,按時間升序排列。策略類和行情服務類都提供該接口。
函數原型:
get_financial_index(symbol, t_begin, t_end)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 品種代碼, 如SHSE.600000 |
t_begin | string | 開始時間, 如2013-8-14 00:00:00 |
t_end | string | 結束時間, 如2013-8-15 00:00:00 |
返回值:
FinancialIndex對象列表
提取快照, 即最新的FinancialIndex,支持一次性提取多個代碼的快照。策略類和行情服務類都提供該接口。
函數原型:
get_last_financial_index(symbol_list)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 多個品種代碼列表, 如SHSE.600000,SZSE.000001 |
返回值:
FinancialIndex對象列表
提取最近n條FinancialIndex。策略類和行情服務類都提供該接口。
函數原型:
get_last_n_financial_index(symbol, n)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 代碼, 如SHSE.600000 |
n | string | 數據個數 |
返回值:
FinancialIndex對象列表
按時間周期提取ShareIndex,按時間升序排列。策略類和行情服務類都提供該接口。
函數原型:
get_share_index(symbol, t_begin, t_end)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 品種代碼, 如SHSE.600000 |
t_begin | string | 開始時間, 如2013-8-14 00:00:00 |
t_end | string | 結束時間, 如2013-8-15 00:00:00 |
返回值:
ShareIndex對象列表
提取快照, 即最新的ShareIndex,支持一次性提取多個代碼的快照。策略類和行情服務類都提供該接口。
函數原型:
get_last_share_index(symbol_list)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 多個品種代碼列表, 如SHSE.600000,SZSE.000001 |
返回值:
ShareIndex對象列表
提取最近n條ShareIndex。策略類和行情服務類都提供該接口。
函數原型:
get_last_n_share_index(symbol, n)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 代碼, 如SHSE.600000 |
n | string | 數據個數 |
返回值:
ShareIndex對象列表
按時間周期提取MarketIndex,按時間升序排列。策略類和行情服務類都提供該接口。
函數原型:
get_market_index(symbol, t_begin, t_end)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 品種代碼, 如SHSE.600000 |
t_begin | string | 開始時間, 如2013-8-14 00:00:00 |
t_end | string | 結束時間, 如2013-8-15 00:00:00 |
返回值:
MarketIndex對象列表
按時間周期提取MarketIndex,按時間升序排列。策略類和行情服務類都提供該接口。
函數原型:
get_last_market_index(symbol_list)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol_list | string | 多個品種代碼列表, 如SHSE.600000,SZSE.000001 |
返回值:
MarketIndex對象列表
按時間周期提取MarketIndex,按時間升序排列。策略類和行情服務類都提供該接口。
函數原型:
get_last_n_market_index(symbol, n)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 代碼, 如SHSE.600000 |
n | string | 數據個數 |
返回值:
MarketIndex對象列表
獲取交易所交易日歷。策略類和行情服務類都提供該接口。
函數原型:
get_calendar(exchange, start_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所, 如SHSE |
start_time | string | 開始時間, 如2016-01-01 |
end_time | string | 結束時間, 如2016-03-15 |
返回值:
TradeDate對象列表
查詢復權因子
函數原型:
get_stock_adj(symbol, start_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 如:SZSE.000001 |
start_time | string | 查詢開始時間 |
end_time | string | 查詢結束時間 |
返回值:
StockAdjustFactor 列表
查詢分紅送股明細
函數原型:
get_divident(symbol, start_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
symbol | string | 如:SZSE.000001 |
start_time | string | 查詢開始時間 |
end_time | string | 查詢結束時間 |
返回值:
StockDivident 列表
查詢虛擬合約和真實合約對應關系
函數原型:
get_virtual_contract(vsymbol, start_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
vsymbol | string | 如:CFFEX.IF, CFFEX.IF00 |
start_time | string | 查詢開始時間 |
end_time | string | 查詢結束時間 |
返回值:
返回VirtualContract列表
異步開多倉,以參數指定的symbol、價和量下單。如果價格為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口
函數原型:
open_long(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如上交所SHSE |
sec_id | string | 證券代碼,如浦發(fā)銀行600000 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 委托量 |
返回值:
委托下單生成的Order對象
示例:
市價買入1000股上交所浦發(fā)銀行
order = open_long("SHSE", "600000", 0, 1000)
異步開空倉接口,以參數指定的exchange, 證券代碼sec_id, 價和量下單。如果價格為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口。
函數原型:
open_short(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如金融期貨交易所 CFFEX |
sec_id | string | 證券代碼,如股指期貨合約1511 IF1511 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 委托量 |
返回值:
委托下單生成的Order對象
示例:
在策略類的方法中以市價開1手股指期貨合約IF1511的空單
order = open_short("CFFEX", "IF1511", 0, 1)
注意事項:
該接口為異步下單接口,需策略Run之后才能正常運行
平倉接口只對期貨有效,現貨不存在空倉單
異步平多倉接口,以參數指定的exchange, 證券代碼sec_id, 價和量下單。如果價格為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口。
函數原型:
close_long(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如上交所 SHSE |
sec_id | string | 證券代碼,如浦發(fā)銀行 600000 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
委托下單生成的Order對象
示例:
在策略類的方法中以市價賣出1000股上交所浦發(fā)銀行
order = close_long("SHSE", "600000", 0, 1000)
注意事項:
該接口為異步下單接口,需策略Run之后才能正常運行
異步平昨多倉接口,以參數指定的exchange, 證券代碼sec_id, 價和量下單。如果價格為0,為市價單,否則為限價單。此api用于平上期所昨倉,策略類和交易服務類都提供該接口。
函數原型:
close_long_yesterday(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如上期所SHFE |
sec_id | string | 證券代碼 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
委托下單生成的Order對象
示例:
以市價平1手白銀合約ag1512的多單,
order = close_long_yesterday("SHFE", "ag1512", 0, 1)
注意事項:
該接口為異步下單接口,需策略Run之后才能正常運行
平倉接口只對期貨有效,現貨不存在平倉
異步平空倉接口,以參數指定的exchange, 證券代碼sec_id, 價和量下單。如果價格為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口。
函數原型:
close_short(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如股指期貨交易所CFFEX |
sec_id | string | 證券代碼,如股指期貨合約IF1511 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
返回委托下單生成的Order對象
示例:
在策略類的方法中以市價平1手股指期貨合約IF1511的空單
order = close_short("CFFEX", "IF1511", 0, 1)
注意事項:
該接口為異步下單接口,需策略Run之后才能正常運行
平倉接口只對期貨有效,現貨不存在平倉
異步平昨空倉接口,以參數指定的exchange, 證券代碼sec_id, 價和量下單。如果價格為0,為市價單,否則為限價單。此api用于平上期所昨倉,策略類和交易服務類都提供該接口。
函數原型:
close_short_yesterday(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼,如上期所SHFE |
sec_id | string | 證券代碼 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
返回委托下單生成的Order對象
示例:
以市價平1手白銀合約ag1512的空單
order = close_short_yesterday("SHFE", "ag1512", 0, 1)
注意事項:
該接口為異步下單接口,需策略Run之后才能正常運行
平倉接口只對期貨有效,現貨不存在平倉
異步下單原生函數,需要創(chuàng)建Order對象,填充對應字段,一般異步下單接口建議使用open_long、open_short、close_long、close_short4個快捷下單接口。如果價格price字段為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口。
函數原型:
place_order(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 委托Order對象 |
返回值:
直接返回參數Order對象
示例:
在策略類的方法中以市價開1手IF1511的多單
order = Order()order.exchange = "CFFEX"order.sec_id = "IF1511"order.side = 1order.position_effect = 1order.price = 0order.volume = 1order_ret = place_order(order)
注意事項:
該接口為異步下單接口,需策略Run之后才能正常運行
異步撤單接口,根據參數cl_ord_id指定的客戶端訂單ID,撤銷之前的下單委托。撤單是否成功取決于訂單當前的狀態(tài)。
函數原型:
cancel_order(cl_ord_id)
參數:
參數名 | 類型 | 說明 |
---|---|---|
cl_ord_id | string | 委托訂單的客戶方id |
返回值:
示例:
ret = cancel_order(order.cl_ord_id)
注意事項:
該接口為異步下單接口,需策略Run之后才能正常運行
執(zhí)行的結果由on_execrpt, on_order_cancelled, on_order_cancel_rejected回調方法返回
同步開多倉接口,以參數指定的symbol, 價和量下單。如果價格為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口。
函數原型:
open_long_sync(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如上交所SHSE |
sec_id | string | 證券代碼,如浦發(fā)銀行600000 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 委托量 |
返回值:
返回委托下單生成的Order對象
示例:
通過策略對象調用該接口,以市價買入1000股上交所浦發(fā)銀行
order = strategy.open_long_sync("SHSE", "600000", 0, 1000)
同步開空倉接口,以參數指定的exchange, 證券代碼sec_id, 價和量下單。如果價格為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口。
函數原型:
open_short_sync(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如金融期貨交易所 CFFEX |
sec_id | string | 證券代碼,如股指期貨1511合約 IF1511 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 委托量 |
返回值:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如上交所SHSE |
sec_id | string | 證券代碼,如浦發(fā)銀行 600000 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼,如上期所SHFE |
sec_id | string | 證券代碼,如浦發(fā)銀行 600000 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
返回委托下單生成的Order對象
示例:
以市價平1手白銀合約ag1512的多單
order = close_long_yesterday_sync("SHFE", "ag1512", 0, 1)
注意事項:
1.平倉接口只對期貨有效,現貨不存在平倉
同步平空倉接口,以參數指定的exchange, 證券代碼sec_id, 價和量下單。如果價格為0,為市價單,否則為限價單。策略類和交易服務類都提供該接口。
函數原型:
close_short_sync(exchange, sec_id, price, volume)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如股指期貨交易所CFFEX |
sec_id | string | 證券代碼,如股指期貨合約IF1511 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼, 如上期所SHFE |
sec_id | string | 證券代碼,如股指期貨合約IF1511 |
price | float | 委托價,如果price=0,為市價單,否則為限價單 |
volume | float | 平倉量 |
返回值:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 委托Order對象 |
返回值:
直接返回參數Order對象
示例:
通過策略對象調用該接口,以市價開1手IF1511的多單
order = Order()order.exchange = "CFFEX"order.sec_id = "IF1511"order.side = 1order.position_effect = 1order.price = 0order.volume = 1order_ret = place_order_sync(order)
同步撤單接口,根據參數clordid指定的客戶端訂單ID,撤銷之前的下單委托。撤單是否成功取決于訂單當前的狀態(tài)。策略類和交易服務類都提供該接口。
函數原型:
cancel_order_sync(cl_ord_id)
參數:
參數名 | 類型 | 說明 |
---|---|---|
cl_ord_id | string | 委托訂單的客戶方id |
返回值:
示例:
ret = cancel_order_sync(order.cl_ord_id)
注意事項:
執(zhí)行的結果由on_execrpt, on_order_cancelled, on_order_cancel_rejected回調方法返回
查詢單個委托信息,策略類和交易服務類都提供該接口。
函數原型:
get_order(cl_ord_id)
參數:
參數名 | 類型 | 說明 |
---|---|---|
cl_ord_id | string | 委托訂單的客戶方id |
返回值:
order對象
按時間段查詢委托信息列表,策略類和交易服務類都提供該接口。
函數原型:
get_orders(start_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
start_time | string | 開始時間,如2016-01-01 00:00:00 |
end_time | string | 開始時間,如2016-01-02 00:00:00 |
返回值:
order對象列表
按時間段和代碼查詢委托信息列表,策略類和交易服務類都提供該接口。
函數原型:
get_orders_by_symbol(exchange, sec_id, start_time, end_time)
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所名稱, 如SHSE |
sec_id | string | 證券代碼,如600000 |
start_time | string | 開始時間,如2016-01-01 00:00:00 |
end_time | string | 開始時間,如2016-01-02 00:00:00 |
返回值:
order對象列表
查詢未完成委托信息,策略類和交易服務類都提供該接口。
函數原型:
get_unfinished_orders()
參數:
無
返回值:
order對象列表
查詢當前策略的資金信息,策略類和交易服務類都提供該接口。
函數原型:
get_cash()
參數:
無
返回值:
Cash對象,當前策略的資金信息
示例:
在策略類的方法中查詢當前策略的資金信息
cash = get_cash()
查詢當前策略指定symbol(由交易所代碼和證券ID組成)和買賣方向的持倉信息。策略類和交易服務類都提供該接口。
函數原型:
get_position(exchange, sec_id, side);
參數:
參數名 | 類型 | 說明 |
---|---|---|
exchange | string | 交易所代碼 |
sec_id | string | 證券代碼 |
side | int | 買賣方向 |
返回值:
Position對象,持倉信息
示例:
在策略類的方法中查詢買入浦發(fā)銀行的持倉信息
postion = get_position("SHSE", "600000", 1)
查詢當前策略的全部持倉信息。策略類和交易服務類都提供該接口。
函數原型:
get_positions()
參數:
無
返回值:
當前策略全部持倉列表
示例:
在策略類的方法中查詢當前策略全部持倉信息
postion = get_positions()
查詢當前策略的績效信息。策略類和交易服務類都提供該接口。
函數原型:
get_indicator()
參數:
無
返回值:
當前策略的績效信息Indicator
示例:
在策略類的方法中查詢當前策略的績效信息
indicator = get_indicator()
獲取柜臺交易賬號列表。策略類和交易服務類都提供該接口。
函數原型:
get_broker_accounts()
參數:
無
返回值:
BrokerAccount對象列表
獲取柜臺交易賬號資金。策略類和交易服務類都提供該接口。
函數原型:
get_broker_cash()
參數:
無
返回值:
Cash對象列表
獲取柜臺交易賬號持倉。策略類和交易服務類都提供該接口。
函數原型:
get_broker_positions()
參數:
無
返回值:
Position對象列表
響應Tick事件,收到Tick數據后本函數被調用。
函數原型:
on_tick(tick)
參數:
參數名 | 類型 | 說明 |
---|---|---|
tick | Tick | Tick數據 |
返回值:
無
響應Bar事件,收到Bar數據后本函數被調用。
函數原型:
on_bar(bar)
參數:
參數名 | 類型 | 說明 |
---|---|---|
bar | Bar | Bar數據 |
返回值:
無
響應委托執(zhí)行回報事件,收到Execution數據后本函數被調用。
函數原型:
on_execrpt(rpt)
參數:
參數名 | 類型 | 說明 |
---|---|---|
rpt | ExecRpt | 執(zhí)行回報數據 |
返回值:
無
響應訂單被拒絕事件,收到Order變更數據后本函數被調用。
函數原型:
on_order_rejected(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
響應訂單被柜臺接收事件,收到Order變更數據后本函數被調用。
函數原型:
on_order_new(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
響應訂單狀態(tài)更新事件,Order狀態(tài)變更后本函數被調用。
函數原型:
on_order_status(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
響應訂單完全成交事件,收到Order變更數據后本函數被調用。
函數原型:
on_order_filled(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
響應訂單部分成交事件,收到Order變更數據后本函數被調用。
函數原型:
on_order_partially_filled(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
響應訂單停止執(zhí)行事件,比如,限價單到收市仍然未能成交。收到Order變更數據后本函數被調用。
函數原型:
on_order_stop_executed(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
響應訂單撤單成功事件,收到Order變更數據后本函數被調用。
函數原型:
on_order_cancelled(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
響應訂單撤單請求被拒絕事件,收到Execution數據后本函數被調用。ord_rej_reason說明為什么撤單失敗。
函數原型:
on_order_cancel_rejected(order)
參數:
參數名 | 類型 | 說明 |
---|---|---|
order | Order | 最新的訂單數據 |
返回值:
無
策略登錄事件,初始化策略時本函數被調用。
函數原型:
on_login()
參數:
無
返回值:
無
響應錯誤事件,策略內部出現錯誤時,比如行情或交易連接斷開,數據錯誤,超時等,將觸發(fā)本函數。
函數原型:
on_error(error_code, error_msg)
參數:
參數名 | 類型 | 說明 |
---|---|---|
error_code | int | 返回值編碼 |
error_msg | string | 錯誤信息 |
返回值:
無
回測結束事件,在回測結束時觸發(fā)。
函數原型:
on_backtest_finish(indicator)
參數:
參數名 | 類型 | 說明 |
---|---|---|
indicator | object | 回測的績效 |
返回值:
無
設置策略定時事件的時間間隔,單位為毫秒。
函數原型:
set_timer(interval)
參數:
參數名 | 類型 | 說明 |
---|---|---|
interval | int | 定時器時間間隔 |
返回值:
無
解除該時間間隔對應的定時器,單位為毫秒。
函數原型:
unset_timer(interval)
參數:
參數名 | 類型 | 說明 |
---|---|---|
interval | int | 定時器時間間隔 |
返回值:
無
策略定時事件,按設定的時間間隔定時調用。
函數原型:
on_timer(interval)
參數:
參數名 | 類型 | 說明 |
---|---|---|
interval | int | 定時器時間間隔 |
返回值:
無
設置同步API的超時時間,系統(tǒng)默認為30秒
函數原型:
set_timeout_val(seconds)
參數:
參數名 | 類型 | 說明 |
---|---|---|
seconds | int | 超時時間,單位為秒 |
返回值:
無
獲取同步API的超時時間
函數原型:
get_timeout_val()
參數:
無
返回值:
超時時間,單位為秒
根據錯誤碼錯誤詳細錯誤信息
函數原型:
get_strerror(err_code)
參數:
參數名 | 類型 | 說明 |
---|---|---|
err_code | int | 返回值編碼 |
返回值:
錯誤信息
響應行情狀態(tài)事件,收到MarketDataEvent數據后本函數被調用。
函數原型:
on_md_event(md_event)
參數:
參數名 | 類型 | 說明 |
---|---|---|
md_event | MDEvent | 開盤,收盤,回放行情結束等事件 |
返回值:
無
獲取SDK版本號。
函數原型:
get_version()
參數:
無
返回值:
返回當前版本號信息
類型轉換函數,將GMSDK內置類型對象轉換為dict對象; 使用前從gmsdk引入,即from gmsdk import to_dict
。
函數原型:
to_dict(obj)
參數:
參數名 | 類型 | 說明 |
---|---|---|
obj | object | GMSDK內置類型對象 |
返回值:
dict對象