交易所与代码命名约定

有哪些代码

掘金中行情与交易用到的代码包括:交易所代码,证券代码和掘金代码

  1. 交易所代码(exchange)是交易所的唯一标识,目前掘金支持国内的6个交易所和部分海外市场,各交易所的代码缩写如下:
上交所,市场代码 SHSE
深交所,市场代码 SZSE
中金所,市场代码 CFFEX
上期所,市场代码 SHFE
大商所,市场代码 DCE
郑商所,市场代码 CZCE
纽约商品交易所, 市场代码 CMX (GLN, SLN)
伦敦国际石油交易所, 市场代码 IPE (OIL, GAL)
纽约商业交易所, 市场代码 NYM (CON, HON)
芝加哥商品期货交易所,市场代码 CBT (SOC, SBC, SMC, CRC)
纽约期货交易所,市场代码 NYB (SGN)
  1. 证券代码(sec_id)是交易所给出的交易标的代码,包括股票,期货,期权,指数,基金等代码。比如600001, IF1509等等,具体的代码请参考交易所的给出的证券代码定义。

  2. 掘金代码(symbol)是掘金平台用于唯一标识交易标的代码,格式为:交易所代码.证券代码,比如深圳平安的symbol示例:SZSE.000001,股指期货的symbol示例:CFFEX.IF1509

查询历史行情用什么代码

查询历史行情数据时,使用掘金代码(symbol)。比如,查询tick, bar, dailybar的api接口中,第一个参数就是symbol, 或symbol list(支持同时查询多个代码的数据)

get_ticks("SZSE.000001,SHSE.600001", ...)
get_last_n_ticks("CFFEX.IF1509", ...)
get_bars("SZSE.000001,SHSE.600001", ...)
get_last_n_bars("CFFEX.IF1509", ...)

订阅实时行情用什么代码

订阅实时行情时,订阅的代码格式为掘金代码(symbol)+数据频率,比如以下几个例子:

// 订阅SZSE.000001的tick数据
SZSE.000001.tick

// 订阅SZSE.000001的1分钟bar数据
SZSE.000001.bar.60

// 订阅SZSE.000001的日频数据
SZSE.000001.bar.daily

// 订阅CFFEX.IF1512的tick数据
CFFEX.IF1512.tick

// 订阅CFFEX.IF1512的5分钟bar数据
CFFEX.IF1512.bar.300

交易时用什么代码

交易下单接口中直接使用交易所代码证券代码,比如:

// 买入股指期货IF1512
open_long("CFFEX", "IF1512", ...)

// 买入深圳平安
open_long("SZSE", "000001", ...)

策略生命周期,行情模式与交易通道

掘金里面有两个主要概念,一是行情模式,一是交易通道。在策略的不同阶段(开发,回测,仿真,实盘),二者不同的组合能完成强大的功能,下面解释一下这几个概念和他们的使用场景。

行情模式

行情模式(对应mode=1/2/3/4)需要在初始化sdk时指定,每种模式的含义和一般的使用场景如下:

  1. 不订阅行情(mode 1): 不订阅行情服务器推送的行情,这样on_tick/bar等事件不会触发。这种模式适用于只需要查询数据的场景,比如做研究提取数据。显然运行策略时是不会使用mode 1的。

  2. 订阅实时行情(mode 2):订阅行情服务器推送的实时行情,也就是交易所的实时行情,只有交易时段有。适用的场景是策略仿真交易和实盘交易阶段。

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

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

特别强调:不要在模拟行情模式下调试业务逻辑,模拟行情数据是为了方便代码功能调试。

交易通道

策略需要指定关联不同的交易通道,策略发出的委托将根据相应的交易通道设置,自动路由到对应交易通道。

  1. 模拟交易通道:此通道7*24小时可用。进入本交易通道的策略委托采用见价撮合机制;对限价单,按委托价成交,对市价单,按最新价成交。

  2. 仿真交易通道:此通道仅交易时段可用。进入本交易通道的策略委托将与实时行情撮合,撮合规则与交易所规则相同。成交结果高度接近于实盘时交易所的成交结果。

  3. 真实交易通道:此通道仅交易时段可用。进入本交易通道的策略委托被路由到配置的真实券商/期货商交易柜台,并进入交易所撮合成交。

策略生命周期

理解了行情模式和生命周期,接下来就很好解释了。策略的生命周期一般可以分为4个阶段:开发,回测,仿真,实盘。不同的阶段,我们可能使用不同的行情模式和交易通道,以满足不同的目的。

开发阶段,交易时段我们可以用实时行情(mode 2)开发调试,但收盘了我们还想工作,就切换到模拟行情(mode 3),这样随时有数据;策略的交易通道我们选择 模拟交易通道,这样随时都可以成交。开发的时候,你肯定不会把交易通道切换到实盘交易通道,对吧?我可不希望策略产生的垃圾委托被发到真实柜台去了。

回测阶段,我们只能用回放行情(mode 4),这个行情模式就是干这个用的。策略回测时无需配置交易通道,因为回测服务有自己的撮合、清算、绩效计算机制。

仿真阶段,策略开发ok了, 回测的绩效牛x到暴,直接开始拿真金白银实盘吧?心里还是有点打鼓。这个时候,就该仿真交易通道上场了。策略由实时行情驱动(mode 2),交易通道选择仿真交易通道。策略开始运行,运行结果和实盘结果高度吻合,除了不是真钱在跑,其他都和实盘一样。所以仿真交易通道的价值就在这里:一个符合交易所规则的高仿真交易系统,对策略的paper trading阶段至关重要,可以避免您拿真钱去试错,并且大大提高策略验证效率,让您的策略上线时成竹在胸。

实盘阶段,恩,前面阶段的结果都很好了,把交易通道切换到真实交易通道,真刀真枪交易起来。至于行情模式,当然是实时行情式(mode 2)。

行情模式与交易通道组合

好,下面再简单总结下,策略在不同阶段时,行情模式和交易通道的搭配:

  • 开发阶段: 行情mode 2 / mode 3 <===> 模拟交易通道 / 仿真交易通道
  • 回测阶段: 行情mode 4 <===> 空(通道配置会被忽略)
  • 仿真阶段: 行情mode 2 <===> 仿真交易通道
  • 实盘阶段: 行情mode 2 <===> 真实交易通道

掘金术语

掘金SDK中,有三个部分会经常使用:

  1. 行情数据服务 market data service, 文档中会简称为md

  2. 交易服务 trade service, 文档中会简称为td

  3. 策略 strategy, 在一些高级语言中,这是一个基类,方便策略从它继承实现自有逻辑,同时它完整封装了所有行情数据服务和交易服务的接口函数,可以方便地直接调用