BenAwf

BenAwf remote MCP for Strategy Lab. Streamable HTTP. Paper GA; live venue beta.

사용해야 할까요

품질 및 안전성

A
설명 품질
90%
스키마 완전성
94%
이름 품질
93%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (4)

  • LOWTool 'get_lineage' description lacks action verbget_lineage에서
  • LOWTool 'list_trades' description lacks action verblist_trades에서
  • LOWTool 'diff_dsl' description lacks action verbdiff_dsl에서
  • LOWTool 'get_market_context_by_date' description lacks action verbget_market_context_by_date에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~10,611토큰 (도구 정의)
~6.7 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 8.29%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "mcp": {
      "url": "https://api.benawf.com/mcp"
    }
  }
}

원격 엔드포인트

https://api.benawf.com/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (16)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢list_iterations(strategy_id)

Open Lab @R# rows as the same dump as Live rules (parent, headline @B#, Long/Position/Exit).

입력 스키마

{
  "type": "object",
  "properties": {
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_lineage(strategy_id)

Champion @R#, per-iteration verdicts, levers tried/untried/failed on champion, converged flag, and user canvas view vs recommended working @R#.

입력 스키마

{
  "type": "object",
  "properties": {
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡select_iteration(ref, strategy_id)

Load an @R# onto the live canvas so mutate tools edit that iteration.

입력 스키마

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "@R# to load onto the canvas (usually champion)."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "ref"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡add_entry_gate(side, condition, strategy_id)

Add one AND entry gate. Args: side + condition JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.

입력 스키마

{
  "type": "object",
  "properties": {
    "side": {
      "type": "string",
      "enum": [
        "long",
        "short"
      ],
      "description": "entry.long or entry.short."
    },
    "condition": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "comparison"
            },
            "left": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "price"
                    },
                    "field": {
                      "type": "string",
                      "enum": [
                        "open",
                        "high",
                        "low",
                        "close"
                      ],
                      "description": "Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back — enables wick/rejection patterns (e.g. high pierced a level then close reclaimed)."
                    },
                    "timeframeMinutes": {
                      "type": "integer",
                      "description": "Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe."
                    },
                    "lookback": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 20,
                      "description": "How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20."
                    }
                  },
                  "required": [
                    "kind",
                    "field",
                    "timeframeMinutes",
                    "lookback"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "constant"
                    },
                    "value": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "kind",
                    "value"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "indicator"
                    },
                    "name": {
                      "type": "string",
                      "description": "Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE."
                    },
                    "field": {
                      "type": "string",
                      "enum": [
                        "value",
                        "signal",
                        "histogram",
                        "upper",
                        "middle",
                        "lower",
                        "poc",
                        "vah",
                        "val",
                        "equilibrium",
                        "premium_pct"
                      ],
                      "description": "Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators."
                    },
                    "timeframeMinutes": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
                      "description": "Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."
                    },
                    "lookback": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"
                    },
                    "params": {
                      "type": "object",
                      "properties": {
                        "wing": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 10
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1–2) = short-term structure, larger (4–10) = major swings only."
                        },
                        "atrMult": {
                          "anyOf": [
                            {
                              "type": "number",
                              "minimum": 0.5,
                              "maximum": 5
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult × ATR to count as displacement. Default 1.5."
                        },
                        "lookbackBars": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 10,
                              "maximum": 100
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (≤100)."
                        }
                      },
                      "required": [
                        "wing",
                        "atrMult",
                        "lookbackBars"
                      ],
                      "additionalProperties": false,
                      "description": "Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults."
                    }
                  },
                  "required": [
                    "kind",
                    "name",
                    "field",
                    "timeframeMinutes",
                    "lookback",
                    "params"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "zone"
                    },
                    "zoneType": {
                      "type": "string",
                      "enum": [
                        "fvg_bull",
                        "fvg_bear",
                        "ob_bull",
                        "ob_bear"
                      ],
                      "description": "fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block)."
                    },
                    "state": {
                      "type": "string",
                      "enum": [
                        "open",
                        "tapped",
                        "mitigated"
                      ],
                      "description": "Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open."
                    },
                    "field": {
                      "type": "string",
                      "enum": [
                        "top",
                        "bottom",
                        "mid"
                      ],
                      "description": "Zone price level: top or bottom edge, or mid (midpoint — the FVG 'consequent encroachment'). Default mid."
                    },
                    "timeframeMinutes": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
                      "description": "Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."
                    },
                    "lookback": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"
                    }
                  },
                  "required": [
                    "kind",
                    "zoneType",
                    "state",
                    "field",
                    "timeframeMinutes",
                    "lookback"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "derived"
                    },
                    "fn": {
                      "type": "string",
                      "enum": [
                        "spread",
                        "ratio",
                        "abs_distance_pct"
                      ],
                      "description": "spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points — same scale as ATR_PCT and SL/TP)."
                    },
                    "a": {
                      "anyOf": [
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0"
                        },
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/1"
                        },
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/2"
                        },
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/3"
                        }
                      ],
                      "description": "First input — a primitive operand (price, indicator, or constant). No nesting."
                    },
                    "b": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/4/properties/a",
                      "description": "Second input — a primitive operand (price, indicator, or constant). No nesting."
                    }
                  },
                  "required": [
                    "kind",
                    "fn",
                    "a",
                    "b"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "op": {
              "type": "string",
              "enum": [
                "gt",
                "lt",
                "gte",
                "lte",
                "crosses_above",
                "crosses_below"
              ],
              "description": "Comparison operator. crosses_above/crosses_below require previous bar context."
            },
            "right": {
              "$ref": "#/properties/condition/anyOf/0/properties/left"
            }
          },
          "required": [
            "kind",
            "left",
            "op",
            "right"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "time_window"
            },
            "startUtc": {
              "type": "string",
              "description": "Window start, inclusive (e.g. \"09:30\" for the New York killzone open)."
            },
            "endUtc": {
              "$ref": "#/properties/condition/anyOf/1/properties/startUtc",
              "description": "Window end, exclusive. Earlier than startUtc = overnight window (e.g. \"02:00\" with start \"22:00\"). Equal to startUtc = always in window."
            },
            "timeframeMinutes": {
              "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
              "description": "Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision."
            }
          },
          "required": [
            "kind",
            "startUtc",
            "endUtc",
            "timeframeMinutes"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "day_of_week"
            },
            "days": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "sun",
                  "mon",
                  "tue",
                  "wed",
                  "thu",
                  "fri",
                  "sat"
                ]
              },
              "minItems": 1,
              "maxItems": 7,
              "description": "Allowed UTC weekdays (e.g. omit \"fri\" to skip Friday)."
            },
            "timeframeMinutes": {
              "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
              "description": "Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision."
            }
          },
          "required": [
            "kind",
            "days",
            "timeframeMinutes"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Translator-shaped entry gate condition."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "side",
    "condition"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡patch_entry_gate(id, condition, strategy_id)

Replace one entry gate by id. Args: id + condition JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Gate id from get_experiment.rules.entry."
    },
    "condition": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "comparison"
            },
            "left": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "price"
                    },
                    "field": {
                      "type": "string",
                      "enum": [
                        "open",
                        "high",
                        "low",
                        "close"
                      ],
                      "description": "Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back — enables wick/rejection patterns (e.g. high pierced a level then close reclaimed)."
                    },
                    "timeframeMinutes": {
                      "type": "integer",
                      "description": "Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe."
                    },
                    "lookback": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 20,
                      "description": "How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20."
                    }
                  },
                  "required": [
                    "kind",
                    "field",
                    "timeframeMinutes",
                    "lookback"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "constant"
                    },
                    "value": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "kind",
                    "value"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "indicator"
                    },
                    "name": {
                      "type": "string",
                      "description": "Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE."
                    },
                    "field": {
                      "type": "string",
                      "enum": [
                        "value",
                        "signal",
                        "histogram",
                        "upper",
                        "middle",
                        "lower",
                        "poc",
                        "vah",
                        "val",
                        "equilibrium",
                        "premium_pct"
                      ],
                      "description": "Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators."
                    },
                    "timeframeMinutes": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
                      "description": "Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."
                    },
                    "lookback": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"
                    },
                    "params": {
                      "type": "object",
                      "properties": {
                        "wing": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 1,
                              "maximum": 10
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1–2) = short-term structure, larger (4–10) = major swings only."
                        },
                        "atrMult": {
                          "anyOf": [
                            {
                              "type": "number",
                              "minimum": 0.5,
                              "maximum": 5
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult × ATR to count as displacement. Default 1.5."
                        },
                        "lookbackBars": {
                          "anyOf": [
                            {
                              "type": "integer",
                              "minimum": 10,
                              "maximum": 100
                            },
                            {
                              "type": "null"
                            }
                          ],
                          "description": "Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (≤100)."
                        }
                      },
                      "required": [
                        "wing",
                        "atrMult",
                        "lookbackBars"
                      ],
                      "additionalProperties": false,
                      "description": "Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults."
                    }
                  },
                  "required": [
                    "kind",
                    "name",
                    "field",
                    "timeframeMinutes",
                    "lookback",
                    "params"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "zone"
                    },
                    "zoneType": {
                      "type": "string",
                      "enum": [
                        "fvg_bull",
                        "fvg_bear",
                        "ob_bull",
                        "ob_bear"
                      ],
                      "description": "fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block)."
                    },
                    "state": {
                      "type": "string",
                      "enum": [
                        "open",
                        "tapped",
                        "mitigated"
                      ],
                      "description": "Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open."
                    },
                    "field": {
                      "type": "string",
                      "enum": [
                        "top",
                        "bottom",
                        "mid"
                      ],
                      "description": "Zone price level: top or bottom edge, or mid (midpoint — the FVG 'consequent encroachment'). Default mid."
                    },
                    "timeframeMinutes": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
                      "description": "Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."
                    },
                    "lookback": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/lookback"
                    }
                  },
                  "required": [
                    "kind",
                    "zoneType",
                    "state",
                    "field",
                    "timeframeMinutes",
                    "lookback"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "derived"
                    },
                    "fn": {
                      "type": "string",
                      "enum": [
                        "spread",
                        "ratio",
                        "abs_distance_pct"
                      ],
                      "description": "spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points — same scale as ATR_PCT and SL/TP)."
                    },
                    "a": {
                      "anyOf": [
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0"
                        },
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/1"
                        },
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/2"
                        },
                        {
                          "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/3"
                        }
                      ],
                      "description": "First input — a primitive operand (price, indicator, or constant). No nesting."
                    },
                    "b": {
                      "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/4/properties/a",
                      "description": "Second input — a primitive operand (price, indicator, or constant). No nesting."
                    }
                  },
                  "required": [
                    "kind",
                    "fn",
                    "a",
                    "b"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "op": {
              "type": "string",
              "enum": [
                "gt",
                "lt",
                "gte",
                "lte",
                "crosses_above",
                "crosses_below"
              ],
              "description": "Comparison operator. crosses_above/crosses_below require previous bar context."
            },
            "right": {
              "$ref": "#/properties/condition/anyOf/0/properties/left"
            }
          },
          "required": [
            "kind",
            "left",
            "op",
            "right"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "time_window"
            },
            "startUtc": {
              "type": "string",
              "description": "Window start, inclusive (e.g. \"09:30\" for the New York killzone open)."
            },
            "endUtc": {
              "$ref": "#/properties/condition/anyOf/1/properties/startUtc",
              "description": "Window end, exclusive. Earlier than startUtc = overnight window (e.g. \"02:00\" with start \"22:00\"). Equal to startUtc = always in window."
            },
            "timeframeMinutes": {
              "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
              "description": "Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision."
            }
          },
          "required": [
            "kind",
            "startUtc",
            "endUtc",
            "timeframeMinutes"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "day_of_week"
            },
            "days": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "sun",
                  "mon",
                  "tue",
                  "wed",
                  "thu",
                  "fri",
                  "sat"
                ]
              },
              "minItems": 1,
              "maxItems": 7,
              "description": "Allowed UTC weekdays (e.g. omit \"fri\" to skip Friday)."
            },
            "timeframeMinutes": {
              "$ref": "#/properties/condition/anyOf/0/properties/left/anyOf/0/properties/timeframeMinutes",
              "description": "Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision."
            }
          },
          "required": [
            "kind",
            "days",
            "timeframeMinutes"
          ],
          "additionalProperties": false
        }
      ],
      "description": "Translator-shaped replacement condition."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "id",
    "condition"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_entry_gate(id, strategy_id)

Remove one entry gate by id (from get_experiment). Args: id only. Refuses when it would leave both long and short with zero gates.

입력 스키마

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Gate id from get_experiment.rules.entry."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡patch_position(position, strategy_id)

Full replace of rules.position. Args: position JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.

입력 스키마

{
  "type": "object",
  "properties": {
    "position": {
      "type": "object",
      "properties": {
        "usdAmount": {
          "type": "number",
          "minimum": 0,
          "description": "Fixed USD notional when the rule fires. Use 0 when sizing via balancePercent."
        },
        "balancePercent": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "description": "Percent of available balance to deploy (0–100 scale) when the rule fires. Use 0 when sizing via usdAmount."
        },
        "orderType": {
          "type": "string",
          "enum": [
            "market",
            "limit"
          ]
        },
        "limitPrice": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Limit price when orderType is limit; null for market orders."
        },
        "expiresInMinutes": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Limit order TTL in minutes; null when not used."
        },
        "usedTechnicalAnalysisIndicators": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Indicators that justify this entry (one of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE) — use [] when none. Never list zone types (fvg_bull, fvg_bear, ob_bull, ob_bear); those belong on zone operands."
        }
      },
      "required": [
        "usdAmount",
        "balancePercent",
        "orderType",
        "limitPrice",
        "expiresInMinutes",
        "usedTechnicalAnalysisIndicators"
      ],
      "additionalProperties": false,
      "description": "Full replace of rules.position (not a merge). Every key required. usdAmount XOR balancePercent (unused = 0). orderType = market|limit. limitPrice + expiresInMinutes = number | null (null unless limit). usedTechnicalAnalysisIndicators = string[] ([] if none; never zone types)."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "position"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡patch_exit(exit, strategy_id)

Full replace of rules.exit. Args: exit JSON. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.

입력 스키마

{
  "type": "object",
  "properties": {
    "exit": {
      "type": "object",
      "properties": {
        "stopLossPercentage": {
          "anyOf": [
            {
              "type": "number",
              "minimum": 0,
              "maximum": 100,
              "description": "Fixed stop/TP distance on the 0–100 scale (original shape)."
            },
            {
              "type": "object",
              "properties": {
                "source": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "price"
                        },
                        "field": {
                          "type": "string",
                          "enum": [
                            "open",
                            "high",
                            "low",
                            "close"
                          ],
                          "description": "Bar field: open, high, low, or close (default close). Ignored at `lookback: 0` (live ticker). At `lookback >= 1` returns this OHLC field of bar N back — enables wick/rejection patterns (e.g. high pierced a level then close reclaimed)."
                        },
                        "timeframeMinutes": {
                          "type": "integer",
                          "description": "Chart timeframe (5, 15, 60, 240, or 1440 minutes) the lookback resolves against. `lookback: 0` returns the live ticker price (timeframe-independent); `lookback >= 1` returns the chosen `field` of bar N back on this timeframe."
                        },
                        "lookback": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 20,
                          "description": "How many bars back to look. 0 = latest bar, 1 = one bar ago, etc. Max 20."
                        }
                      },
                      "required": [
                        "kind",
                        "field",
                        "timeframeMinutes",
                        "lookback"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "constant"
                        },
                        "value": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "kind",
                        "value"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "indicator"
                        },
                        "name": {
                          "type": "string",
                          "description": "Indicator name. One of: SMA20, SMA50, EMA, RSI, ADX, MACD, BBANDS, ATR, ATR_PCT, VWAP, OBV, OBV_CHANGE, LAST_DAY_HIGH, LAST_DAY_LOW, LAST_WEEK_HIGH, LAST_WEEK_LOW, SWING_HIGH, SWING_LOW, BOS, CHOCH, DISPLACEMENT, VOLUME_PROFILE, DEALING_RANGE."
                        },
                        "field": {
                          "type": "string",
                          "enum": [
                            "value",
                            "signal",
                            "histogram",
                            "upper",
                            "middle",
                            "lower",
                            "poc",
                            "vah",
                            "val",
                            "equilibrium",
                            "premium_pct"
                          ],
                          "description": "Sub-field for composite indicators: MACD uses signal/histogram, BBANDS uses upper/middle/lower, VOLUME_PROFILE uses poc/vah/val, DEALING_RANGE uses equilibrium/premium_pct. Use value for scalar indicators."
                        },
                        "timeframeMinutes": {
                          "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes",
                          "description": "Chart timeframe: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."
                        },
                        "lookback": {
                          "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/lookback"
                        },
                        "params": {
                          "type": "object",
                          "properties": {
                            "wing": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 1,
                                  "maximum": 10
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Pivot wing for SWING_HIGH/SWING_LOW/BOS/CHOCH/DEALING_RANGE: bars required on each side to confirm a pivot. Default 3. Smaller (1–2) = short-term structure, larger (4–10) = major swings only."
                            },
                            "atrMult": {
                              "anyOf": [
                                {
                                  "type": "number",
                                  "minimum": 0.5,
                                  "maximum": 5
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "ATR(14) multiplier for DISPLACEMENT: bar range must exceed atrMult × ATR to count as displacement. Default 1.5."
                            },
                            "lookbackBars": {
                              "anyOf": [
                                {
                                  "type": "integer",
                                  "minimum": 10,
                                  "maximum": 100
                                },
                                {
                                  "type": "null"
                                }
                              ],
                              "description": "Rolling window length for VOLUME_PROFILE (bars ending at the current closed bar). Default 48. Must fit the entry-rules indicator window (≤100)."
                            }
                          },
                          "required": [
                            "wing",
                            "atrMult",
                            "lookbackBars"
                          ],
                          "additionalProperties": false,
                          "description": "Optional indicator parameters (e.g. swing pivot wing, VOLUME_PROFILE lookbackBars). Empty object = defaults."
                        }
                      },
                      "required": [
                        "kind",
                        "name",
                        "field",
                        "timeframeMinutes",
                        "lookback",
                        "params"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "zone"
                        },
                        "zoneType": {
                          "type": "string",
                          "enum": [
                            "fvg_bull",
                            "fvg_bear",
                            "ob_bull",
                            "ob_bear"
                          ],
                          "description": "fvg_bull/fvg_bear = 3-candle fair value gap (imbalance). ob_bull/ob_bear = last opposite-close candle before a displacement bar (order block)."
                        },
                        "state": {
                          "type": "string",
                          "enum": [
                            "open",
                            "tapped",
                            "mitigated"
                          ],
                          "description": "Which zones to consider: open = untouched, tapped = wick entered but no close through, mitigated = closed beyond the far edge. Default open."
                        },
                        "field": {
                          "type": "string",
                          "enum": [
                            "top",
                            "bottom",
                            "mid"
                          ],
                          "description": "Zone price level: top or bottom edge, or mid (midpoint — the FVG 'consequent encroachment'). Default mid."
                        },
                        "timeframeMinutes": {
                          "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes",
                          "description": "Chart timeframe the zone detection runs on: 5, 15, 60, 240 (4h), or 1440 (daily) minutes."
                        },
                        "lookback": {
                          "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/lookback"
                        }
                      },
                      "required": [
                        "kind",
                        "zoneType",
                        "state",
                        "field",
                        "timeframeMinutes",
                        "lookback"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "kind": {
                          "type": "string",
                          "const": "derived"
                        },
                        "fn": {
                          "type": "string",
                          "enum": [
                            "spread",
                            "ratio",
                            "abs_distance_pct"
                          ],
                          "description": "spread = a - b (same units as inputs). ratio = a / b (fails when b is 0). abs_distance_pct = |a - b| / |b| * 100 (percent points — same scale as ATR_PCT and SL/TP)."
                        },
                        "a": {
                          "anyOf": [
                            {
                              "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0"
                            },
                            {
                              "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/1"
                            },
                            {
                              "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/2"
                            },
                            {
                              "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/3"
                            }
                          ],
                          "description": "First input — a primitive operand (price, indicator, or constant). No nesting."
                        },
                        "b": {
                          "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/4/properties/a",
                          "description": "Second input — a primitive operand (price, indicator, or constant). No nesting."
                        }
                      },
                      "required": [
                        "kind",
                        "fn",
                        "a",
                        "b"
                      ],
                      "additionalProperties": false
                    }
                  ],
                  "description": "Operand resolved at rule-fire time (latest fully closed bar). Any indicator, price field, or derived expression."
                },
                "op": {
                  "type": "string",
                  "enum": [
                    "multiply",
                    "add"
                  ],
                  "description": "multiply = resolved(source) × value; add = resolved(source) + value."
                },
                "value": {
                  "type": "number",
                  "description": "Multiplier or addend applied after resolving source."
                },
                "minPercentage": {
                  "anyOf": [
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Floor on the resolved 0–100 distance after op. Null disables."
                },
                "maxPercentage": {
                  "anyOf": [
                    {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Ceiling on the resolved 0–100 distance after op. Null disables."
                },
                "fallbackPercentage": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "Fixed 0–100 distance used when source resolves null (indicator warmup)."
                }
              },
              "required": [
                "source",
                "op",
                "value",
                "minPercentage",
                "maxPercentage",
                "fallbackPercentage"
              ],
              "additionalProperties": false
            }
          ],
          "description": "Stop-loss distance from entry on the 0–100 scale, or a dynamic expression resolved at fire time. 0 disables SL."
        },
        "takeProfitPercentage": {
          "anyOf": [
            {
              "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/0"
            },
            {
              "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1"
            }
          ],
          "description": "Take-profit distance from entry on the 0–100 scale, or a dynamic expression resolved at fire time."
        },
        "partialExitsAt": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "pricePercentage": {
                    "type": "number",
                    "exclusiveMinimum": -1,
                    "exclusiveMaximum": 1,
                    "description": "Signed decimal move from entry (-1 to 1). Percent as fraction: -0.005 = -0.5%, 0.03 = +3%. Not the 0–100 scale used by stopLossPercentage."
                  },
                  "exitAmountFraction": {
                    "type": "number",
                    "exclusiveMinimum": 0,
                    "exclusiveMaximum": 1,
                    "description": "Fraction of the remaining position to liquidate when this level is hit"
                  }
                },
                "required": [
                  "pricePercentage",
                  "exitAmountFraction"
                ],
                "additionalProperties": false
              }
            },
            {
              "type": "null"
            }
          ],
          "description": "Ladder of partial exits. Null means no partial exits."
        },
        "trail": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "maxItems": 2
            },
            {
              "type": "null"
            }
          ],
          "description": "Trail config: [fire, extend]. Null disables. extend > 0 chains (re-arm after each bump); extend = 0 locks SL at the fire price once then clears. fire = fraction of current TP distance (0–1 exclusive); extend = TP multiplier add-on (0 = fire-price lock one-shot)."
        },
        "breakevenAfterMinutes": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Soft TTL: minutes after open at which the engine intervenes. If the trade is in profit, it closes at market to lock in the gain. If underwater, SL moves to break-even. Null disables."
        },
        "maxHoldMinutes": {
          "anyOf": [
            {
              "type": "number",
              "exclusiveMinimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Hard TTL: force close at market after this many minutes regardless of PnL. Null disables."
        },
        "signalExit": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "long": {
                  "type": "array",
                  "items": {
                    "anyOf": [
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "comparison"
                          },
                          "left": {
                            "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source"
                          },
                          "op": {
                            "type": "string",
                            "enum": [
                              "gt",
                              "lt",
                              "gte",
                              "lte",
                              "crosses_above",
                              "crosses_below"
                            ],
                            "description": "Comparison operator. crosses_above/crosses_below require previous bar context."
                          },
                          "right": {
                            "$ref": "#/properties/exit/properties/signalExit/anyOf/0/properties/long/items/anyOf/0/properties/left"
                          }
                        },
                        "required": [
                          "kind",
                          "left",
                          "op",
                          "right"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "time_window"
                          },
                          "startUtc": {
                            "type": "string",
                            "description": "Window start, inclusive (e.g. \"09:30\" for the New York killzone open)."
                          },
                          "endUtc": {
                            "$ref": "#/properties/exit/properties/signalExit/anyOf/0/properties/long/items/anyOf/1/properties/startUtc",
                            "description": "Window end, exclusive. Earlier than startUtc = overnight window (e.g. \"02:00\" with start \"22:00\"). Equal to startUtc = always in window."
                          },
                          "timeframeMinutes": {
                            "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes",
                            "description": "Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for killzone precision."
                          }
                        },
                        "required": [
                          "kind",
                          "startUtc",
                          "endUtc",
                          "timeframeMinutes"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "const": "day_of_week"
                          },
                          "days": {
                            "type": "array",
                            "items": {
                              "type": "string",
                              "enum": [
                                "sun",
                                "mon",
                                "tue",
                                "wed",
                                "thu",
                                "fri",
                                "sat"
                              ]
                            },
                            "minItems": 1,
                            "maxItems": 7,
                            "description": "Allowed UTC weekdays (e.g. omit \"fri\" to skip Friday)."
                          },
                          "timeframeMinutes": {
                            "$ref": "#/properties/exit/properties/stopLossPercentage/anyOf/1/properties/source/anyOf/0/properties/timeframeMinutes",
                            "description": "Chart timeframe whose latest closed bar provides the clock. Use 5 or 15 for precision."
                          }
                        },
                        "required": [
                          "kind",
                          "days",
                          "timeframeMinutes"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "short": {
                  "type": "array",
                  "items": {
                    "$ref": "#/properties/exit/properties/signalExit/anyOf/0/properties/long/items"
                  }
                }
              },
              "required": [
                "long",
                "short"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ],
          "description": "Optional indicator-based exit: closes the position at market when these conditions fire (evaluated on the same cadence as entries). Same condition shape as entry blocks. Use for mean-reversion targets (e.g. close crosses VWAP) or thesis-invalidation exits instead of relying only on fixed TP. Null disables."
        }
      },
      "required": [
        "stopLossPercentage",
        "takeProfitPercentage",
        "partialExitsAt",
        "trail",
        "breakevenAfterMinutes",
        "maxHoldMinutes",
        "signalExit"
      ],
      "additionalProperties": false,
      "description": "Full replace of rules.exit (not a merge). Every key required — null disables: stopLossPercentage + takeProfitPercentage = 0–100 number OR {source,op,value,fallbackPercentage,minPercentage,maxPercentage}; partialExitsAt = [{pricePercentage, exitAmountFraction}] | null (pricePercentage is a decimal fraction: 0.03 = +3%, NOT the 0–100 SL/TP scale); trail = [fire, extend] | null (fire in (0,1), extend >= 0; NOT {fire,extend}); breakevenAfterMinutes + maxHoldMinutes = number | null; signalExit = {long, short} condition arrays | null. Cooldown lives on the rules root (op=patch_cooldown), not here."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "exit"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡patch_cooldown(cooldownMinutes, strategy_id)

Set root cooldownMinutes. Args: cooldownMinutes number|null. You are the DSL translator. Invent the section JSON (condition/position/exit/cooldown). Browser applies only — BenAwf does not call an LLM. No prose text.

입력 스키마

{
  "type": "object",
  "properties": {
    "cooldownMinutes": {
      "anyOf": [
        {
          "type": "number",
          "exclusiveMinimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Root cooldownMinutes, or null to clear."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "cooldownMinutes"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_strategies(limit, offset, strategy_id)

Ids, @R# refs, and backtest headlines for strategies not currently open.

입력 스키마

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_backtests(iteration_ref, strategy_id)

Open Lab @B# rows with window, assets, trade count, PnL, win rate, drawdown, and tape_stripped.

입력 스키마

{
  "type": "object",
  "properties": {
    "iteration_ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Optional @R#. Omit to retrieve backtests across all iterations."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "additionalProperties": false,
  "description": "@B# rows with window, PnL, trades, DD, tape_stripped.",
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_backtest(ref, force, config, strategy_id)

Cache-or-run one sim for an @R# + window, then return Score, trade count, PnL, drawdown, and bounded stats for one run. Numbers only — no BenAwf assessment LLM; you analyze. Same @R# + window → cached @B# (identical stats; follow the comment). After any mutate pass that result's dsl_ref. If you changed rules behind the same R#/draft, or suspect a stale cached @B#, pass force:true to force a fresh sim — never extrapolate from a cached B# of a different rules state.

입력 스키마

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "@R# to sim. After mutate use that result's dsl_ref, not the Live-rules header."
    },
    "force": {
      "type": "boolean",
      "description": "Skip the cache and force a fresh sim for this @R# + window. Use after any rule change on the same R#/draft, or whenever a cached B# is suspect."
    },
    "config": {
      "type": "object",
      "properties": {
        "asset": {
          "type": "string",
          "enum": [
            "BTC",
            "ETH",
            "SOL",
            "XRP",
            "BNB",
            "LTC",
            "LINK",
            "DOGE",
            "PEPE",
            "SHIB",
            "SPY",
            "QQQ",
            "IWM",
            "DIA",
            "VOO",
            "XLF",
            "XLE",
            "XLK",
            "XLV",
            "XLP",
            "XLY",
            "XLU",
            "XLI",
            "XLB",
            "XLRE",
            "XLC",
            "SMH",
            "ARKK",
            "GLD",
            "SLV",
            "TLT",
            "HYG",
            "EEM",
            "AAPL",
            "MSFT",
            "GOOGL",
            "AMZN",
            "NVDA",
            "META",
            "TSLA",
            "AVGO",
            "ORCL",
            "ADBE",
            "CRM",
            "AMD",
            "QCOM",
            "TXN",
            "INTC",
            "INTU",
            "IBM",
            "NOW",
            "AMAT",
            "MU",
            "ARM",
            "MRVL",
            "PANW",
            "CRWD",
            "DDOG",
            "NET",
            "SNOW",
            "PLTR",
            "SMCI",
            "DELL",
            "APP",
            "SHOP",
            "UBER",
            "ABNB",
            "NFLX",
            "COIN",
            "HOOD",
            "PYPL",
            "JPM",
            "BAC",
            "WFC",
            "C",
            "GS",
            "MS",
            "V",
            "MA",
            "AXP",
            "SCHW",
            "BLK",
            "SPGI",
            "CME",
            "COF",
            "UNH",
            "JNJ",
            "LLY",
            "PFE",
            "MRK",
            "ABBV",
            "TMO",
            "ABT",
            "AMGN",
            "ISRG",
            "MDT",
            "BMY",
            "GILD",
            "CVS",
            "WMT",
            "COST",
            "HD",
            "MCD",
            "NKE",
            "SBUX",
            "TGT",
            "LOW",
            "PG",
            "KO",
            "PEP",
            "PM",
            "MO",
            "CL",
            "EL",
            "DIS",
            "BKNG",
            "MAR",
            "CAT",
            "DE",
            "BA",
            "GE",
            "HON",
            "UPS",
            "RTX",
            "LMT",
            "XOM",
            "CVX",
            "COP",
            "SLB",
            "NEE",
            "DUK",
            "SO",
            "F",
            "T",
            "VZ",
            "CMCSA",
            "TMUS",
            "XAUUSD",
            "XAGUSD"
          ],
          "description": "Single symbol to sim (e.g. BTC)."
        },
        "start_date": {
          "type": "string",
          "format": "date-time"
        },
        "end_date": {
          "type": "string",
          "format": "date-time"
        },
        "initial_balance": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "max_drawdown": {
          "type": "number",
          "minimum": 0.01,
          "maximum": 100
        }
      },
      "required": [
        "asset",
        "start_date",
        "end_date",
        "initial_balance",
        "max_drawdown"
      ],
      "additionalProperties": false,
      "description": "Window + capital. Omit to reuse the previous run. Do not send empty strings or zeros."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "ref"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_trades(ref, page, sort, strategy_id)

One page of fills (20 per page): trade_id, side, prices, PnL.

입력 스키마

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "description": "Backtest @B# ref (e.g. B3 or @B3)."
    },
    "page": {
      "type": "integer",
      "minimum": 1
    },
    "sort": {
      "type": "string",
      "enum": [
        "open_date",
        "pnl"
      ]
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "ref",
    "page",
    "sort"
  ],
  "additionalProperties": false,
  "description": "One page of tape fills (20/page).",
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_experiment(ref, strategy_id)

Prose summary plus rules JSON (entry gates with ids, position, exit, cooldownMinutes) and that iteration's @B# refs. Read before inventing translator-shaped mutate args.

입력 스키마

{
  "type": "object",
  "properties": {
    "ref": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "DSL iteration ref @R# (e.g. R2 or @R2)."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "ref"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪diff_dsl(ref_a, ref_b, strategy_id)

Structured rules diff between two @R# iterations (entry gates per side, position, exit, cooldown). Use before adopting an older iteration's levers onto a newer one.

입력 스키마

{
  "type": "object",
  "properties": {
    "ref_a": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "First @R# to compare (older / baseline)."
    },
    "ref_b": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Second @R# to compare (newer)."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "ref_a",
    "ref_b"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_market_context_by_date(symbol, date, time_frame, strategy_id)

OHLCV and cited indicators around that date (engine lookback each side).

입력 스키마

{
  "type": "object",
  "properties": {
    "symbol": {
      "type": "string",
      "enum": [
        "BTC",
        "ETH",
        "SOL",
        "XRP",
        "BNB",
        "LTC",
        "LINK",
        "DOGE",
        "PEPE",
        "SHIB",
        "SPY",
        "QQQ",
        "IWM",
        "DIA",
        "VOO",
        "XLF",
        "XLE",
        "XLK",
        "XLV",
        "XLP",
        "XLY",
        "XLU",
        "XLI",
        "XLB",
        "XLRE",
        "XLC",
        "SMH",
        "ARKK",
        "GLD",
        "SLV",
        "TLT",
        "HYG",
        "EEM",
        "AAPL",
        "MSFT",
        "GOOGL",
        "AMZN",
        "NVDA",
        "META",
        "TSLA",
        "AVGO",
        "ORCL",
        "ADBE",
        "CRM",
        "AMD",
        "QCOM",
        "TXN",
        "INTC",
        "INTU",
        "IBM",
        "NOW",
        "AMAT",
        "MU",
        "ARM",
        "MRVL",
        "PANW",
        "CRWD",
        "DDOG",
        "NET",
        "SNOW",
        "PLTR",
        "SMCI",
        "DELL",
        "APP",
        "SHOP",
        "UBER",
        "ABNB",
        "NFLX",
        "COIN",
        "HOOD",
        "PYPL",
        "JPM",
        "BAC",
        "WFC",
        "C",
        "GS",
        "MS",
        "V",
        "MA",
        "AXP",
        "SCHW",
        "BLK",
        "SPGI",
        "CME",
        "COF",
        "UNH",
        "JNJ",
        "LLY",
        "PFE",
        "MRK",
        "ABBV",
        "TMO",
        "ABT",
        "AMGN",
        "ISRG",
        "MDT",
        "BMY",
        "GILD",
        "CVS",
        "WMT",
        "COST",
        "HD",
        "MCD",
        "NKE",
        "SBUX",
        "TGT",
        "LOW",
        "PG",
        "KO",
        "PEP",
        "PM",
        "MO",
        "CL",
        "EL",
        "DIS",
        "BKNG",
        "MAR",
        "CAT",
        "DE",
        "BA",
        "GE",
        "HON",
        "UPS",
        "RTX",
        "LMT",
        "XOM",
        "CVX",
        "COP",
        "SLB",
        "NEE",
        "DUK",
        "SO",
        "F",
        "T",
        "VZ",
        "CMCSA",
        "TMUS",
        "XAUUSD",
        "XAGUSD"
      ]
    },
    "date": {
      "type": "string",
      "format": "date-time"
    },
    "time_frame": {
      "type": "number",
      "enum": [
        1,
        5,
        15,
        30,
        60,
        240,
        1440
      ],
      "description": "OHLCV timeframe in minutes: 1, 5, 15, 30, 60, 240, 1440."
    },
    "strategy_id": {
      "type": "string",
      "minLength": 1,
      "description": "Strategy id. Prefer always: routes to that Lab tab, and NO_ACTIVE_LAB errors include a direct Lab URL to open."
    }
  },
  "required": [
    "symbol",
    "date",
    "time_frame"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

권장 프롬프트

list_items
List all [items] available in BenAwf
예상 도구: list_iterations
explore_workflow
List available [items], then get details for each one using BenAwf
예상 도구: list_iterationsget_lineage
fetch_info
Fetch [information type] using BenAwf
예상 도구: get_lineage
retrieve_data
Get details about [item] from BenAwf
예상 도구: get_lineage
browse_collection
Show me the [collection] from BenAwf
예상 도구: list_iterations

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 16개
검증됨버전이 기록되지 않음도구 16개