onexit()

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

”`javascript function main(){ Log(“Starting, will stop after 5 seconds and execute cleanup function!”) Sleep(1000 * 5) }

// 扫尾函数实现 function onexit(){ var beginTime = new Date().getTime() while(true){ var nowTime = new Date().getTime() Log(“Program stop countdown..cleanup started, elapsed time:”, (nowTime - beginTime) / 1000, “seconds!”) Sleep(1000) } } python import time def main(): Log(“Starting, will stop after 5 seconds and execute cleanup function!”) Sleep(1000 * 5)

def onexit(): beginTime = time.time() * 1000 while True: ts = time.time() * 1000 Log(“Program stop countdown..cleanup started, elapsed time:”, (ts - beginTime) / 1000, “seconds!”) Sleep(1000) cpp void main() { Log(“Starting, will stop after 5 seconds and execute cleanup function!”); Sleep(1000 * 5); }

void onexit() { auto beginTime = Unix() * 1000; while(true) { auto ts = Unix() * 1000; Log(“Program stop countdown..cleanup started, elapsed time:”, (ts - beginTime) / 1000, “seconds!”); Sleep(1000); } } 测试onexit()函数: javascript function main() { if (exchange.GetName().startsWith(“Futures_”)) { Log(“Exchange is futures”) exchange.SetContractType(“swap”) } else { Log(“Exchange is spot”) }

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(“Executing cleanup function”) } python def main(): if exchange.GetName().startswith(“Futures_”): Log(“Exchange is futures”) else: Log(“Exchange is spot”)

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(“Executing cleanup function”) cpp #include #include #include

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

void main() { std::string prefix = “Futures_”; bool startsWith = exchange.GetName().substr(0, prefix.length()) == prefix; if (startsWith) { Log(“Exchange is futures”); exchange.SetContractType(“swap”); } else { Log(“Exchange is spot”); }

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

}

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