资源加载中... loading...

_C

重试函数,用于接口容错。

回调函数执行时的返回值。 除了逻辑假值空值以外系统支持的所有类型。

_C(pfn) _C(pfn, …args)

参数pfn为函数引用,是一个回调函数。 pfn true function 回调函数的参数,参数arg可能有多个。参数arg的类型与个数根据回调函数的参数而定。 arg false string、number、bool、object、array、function、空值等系统支持的所有类型

function main(){
    // 鉴于测试代码,不使用商品期货策略一般架构,这里仅仅判断exchange.IO("status")函数,判断连接期货公司前置机成功后立即执行测试代码。股票证券无需使用exchange.IO("status")判断连接状态
    while(!exchange.IO("status")) {
        Sleep(1000)
    }
    
    // 测试代码部分
    // 设置合约为rb888即螺纹钢主力连续合约,或者设置股票代码
    exchange.SetContractType("rb888")
    
    var ticker = _C(exchange.GetTicker)
    // 调整_C()函数重试时间间隔为2秒
    _CDelay(2000)
    var depth = _C(exchange.GetDepth)
    Log(ticker)
    Log(depth)
}
def main():
    while not exchange.IO("status"):
        Sleep(1000)
        
    exchange.SetContractType("rb888")
    
    ticker = _C(exchange.GetTicker)
    _CDelay(2000)
    depth = _C(exchange.GetDepth)
    Log(ticker)
    Log(depth)
void main() {
    while(exchange.IO("status") == 0) {
        Sleep(1000);
    }
    
    exchange.SetContractType("rb888");
    
    auto ticker = _C(exchange.GetTicker);
    _CDelay(2000);
    auto depth = _C(exchange.GetDepth);
    Log(ticker);
    Log(depth);
}

对于无参数的函数容错:

function main(){
    // 鉴于测试代码,不使用商品期货策略一般架构,这里仅仅判断exchange.IO("status")函数,判断连接期货公司前置机成功后立即执行测试代码。股票证券无需使用exchange.IO("status")判断连接状态
    while(!exchange.IO("status")) {
        Sleep(1000)
    }
    
    // 测试代码部分
    // 设置合约为rb888即螺纹钢主力连续合约,或者设置股票代码
    exchange.SetContractType("rb888")
    
    var records = _C(exchange.GetRecords, PERIOD_D1)
    Log(records)
}
def main():
    while not exchange.IO("status"):
        Sleep(1000)
    
    exchange.SetContractType("rb888")
    
    records = _C(exchange.GetRecords, PERIOD_D1)
    Log(records)
void main() {
    while(exchange.IO("status") == 0) {
        Sleep(1000);
    }
    
    exchange.SetContractType("rb888");
    
    auto records = _C(exchange.GetRecords, PERIOD_D1);
    Log(records);
}

对于有参数的函数容错:

var test = function(a, b){
    var time = new Date().getTime() / 1000
    if(time % b == 3){
        Log("符合条件!", "#FF0000")
        return true
    }
    Log("重试!", "#FF0000")
    return false
}

function main(){
    // 不使用接口获取数据的测试,就无需使用exchange.IO("status")函数判断连接状态,也不用设置合约代码,因为这里仅仅是测试自定义的函数
    var ret = _C(test, 1, 5)
    Log(ret)
}
import time
def test(a, b):
    ts = time.time()
    if ts % b == 3:
        Log("符合条件!", "#FF0000")
        return True
    Log("重试!", "#FF0000")
    return False

def main():
    ret = _C(test, 1, 5)
    Log(ret)
// C++ 不支持这种方式对于自定义函数容错

也可以用于自定义函数的容错处理:

_C()函数会一直调用指定函数直到成功返回(参数pfn引用的函数调用时返回空值或者假值会重试调用pfn)。 例如_C(exchange.GetTicker)。默认重试间隔为3秒,可以调用_CDelay()函数来设置重试间隔。 例如_CDelay(1000),指改变_C()函数的重试间隔为1秒。 可以但不限于对以下函数做容错处理:

  • exchange.GetTicker()
  • exchange.GetDepth()
  • exchange.GetTrades()
  • exchange.GetRecords()
  • exchange.GetAccount()
  • exchange.GetOrders()
  • exchange.GetOrder()
  • exchange.GetPositions()

都可以通过_C()函数来调用进行容错。_C()函数不局限于以上列出的函数容错,参数pfn是函数引用并非函数调用, 注意是_C(exchange.GetTicker)并不是_C(exchange.GetTicker())

_N _Cross