GetChannelData

订阅指定实盘的频道数据。该函数用于实盘间通信,可以获取其他实盘通过SetChannelData()函数发布的最新状态数据。

返回订阅频道的最新状态数据。首次调用返回null,需要重试。数据结构由广播端发布的数据决定。 object / array / string / number / bool / 空值

GetChannelData(robotId)

要订阅的实盘ID(频道ID)。每个实盘都有一个独立的频道,频道ID即为实盘ID。可通过_G()函数获取当前实盘ID。 robotId true string / number

function main() {
    // 需要订阅的两个频道ID(根据实际情况修改)
    var channelId1 = "632799"  // 频道1的实盘ID
    var channelId2 = "632800"  // 频道2的实盘ID

    while(true) {
        // 订阅频道1的当前状态
        var state1 = GetChannelData(channelId1)

        // 订阅频道2的当前状态
        var state2 = GetChannelData(channelId2)

        // 构建状态显示
        var statusMsg = "频道订阅端 - 当前订阅状态\n\n"

        // 显示频道1状态
        statusMsg += "═══ 频道1 [" + channelId1 + "] ═══\n"
        if (state1 !== null) {
            statusMsg += "更新ID: #" + state1.updateId + "\n"
            statusMsg += "时间: " + _D(state1.timestamp) + "\n"
            statusMsg += "交易对: " + state1.symbol + "\n"
            statusMsg += "最新价: $" + state1.lastPrice.toFixed(2) + "\n"
            statusMsg += "成交量: " + state1.volume.toFixed(4) + "\n"
        } else {
            statusMsg += "状态: 等待中... (首次调用返回 null)\n"
        }

        statusMsg += "\n"

        // 显示频道2状态
        statusMsg += "═══ 频道2 [" + channelId2 + "] ═══\n"
        if (state2 !== null) {
            statusMsg += "更新ID: #" + state2.updateId + "\n"
            statusMsg += "时间: " + _D(state2.timestamp) + "\n"
            statusMsg += "交易对: " + state2.symbol + "\n"
            statusMsg += "最新价: $" + state2.lastPrice.toFixed(2) + "\n"
            statusMsg += "成交量: " + state2.volume.toFixed(4) + "\n"
        } else {
            statusMsg += "状态: 等待中... (首次调用返回 null)\n"
        }

        LogStatus(statusMsg)

        Sleep(5000)  // 每5秒订阅一次频道
    }
}```
```python
def main():
    # 需要订阅的两个频道ID(根据实际情况修改)
    channelId1 = "632799"  # 频道1的实盘ID
    channelId2 = "632800"  # 频道2的实盘ID

    while True:
        # 订阅频道1的当前状态
        state1 = GetChannelData(channelId1)

        # 订阅频道2的当前状态
        state2 = GetChannelData(channelId2)

        # 构建状态显示
        statusMsg = "频道订阅端 - 当前订阅状态\n\n"

        # 显示频道1状态
        statusMsg += "═══ 频道1 [{}] ═══\n".format(channelId1)
        if state1 is not None:
            statusMsg += "更新ID: #{}\n".format(state1["updateId"])
            statusMsg += "时间: {}\n".format(_D(state1["timestamp"]))
            statusMsg += "交易对: {}\n".format(state1["symbol"])
            statusMsg += "最新价: ${:.2f}\n".format(state1["lastPrice"])
            statusMsg += "成交量: {:.4f}\n".format(state1["volume"])
        else:
            statusMsg += "状态: 等待中... (首次调用返回 None)\n"

        statusMsg += "\n"

        # 显示频道2状态
        statusMsg += "═══ 频道2 [{}] ═══\n".format(channelId2)
        if state2 is not None:
            statusMsg += "更新ID: #{}\n".format(state2["updateId"])
            statusMsg += "时间: {}\n".format(_D(state2["timestamp"]))
            statusMsg += "交易对: {}\n".format(state2["symbol"])
            statusMsg += "最新价: ${:.2f}\n".format(state2["lastPrice"])
            statusMsg += "成交量: {:.4f}\n".format(state2["volume"])
        else:
            statusMsg += "状态: 等待中... (首次调用返回 None)\n"

        LogStatus(statusMsg)

        Sleep(5000)  # 每5秒订阅一次频道```
```cpp

频道订阅端示例 - 订阅两个实盘的频道数据

GetChannelData()函数为非阻塞调用,调用后立即返回,不会等待数据接收完成。 首次调用GetChannelData()函数时将返回null,需要重试以等待频道数据同步完成。 每次调用获取的均为频道上的最新状态数据,而非历史消息队列。 一个实盘可以同时订阅多个不同实盘的频道,只需多次调用GetChannelData()并传入不同的实盘ID即可。 当前实盘也可以订阅自己的频道,即robotId参数可以为当前实盘ID。 频道数据可以跨实盘、跨托管者、跨服务器进行传输。 广播端使用SetChannelData()函数发布频道数据。 频道通信适用于实盘环境,在回测系统中该功能可能受到限制。

{@fun/Global/SetChannelData SetChannelData} {@fun/Global/G _G}