GetChannelData

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

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

GetChannelData(channelId)

频道标识符,支持两种类型: 1. 实盘ID:用于订阅其他实盘的频道数据(实盘间通信)。可以通过_G()函数获取实盘ID。 2. 32位UUID:用于订阅跨平台发送的数据(外部系统通过HTTP API发送数据到FMZ平台)。 channelId 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

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

function main() {
    // 使用32位UUID作为频道标识符
    let uuid = "6BC42A119B5DBFA2188A8279DA3B5C30"

    while (true) {
        // 订阅UUID频道的数据
        let data = GetChannelData(uuid)

        if (data !== null) {
            Log("Received cross-platform data:", data)
        } else {
            Log("Waiting for data... (first call returns null)")
        }

        Sleep(10000)  // 每10秒检查一次
    }
}```
```python
def main():
    # 使用32位UUID作为频道标识符
    uuid = "6BC42A119B5DBFA2188A8279DA3B5C30"

    while True:
        # 订阅UUID频道的数据
        data = GetChannelData(uuid)

        if data is not None:
            Log("Received cross-platform data:", data)
        else:
            Log("Waiting for data... (first call returns None)")

        Sleep(10000)  # 每10秒检查一次```
```cpp

跨平台订阅示例 - 使用UUID订阅外部系统发送的数据

GetChannelData()函数为非阻塞调用,调用后立即返回,不会等待数据接收完成。 首次调用GetChannelData()函数时会返回null,需要重试以等待频道数据同步完成。 每次调用获取的都是频道上的最新状态数据,而非历史消息队列。 一个实盘可以同时订阅多个不同实盘的频道,只需多次调用GetChannelData()并传入不同的实盘ID即可。 当前实盘也可以订阅自己的频道,即robotId参数可以是当前实盘ID。 频道数据可以跨实盘、跨托管者、跨服务器进行传输。 广播端使用SetChannelData()函数发布频道数据。 频道通信适用于实盘环境,回测系统中该功能可能受限。 GetChannelData()函数支持跨平台订阅功能。使用32位UUID作为频道标识符时,可以接收来自FMZ平台外部系统通过HTTP API发送的数据。外部系统需要指定实盘ID和UUID才能发送数据,同一托管者下的所有实盘都可以订阅该UUID频道的数据,不同托管者的实盘无法订阅。

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