指标编写

您好,我想写一个指标,比较各期货对应合约的持仓量/指数的持仓量,我应该如何在oninti域里, 处理下代码, 订阅下对应指数。// 简称: JM_OI_Ratio// 名称: 焦煤持仓量比(合约/指数)// 类别: 公式应用// 输出: Void//------------------------------------------------------------------------Params String IndexSymbol("jm999.dce"); // 焦煤品种加权指数,小写+交易所后缀Vars Numeric ContractOI; // 当前合约持仓量 Numeric IndexOI; // 指数持仓量 Numeric OIRatio; // 持仓量比值 Integer LayerId; // 订阅返回的图层号Events OnInit() { // 订阅焦煤指数作为 Data1 // 周期用小写 1d,开始时间给早一点保证数据充足 LayerId = SubscribeBar(IndexSymbol, "1d", 20200101.0930); } OnBar(ArrayRef<Integer> indexs) { // 只在主合约图层(Data0)上计算 Range[0:0] { ContractOI = OpenInt; // 通过 Data[1] 读取指数持仓量 IndexOI = Data[1].OpenInt; If(IndexOI > 0) { OIRatio = ContractOI / IndexOI; } Else { OIRatio = 0; } PlotAuto("持仓量比", OIRatio, 0, Color2()); // 调试:在K线上显示数值,方便确认数据源正常 Commentary("合约OI=" + Text(ContractOI) + " 指数OI=" + Text(IndexOI)); } }

拼指数的代码 // 解析当前合约: Symbol() 形如 "rb2510.SHFE" String curSym = Symbol(); String exch = Section(curSym, ".", 1); // 交易所后缀, 如 "SHFE" String product = SymbolType(); // 品种代码, 如 "rb" // 构造指数合约代码: 品种 + 000 + .交易所 gIndexCode = product + "000." + exch; // 如 "rb000.SHFE"