# region declaration
# region research
schema_version: "1.0"
metadata:
  name: recorded_compiled_research
  mode: development
  description: Compare preparation and regularization on recorded Bitcoin bars.
sfd:
  manifest:
    type: ml
# region source
    data_source:
      method: limen.data.HistoricalData.get_any_file
      params:
        file_path_or_url: inputs/spot_15m_20250101_20250531.parquet
# endregion source
# region partitions
    split_dates:
      train_start: "2025-01-01"
      train_end: "2025-01-15"
      val_start: "2025-01-15"
      val_end: "2025-01-18"
      test_start: "2025-01-18"
      test_end: "2025-01-22"
      val_predict_guard: true
      test_predict_guard: true
# endregion partitions
# region indicators
    indicators:
      - func: limen.indicators.roc
        params:
          period: 1
          group: momentum
      - func: limen.indicators.roc
        params:
          period: 3
          group: momentum
      - func: limen.indicators.roc
        params:
          period: 12
          group: momentum
# endregion indicators
# region features
    features:
      - func: limen.features.lag_range
        params:
          col: roc_1
          start: 1
          end: 3
          group: momentum
      - func: limen.features.fractional_diff
        params:
          d: 0.4
          cols: [close]
          threshold: 0.05
          group: price
# endregion features
# region target
    target:
      name: quantile_flag
      class: limen.targets.QuantileBinaryTarget
      fit_params:
        source_column: roc_1
        quantile: 0.5
      transform_params:
        shift: -1
# endregion target
# region preparation
    scaler:
      class: limen.scalers.RobustScaler
    feature_ablation:
      drop_count_key: feature_drop_count
      seed_key: feature_drop_seed
    pca_compression:
      enabled_param: auto_pca
      n_components_param: pca_k
# endregion preparation
# region calibration
    calibration:
      probability_calibration:
        func: limen.calibration.sklearn_probability_calibrator
        params:
          method: sigmoid
      threshold_function:
        func: limen.calibration.grid_threshold_optimizer
        params: {}
# endregion calibration
# region objective
    objective:
      metric: backtest_total_return
      direction: maximize
# endregion objective
# region execution
    backtest:
      source_interval_seconds: 900
      fee_bps: 7.0
      slip_bps: 3.0
      notional_rate: 0.5
      execution_lag_seconds: 0.0
      product:
        kind: cash_spot
        instrument: BTCUSDT
        base_currency: BTC
        quote_currency: USDT
        quantity_step: 1.0e-9
        min_notional: 0.0
# endregion execution
    reference_architecture: limen.sfd.reference_architecture.logreg_binary
# region parameters
  params:
    C: [0.5, 1.0]
    random_state: [42]
    feature_groups: [momentum|price]
    feature_drop_count: [0, 1]
    feature_drop_seed: [7]
    auto_pca: [false, true]
    pca_k: [2]
    use_calibration: [true]
    use_threshold: [true]
# endregion parameters
# region run
uel:
  output_path: compiled-research
  n_permutations: 8
  workers: 1
  search_strategy:
    type: grid
    shuffle: true
    seed: 17
  prep_each_round: true
  checkpoint_interval: 1
  feedback_interval: 1
  output_format: parquet
  recording:
    predictions: true
    alignment: true
    trade_ledger: true
    fold_details: true
# endregion run
# region assessment
assessment:
  metric: val_backtest_total_return
  direction: maximize
  top_k: 2
  predict: true
# endregion assessment
# endregion research
# endregion declaration
