function main() {
while (!exchange.IO("status")) Sleep(1000)
exchange.SetContractType("rb888")
var r = exchange.GetRecords(PERIOD_H1)
if (!r || r.length < 24) return
var bars = r.slice(-24)
var hi = Math.max.apply(null, bars.map(function (b) { return b.High }))
var lo = Math.min.apply(null, bars.map(function (b) { return b.Low }))
var pos = hi > lo ? (bars[23].Close - lo) / (hi - lo) : 0.5
var levels = [{value: 0, color: "down"}, {value: 0.2, color: "primary"},
{value: 0.8, color: "up"}]
LogStatus({type: "gauge", title: "24小时区间位置", value: pos,
format: {percent: true}, thresholds: levels})
}
python
def main():
while not exchange.IO("status"):
Sleep(1000)
exchange.SetContractType("rb888")
r = exchange.GetRecords(PERIOD_H1)
if not r or len(r) < 24:
return
bars = r[-24:]
hi = max(b["High"] for b in bars)
lo = min(b["Low"] for b in bars)
pos = (bars[-1]["Close"] - lo) / (hi - lo) if hi > lo else 0.5
levels = [{"value": 0, "color": "down"}, {"value": 0.2, "color": "primary"},
{"value": 0.8, "color": "up"}]
LogStatus({"type": "gauge", "title": "24小时区间位置", "value": pos,
"format": {"percent": True}, "thresholds": levels})
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() < 24 { return; }
let bars = &r[r.len() - 24..];
let hi = bars.iter().map(|b| b.High).fold(f64::MIN, f64::max);
let lo = bars.iter().map(|b| b.Low).fold(f64::MAX, f64::min);
let pos = if hi > lo { (bars[23].Close - lo) / (hi - lo) } else { 0.5 };
LogStatus!(format!(
r#"{{"type": "gauge", "title": "24小时区间位置", "value": {},
"format": {{"percent": true}},
"thresholds": [{{"value": 0, "color": "down"}}, {{"value": 0.2, "color": "primary"}},
{{"value": 0.8, "color": "up"}}]}}"#,
pos
));
}