def init(context):
# 订阅 bar
subscribe(
symbols='SHSE.600000,SHSE.600004'
, frequency='30s'
, count=5
, wait_group=True
, wait_group_timeout='5s'
)
# 增加对象属性
# 如: 设置一个股票资金占用百分比
context.percentage_stock = 0.8
| 参数名 | 类型 | 说明 |
|---|---|---|
| schedule_func | function | 策略定时执行算法 |
| date_rule | str | n + 时间单位, 可选’d/w/m’ 表示n天/n周/n月 |
| time_rule | str | 执行算法的具体时间 (%H:%M:%S 格式) |
def init(context):
#每天的19:06:20执行策略 algo_1
schedule(
schedule_func=algo_1
, date_rule='1d'
, time_rule='19:06:20'
)
#每月的第一个交易日的09:40:00执行策略 algo_2
schedule(
schedule_func=algo_2
, date_rule='1m'
, time_rule='9:40:00'
)
def algo_1(context):
print(context.symbols)
def algo_2(context):
order_volume(
symbol='SHSE.600000'
, volume=200
, side=OrderSide_Buy
, order_type=OrderType_Market
, position_effect=PositionEffect_Open
)
run(
strategy_id=''
, filename='main.py'
, mode=MODE_UNKNOWN
, token=''
, backtest_start_time=''
, backtest_end_time=''
, backtest_initial_cash=1000000
, backtest_transaction_ratio=1
, backtest_commission_ratio=0
, backtest_slippage_ratio=0
, backtest_adjust=ADJUST_NONE
, backtest_check_cache=1
, serv_addr=''
)
| 参数名 | 类型 | 说明 |
|---|---|---|
| strategy_id | str | 策略id |
| filename | str | 策略文件名称 |
| mode | int | 策略模式 |
| MODE_LIVE(实时)=1 | ||
| MODE_BACKTEST(回测) =2 | ||
| token | str | 用户标识 |
| backtest_start_time | str | 回测开始时间 |
| (%Y-%m-%d %H:%M:%S格式) | ||
| backtest_end_time | str | 回测结束时间 |
| (%Y-%m-%d %H:%M:%S格式) | ||
| backtest_initial_cash | double | 回测初始资金, 默认1000000 |
| backtest_transaction_ratio | double | 回测成交比例, 默认1.0, 即下单100%成交 |
| backtest_commission_ratio | double | 回测佣金比例, 默认0 |
| backtest_slippage_ratio | double | 回测滑点比例, 默认0 |
| backtest_adjust | int | 回测复权方式(默认不复权) |
| ADJUST_NONE(不复权)=0 | ||
| ADJUST_PREV(前复权)=1 | ||
| ADJUST_POST(后复权)=2 | ||
| backtest_check_cache | int | 回测是否使用缓存:1 - 使用, 0 - 不使用;默认使用 |
| serv_addr | str | 终端服务地址, 默认本地地址, 可不填,若需指定应输入ip+端口号,如”127.0.0.1:7001” |
subscribe(
symbols
, frequency='1d'
, count=1
, wait_group=False
, wait_group_timeout='10s'
, unsubscribe_previous=False
)
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbols | str or list | 订阅标的代码, 支持字串格式,如有多个代码, 中间用 , (英文逗号) 隔开, 也支持 ['symbol1', 'symbol2'] 这种列表格式 |
| frequency | str | 频率, 支持 ‘tick’, ‘60s’, ‘300s’, ‘900s’ 等, 默认’1d’, 详情见股票行情数据和期货行情数据, 实时行情支持的频率 |
| count | int | 订阅数据滑窗大小, 默认1 ,详情见数据滑窗 |
| wait_group | bool | 是否需要等待全部代码的数据到齐再触发事件, 默认False不到齐。设置为True则等待订阅标的eob相同的bar全部到齐再被调用。该参数只对Bar数据有效。 |
| wait_group_timeout | str | 超时时间设定, 支持s结尾表示单位秒, 默认10s |
| unsubscribe_previous | bool | 是否取消过去订阅的symbols, 默认False不取消, 输入True则取消所有原来的订阅。 |
| 参数名 | 类型 | 说明 |
|---|---|---|
| context | context对象 | 上下文 |
| tick | tick对象 | 当前被推送的tick |
def on_tick(context, tick):
print(tick)
{'symbol': 'SHSE.600519', 'created_at': datetime.datetime(2020, 9, 2, 14, 7, 23, 620000, tzinfo=tzfile('PRC')), 'price': 1798.8800048828125, 'open': 1825.0, 'high': 1828.0, 'low': 1770.0, 'cum_volume': 2651191, 'cum_amount': 4760586491.0, 'cum_position': 0, 'last_amount': 179888.0, 'last_volume': 100, 'trade_type': 0, 'receive_local_time': 1602751345.262745}
| 参数名 | 类型 | 说明 |
|---|---|---|
| context | context对象 | 上下文对象 |
| bars | list(bar) | 当前被推送的bar列表 |
def on_bar(context, bars):
for bar in bars:
print(bar)
{'symbol': 'SHSE.600519', 'eob': datetime.datetime(2020, 9, 30, 15, 15, 1, tzinfo=tzfile('PRC')), 'bob': datetime.datetime(2020, 9, 30, 0, 0, tzinfo=tzfile('PRC')), 'open': 1660.0, 'close': 1668.5, 'high': 1691.9000244140625, 'low': 1660.0, 'volume': 2708781, 'amount': 4536012540.0, 'pre_close': 1652.2999267578125, 'position': 0, 'frequency': '1d', 'receive_local_time': 1602751647.923199}
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbols | str or list | 查询代码,如有多个代码, 中间用 , (英文逗号) 隔开,也支持 ['symbol1', 'symbol2'] 这种列表格式 ,使用参考symbol |
| fields | str | 查询字段, 默认所有字段。具体字段见:Tick |
输出:
[{'symbol': 'SZSE.000001', 'open': 16.200000762939453, 'high': 16.920000076293945, 'low': 16.149999618530273, 'price': 16.559999465942383, 'quotes': [{'bid_p': 16.549999237060547, 'bid_v': 209200, 'ask_p': 16.559999465942383, 'ask_v': 296455}, {'bid_p': 16.540000915527344, 'bid_v': 188900, 'ask_p': 16.56999969482422, 'ask_v': 374405}, {'bid_p': 16.530000686645508, 'bid_v': 44900, 'ask_p': 16.579999923706055, 'ask_v': 187220}, {'bid_p': 16.520000457763672, 'bid_v': 20800, 'ask_p': 16.59000015258789, 'ask_v': 102622}, {'bid_p': 16.510000228881836, 'bid_v': 37700, 'ask_p': 16.600000381469727, 'ask_v': 337002}], 'cum_volume': 160006232, 'cum_amount': 2654379585.66, 'last_amount': 14153832.0, 'last_volume': 854700, 'trade_type': 7, 'created_at': datetime.datetime(2020, 10, 15, 15, 0, 3, tzinfo=tzfile('PRC'))}]
注意:
函数原型:
history(
symbol
, frequency
, start_time
, end_time
, fields=None
, skip_suspended=True
, fill_missing=None
, adjust=ADJUST_NONE
, adjust_end_time=''
, df=True
)
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbol | str | 标的代码,若要获取多个标的的历史数据,可以采用中间用 , (英文逗号) 隔开的方法,但不能是list类型的输入参数,使用时参考symbol |
| frequency | str | 频率, 支持 ‘tick’, ‘1d’, ‘15s’, ‘30s’ 等, 默认 ‘1d’, 详情见股票行情数据和期货行情数据 |
| start_time | str or datetime.datetime | 开始时间 (%Y-%m-%d %H:%M:%S 格式), 也支持datetime.datetime格式, 其中日线包含start_time数据, 非日线不包含start_time数据 |
| end_time | str or datetime.datetime | 结束时间 (%Y-%m-%d %H:%M:%S 格式), 也支持datetime.datetime格式 |
| fields | str | 指定返回对象字段, 如有多个字段, 中间用, 隔开, 默认所有, 具体字段见:股票字段 ,期货字段 |
| skip_suspended | bool | 是否跳过停牌, 默认跳过 |
| fill_missing | str or None | 填充方式, None - 不填充, 'NaN' - 用空值填充, 'Last' - 用上一个值填充, 默认None |
| adjust | int | ADJUST_NONE or 0: 不复权, ADJUST_PREV or 1: 前复权, ADJUST_POST or 2: 后复权 默认不复权 , 目前只支持股票 |
| adjust_end_time | str | 复权基点时间, 默认当前时间 |
| df | bool | 是否返回 dataframe格式, 默认 False, 返回list[dict] |
返回值:参考Tick对象或者Bar对象
备注
history_n(
symbol
, frequency
, count
, end_time=None
, fields=None
, skip_suspended=True
, fill_missing=None
, adjust=ADJUST_NONE
, adjust_end_time=''
, df=False
)
def init(context):
subscribe(symbols='SHSE.600519', frequency='60s', count=2)
def on_bar(context,bars):
data = context.data(
symbol='SHSE.600519'
, frequency='60s'
, count=1
)
get_fundamentals(
table
, symbols
, start_date
, end_date
, fields=None
, filter=None
, order_by=None
, limit=1000
, df=False
)
| 参数名 | 类型 | 说明 |
|---|---|---|
| table | str | 表名,只支持单表查询. 具体表名及fields字段名及filter可过滤的字段参考 财务数据文档 |
| symbols | str or list | 标的代码, 多个代码可用 ,(英文逗号)分割, 也支持 ['symbol1', 'symbol2'] 这种列表格式,使用时参考symbol |
| start_date | str | 开始时间, (%Y-%m-%d 格式) |
| end_date | str | 结束时间, (%Y-%m-%d 格式) |
| fields | str | 查询字段 (必填) |
| filter | str | 查询过滤,使用方法参考例3、例4 |
| order_by | str or None | 排序方式, 默认 None. TCLOSE 表示按 TCLOSE 升序排序. -TCLOSE 表示按 TCLOSE 降序排序. TCLOSE, -NEGOTIABLEMV 表示按 TCLOSE 升序, NEGOTIABLEMV 降序综合排序 |
| limit | int | 数量. 默认是1000, 为保护服务器, 单次查询最多返回 40000 条记录 |
| df | bool | 是否返回dataframe格式, 默认False, 返回list[dict] |
| key | value类型 | 说明 |
|---|---|---|
| symbol | str | 标的代码 |
| pub_date | datetime.datetime | 公司发布财报的日期. |
| end_date | datetime.datetime | 财报统计的季度的最后一天. |
| fields | dict | 相应指定查询 fields 字段的值. 字典key值请参考 财务数据文档 |
get_fundamentals_n(
table
, symbols
, end_date
, fields=None
, filter=None
, order_by=None
, count=1
, df=False
)
get_instruments(
symbols=None
, exchanges=None
, sec_types=None
, names=None
, skip_suspended=True
, skip_st=True
, fields=None
, df=False
)
| 参数名 | 类型 | 说明 |
|---|---|---|
| symbols | str or list or None | 标的代码 多个代码可用 ,(英文逗号)分割, 也支持 ['symbol1', 'symbol2'] 这种列表格式,默认None表示所有,使用时参考symbol |
| exchanges | str or list or None | 见交易所代码,。多个交易所代码可用 ,(英文逗号)分割, 也支持 ['exchange1', 'exchange2'] 这种列表格式,默认None表示所有 |
| sec_types | list | 指定类别, 默认所有, 其他类型见sec_type 类型 |
| names | str or None | 查询代码, 默认None 表示所有 |
| skip_suspended | bool | 是否跳过停牌, 默认True 跳过停牌 |
| skip_st | bool | 是否跳过ST, 默认True 跳过ST |
| fields | str or None | 查询字段 默认None 表示所有,参考返回值。 |
| df | bool | 是否返回dataframe格式, 默认False, 返回list[dict] |
| key | 类型 | 说明 |
|---|---|---|
| symbol | str | 标的代码 |
| sec_type | int | 1: 股票, 2: 基金, 3: 指数, 4: 期货, 5: 期权, 8:可转债,10: 虚拟合约 |
| exchange | str | 见交易所代码 |
| sec_id | str | 代码 |
| sec_name | str | 名称 |
| sec_abbr | str | 拼音简称 |
| price_tick | float | 最小变动单位 |
| listed_date | datetime.datetime | 上市日期 |
| delisted_date | datetime.datetime | 退市日期 |
| trade_date | datetime.datetime | 交易日期 |
| sec_level | int | 1-正常,2-ST 股票,3-*ST 股票,4-股份转让,5-处于退市整理期的证券,6-上市开放基金LOF,7-交易型开放式指数基金(ETF),8-非交易型开放式基金(暂不交易,仅揭示基金净值及开放申购赎回业务),9-仅提供净值揭示服务的开放式基金;,10-仅在协议交易平台挂牌交易的证券,11-仅在固定收益平台挂牌交易的证券,12-风险警示产品,13-退市整理产品,99-其它 |
| is_suspended | int | 是否停牌. 1: 是, 0: 否 |
| multiplier | float | 合约乘数 |
| margin_ratio | float | 保证金比率 |
| settle_price | float | 结算价 |
| position | int | 持仓量 |
| pre_close | float | 昨收价 |
| upper_limit | float | 涨停价 (可转债没有涨停价) |
| lower_limit | float | 跌停价 (可转债没有跌停价) |
| adj_factor | float | 复权因子.基金跟股票才有 |
| conversion_price | float | 可转债转股价 |
| conversion_start_date | datetime.datetime | 可转债开始转股时间 |
| underlying_symbol | str | 可转债正股标的 |
get_instrumentinfos(
symbols=None
, exchanges=None
, sec_types=None
, names=None
, fields=None
, df=False
)
| 参数名 | 类型 | 说明 |
|---|---|---|
| index | str | 指数代码 |
| fields | str or None | 若要有返回权重字段, 可以设置为 ‘symbol, weight’ |
| df | bool | 是否返回dataframe 格式, 默认False, 返回list[dict] |
order_volume(
symbol
, volume
, side
, order_type
, position_effect
, price=0
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account=''
)
order_value(
symbol
, value
, side
, order_type
, position_effect
, price=0
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account=''
)
order_percent(
symbol
, percent
, side,order_type
, position_effect
, price=0
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account=''
)
order_target_volume(
symbol
, volume
, position_side
, order_type
, price=0
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account=''
)
order_target_value(
symbol
, value
, position_side
, order_type
, price=0
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account=''
)
order_target_percent(
symbol
, percent
, position_side
, order_type
, price=0
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account=''
)
order_batch(
orders
, combine=False
, account=''
)
order_cancel(wait_cancel_orders)
order_cancel_all()
order_close_all()
get_unfinished_orders()
get_orders()
get_execution_reports()
ipo_buy(symbol, volume, price, account_id='')
fund_etf_buy(symbol, volume, price, account_id='')
fund_etf_redemption(symbol, volume, price, account_id='')
fund_subscribing(symbol, volume, account_id='')
fund_buy(symbol, volume, account_id='')
fund_redemption(symbol, volume, account_id='')
bond_reverse_repurchase_agreement(
symbol
, volume
, price
, order_type=OrderType_Limit
, order_duration=OrderQualifier_Unknown
, order_qualifier=OrderQualifier_Unknown
, account_id=''
)
bond_convertible_call(symbol, volume, price=0.0, account_id='')
bond_convertible_put(symbol, volume, price=0.0, account_id='')
bond_convertible_put_cancel(symbol, volume, account_id='')
context.account(account_id=None).positions()
# 指定持仓
Account_position = context.account().position(
symbol='SHSE.600519'
,side = PositionSide_Long
)
context.account(account_id=None).cash
credit_buying_on_margin(
position_src
, symbol
, volume
, price
, order_type=OrderType_Limit
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account_id=''
)
credit_short_selling(
position_src
, symbol
, volume
, price
, order_type=OrderType_Limit
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account_id=''
)
credit_repay_cash_directly(amount, account_id='')
credit_repay_share_directly(symbol, volume, account_id='')
credit_get_collateral_instruments(account_id='', df=False)
credit_get_borrowable_instruments(
position_src
, account_id=''
, df=False
)
credit_get_borrowable_instruments_positions(position_src, account_id='', df=False)
credit_get_contracts(position_src, account_id='', df=False)
credit_get_cash(account_id='')
credit_repay_share_by_buying_share(
symbol
, volume
, price
, order_type=OrderType_Limit
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account_id=''
)
credit_repay_cash_by_selling_share(
symbol
, volume
, price
, order_type=OrderType_Limit
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account_id=''
)
credit_buying_on_collateral(
symbol
, volume
, price
, order_type=OrderType_Limit
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account_id=''
)
credit_selling_on_collateral(
symbol
, volume
, price
, order_type=OrderType_Limit
, order_duration=OrderDuration_Unknown
, order_qualifier=OrderQualifier_Unknown
, account_id=''
)
credit_collateral_in(symbol, volume, account_id='')
credit_collateral_out(symbol, volume, account_id='')
algo_order(symbol, volume, side, order_type,position_effect, price, algo_name, algo_param)
add_parameter(key, value, min=0, max=0, name='', intro='', group='', readonly=False)
set_parameter(key, value, min=0, max=0, name='', intro='', group='', readonly=False)
| 错误码 | 描述 | 解决方法 |
|---|---|---|
| 0 | 成功 | |
| 1000 | 错误或无效的token | 检查下token是否有误 |
| 1001 | 无法连接到终端服务 | 检查是否开启了掘金终端 |
| 1010 | 无法获取掘金服务器地址列表 | 检查是否开启了掘金终端 |
| 1013 | 交易服务调用错误 | 检查终端是否正常或重启掘金终端 |
| 1014 | 历史行情服务调用错误 | 在微信群或者QQ群通知技术支持 |
| 1015 | 策略服务调用错误 | 检查终端是否正常或重启掘金终端 |
| 1016 | 动态参数调用错误 | 检查动态参数设置 |
| 1017 | 基本面数据服务调用错误 | 在微信群或者QQ群通知技术支持 |
| 1018 | 回测服务调用错误 | 重启掘金终端、重新运行策略 |
| 1019 | 交易网关服务调用错误 | 检查终端是否正常或重启掘金终端 |
| 1020 | 无效的ACCOUNT_ID | 检查账户id是否填写正确 |
| 1021 | 非法日期格式 | 对照帮助文档修改日期格式, 检查run()回测日期是否正确 |
| 1100 | 交易消息服务连接失败 | 检查终端是否正常或重启掘金终端 |
| 1101 | 交易消息服务断开 | 一般不用处理,等待自动重连 |
| 1200 | 实时行情服务连接失败 | 一般不用处理,等待自动重连 |
| 1201 | 实时行情服务连接断开 | 一般不用处理,等待自动重连 |
| 1202 | 实时行情订阅失败 | 订阅代码标的数量超过账户权限,联系商务咨询权限 |
| 1300 | 初始化回测失败 | 检查终端是否启动或策略是否连接到终端 |
| 1301 | 回测时间区间错误 | 检查回测时间是否超出范围 |