function main() {
while (!exchange.IO("status")) Sleep(1000)
exchange.SetContractType("rb888")
var r = exchange.GetRecords(PERIOD_H1)
if (!r || r.length < 3) return
r = r.slice(-201)
var rets = r.slice(1).map(function (b, i) { return b.Close / r[i].Close - 1 })
LogStatus({type: "histogram", title: "小时涨跌分布", data: rets,
format: {percent: true, precision: 2}})
}
python
def main():
while not exchange.IO("status"):
Sleep(1000)
exchange.SetContractType("rb888")
r = exchange.GetRecords(PERIOD_H1)
if not r or len(r) < 3:
return
r = r[-201:]
rets = [r[i]["Close"] / r[i - 1]["Close"] - 1 for i in range(1, len(r))]
LogStatus({"type": "histogram", "title": "小时涨跌分布", "data": rets,
"format": {"percent": True, "precision": 2}})
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() < 3 { return; }
let r = &r[r.len().saturating_sub(201)..];
let rets: Vec<String> = r.windows(2)
.map(|w| (w[1].Close / w[0].Close - 1.0).to_string())
.collect();
LogStatus!(format!(
r#"{{"type": "histogram", "title": "小时涨跌分布", "data": [{}],
"format": {{"percent": true, "precision": 2}}}}"#,
rets.join(",")
));
}