{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "MyInvestPilot Portfolio Configuration",
  "description": "Defines the structure for portfolio configuration files, supporting both single portfolio and portfolio arrays.",
  "oneOf": [
    {
      "title": "Single Portfolio Configuration",
      "description": "Configuration for a single portfolio",
      "$ref": "#/definitions/Portfolio"
    },
    {
      "title": "Multiple Portfolios Configuration",
      "description": "Configuration containing multiple portfolios",
      "type": "object",
      "properties": {
        "portfolios": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Portfolio"
          },
          "minItems": 1,
          "description": "Array of portfolio configurations"
        }
      },
      "required": ["portfolios"],
      "additionalProperties": false
    }
  ],
  "definitions": {
    "Portfolio": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "组合名称"
        },
        "code": {
          "type": "string",
          "description": "组合唯一代码"
        },
        "description": {
          "type": "string",
          "description": "组合描述"
        },
        "symbols": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "symbol": {
                "type": "string"
              },
              "name": {
                "type": "string"
              }
            },
            "required": ["symbol"],
            "additionalProperties": false
          },
          "description": "投资标的列表"
        },
        "start_date": {
          "type": "string",
          "format": "date",
          "description": "回测或开始日期"
        },
        "end_date": {
          "type": "string",
          "format": "date",
          "description": "回测结束日期（可选，用于历史回测）"
        },
        "currency": {
          "type": "string",
          "description": "计价货币"
        },
        "market": {
          "type": "string",
          "description": "目标市场"
        },
        "commission": {
          "type": "number",
          "minimum": 0,
          "description": "交易佣金"
        },
        "update_time": {
          "type": "string",
          "pattern": "^([01]?[0-9]|2[0-3]):[0-5][0-9]$",
          "description": "每日更新时间 (HH:MM)"
        }
      },
      "oneOf": [
        {
          "title": "Code-based Strategy Portfolio",
          "description": "使用基于Python类名定义的交易策略和资金策略。",
          "properties": {
            "strategy": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Python交易策略类的名称。"
                },
                "params": {
                  "type": "object",
                  "additionalProperties": true,
                  "description": "策略参数。"
                }
              },
              "required": ["name"],
              "additionalProperties": false
            },
            "capital_strategy": {
              "oneOf": [
                {
                  "$ref": "https://media.i365.tech/myinvestpilot/primitives_schema.json#/definitions/AnyCapitalStrategy"
                },
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "资金策略类名称"
                    },
                    "params": {
                      "type": "object",
                      "additionalProperties": true,
                      "description": "资金策略参数"
                    }
                  },
                  "required": ["name"],
                  "additionalProperties": false
                }
              ],
              "description": "选择一个已定义的资金策略。"
            }
          },
          "required": ["strategy", "capital_strategy"]
        },
        {
          "title": "Primitive-based Strategy Portfolio",
          "description": "使用基于原语定义的交易策略和资金策略。",
          "properties": {
            "strategy_definition": {
              "type": "object",
              "description": "基于原语的完整策略定义，包含市场、交易和资金策略。",
              "properties": {
                "market_indicators": {
                  "$ref": "https://media.i365.tech/myinvestpilot/primitives_schema.json#/definitions/MarketIndicatorsBody",
                  "description": "市场指标定义（可选）。"
                },
                "fundamental_inputs": {
                  "$ref": "https://media.i365.tech/myinvestpilot/primitives_schema.json#/definitions/FundamentalInputsBody",
                  "description": "基本面输入定义（可选）。"
                },
                "reset_signal_state_at_start": {
                  "type": "boolean",
                  "default": false,
                  "description": "已废弃，仅为向后兼容保留解析：在当前无条件的 canonical 决策窗口语义下（ISS#155），决策状态机总是在请求窗口起点重新 bootstrap，此字段不再改变任何行为，是一个 no-op。"
                },
                "trade_strategy": {
                  "$ref": "https://media.i365.tech/myinvestpilot/primitives_schema.json#/definitions/TradeStrategyBody",
                  "description": "交易策略定义（指标、信号、输出）。使用 portfolio_construction 时仍必填，用于承载 enabled_by 引用的 permission 信号；无 permission 时可以是空数组。"
                },
                "portfolio_construction": {
                  "$ref": "https://media.i365.tech/myinvestpilot/primitives_schema.json#/definitions/PortfolioConstructionBody",
                  "description": "（可选）Generic Portfolio Construction 定义，例如 TargetAllocation。"
                },
                "capital_strategy": {
                  "oneOf": [
                    {
                      "$ref": "https://media.i365.tech/myinvestpilot/primitives_schema.json#/definitions/AnyCapitalStrategy"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string",
                          "description": "资金策略类名称"
                        },
                        "params": {
                          "type": "object",
                          "additionalProperties": true,
                          "description": "资金策略参数"
                        }
                      },
                      "required": ["name"],
                      "additionalProperties": false
                    }
                  ],
                  "description": "资金策略定义。"
                }
              },
              "required": ["trade_strategy", "capital_strategy"],
              "additionalProperties": false,
              "if": {"required": ["portfolio_construction"]},
              "then": {
                "properties": {
                  "trade_strategy": {
                    "properties": {
                      "outputs": {"maxProperties": 0}
                    }
                  }
                }
              },
              "else": {
                "properties": {
                  "trade_strategy": {
                    "properties": {
                      "outputs": {
                        "required": ["buy_signal", "sell_signal"]
                      }
                    }
                  }
                }
              }
            }
          },
          "required": ["strategy_definition"]
        }
      ],
      "required": ["name", "code", "symbols", "start_date", "currency", "market"],
      "additionalProperties": false
    }
  }
}
