python生产者消费者 掘金_帮助中心--掘金量化Python API文档

本文档介绍了掘金量化平台的Python SDK,包括SDK下载、安装配置、创建和运行策略、策略接口和事件处理。内容涵盖从快速开始到回测模式,以及行情数据的订阅和历史数据提取,提供了丰富的示例代码。适用于Python开发者在掘金平台上进行量化策略开发和回测。
摘要由CSDN通过智能技术生成

快速开始

下载SDK

掘金量化平台提供策略开发服务包(SDK)用于策略开发者实现自己的策略。SDK下载地址请点击这里。

Python SDK支持Windows + Python2.7/3.6 + 32位/64位、Linux Python2/3 x64共六种版本,下载时找到对应本地安装的Python版本的SDK包。需要注意的是,此处所指的32位/64位不是指系统的版本,而是本地Python的版本。

安装配置

在Windows系统,需要解压下载的SDK包,双击安装程序进行安装。在安装过程中,安装程序会自行寻找Python安装路径,若提示找不到Python,需要手动添加注册信息或重新安装Python。若Python3.6不是安装在个人文件夹下,需要以管理员权限运行SDK安装程序。

在Linux系统,解压ZIP文件,运行pip install xxxx.whl命令进行安装;python3使用pip3 install xxxxx.whl 。Wheel文件名称以发布为准。

我的第一个策略

方式一,直接使用例子运行

解压SDK包,使用examples中的例子项目。

方式二,创建自己的策略

参考这里注册账号,登录终端。

参考这里创建策略基本架构。编程语言选择Python,订阅上交所浦发银行(证券代码:600000)的Tick行情。

编写自己的策略逻辑。

以下是一个完整的策略代码示例额,策略逻辑:每收到一笔Tick行情,以最新价买入100股。

from gmsdk.api import StrategyBase

class 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.编译策略并运行。策略运行起来后,控制台打印策略的每一笔下单记录,在掘金终端的模拟交易中可查看该策略的运行详情。

Python API范例

策略接口范例

策略构建

如何构建策略

构建策略的三种方式:

1.掘金终端构建自己的策略,然后在构建的策略类中重写基类方法

2.修改SDK包中的例子,构建自己的策略类

3.参考API定义文档,自定义策略类

策略运行

策略类应继承自StrategyBase基类,并以方法重写的方式满足策略开发需求。然后调用子类实例的run()方法,运行策略。

class Strategy(StrategyBase):

...

strategy.run()

如何初始化策略

策略在运行前,必须先初始策略对象。需要指定挖金子账户、密码、策略ID、订阅代码和运行模式。

示例:策略初始化并订阅上交所浦发银行的实时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=-

;策略ID

strategy_id=3c7e70be-7e02-11e5-b293-5ec5d48ea63a

;订阅证券代码或合约代码列表

subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60

;行情模式,2-实时行情模式,3-模拟行情模式,4-回放行情模式

mode=2

;交易服务地址,使用掘金终端交易时,地址为localhost:8001, 如果此项配置为空,则订单发往掘金云服务器

td_addr=localhost:8001

如何运行策略

完善策略逻辑后,先初始化策略,然后运行策略。策略运行后,策略开始接收数据并执行策略逻辑

strategy.run()

如何停止策略

1.直接关闭程序来停止策略

2.调用api方式停止策略

strategy.stop()

策略运行模式

策略支持三种运行模式:

1.实时行情模式:订阅行情服务器推送的实时行情,也就是交易所的实时行情,只在交易时段提供。适用的场景是策略仿真交易和实盘交易阶段。

2.模拟行情模式:模拟行情是近期的历史行情,行情服务器将7*24小时不间断循环推送,推送频率近似实时行情。适用的场景是策略开发阶段,主要就是能方便随时随地都能有数据,能开发/调试策略,不受交易时段的限制。

3.回测模式:订阅指定时段、指定交易代码、指定数据类型的行情,行情服务器将按指定条件全速回放对应的行情数据。适用的场景是策略回测阶段,快速验证策略的绩效是否符合预期。

如何回测策略

策略使用回测模式初始化,并配置回测相关参数,即进入回测。

示例:回测上交所浦发银行的daily数据, 回测时间为 2015-04-15 09:00:00到 2015-05-15 15:00:00, 策略初始资金为1,000,000, 委托成交为全部成交, 手续费率为零, 滑点比率为零, 数据使用前复权.

方式一:在策略初始化后调用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节点

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;策略回测参数配置

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[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

;手续费率,默认=0(不计算手续费)

commission_ratio=0

;滑点比率,默认=0(无滑点)

slippage_ratio=0

;行情复权模式,0=不复权,1=前复权

price_type=1

;基准

bench_symbol=SHSE.000300

如何在非交易时间段调试策略

示例:订阅上交所浦发银行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节点设置如下:

;订阅证券代码或合约代码列表

subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60

;行情模式,2-实时行情模式,3-模拟行情模式,4-回放行情模式

mode=3

如何设置策略仿真交易

示例:订阅上交所浦发银行Tick行情和1min的Bar的实时行情

方式一,通过参数的方式设置:

ret = strategy("your user name",

"your password",

"strategy id",

"SHSE.600000.tick,SHSE.600000.bar.60",

2,

"localhost:8001")

方式二,通过配置方式初始化策略,策略的配置文件strategy节点设置如下:

;订阅证券代码或合约代码列表

subscribe_symbols=SHSE.600000.tick,SHSE.600000.bar.60

;行情模式,2-实时行情模式,3-模拟行情模式,4-回放行情模式

mode=2

如何设置策略实盘交易

2.参考如何设置策略仿真交易,接收实时行情即可开始实盘交易。

策略事件

策略提供哪些事件

策略的基类提供策略3类事件:

1.登录事件:策略初始化时触发

2.行情数据事件:接收实时行情数据时触发,主要有Tick行情事件和Bar行情事件

3.交易相关事件:交易时触发,主要有下单、撤单、订单回报事件

用户重写自己关注事件的回调方法完善策略逻辑。

策略登录

如何处理策略登录事件

策略在初始化时将触发登录事件,可以在自己的策略类中重写策略基类的on_login方法,以便策略初始化时进行自定义操作

class Strategy(StrategyBase):

def on_login(self):

...

数据接口范例

行情类型

掘金SDK提供回测行情、模拟行情、实时行情及历史行情数据

1.回测行情、模拟行情和实时行情在订阅了symbol后,在策略的on_tick方法和on_bar方法中接收行情数据

2.各频率的历史行情数据提供对应的API提取。

数据定义

数据类型分为tick数据和bar数据

1.Tick行情是指按交易所实际发送的行情数据

2.Bar数据是指各种频率的行情数据,可订阅 1分、15分、60分的实时Bar数据。

日频数据提供DailyBar数据类型,日频仅在回测和历史数据提取时可用,不能实时订阅。

行情订阅方法

如何初始化行情接口

方式一,策略对象也提供行情接口,请参考如何初始化策略

方式二,获取行情对象实例,然后调用行情接口获取数据,该方式下仅获取数据

from gmsdk import md

ret = md.init("your user name", "your password")

如何订阅指定证券代码的tick行情

订阅上交所浦发银行和深交所平安银行的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 md

ret = md.init("your user name",

"your password",

2,

"SHSE.600000.tick,SZSE.000001.tick")

2.程序运行过程中订阅

ret = md.subscribe("SHSE.600000.tick,SZSE.000001.tick")

如何订阅指定证券代码的Bar行情

示例:订阅上交所浦发银行的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)仅在策略回测时订阅使用,其他策略运行模式下订阅将接收不到日频行情

示例:订阅上交所浦发银行的日频行情和深交所平安银行的日频行情

通过策略类对象订阅实时行情

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")

如何退订指定证券代码的行情

示例:退订上交所浦发银行的tick行情和深交所平安银行的1min Bar行情

方式一,通过策略类对象退订:

ret = strategy.unsubscribe("SHSE.600000.tick,SZSE.000001.bar.60")

方式二,通过行情类对象退订:

ret = md.unsubscribe("SHSE.600000.tick,SZSE.000001.bar.60")

历史数据提取

如何提取指定时间的Tick数据

示例:提取上交所浦发银行和深交所平安银行 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")

如何提取指定时间的Bar数据

示例:提取上交所浦发银行和深交所平安银行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")

如何提取指定日期的日频数据

示例:提取上交所浦发银行和深交所平安银行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")

如何提取最近N笔tick数据

示例:提取上交所浦发银行和深交所平安银行最近100笔Tick数据

方式一,通过策略类对象接口提取

ticks = strategy.get_last_n_ticks("SHSE.600000,SZSE.000001", 100)

方式二,通过行情类对象接口提取

ticks = md.get_last_n_ticks("SHSE.600000,SZSE.000001", 100)

如何提取最近N个Bar数据

示例:提取上交所浦发银行和深交所平安银行最近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)

如何提取最近N个交易日的日频数据

示例:提取上交所浦发银行和深交所平安银行最近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)

如何提取最近1笔tick数据

示例:提取上交所浦发银行和深交所平安银行最近1笔Tick数据

方式一,通过策略类对象接口提取

ticks = strategy.get_last_ticks("SHSE.600000,SZSE.000001")

方式二,通过行情类对象接口提取

ticks = md.get_last_ticks("SHSE.600000,SZSE.000001")

如何提取最近1个Bar数据

示例:提取上交所浦发银行和深交所平安银行最近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)

如何提取最近1笔日频数据

示例:提取上交所浦发银行和深交所平安银行最近1笔日频数据(DailyBar)

方式一,通过策略类对象接口提取

daily_bars = strategy.get_last_dailybars("SHSE.600000,SZSE.000001")

方式二,通过行情类对象接口提取

daily_bars = md.get_last_dailybars("SHSE.600000,SZSE.000001")

行情事件方法

如何处理tick事件和bar事件

tick、bar事件在接收实时行情时触发,在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_tick

md.ev_bar += on_bar

如何处理行情状态事件

在自己的策略类中重写策略基类的on_md_event方法,行情状态事件在开盘、收盘、回放行情结束时触发

class Strategy(StrategyBase):

def on_md_event(self, evt):

...

交易接口范例

交易相关数据类型

委托

如何开多仓

示例:市价买入1000股上交所浦发银行股票,市价开1手IF1512的多单

注意:股票、基金等现货品种只有买入和卖出,对应下单类型是开多仓open_long和平多仓close_long;

方式一,调用开多仓的异步接口open_long

1.在策略类的方法中调用,必须在策略执行了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.通过交易服务类对象调用,必须执行对象的Run方法后调用有效

from gmsdk import td

def on_some_event():

td.open_long("SHSE", "600000", 0, 1000)

td.open_long("CFFEX", "IF1512", 0, 1)

td.ev_some_event += on_some_event

td.init(...)

td.run()

方式二,调用开多仓的同步接口open_long_sync,无需策略执行Run方法

1.通过策略类对象调用

strategy = Strategy(...)

strategy.open_long_sync("SHSE", "600000", 0, 1000)

strategy.open_long_sync("CFFEX", "IF1512", 0, 1)

2.通过交易服务类对象调用

from gmsdk import td

td.init(...)

td.open_long_sync("SHSE", "600000", 0, 1000)

td.open_long_sync("CFFEX", "IF1512", 0, 1)

如何平多仓

示例:市价卖出1000股上交所浦发银行股票,市价平1手IF1512的多单

注意:股票、基金等现货品种只有买入和卖出,对应下单类型是开多仓open_long和平多仓close_long;

方式一,调用平多仓的异步接口close_long

1.在策略类的方法中调用接口,必须在策略执行了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.通过交易服务类对象调用接口,必须执行对象的Run方法后调用有效

from gmsdk import td

def 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_tic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值