function main() {
while (!exchange.IO("status")) Sleep(1000)
exchange.SetContractType("rb888")
var r = exchange.GetRecords(PERIOD_H1)
if (!r || r.length < 73) return
var rets = r.slice(-73).map(function (b, i, a) { return i ? b.Close / a[i - 1].Close - 1 : 0 })
var days = [1, 25, 49] // 每天 24 根,第一行是最早的一天
LogStatus({
type: "heatmap", title: "最近3天逐小时涨跌", format: {percent: true, precision: 2},
x: r.slice(-24).map(function (b) { return _D(b.Time, "hh:00") }),
y: days.map(function (d) { return _D(r[r.length - 73 + d].Time, "MM-dd") }),
z: days.map(function (d) { return rets.slice(d, d + 24) })
})
}
python
def main():
while not exchange.IO("status"):
Sleep(1000)
exchange.SetContractType("rb888")
r = exchange.GetRecords(PERIOD_H1)
if not r or len(r) < 73:
return
bars = r[-73:]
rets = [0] + [bars[i]["Close"] / bars[i - 1]["Close"] - 1 for i in range(1, 73)]
days = [1, 25, 49] # 每天 24 根,第一行是最早的一天
LogStatus({
"type": "heatmap", "title": "最近3天逐小时涨跌",
"format": {"percent": True, "precision": 2},
"x": [_D(b["Time"] / 1000, "%H:00") for b in bars[-24:]],
"y": [_D(bars[d]["Time"] / 1000, "%m-%d") for d in days],
"z": [rets[d:d + 24] for d in days]
})
rust
fn main() {
while !exchange.IO("status").is_ok_and(|v| v.as_i64() == Some(1)) {
Sleep(1000);
}
if exchange.SetContractType("rb888").is_err() { return; }
let Ok(r) = exchange.GetRecords(None, PERIOD_H1, None) else { return };
if r.len() < 73 { return; }
let bars = &r[r.len() - 73..];
let days = [1usize, 25, 49]; // 每天 24 根,第一行是最早的一天
// Rust 的 _D() 固定输出 UTC 时间
let x: Vec<String> = bars[49..].iter()
.map(|b| format!("\"{}:00\"", &_D(b.Time)[11..13]))
.collect();
let y: Vec<String> = days.iter()
.map(|&d| format!("\"{}\"", &_D(bars[d].Time)[5..10]))
.collect();
let ret = |i: usize| (bars[i].Close / bars[i - 1].Close - 1.0).to_string();
let row = |d: usize| format!("[{}]", (d..d + 24).map(ret).collect::<Vec<_>>().join(","));
let z: Vec<String> = days.iter().map(|&d| row(d)).collect();
LogStatus!(format!(
r#"{{"type": "heatmap", "title": "最近3天逐小时涨跌",
"format": {{"percent": true, "precision": 2}},
"x": [{}], "y": [{}], "z": [{}]}}"#,
x.join(","), y.join(","), z.join(",")
));
}
属性
名称
类型
描述
type
string
必填,固定为 heatmap。
x
string数组 / 数值数组
必填。横轴刻度。
y
string数组 / 数值数组
必填。纵轴刻度,第一个在最下面。
z
array
必填。二维数值数组 z[行][列]:行数等于 y 的个数,每行的个数等于 x 的个数;非数字的格子留空。