函数功能说明
单条查询
get_tick:查询单个标的最新tick,use_df为可选参数,用于把返回的类对象转化成DataFrame格式,便于数据分析。
- tick = engine.get_tick(vt_symbol="rb1910.SHFE",use_df=False)
其中:
vt_symbol:为本地合约代码,格式是合约品种+交易所,如rb1910.SHFE。
use_df:为bool变量,默认False,返回TickData类对象,否则返回相应DataFrame,如图。
get_order:根据vt_orderid查询委托单的详细信息。
- order = engine.get_order(vt_orderid='CTP.3_-9351590_1',use_df=False)
其中,vt_orderid为本地委托号,在委托下单时,会自动返回该委托的vt_orderid:
以”CTP.3_-9351590_1”为例,它由ctp接口的name,frontid,sessionid,order_ref构成;
frontid和sessionid在vnpy连接上CTP接口后由CTP回调产生;
order_ref是vnpy内部维护的用于区分order的一个变量。
get_contract:根据本地vt_symbol来查询对应合约对象的详细信息。
- contract = engine.get_contract(vt_symbol="rb1910.SHFE",use_df=False)
get_bars:查询历史数据。(需要初始化RQData客户端)
- bars = engine.get_bars(vt_symbol="rb1910.SHFE",start_date="20190101",
- interval=Interval.MINUTE,use_df=False)
其中:
vt_symbol:本地合约代码。
start_date:起始日期,格式必须为”%Y%m%d”。
interval:K线周期,包括:分钟、小时、日、周
bars:包含了一系列BarData数据的列表对象,其BarData的定义如下:
- @dataclass
- class BarData(BaseData):
symbol: str
exchange: Exchange
datetime: datetime
interval: Interval = None
volume: float = 0
open_interest: float = 0
open_price: float = 0
high_price: float = 0
low_price: float = 0
close_price: float = 0
def __post_init__(self):
self.vt_symbol = f"{self.symbol}.{self.exchange.value}"
get_position:根据vt_positionid来查询持仓情况,返回对象包含接口名称、交易所、合约代码、数量、冻结数量等。
- position = engine.get_position(vt_positionid='rb1909.SHFE.Direction.LONG')
注意,vt_positionid为vnpy内部对于一笔特定持仓的唯一持仓编号,格式为”vt_symbol.Direction.LONG”,其中持仓方向可选多仓、空仓和净持仓,如图。
多条查询
get_ticks:查询多个合约最新tick。
- ticks = engine.get_ticks(vt_symbols=['rb1910.SHFE','rb1909.SHFE'],use_df = True)
vt_symbols是列表格式,里面包含多个vt_symbol,如图。
get_orders:根据查询多个vt_orderid查询其详细信息。vt_orderids为列表,里面包含多个vt_orderid
- orders = engine.get_orders([orderid_one,orderid_two],use_df=True)
get_trades:根据给定的一个vt_orderid返回这次报单过程中的所有TradeData对象。vt_orderid是本地委托号,每一个委托OrderData,由于部分成交关系,可以对应多笔成交TradeData。
- trades = engine.get_trades(vt_orderid = your_vt_orderid,use_df = True)
全量查询
在全量查询中,唯一参数是use_df,默认为False,返回的是一个包含相应数据的List对象,例如ContractData,AccountData,PositionData。
get_all_contracts:默认返回一个list,包含了全市场的ContractData,如果use_df=True则返回相应的DataFrame;
get_all_active_orders:活动委托指的是等待委托完全成交,故其状态包含“已提交的、未成交的、部分成交”;函数将返回包含一系列OrderData的列表对象;
get_all_accounts:默认返回包含AccountData的列表对象;
get_all_position:默认返回包含PositionData的列表对象,如图。
交易委托
以委托买入为例,engine.buy()函数入参包括:
vt_symbol:本地合约代码(字符串格式)
price:报单价格(浮点数类型);
volume:报单数量(浮点数类型);
order_type:OrderType枚举常量,默认为限价单(OrderType.LIMIT),同时支持停止单(OrderType.STOP)、FAK(OrderType.FAK)、FOK(OrderType.FOK)、市价单(OrderType.MARKET),不同交易所支持报单方式不完全一致。
- engine.buy(vt_symbol = "rb1910.SHFE",price = "3200",volume = "1",order_type=OrderType.LIMIT)
执行交易委托后会返回本地委托号vt_orderid,撤单也是基于该本地委托号的
- engine.cancel_order(vt_orderid = 'CTP.3_-9351590_1')
信息输出
write_log()函数可用于记录买卖时的交易情况,将信息输出在脚本策略窗口下方空白栏里。
send_email()函数用于实时通过email通知用户策略运行情况:
先在vt_setting.json下配置email相关信息;
邮件标题为“脚本策略引擎通知”;
msg为字符串格式,表示邮件正文内容,如图。
- engine.send_email(msg = "Your Msg")
使用邮箱前需要开通SMTP服务。
email.server:邮件服务器地址,vnpy默认填写好了QQ邮箱服务器地址,不用改可以直接用,如果需要使用其他邮箱,需要自行查找一下其他的服务器地址。
email.port:邮件服务器端口号,vnpm默认填好了QQ邮箱服务器端口,可直接用。
email.username:填写邮箱地址即可,如xxxx@qq.com。
email.password:对于QQ邮箱,此处不是邮箱密码,而是开通SMTP后系统生成的一个授权码。
email.sendert:email.username。
email.receiver:接受邮件的邮箱地址,比如xxxx@outlook.com。