/** 回测报告说明：略口语、含数值方向与优劣判断（无统一标准的不写「越大越好」） */

export const REPORT_STOCK_GRID_TIPS = {
  enum: '逐只股票在枚举阶段的明细：机会数、完整度、平均间隔等。可搜索与排序，用于对照总体指标。',
  price: '逐只股票在价格回测中的明细：胜率、收益率（ROI）、持仓天数等。宜与上方汇总一并阅读。',
  capital: '逐只股票在资金模拟中的明细：交易次数、累计盈亏、胜率等。便于定位拖累或贡献较大的个股。',
};

export const ENUM_SECTION_TIPS = {
  overview: '汇总机会数量与完成比例，用于判断样本是否充足、结果是否可信。',
  stockStats: '观察机会在股票间的分布是否均衡；下方柱状图为「每股机会数」的分布形态。',
  timing: '观察机会在时间上的疏密与持续长度，评估是否易出现集中触发。',
};

export const ENUM_METRIC_TIPS = {
  totalOpportunities:
    '样本期内触发的机会总次数（括号内为参与统计的股票只数）。'
    + '数值越大表示信号越多；越小表示触发较少。'
    + '需结合策略设计判断，并非单纯越多越好。'
    + '若股票只数少于设置样本，常见原因为部分股票 K 线不足等，未纳入回测。',

  completeness:
    '截至回测结束日，已完整达成策略目标的机会占全部机会的比例。'
    + '比例越高，未完成样本越少；越低则尾部未完成较多。'
    + '通常越高越好。',

  triggerStocksRatio:
    '至少出现过一次机会的股票数占样本池的比例。'
    + '比例越高，覆盖面越广；越低则机会更集中于少数股票。'
    + '是否合理取决于策略定位，无统一阈值。',

  avgPerStock:
    '总机会数除以参与股票数，即平均每只股票的机会次数。'
    + '数值越大，单股触发越频繁；越小则多数股票较冷清。'
    + '宜与分布图对照，警惕少数股票拉高均值。',

  meanGap:
    '同一只股票相邻两次机会之间的平均间隔（自然日）。'
    + '间隔越短，机会越密集；越长则节奏越疏。'
    + '需与资金容量、持仓周期匹配，无统一优劣。',

  meanDuration:
    '单次机会从触发到结束的平均持续天数。'
    + '持续越长，单笔占用时间越长；越短则周转越快。'
    + '取决于策略规则，无统一优劣。',

  dispersion:
    '各股机会间隔的离散程度（SD 为天数标准差，CV 为变异系数）。'
    + '数值越大，节奏越不均匀；越小则越接近。'
    + '通常宜适中或偏小，以利于资金安排；下方为系统摘要。',
};

export const ENUM_CHART_TIPS = {
  opportunityDistribution:
    '横轴为每股机会数区间，柱高为落入该区间的股票数（标注为占比）。'
    + '若柱体集中在低区间，说明多数股票机会较少；集中在高区间则少数股票机会偏多。'
    + '分布越均匀通常越利于分散；过度右偏需关注集中度风险。',
};

export const PRICE_SECTION_TIPS = {
  overview: '价格层单股规则下的胜率、收益率、持仓与年化折算，用于评估信号质量。',
  sampleCoverage: '核对交易笔数、覆盖股票数及未平仓数量，样本不足或尾仓过多会影响结论。',
  profitStructure: '除平均盈亏外，关注赢亏结构及收益率（ROI）分布是否均衡。',
};

export const PRICE_METRIC_TIPS = {
  winRate:
    '已平仓交易中，盈利笔数所占比例。'
    + '比例越高，赢面越大；越低则亏损笔数占比更高。'
    + '通常越高越好（须结合单笔盈亏，避免「小赢大亏」）。',

  avgRoi:
    '每笔投资的平均收益率（ROI，百分比）。'
    + '数值越高，单笔回报越好；为负则平均亏损。'
    + '通常越高越好。',

  avgDurationDays:
    '单笔投资从买入到卖出的平均持仓天数（自然日）。'
    + '天数越长，周转越慢；越短则周转越快。'
    + '是否合理取决于策略周期，无统一优劣。',

  annualReturn:
    '按自然日折算：平均每笔收益率（ROI）×（365 ÷ 平均持仓天数），为线性年化而非复利。'
    + '数值越高，在同等持仓节奏下信号层表现越好；为负则亏损。'
    + '本指标基于价格层假设：每笔机会均可按规则成交，未考虑资金上限、仓位冲突、闲置现金等约束，因此通常偏乐观。'
    + '完成资金模拟后，请以资金报告中的总收益率、资产曲线为准；实盘可得的年化往往明显低于此数。'
    + '回测区间很短时该值还会被进一步放大，不宜单独作为预期收益。',

  totalInvestments:
    '价格回测中模拟的买入总笔数（含期末仍持仓）。'
    + '笔数越多，样本越大；越少则统计波动更大。'
    + '需与策略频率匹配，无单纯优劣。',

  stocksWithOpportunities:
    '至少发生一笔投资的股票只数。'
    + '只数越多，覆盖面越广；越少则更集中。'
    + '是否合理视策略而定。',

  avgInvestmentsPerStock:
    '总笔数除以有交易的股票数。'
    + '数值越大，单股交易越频繁。'
    + '宜警惕少数股票反复交易拉高均值。',

  totalOpenInvestments:
    '回测结束日仍未平仓的笔数。'
    + '数值越大，截止日截断的未了结越多；越小则大多已平仓。'
    + '通常宜较少，以便结论更完整。',

  winLossCount:
    '盈利笔数与亏损笔数（下方为赢单/亏单说明）。'
    + '盈利侧越大越好；亏损侧越大越需关注。'
    + '宜同时查看「每笔平均盈利」。',

  avgProfitPerInvestment:
    '每笔投资平均盈亏金额（元，含正负）。'
    + '数值越大越好；为负表示平均每笔亏损。'
    + '通常越高越好。',

  avgProfitPerStock:
    '各股累计盈亏的平均值（元）。'
    + '数值越大，票池整体贡献越正向。'
    + '通常越高越好。',

  roiVolatility:
    '各笔收益率（ROI）的离散程度；有标准差时展示波动，否则展示分位数。'
    + '波动越大，收益越不稳定；越平稳则分布越集中。'
    + '在平均收益相近时，通常越小越稳健。',
};

export const PRICE_CHART_TIPS = {
  roiPercentileUnavailable: '暂无收益率分位数据，请重新执行价格回测。',
  roiPercentileCaption:
    '横轴为 10%～90% 分位，纵轴为该分位的收益率（ROI）水平。'
    + '整体偏上且负值分位较短，分布较健康；若极少数分位极高，需警惕少数大单拉高。'
    + '宜结合胜率与平均收益率一并判断。',
  roiBucketUnavailable: '暂无收益率区间分布数据，请重新执行价格回测。',
  roiBucketCaption:
    '将本轮各笔收益率（ROI）按区间统计笔数。'
    + '柱体集中在正收益区间通常较好；若负区间笔数偏多需警惕。'
    + '需与胜率、平均收益率对照阅读。',
};

export const CAPITAL_SECTION_TIPS = {
  overview: '账户层面的收益、回撤与资产曲线，最接近实盘资金表现。',
  tradeQuality: '从交易笔数、胜率与盈亏金额判断收益是否稳定。',
  utilization: '观察仓位与现金占用，评估资金是否闲置或长期满负荷。',
  risk: '关注回撤深度、持续时间、连续亏损及大额单笔亏损。',
  concentration: '评估收益是否过度依赖少数股票。',
};

export const CAPITAL_METRIC_TIPS = {
  initialCapital:
    '回测起始投入资金（元）。'
    + '为计算收益率的基准，本身无优劣。',

  finalEquity:
    '回测结束日账户总资产，含现金与持仓市值（元）。'
    + '高于初始资金为盈利，低于为亏损。'
    + '通常越高越好。',

  totalReturnPct:
    '（最终总资产 − 初始资金）÷ 初始资金，以百分比表示。'
    + '数值越高，区间收益越好。'
    + '通常越高越好。',

  calmarRatio:
    '年化收益率与最大回撤的比值（回撤为 0 时仅供参考）。'
    + '数值越大，单位回撤对应的收益越高。'
    + '通常越大越好。',

  totalTrades:
    '买入与卖出成交总次数（下方为买、卖拆分）。'
    + '次数越多，换手越高。'
    + '是否合理取决于策略与成本假设。',

  winRate:
    '已平仓交易中盈利笔数占比（下方为盈/亏笔数）。'
    + '比例越高越好。'
    + '须结合单笔平均盈亏判断。',

  totalProfit:
    '已平仓交易累计盈亏（元）。'
    + '数值越大越好；为负表示净亏损。'
    + '通常越高越好。',

  avgPnlPerTrade:
    '每笔已平仓交易平均盈亏（元）。'
    + '数值越大越好。'
    + '通常越高越好。',

  avgOpenPositions:
    '回测期间平均同时持仓只数 / 历史最高同时持仓只数。'
    + '反映仓位占用水平。'
    + '需与风控与策略设计匹配，无统一优劣。',

  fullExposureDaysRatio:
    '仓位接近满仓的交易日占回测区间的比例。'
    + '比例越高，资金越常满负荷；越低则空仓时间越多。'
    + '视策略风格而定。',

  avgCashRatio:
    '现金占总资产的平均比例。'
    + '比例越高，闲置现金越多；越低则资金更投入市场。'
    + '无统一优劣。',

  capitalUtilization:
    '实际用于市场的资金占可用资金的比例。'
    + '比例越高，资金利用越充分。'
    + '在风险可控前提下，长期偏低可能拉低收益。',

  maxDrawdown:
    '净值相对历史高点的最大回落幅度（%）。'
    + '数值越大（绝对值），最差阶段跌得越深。'
    + '通常越小越好。',

  maxDrawdownDuration:
    '从回撤开始到收复前高的最长天数。'
    + '天数越长，恢复期越久。'
    + '通常越短越好。',

  maxLossStreak:
    '连续亏损的最长笔数。'
    + '笔数越多，连续亏损压力越大。'
    + '通常越小越好。',

  worstTradePnls:
    '亏损最大的三笔金额（元）。'
    + '绝对值越大，尾部风险越大。'
    + '通常绝对值越小越好。',

  stockCount:
    '至少成交过一笔的股票只数。'
    + '只数越多，覆盖面越广。'
    + '是否合理视策略而定。',

  avgTradesPerStock:
    '总成交次数除以股票数。'
    + '数值越大，单股交易越频繁。'
    + '宜关注是否过度集中。',

  top5ContributionRatio:
    '盈利最高的 5 只股票贡献的盈利占总盈利的比例。'
    + '比例越高，收益越集中。'
    + '通常越低越稳健。',

  stockPnlCv:
    '各股盈亏的变异系数（CV）。'
    + '数值越大，个股差异越大、结果越依赖个别股票。'
    + '在总收益相近时，通常越小越好。',
};

export const CAPITAL_CHART_TIPS = {
  equityCurve:
    '账户总资产随时间变化。上行且波动可控为较理想形态。'
    + '宜与回撤曲线对照阅读。',
  drawdownCurve:
    '相对历史高点的回撤深度（%）。'
    + '峰值越高，该阶段回撤越大。'
    + '通常越低越好。',
};
