onexit()

onexit()函数用于处理策略停止时的扫尾工作,最长执行时间为5分钟,需由用户自行实现。

”`javascript function main(){ Log(“开始运行, 5秒后停止,并执行扫尾函数!”) Sleep(1000 * 5) }

// 扫尾函数实现 function onexit(){ // 不使用接口获取数据的测试,就无需使用exchange.IO(“status”)函数判断连接状态,也不用设置合约代码,因为这里仅仅是测试 var beginTime = new Date().getTime() while(true){ var nowTime = new Date().getTime() Log(“程序停止倒计时..扫尾开始,已经过去:”, (nowTime - beginTime) / 1000, “秒!”) Sleep(1000) } } python import time def main(): Log(“开始运行, 5秒后停止,并执行扫尾函数!”) Sleep(1000 * 5)

def onexit(): beginTime = time.time() * 1000 while True: ts = time.time() * 1000 Log(“程序停止倒计时..扫尾开始,已经过去:”, (ts - beginTime) / 1000, “秒!”) Sleep(1000) cpp void main() { Log(“开始运行, 5秒后停止,并执行扫尾函数!”); Sleep(1000 * 5); }

void onexit() { auto beginTime = Unix() * 1000; while(true) { auto ts = Unix() * 1000; Log(“程序停止倒计时..扫尾开始,已经过去:”, (ts - beginTime) / 1000, “秒!”); Sleep(1000); } } 测试onexit()函数的基本用法: javascript function main() { exchange.SetContractType(“rb888”)

if (IsVirtual()) {
    try {
        onTick()
    } catch (e) {
        Log("error:", e)
    }
} else {
    onTick()
}

}

function onTick() { while (true) { var ticker = exchange.GetTicker() LogStatus(_D(), ticker ? ticker.Last : “–”) Sleep(500) } }

function onexit() { Log(“执行扫尾函数”) } python def main(): exchange.SetContractType(“rb888”)

if IsVirtual():
    try:
        onTick()
    except Exception as e:
        Log(e)
else:
    onTick()

def onTick(): while True: ticker = exchange.GetTicker() LogStatus(_D(), ticker[“Last”] if ticker else “–”) Sleep(500)

def onexit(): Log(“执行扫尾函数”) cpp #include #include #include

void onTick() { while (true) { auto ticker = exchange.GetTicker(); LogStatus(_D(), ticker); Sleep(500); } }

void main() { exchange.SetContractType(“rb888”);

if (IsVirtual()) {
    try {
        onTick();
    } catch (...) {
        std::cerr << "Caught unknown exception" << std::endl;
    }
} else {
    onTick();
}

}

void onexit() { Log(“执行扫尾函数”); } 由于回测系统中的策略通常设计为死循环持续轮询执行,这会导致无法触发策略中实现的onexit()函数。可以通过检测回测系统的结束标记(EOF异常)来触发onexit()“`函数的执行。