BenAwf
BenAwf remote MCP for Strategy Lab. Streamable HTTP. Paper GA; live venue beta.
사용해야 할까요
품질 및 안전성
발견 사항 (4)
- LOWget_lineage에서
- LOWlist_trades에서
- LOWdiff_dsl에서
- LOWget_market_context_by_date에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`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_iterationslist_iterationsget_lineageget_lineageget_lineagelist_iterations커뮤니티
증거