商品期货
关于传统商品期货API的更多信息,需要注意:策略程序启动运行时,需先确保与期货公司前置机服务器连接成功(账号登录验证是否成功,可通过exchange.IO("status")函数调用时的返回值进行判断),之后才可以调用行情、交易等接口与期货公司前置机服务器进行通信。
javascript
function main() {
while (!exchange.IO("status")) {
LogStatus("正在等待与交易服务器连接, " + new Date())
Sleep(1000)
}
exchange.GetAccount()
}
python
def main():
while not exchange.IO("status"):
LogStatus("正在等待与交易服务器连接, " + _D())
Sleep(1000)
exchange.GetAccount()
rust
fn main() {
while exchange.IO("status").unwrap_or_default() != "true" {
LogStatus!("正在等待与交易服务器连接,", _D(None));
Sleep(1000);
}
exchange.GetAccount().unwrap();
}
c++
void main() {
while(exchange.IO("status") == 0) {
LogStatus("正在等待与交易服务器连接, " + _D());
Sleep(1000);
}
exchange.GetAccount();
}
-
期货交易中
exchange.Buy(Price, Amount)、exchange.Sell(Price, Amount)、exchange.CancelOrder(Id)与现货交易的区别:
在调用exchange.Buy(Price, Amount)或exchange.Sell(Price, Amount)之前,需要先调用exchange.SetDirection(Direction)以明确下单方向。javascriptfunction main() { while (!exchange.IO("status")) { LogStatus("正在等待与交易服务器连接, " + new Date()) Sleep(1000) } // 设置合约 exchange.SetContractType("MA888") // 设置为开空头仓位,调用exchange.Sell(...)函数下单开空头仓位 exchange.SetDirection("sell") var id = exchange.Sell(1000, 2) exchange.CancelOrder(id) }pythondef main(): while not exchange.IO("status"): LogStatus("正在等待与交易服务器连接, " + _D()) Sleep(1000) exchange.SetContractType("MA888") exchange.SetDirection("sell") id = exchange.Sell(1000, 2) exchange.CancelOrder(id)rustfn main() { while exchange.IO("status").unwrap_or_default() != "true" { LogStatus!("正在等待与交易服务器连接,", _D(None)); Sleep(1000); } // 设置合约 exchange.SetContractType("MA888").unwrap(); // 设置为开空头仓位,调用exchange.Sell(...)函数下单开空头仓位 exchange.SetDirection("sell").unwrap(); let id = exchange.Sell(1000, 2).unwrap(); exchange.CancelOrder(&id).unwrap(); }c++void main() { while(exchange.IO("status") == 0) { LogStatus("正在等待与交易服务器连接, " + _D()); Sleep(1000); } exchange.SetContractType("MA888"); exchange.SetDirection("sell"); auto id = exchange.Sell(1000, 2); exchange.CancelOrder(id); } -
商品期货支持自定义订单类型(支持实盘,回测暂不支持)。
通过后缀方式指定,附加在_之后,例如:CTP协议:
exchange.SetDirection("buy_ioc")
交易所暂不支持此类型:exchange.SetDirection("sell_gtd-20170111")。CTP协议:
后缀 意义 对应CTP原始值 ioc 立即完成,否则撤销 THOST_FTDC_TC_IOC gfs 本节有效 THOST_FTDC_TC_GFS gfd 当日有效 THOST_FTDC_TC_GFD gtd 指定日期前有效 THOST_FTDC_TC_GTD gtc 撤销前有效 THOST_FTDC_TC_GTC gfa 集合竞价有效 THOST_FTDC_TC_GFA fak 部分成交,撤销剩余部分 THOST_FTDC_TC_IOC fok 未能完全成交,全部撤销 THOST_FTDC_TC_IOC 易盛协议:
后缀 意义 对应易盛协议原始值 gfd 当日有效 TAPI_ORDER_TIMEINFORCE_GFD gtc 撤销前有效 TAPI_ORDER_TIMEINFORCE_GTC gtd 指定日期前有效 TAPI_ORDER_TIMEINFORCE_GTD fak 部分成交,撤销剩余部分 TAPI_ORDER_TIMEINFORCE_FAK ioc 立即完成,否则撤销 TAPI_ORDER_TIMEINFORCE_FAK fok 未能完全成交,全部撤销 TAPI_ORDER_TIMEINFORCE_FOK -
易盛协议
- 部分接口调用时立即返回
执行exchange.GetOrder(id)、exchange.GetOrders()、exchange.GetPositions()、exchange.GetAccount()接口时会立即返回。当交易所对象配置为易盛协议时,这些接口均为立即返回,数据由本地维护,并由期货公司前置机推送更新,不会阻塞。
- 部分接口调用时立即返回
-
Futures_OP报错
期货交易所对象相关的报错信息说明如下表所示:值 错误函数显示 触发函数 描述 0 Futures_OP 0 exchange.SetMarginLevel 调用杠杆函数时报错。商品期货不支持SetMarginLevel函数,因此不会触发Futures_OP 0错误 1 Futures_OP 1 exchange.SetDirection 设置期货交易方向函数时报错 2 Futures_OP 2 exchange.SetContractType 设置合约函数时报错 3 Futures_OP 3 exchange.GetPositions 获取持仓函数时报错 4 Futures_OP 4 exchange.IO 调用IO函数时报错