File size: 5,406 Bytes
6b66ac0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
[
  "tests/test_flow_algo.py::test_downtrend_has_negative_cmf_and_obv",
  "tests/test_flow_algo.py::test_empty_frame_returns_none",
  "tests/test_flow_algo.py::test_factor_dict_round_trip",
  "tests/test_flow_algo.py::test_factors_finite_and_bounded",
  "tests/test_flow_algo.py::test_too_short_returns_none",
  "tests/test_flow_algo.py::test_uptrend_has_positive_cmf_and_obv",
  "tests/test_flow_algo.py::test_vwap_dev_positive_when_close_above_average",
  "tests/test_history.py::test_latest_snapshot_returns_newest",
  "tests/test_history.py::test_save_and_list_snapshots",
  "tests/test_history.py::test_save_empty_df_returns_none",
  "tests/test_history.py::test_snapshot_summary_lists_saved_runs",
  "tests/test_history.py::test_with_delta_computes_difference",
  "tests/test_history.py::test_with_delta_no_previous",
  "tests/test_intraday_factor.py::test_aggression_persistence_negative_when_recent_selling",
  "tests/test_intraday_factor.py::test_aggression_persistence_positive_when_recent_buying",
  "tests/test_intraday_factor.py::test_aggression_persistence_short_history_uses_all",
  "tests/test_intraday_factor.py::test_batch",
  "tests/test_intraday_factor.py::test_clipped_to_range",
  "tests/test_intraday_factor.py::test_empty_returns_zeros",
  "tests/test_intraday_factor.py::test_stub_synthesises",
  "tests/test_intraday_factor.py::test_vwap_dev_positive_when_above_vwap",
  "tests/test_intraday_factor.py::test_vwap_dev_zero_when_price_equals_vwap",
  "tests/test_l2_factor.py::test_ask_heavy_book_is_negative",
  "tests/test_l2_factor.py::test_balanced_book_is_near_zero",
  "tests/test_l2_factor.py::test_batch_returns_all_tickers",
  "tests/test_l2_factor.py::test_bid_heavy_book_is_positive",
  "tests/test_l2_factor.py::test_book_lying_detection",
  "tests/test_l2_factor.py::test_book_lying_discounts_factor",
  "tests/test_l2_factor.py::test_clipped_to_range",
  "tests/test_l2_factor.py::test_empty_book_returns_zero",
  "tests/test_l2_factor.py::test_spoofed_orders_ignored",
  "tests/test_l2_factor.py::test_stub_data_source_synthesises",
  "tests/test_options_factor.py::test_batch",
  "tests/test_options_factor.py::test_call_otm_spike_is_positive",
  "tests/test_options_factor.py::test_call_otm_weighted_heaviest",
  "tests/test_options_factor.py::test_empty_returns_zero",
  "tests/test_options_factor.py::test_put_otm_spike_is_negative",
  "tests/test_options_factor.py::test_steady_chain_is_near_zero",
  "tests/test_options_factor.py::test_stub_data_source_synthesises",
  "tests/test_options_factor.py::test_zscore_constant_returns_zero",
  "tests/test_options_factor.py::test_zscore_uses_today_vs_history",
  "tests/test_performance.py::test_auto_improve_end_to_end_with_signal",
  "tests/test_performance.py::test_auto_improve_handles_no_data",
  "tests/test_performance.py::test_collect_eval_tables_with_explicit_cache",
  "tests/test_performance.py::test_evaluate_returns_metrics_dict",
  "tests/test_performance.py::test_ic_signal_factor_is_predictive",
  "tests/test_performance.py::test_load_learned_weights_missing",
  "tests/test_performance.py::test_load_learned_weights_round_trip",
  "tests/test_performance.py::test_optimize_finds_signal_factor",
  "tests/test_performance.py::test_optimize_without_enough_history_returns_baseline",
  "tests/test_performance.py::test_performance_log_grows",
  "tests/test_scorer.py::test_empty_factors_returns_empty_df",
  "tests/test_scorer.py::test_ratings_assignment",
  "tests/test_scorer.py::test_robust_zscore_degenerate_series",
  "tests/test_scorer.py::test_robust_zscore_on_outliers",
  "tests/test_scorer.py::test_score_dataframe_shape",
  "tests/test_scorer.py::test_score_range_and_ordering",
  "tests/test_scorer.py::test_top_n_buy_and_sell",
  "tests/test_scorer.py::test_uptrend_scores_higher_than_downtrend",
  "tests/test_scorer.py::test_weights_change_ordering",
  "tests/test_tick_factor.py::test_batch",
  "tests/test_tick_factor.py::test_block_aggression_negative_when_block_sells",
  "tests/test_tick_factor.py::test_block_aggression_positive_when_block_buys",
  "tests/test_tick_factor.py::test_block_share_calculation",
  "tests/test_tick_factor.py::test_bucket_boundaries",
  "tests/test_tick_factor.py::test_buy_ratio_in_unit_interval",
  "tests/test_tick_factor.py::test_empty_ticks",
  "tests/test_tick_factor.py::test_no_bid_ask_falls_back_to_rolling_mid",
  "tests/test_tick_factor.py::test_sign_at_ask_is_buy",
  "tests/test_tick_factor.py::test_sign_at_bid_is_sell",
  "tests/test_tick_factor.py::test_sign_at_mid_carries_forward",
  "tests/test_tick_factor.py::test_stub_synthesises",
  "tests/test_universe.py::test_cached_sectors_for_returns_only_known",
  "tests/test_universe.py::test_fresh_filter_excludes_stale",
  "tests/test_universe.py::test_save_and_load_cache",
  "tests/test_watchlist.py::test_load_malformed_returns_empty",
  "tests/test_watchlist.py::test_load_missing_returns_empty",
  "tests/test_watchlist.py::test_parse_caps_at_max",
  "tests/test_watchlist.py::test_parse_empty_or_none",
  "tests/test_watchlist.py::test_parse_lowercase_and_dedup",
  "tests/test_watchlist.py::test_parse_mixed_delimiters",
  "tests/test_watchlist.py::test_parse_rejects_invalid_symbols",
  "tests/test_watchlist.py::test_parse_simple",
  "tests/test_watchlist.py::test_save_and_load_round_trip"
]