输入/搜索内容
欢迎使用优宽量化交易平台
编程语言
JavaScript
TypeScript
Python
C++
My语言(麦语言)
PINE语言
Blockly可视化
Workflow工作流
支持的协议
密钥安全性
实盘
策略库
托管者
部署托管者
一键租用托管者
手动部署托管者
托管者操作注意事项
全局指定IP地址
命令行版本托管者程序的参数
实盘数据迁移
托管者监控
交易所
策略编辑器
回测系统
策略入口函数
策略框架与API函数
模板类库
策略参数
交互控件
商品期货
期权交易
股票证券
C++策略编写说明
JavaScript策略编写说明
内置库
扩展API接口
MCP 服务
交易终端
数据探索
Alpha因子分析工具
调试工具
远程编辑
完整策略的导入与导出
多语言支持
实盘、策略分组
实盘展示
策略分享与出租
实盘消息推送
实盘报错、异常退出的常见原因
交易所特殊说明、兼容记录

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

示例

  • 测试onexit()函数的基本用法:

    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)
    c++
    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()函数。可以通过检测回测系统的结束标记(EOF异常)来触发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("执行扫尾函数")
    c++
    #include <iostream> #include <exception> #include <string> 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("执行扫尾函数"); }