[
  {"op": "source", "role": "price", "kind": "F64"},
  {"op": "add", "type": "RollingMax", "name": "channel_hi"},
  {"op": "add", "type": "RollingMin", "name": "channel_lo"},
  {"op": "add", "type": "Add", "name": "sum"},
  {"op": "add", "type": "Scale", "name": "mid", "bind": {"factor": {"F64": 0.5}}},
  {"op": "add", "type": "Sub", "name": "dev"},
  {"op": "add", "type": "Bias", "name": "bias", "bind": {"scale": {"F64": 1.0}}},
  {"op": "feed", "role": "price", "into": ["channel_hi.series", "channel_lo.series", "dev.lhs"]},
  {"op": "connect", "from": "channel_hi.value", "to": "sum.lhs"},
  {"op": "connect", "from": "channel_lo.value", "to": "sum.rhs"},
  {"op": "connect", "from": "sum.value", "to": "mid.signal"},
  {"op": "connect", "from": "mid.value", "to": "dev.rhs"},
  {"op": "connect", "from": "dev.value", "to": "bias.signal"},
  {"op": "expose", "from": "bias.bias", "as": "bias"},
  {"op": "gang", "as": "channel_length", "into": ["channel_hi.length", "channel_lo.length"]}
]
