输入/搜索内容
内置函数
Global
Version
Sleep
IsVirtual
Mail
Mail_Go
SetErrorFilter
GetPid
GetLastError
GetCommand
GetMeta
Dial
HttpQuery
HttpQuery_Go
Encode
UnixNano
Unix
GetOS
MD5
DBExec
UUID
EventLoop
__Serve
_G
_D
_N
_C
_Cross
JSON.parse
JSON.stringify
SetChannelData
GetChannelData
Log
Market
Trade
Account
Futures
Threads
threading
Thread
getThread
mainThread
currentThread
Lock
Condition
Event
Dict
pending
Thread
ThreadLock
ThreadEvent
ThreadCondition
ThreadDict
TA
Talib
talib.CDL2CROWS
talib.CDL3BLACKCROWS
talib.CDL3INSIDE
talib.CDL3LINESTRIKE
talib.CDL3OUTSIDE
talib.CDL3STARSINSOUTH
talib.CDL3WHITESOLDIERS
talib.CDLABANDONEDBABY
talib.CDLADVANCEBLOCK
talib.CDLBELTHOLD
talib.CDLBREAKAWAY
talib.CDLCLOSINGMARUBOZU
talib.CDLCONCEALBABYSWALL
talib.CDLCOUNTERATTACK
talib.CDLDARKCLOUDCOVER
talib.CDLDOJI
talib.CDLDOJISTAR
talib.CDLDRAGONFLYDOJI
talib.CDLENGULFING
talib.CDLEVENINGDOJISTAR
talib.CDLEVENINGSTAR
talib.CDLGAPSIDESIDEWHITE
talib.CDLGRAVESTONEDOJI
talib.CDLHAMMER
talib.CDLHANGINGMAN
talib.CDLHARAMI
talib.CDLHARAMICROSS
talib.CDLHIGHWAVE
talib.CDLHIKKAKE
talib.CDLHIKKAKEMOD
talib.CDLHOMINGPIGEON
talib.CDLIDENTICAL3CROWS
talib.CDLINNECK
talib.CDLINVERTEDHAMMER
talib.CDLKICKING
talib.CDLKICKINGBYLENGTH
talib.CDLLADDERBOTTOM
talib.CDLLONGLEGGEDDOJI
talib.CDLLONGLINE
talib.CDLMARUBOZU
talib.CDLMATCHINGLOW
talib.CDLMATHOLD
talib.CDLMORNINGDOJISTAR
talib.CDLMORNINGSTAR
talib.CDLONNECK
talib.CDLPIERCING
talib.CDLRICKSHAWMAN
talib.CDLRISEFALL3METHODS
talib.CDLSEPARATINGLINES
talib.CDLSHOOTINGSTAR
talib.CDLSHORTLINE
talib.CDLSPINNINGTOP
talib.CDLSTALLEDPATTERN
talib.CDLSTICKSANDWICH
talib.CDLTAKURI
talib.CDLTASUKIGAP
talib.CDLTHRUSTING
talib.CDLTRISTAR
talib.CDLUNIQUE3RIVER
talib.CDLUPSIDEGAP2CROWS
talib.CDLXSIDEGAP3METHODS
talib.AD
talib.ADOSC
talib.OBV
talib.ACOS
talib.ASIN
talib.ATAN
talib.CEIL
talib.COS
talib.COSH
talib.EXP
talib.FLOOR
talib.LN
talib.LOG10
talib.SIN
talib.SINH
talib.SQRT
talib.TAN
talib.TANH
talib.MAX
talib.MAXINDEX
talib.MIN
talib.MININDEX
talib.MINMAX
talib.MINMAXINDEX
talib.SUM
talib.HT_DCPERIOD
talib.HT_DCPHASE
talib.HT_PHASOR
talib.HT_SINE
talib.HT_TRENDMODE
talib.ATR
talib.NATR
talib.TRANGE
talib.BBANDS
talib.DEMA
talib.EMA
talib.HT_TRENDLINE
talib.KAMA
talib.MA
talib.MAMA
talib.MIDPOINT
talib.MIDPRICE
talib.SAR
talib.SAREXT
talib.SMA
talib.T3
talib.TEMA
talib.TRIMA
talib.WMA
talib.LINEARREG
talib.LINEARREG_ANGLE
talib.LINEARREG_INTERCEPT
talib.LINEARREG_SLOPE
talib.STDDEV
talib.TSF
talib.VAR
talib.ADX
talib.ADXR
talib.APO
talib.AROON
talib.AROONOSC
talib.BOP
talib.CCI
talib.CMO
talib.DX
talib.MACD
talib.MACDEXT
talib.MACDFIX
talib.MFI
talib.MINUS_DI
talib.MINUS_DM
talib.MOM
talib.PLUS_DI
talib.PLUS_DM
talib.PPO
talib.ROC
talib.ROCP
talib.ROCR
talib.ROCR100
talib.RSI
talib.STOCH
talib.STOCHF
talib.STOCHRSI
talib.TRIX
talib.ULTOSC
talib.WILLR
talib.AVGPRICE
talib.MEDPRICE
talib.TYPPRICE
talib.WCLPRICE
OS
结构体
内置变量

exchange.GetPositions()函数用于获取所有合约的当前持仓信息。GetPositions()函数是交易所对象exchange的成员函数。

GetPositions()函数获取交易所对象exchange所绑定的交易所账户的持仓信息。exchange对象的成员函数(方法)的用途仅与exchange相关,文档之后不再赘述。

exchange.GetPositions()
exchange.GetPositions(symbol)

示例

javascript
/* 注意:GetPositions 函数获取的是所有持仓品种的持仓信息,如果没有持仓则返回空数组,因此在使用该接口返回的数据前,需先判断返回的数据是否为空数组 */ function main(){ // 由于是测试代码,不使用商品期货策略的一般架构,这里仅判断 exchange.IO("status") 函数,在成功连接期货公司前置机后立即执行测试代码。股票证券无需使用 exchange.IO("status") 判断连接状态 while(!exchange.IO("status")) { Sleep(1000) } var info = exchange.SetContractType("rb888") var ticker = exchange.GetTicker() exchange.SetDirection("buy") exchange.Buy(ticker.Last + info.PriceTick * 20, 2) var position = exchange.GetPositions() if(position.length>0){ Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:", position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type, "ContractType:", position[0].ContractType, "Symbol:", position[0].Symbol) } }
python
def main(): while not exchange.IO("status"): Sleep(1000) info = exchange.SetContractType("rb888") ticker = exchange.GetTicker() exchange.SetDirection("buy") exchange.Buy(ticker["Last"] + info["PriceTick"] * 20, 2) position = exchange.GetPositions() if len(position) > 0: Log("Amount:", position[0]["Amount"], "FrozenAmount:", position[0]["FrozenAmount"], "Price:", position[0]["Price"], "Profit:", position[0]["Profit"], "Type:", position[0]["Type"], "ContractType:", position[0]["ContractType"], "Symbol:", position[0]["Symbol"])
rust
fn main() { // 由于是测试代码,不使用商品期货策略的一般架构,这里仅判断 exchange.IO("status") 函数,在成功连接期货公司前置机后立即执行测试代码。股票证券无需使用 exchange.IO("status") 判断连接状态 while exchange.IO("status").unwrap_or_default() != "true" { Sleep(1000); } let info = JSONParse(&exchange.SetContractType("rb888").unwrap()).unwrap(); let ticker = exchange.GetTicker(None).unwrap(); // 注意:Rust 中不推荐使用 SetDirection,优先使用 CreateOrder 直接指定方向 exchange.SetDirection("buy").unwrap(); exchange.Buy(ticker.Last + info["PriceTick"].as_f64().unwrap_or(0.0) * 20.0, 2).unwrap(); let position = exchange.GetPositions(None).unwrap(); if position.len() > 0 { Log!("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:", position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type, "ContractType:", position[0].ContractType, "Symbol:", position[0].Symbol); } }
c++
void main() { while(exchange.IO("status") == 0) { Sleep(1000); } auto info = exchange.SetContractType("rb888"); auto ticker = exchange.GetTicker(); exchange.SetDirection("buy"); exchange.Buy(ticker.Last + info["PriceTick"].get<double>() * 20, 2); auto position = exchange.GetPositions(); if(position.size() > 0) { Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:", position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type, "ContractType:", position[0].ContractType, "Symbol:", position[0].Symbol); } }

返回值

类型描述

Position数组 / 空值

exchange.GetPositions()函数请求数据成功时返回Position结构数组,请求数据失败时返回空值。若没有持仓,则返回空数组,即[]

参数

名称类型必填描述

symbol

string

参数symbol用于指定请求持仓数据的合约代码。不传该参数时,默认请求所有合约的持仓数据。

参考

备注

商品期货的持仓需要注意以下几点:

  • 回测系统
    回测系统不区分今仓、昨仓。GetPositions函数返回的持仓数据Position结构数组中,Position结构的Type属性仅为PD_LONG或者PD_SHORT
  • 实盘
    有些交易所区分今仓、昨仓,例如上期所。
    有些交易所虽然也区分,但是不能指定平今仓还是平昨仓,存在今仓时优先平今仓。例如IF等一些品种只能先平今仓,因此今仓、昨仓的仓位信息合并为一个并且不予区分。

兼容exchange.GetPosition()调用。

exchange.GetPositions()函数不依赖于当前设置的合约代码。不传symbol参数时获取所有合约的当前持仓信息;传入symbol参数时获取指定合约的持仓信息。

exchange.SetMarginLevel()函数用于设置exchange交易所对象当前交易对或合约的杠杆倍数。商品期货和股票证券不支持此功能。

exchange.SetMarginLevel(marginLevel)

参数

名称类型必填描述

marginLevel

number

marginLevel参数用于设置杠杆倍数,交易所的杠杆倍数通常为整数值。

参考

exchange.SetDirection()函数用于设置exchange.Buy函数、exchange.Sell函数在进行期货合约下单时的订单方向。

exchange.SetDirection(direction)
exchange.SetDirection(direction, type)

示例

javascript
function main(){ // 鉴于此为测试代码,未采用商品期货策略的一般架构,这里仅通过exchange.IO("status")函数判断,在成功连接期货公司前置机后立即执行测试代码。股票证券无需使用exchange.IO("status")判断连接状态 while(!exchange.IO("status")) { Sleep(1000) } // 举例设置为螺纹钢主力合约 exchange.SetContractType("rb888") // 设置下单类型为做多 exchange.SetDirection("buy") // 以10000的价格,合约数量为2张下单。注意,这里的下单价格仅为举例,具体测试时可自行设置、改动 exchange.Buy(10000, 2) // 设置下单类型为平多 exchange.SetDirection("closebuy") exchange.Sell(1000, 2) }
python
def main(): while not exchange.IO("status"): Sleep(1000) exchange.SetContractType("rb888") exchange.SetDirection("buy") exchange.Buy(10000, 2) exchange.SetDirection("closebuy") exchange.Sell(1000, 2)
rust
fn main() { // 鉴于此为测试代码,未采用商品期货策略的一般架构,这里仅通过exchange.IO("status")函数判断,在成功连接期货公司前置机后立即执行测试代码。股票证券无需使用exchange.IO("status")判断连接状态 while exchange.IO("status").unwrap_or_default() != "true" { Sleep(1000); } // 举例设置为螺纹钢主力合约 exchange.SetContractType("rb888").unwrap(); // 设置下单类型为做多。注意:Rust 中 SetDirection 不推荐使用,优先使用 CreateOrder 直接指定 side("buy"/"sell"/"closebuy"/"closesell"),无需先 SetDirection exchange.SetDirection("buy").unwrap(); // 以10000的价格,合约数量为2张下单。注意,这里的下单价格仅为举例,具体测试时可自行设置、改动 exchange.Buy(10000, 2).unwrap(); // 设置下单类型为平多 exchange.SetDirection("closebuy").unwrap(); exchange.Sell(1000, 2).unwrap(); }
c++
void main() { while(exchange.IO("status") == 0) { Sleep(1000); } exchange.SetContractType("rb888"); exchange.SetDirection("buy"); exchange.Buy(10000, 2); exchange.SetDirection("closebuy"); exchange.Sell(1000, 2); }

参数

名称类型必填描述

direction

string

direction参数用于设置期货合约下单时的方向,可选值为:"buy""closesell""sell""closebuy""closesell_today""closebuy_today"。其中"closebuy_today""closesell_today"表示平今仓;"closebuy""closesell"表示平昨仓。

type

string

对于采用CTP协议的传统期货,可将第二个参数type设置为"1""2""3",分别表示“投机”、“套利”、“套保”;若不设置,则默认为投机。

参考

备注

exchange.SetDirection()函数设置了期货合约交易方向与下单函数之间的对应关系:

下单函数SetDirection函数的参数设置的方向备注
exchange.Buy"buy"买入开多仓
exchange.Buy"closesell"买入平空仓
exchange.Buy"closesell_today"买入平空仓(今仓)
exchange.Sell"sell"卖出开空仓
exchange.Sell"closebuy"卖出平多仓
exchange.Sell"closebuy_today"卖出平多仓(今仓)

exchange.SetContractType()函数用于设置exchange交易所对象当前的合约代码。

期货支持传统商品期货的CTP协议与易盛协议。在进行任何操作之前,需要先使用exchange.SetContractType()函数设置合约代码。

exchange.SetContractType(symbol)

示例

  • 使用exchange.SetContractType()函数设置(订阅)合约。

    javascript
    function main(){ while(true) { if (exchange.IO("status")) { var ret = exchange.SetContractType("MA888") Log("订阅合约的详细信息:", ret) break } else { LogStatus(_D(), "未连接") } } }
    python
    def main(): while True: if exchange.IO("status"): ret = exchange.SetContractType("MA888") Log("订阅合约的详细信息:", ret) break else: LogStatus(_D(), "未连接")
    rust
    fn main() { loop { if exchange.IO("status").unwrap_or_default() == "true" { let ret = exchange.SetContractType("MA888"); Log!("订阅合约的详细信息:", ret); break; } else { LogStatus!(_D(None), "未连接"); } } }
    c++
    void main() { while(true) { if(exchange.IO("status") == 1) { auto ret = exchange.SetContractType("MA888"); Log("订阅合约的详细信息:", ret); break; } else { LogStatus(_D(), "未连接"); } } }
  • 商品期货仅在回测中支持虚拟合约交易;在实盘交易中,虚拟合约只能用于获取行情数据。实盘时,我们可以使用虚拟合约所映射的真实合约进行下单,示例代码如下:

    javascript
    function main(){ var n = 0 while(true){ // 需要在判断exchange.IO("status")函数返回true,即为真值时才可调用行情、交易等函数 if(exchange.IO("status")){ // 设置合约为虚拟合约,MA888,即甲醇主力合约 var ret = _C(exchange.SetContractType, "MA888") var ticker = exchange.GetTicker() // 当到达交易条件时 if(n == 100) { exchange.SetContractType(ret.InstrumentID) Log("设置映射的实际合约:", ret.InstrumentID) exchange.SetDirection("buy") var id = exchange.Buy(ticker.Buy - 10, 1) Log("id:", id) Sleep(1000) Log(exchange.GetOrder(id)) Sleep(1000) Log(exchange.GetPositions()) Sleep(1000) exchange.CancelOrder(id) Sleep(1000) Log(exchange.GetOrders()) } n++ LogStatus(_D(), "已经连接CTP !") } else { LogStatus(_D(), "未连接CTP !") } } }
    python
    def main(): n = 0 while True: if exchange.IO("status"): ret = _C(exchange.SetContractType, "MA888") ticker = exchange.GetTicker() if n == 100: exchange.SetContractType(ret["InstrumentID"]) Log("设置映射的实际合约:", ret["InstrumentID"]) exchange.SetDirection("buy") id = exchange.Buy(ticker["Buy"] - 10, 1) Log("id:", id) Sleep(1000) Log(exchange.GetOrder(id)) Sleep(1000) Log(exchange.GetPositions()) Sleep(1000) exchange.CancelOrder(id) Sleep(1000) Log(exchange.GetOrders()) n += 1 LogStatus(_D(), "已经连接CTP !") else: LogStatus(_D(), "未连接CTP !")
    rust
    fn main() { let mut n = 0; loop { // 需要在判断exchange.IO("status")函数返回true,即为真值时才可调用行情、交易等函数 if exchange.IO("status").unwrap_or_default() == "true" { // 设置合约为虚拟合约,MA888,即甲醇主力合约 let ret = JSONParse(&_C!(exchange.SetContractType("MA888"))).unwrap(); let ticker = exchange.GetTicker(None).unwrap(); // 当到达交易条件时 if n == 100 { let instrument_id = ret["InstrumentID"].as_str().unwrap_or(""); exchange.SetContractType(instrument_id).unwrap(); Log!("设置映射的实际合约:", instrument_id); // 注意:Rust 中 SetDirection 不推荐使用,优先使用 CreateOrder 直接指定方向 exchange.SetDirection("buy").unwrap(); let id = exchange.Buy(ticker.Buy - 10.0, 1).unwrap(); Log!("id:", id); Sleep(1000); Log!(exchange.GetOrder(&id)); Sleep(1000); Log!(exchange.GetPositions(None)); Sleep(1000); exchange.CancelOrder(&id).unwrap(); Sleep(1000); Log!(exchange.GetOrders(None)); } n += 1; LogStatus!(_D(None), "已经连接CTP !"); } else { LogStatus!(_D(None), "未连接CTP !"); } } }
    c++
    void main() { int n = 0; while(true) { if(exchange.IO("status") == 1) { auto ret = exchange.SetContractType("MA888"); auto ticker = exchange.GetTicker(); if(n == 100) { exchange.SetContractType(ret["InstrumentID"]); Log("设置映射的实际合约:", ret["InstrumentID"]); exchange.SetDirection("buy"); auto id = exchange.Buy(ticker.Buy - 10, 1); Log("id:", id); Sleep(1000); Log(exchange.GetOrder(id)); Sleep(1000); Log(exchange.GetPositions()); Sleep(1000); exchange.CancelOrder(id); Sleep(1000); Log(exchange.GetOrders()); } n++; LogStatus(_D(), "已经连接CTP !"); } else { LogStatus(_D(), "未连接CTP !"); } } }

返回值

类型描述

object

exchange.SetContractType()函数返回一个结构体。该结构体中记录了合约的详细信息,例如:最小下单合约张数、手续费、交割时间等数据。

打印exchange.SetContractType("MA888")函数返回的数据,可查看合约详细信息,示例如下:

json
{ "InstrumentName": "甲醇连续", "MinLimitOrderVolume": 1, "OpenDate": "20190116", "PositionType": 50, "LongMarginRatio": 0.06999999999999999, "DeliveryYear": 2020, "MaxMarketOrderVolume": 1000, "ExpireDate": "20200114", "PositionDateType": 50, "InstLifePhase": 49, "UnderlyingMultiple": 1, "CombinationType": 48, "InstrumentID": "MA001", "ExchangeInstID": "MA001", "ProductClass": 49, "MinMarketOrderVolume": 1, "VolumeMultiple": 10, "CreateDate": "20190116", "ShortMarginRatio": 0.06999999999999999, "UnderlyingInstrID": "", "ProductID": "MA", "PriceTick": 1, "StartDelivDate": "20200114", "EndDelivDate": "20200114", "ExchangeID": "CZCE", "MaxLimitOrderVolume": 1000, "MaxMarginSideAlgorithm": 48, "DeliveryMonth": 1, "IsTrading": 1, "StrikePrice": 0, "OptionsType": 0 }

参数

名称类型必填描述

symbol

string

例如:exchange.SetContractType("rb2310"),作用是将当前操作的合约设置为螺纹钢2023年10月交割的合约。

主力连续合约的代码为888,例如MA888;次主力连续合约的代码为889,例如MA889;连续指数合约的代码为000,例如MA000888889000虚拟合约仅支持回测交易,实盘中只支持获取行情。

参考

备注

  • 主力连续合约(例如rb888):
    由该期货品种不同时期的主力合约(价格和成交量)直接拼接而成,代码以888结尾,例如rb888。合约首次上市时,以当日收盘时同品种持仓量最大者作为下一交易日起的主力合约。若同品种其他合约在收盘后持仓量超过当前主力合约的1.1倍,则在下一交易日进行主力合约切换。
  • 次主力连续合约(例如rb889):
    由该期货品种不同时期的次主力合约直接拼接而成,代码以889结尾,例如rb889。次主力合约为同品种中持仓量排名第二的合约。
  • 指数合约(例如rb000):
    由该期货品种所有正在交易的合约,按持仓量加权平均计算。

在商品期货策略中调用exchange.SetContractType(ContractType)函数时,无论是实盘还是simnow模拟盘,都可能出现订阅失败的情况,例如连接期货公司前置机失败,或设置了不存在的合约代码。虚拟合约订阅成功后,返回字段中的InstrumentID即为主力合约(会在订阅的同时获取),便于策略在实盘下单交易时进行合约映射。

对于不熟悉商品期货合约代码的用户,可以使用如下JavaScript语言的代码进行查询:

javascript
function main(){ while(true){ if(exchange.IO("status")){ var products_CZCE_Tbl = { "type" : "table", "title" : "郑商所 CZCE", "cols" : ["商品名称(ProductName)", "合约代码短名(ProductID)" , "一跳价格(PriceTick)", "一手合约乘数(VolumeMultiple)", "交易所代码(ExchangeID)"], "rows" : [] } var products_DCE_Tbl = { "type" : "table", "title" : "大商所 DCE", "cols" : ["商品名称(ProductName)", "合约代码短名(ProductID)" , "一跳价格(PriceTick)", "一手合约乘数(VolumeMultiple)", "交易所代码(ExchangeID)"], "rows" : [] } var products_SHFE_Tbl = { "type" : "table", "title" : "上期所 SHFE", "cols" : ["商品名称(ProductName)", "合约代码短名(ProductID)" , "一跳价格(PriceTick)", "一手合约乘数(VolumeMultiple)", "交易所代码(ExchangeID)"], "rows" : [] } var products_other_Tbl = { "type" : "table", "title" : "其它", "cols" : ["商品名称(ProductName)", "合约代码短名(ProductID)" , "一跳价格(PriceTick)", "一手合约乘数(VolumeMultiple)", "交易所代码(ExchangeID)"], "rows" : [] } exchange.IO("products").forEach(function(product) { if (product.ExchangeID == "CZCE") { products_CZCE_Tbl.rows.push([product.ProductName, product.ProductID, product.PriceTick, product.VolumeMultiple, product.ExchangeID]) } else if (product.ExchangeID == "DCE") { products_DCE_Tbl.rows.push([product.ProductName, product.ProductID, product.PriceTick, product.VolumeMultiple, product.ExchangeID]) } else if (product.ExchangeID == "SHFE") { products_SHFE_Tbl.rows.push([product.ProductName, product.ProductID, product.PriceTick, product.VolumeMultiple, product.ExchangeID]) } else { products_other_Tbl.rows.push([product.ProductName, product.ProductID, product.PriceTick, product.VolumeMultiple, product.ExchangeID]) } }) LogStatus(_D(), "已经连接CTP", "\n`" + JSON.stringify([products_CZCE_Tbl, products_DCE_Tbl, products_SHFE_Tbl, products_other_Tbl]) + "`") Sleep(1000 * 60 * 5) } else { LogStatus(_D(), "未连接CTP !") } Sleep(1000) } }

查询结果将显示各个交易所的合约信息。

商品期货合约的命名规则如下:

前面的字母代表品种名称(合约代码短名),后面的数字代表合约到期日。

交易所合约命名规则
上期 / 能源所:小写 + 4个数字
大商所:小写 + 4个数字
中金所:大写 + 4个数字
郑商所:大写 + 3个数字

exchange.GetContractType()函数用于获取exchange交易所对象当前设置的合约代码。

exchange.GetContractType()

示例

javascript
function main () { // 鉴于此为测试代码,未采用商品期货策略的通用架构,这里仅通过 exchange.IO("status") 函数判断,在确认成功连接期货公司前置机后立即执行测试代码。股票证券交易无需使用 exchange.IO("status") 判断连接状态 while(!exchange.IO("status")) { Sleep(1000) } Log(exchange.SetContractType("rb888")) Log(exchange.GetContractType()) }
python
def main(): while not exchange.IO("status"): Sleep(1000) Log(exchange.SetContractType("rb888")) Log(exchange.GetContractType())
rust
fn main() { // 鉴于此为测试代码,未采用商品期货策略的通用架构,这里仅通过 exchange.IO("status") 函数判断,在确认成功连接期货公司前置机后立即执行测试代码。股票证券交易无需使用 exchange.IO("status") 判断连接状态 while exchange.IO("status").unwrap_or_default() != "true" { Sleep(1000); } Log!(exchange.SetContractType("rb888")); Log!(exchange.GetContractType()); }
c++
void main() { while(exchange.IO("status") == 0) { Sleep(1000); } Log(exchange.SetContractType("rb888")); Log(exchange.GetContractType()); }

返回值

类型描述

string

exchange.GetContractType()函数返回exchange交易所对象当前设置的合约代码。

参考

商品期货CTP协议中的汉字采用GBK编码,可使用StrDecode()函数进行解码。

StrDecode(gbkString)

返回值

类型描述

string

StrDecode()函数返回解码后的字符串内容。

参数

名称类型必填描述

gbkString

string

需要解码的GBK编码字符串。

参考