fix: two Bollinger Band DSL errors from 50-iteration run
- bollinger_upper/lower func Exprs must NOT include a "field" parameter; they compute from close internally. Setting "field":"bollinger_upper" causes API rejection: expected one of open/high/low/close/volume. - bollinger Condition "band" only accepts "above_upper" or "below_lower"; "above_lower" and "below_upper" are invalid variants. Both errors appeared repeatedly across the 50-iteration run, causing failed backtest submissions on every Bollinger crossover strategy. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -162,6 +162,11 @@ Common mistakes to NEVER make:
|
|||||||
- `bollinger_upper` and `bollinger_lower` are FUNC NAMES, not Expr kinds. To compare close to the upper band:
|
- `bollinger_upper` and `bollinger_lower` are FUNC NAMES, not Expr kinds. To compare close to the upper band:
|
||||||
`{{"kind":"compare","left":{{"kind":"field","field":"close"}},"op":">","right":{{"kind":"func","name":"bollinger_upper","period":20}}}}`
|
`{{"kind":"compare","left":{{"kind":"field","field":"close"}},"op":">","right":{{"kind":"func","name":"bollinger_upper","period":20}}}}`
|
||||||
NEVER write `{{"kind":"bollinger_upper",...}}` — `bollinger_upper` is not an Expr kind.
|
NEVER write `{{"kind":"bollinger_upper",...}}` — `bollinger_upper` is not an Expr kind.
|
||||||
|
NEVER set `"field":"bollinger_upper"` on a func Expr — `bollinger_upper`/`bollinger_lower` have no `field`
|
||||||
|
parameter; they compute from close internally. Just `{{"kind":"func","name":"bollinger_upper","period":20}}`.
|
||||||
|
- The `{{"kind":"bollinger",...}}` Condition (shorthand) only accepts `"band": "above_upper"` or
|
||||||
|
`"band": "below_lower"`. There is NO `above_lower` or `below_upper` — those are invalid and will be
|
||||||
|
rejected. Use `above_upper` (price above the upper band) or `below_lower` (price below the lower band).
|
||||||
- `adx` is a FUNC NAME, not a Condition kind. To filter for strong trends (ADX > 25):
|
- `adx` is a FUNC NAME, not a Condition kind. To filter for strong trends (ADX > 25):
|
||||||
`{{"kind":"compare","left":{{"kind":"func","name":"adx","period":14}},"op":">","right":{{"kind":"literal","value":"25"}}}}`
|
`{{"kind":"compare","left":{{"kind":"func","name":"adx","period":14}},"op":">","right":{{"kind":"literal","value":"25"}}}}`
|
||||||
NEVER write `{{"kind":"adx",...}}` — `adx` is not a Condition kind, it is a FuncName used inside `{{"kind":"func",...}}`.
|
NEVER write `{{"kind":"adx",...}}` — `adx` is not a Condition kind, it is a FuncName used inside `{{"kind":"func",...}}`.
|
||||||
|
|||||||
Reference in New Issue
Block a user