订阅指定实盘的频道数据。该函数用于实盘间通信,可以获取其他实盘通过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}