传统商品期货API获取更多信息,需要注意策略程序启动运行时需要确保和期货公司前置机服务器连接成功后(账号登录验证成功与否通过exchange.IO("status")
函数调用时的返回值判断),才可以调用行情、交易等接口与期货公司前置机服务器通信。
参考:exchange.IO(...)函数
function main() {
while (!exchange.IO("status")) {
LogStatus("正在等待与交易服务器连接, " + new Date())
Sleep(1000)
}
exchange.GetAccount()
}
def main():
while not exchange.IO("status"):
LogStatus("正在等待与交易服务器连接, " + _D())
Sleep(1000)
exchange.GetAccount()
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)
明确下单方向。
function 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)
}
def main():
while not exchange.IO("status"):
LogStatus("正在等待与交易服务器连接, " + _D())
Sleep(1000)
exchange.SetContractType("MA888")
exchange.SetDirection("sell")
id = exchange.Sell(1000, 2)
exchange.CancelOrder(id)
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函数报错 |