{"id":"pyfolio-tearsheets","card_id":"card_pyfolio_tearsheets","name":"pyfolio tear sheets","description":"Runs a deterministic DATA ONLY TypeScript pyfolio-reloaded 0.9.9 tear-sheet core over caller-supplied dated returns. Plots, positions, transactions, benchmark fetch, network, and execution paths are excluded.","stage":1,"safety_level":"data_only_read_only","auth":{"type":"hmac-sha256","required_headers":["x-apex-tool-timestamp","x-apex-tool-nonce","x-apex-tool-content-sha256","x-apex-tool-signature"],"canonical_payload":"APEX-TOOL-V1\\n{tool_id}\\n{timestamp}\\n{nonce}\\n{sha256(canonical_json(body))}"},"permissionless":{"enabled":true,"tier":"bounded_public","rate_limit":"Shared 20 calls per IP per hour across all permissionless bounded tools.","review_required":false,"note":"First-run DATA ONLY tier: no HMAC required. The wrapper computes over supplied returns only and never renders plots, reads positions/transactions, fetches data, places orders, or accesses wallets/accounts."},"input_schema":{"type":"object","required":["returns"],"properties":{"returns":{"type":"array","minItems":1,"maxItems":10000,"items":{"type":"object","required":["date","return"],"properties":{"date":{"type":"string","format":"YYYY-MM-DD"},"return":{"type":"number"}}}},"periods_per_year":{"type":"number","enum":[252],"default":252}}},"output_schema":{"type":"object","properties":{"schema":{"type":"string"},"data_as_of":{"type":"string"},"performance_stats":{"type":"object"},"drawdown_table":{"type":"array"},"monthly_returns":{"type":"object"},"yearly_returns":{"type":"object"},"cross_check":{"type":"object"},"conventions":{"type":"object"}}},"sample_input":{"periods_per_year":252,"returns":[{"date":"2024-01-02","return":0.01},{"date":"2024-01-03","return":-0.02},{"date":"2024-01-04","return":0.015},{"date":"2024-01-05","return":0},{"date":"2024-01-08","return":0.007},{"date":"2024-01-09","return":-0.004},{"date":"2024-01-10","return":0.012},{"date":"2024-01-11","return":-0.006},{"date":"2024-01-12","return":0.003},{"date":"2024-01-15","return":0.009}]},"test_vectors":[{"input":{"vector_id":"balanced_daily","periods_per_year":252,"returns":[{"date":"2024-01-02","return":0.01},{"date":"2024-01-03","return":-0.02},{"date":"2024-01-04","return":0.015},{"date":"2024-01-05","return":0},{"date":"2024-01-08","return":0.007},{"date":"2024-01-09","return":-0.004},{"date":"2024-01-10","return":0.012},{"date":"2024-01-11","return":-0.006},{"date":"2024-01-12","return":0.003},{"date":"2024-01-15","return":0.009}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":5,"net_drawdown_pct":1.9999999999999998,"peak_date":"2024-01-02","recovery_date":"2024-01-08","valley_date":"2024-01-03"},{"duration":4,"net_drawdown_pct":0.6000000000000066,"peak_date":"2024-01-10","recovery_date":"2024-01-15","valley_date":"2024-01-11"},{"duration":3,"net_drawdown_pct":0.3999999999999993,"peak_date":"2024-01-08","recovery_date":"2024-01-10","valley_date":"2024-01-09"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-01":0.025796698248734096},"performance_stats":{"annual_return":0.8999609758468967,"annual_volatility":0.16669493093672647,"calmar":44.99804879234492,"max_drawdown":-0.019999999999999962,"sharpe":3.930533438048568,"sortino":6.1390956642832375},"periods_per_year":252,"yearly_returns":{"2024":0.025796698248734096}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"steady_winner","periods_per_year":252,"returns":[{"date":"2024-02-01","return":0.002},{"date":"2024-02-02","return":0.003},{"date":"2024-02-05","return":0.0015},{"date":"2024-02-06","return":0.0025},{"date":"2024-02-07","return":0.003},{"date":"2024-02-08","return":0.002},{"date":"2024-02-09","return":0.001},{"date":"2024-02-12","return":0.002}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":1,"net_drawdown_pct":0,"peak_date":"2024-02-01","recovery_date":"2024-02-01","valley_date":"2024-02-01"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-02":0.01712526706485562},"performance_stats":{"annual_return":0.7072414861978922,"annual_volatility":0.011022703842524304,"calmar":null,"max_drawdown":0,"sharpe":48.5815465651997,"sortino":null},"periods_per_year":252,"yearly_returns":{"2024":0.01712526706485562}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"steady_loser","periods_per_year":252,"returns":[{"date":"2024-03-01","return":-0.003},{"date":"2024-03-04","return":-0.002},{"date":"2024-03-05","return":-0.004},{"date":"2024-03-06","return":-0.001},{"date":"2024-03-07","return":-0.0025},{"date":"2024-03-08","return":-0.0035},{"date":"2024-03-11","return":-0.0015}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":null,"net_drawdown_pct":1.4415999974950484,"peak_date":"2024-03-01","recovery_date":null,"valley_date":"2024-03-11"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-03":-0.017372751975025635},"performance_stats":{"annual_return":-0.46789553569835396,"annual_volatility":0.017146428199482245,"calmar":-26.93272409408596,"max_drawdown":-0.017372751975025694,"sharpe":-36.74234614174769,"sortino":-14.739110533215529},"periods_per_year":252,"yearly_returns":{"2024":-0.017372751975025635}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"flat_zero","periods_per_year":252,"returns":[{"date":"2024-04-01","return":0},{"date":"2024-04-02","return":0},{"date":"2024-04-03","return":0},{"date":"2024-04-04","return":0},{"date":"2024-04-05","return":0},{"date":"2024-04-08","return":0}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":1,"net_drawdown_pct":0,"peak_date":"2024-04-01","recovery_date":"2024-04-01","valley_date":"2024-04-01"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-04":0},"performance_stats":{"annual_return":0,"annual_volatility":0,"calmar":null,"max_drawdown":0,"sharpe":null,"sortino":null},"periods_per_year":252,"yearly_returns":{"2024":0}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"severe_drawdown_recovery","periods_per_year":252,"returns":[{"date":"2024-05-01","return":0.01},{"date":"2024-05-02","return":0.02},{"date":"2024-05-03","return":-0.15},{"date":"2024-05-06","return":-0.1},{"date":"2024-05-07","return":0.05},{"date":"2024-05-08","return":0.04},{"date":"2024-05-09","return":0.03},{"date":"2024-05-10","return":0.02},{"date":"2024-05-13","return":0.01}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":null,"net_drawdown_pct":23.5,"peak_date":"2024-05-02","recovery_date":null,"valley_date":"2024-05-06"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-05":-0.08680318246554397},"performance_stats":{"annual_return":-0.9213311320180021,"annual_volatility":1.0934349546269317,"calmar":-3.920558008587243,"max_drawdown":-0.235,"sharpe":-1.7925163190605429,"sortino":-2.054638279974959},"periods_per_year":252,"yearly_returns":{"2024":-0.08680318246554397}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"unrecovered_drawdown","periods_per_year":252,"returns":[{"date":"2024-06-03","return":0.01},{"date":"2024-06-04","return":-0.05},{"date":"2024-06-05","return":-0.04},{"date":"2024-06-06","return":0.01},{"date":"2024-06-07","return":-0.02},{"date":"2024-06-10","return":0.005}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":null,"net_drawdown_pct":9.730240000000022,"peak_date":"2024-06-03","recovery_date":null,"valley_date":"2024-06-07"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-06":-0.08371680112000035},"performance_stats":{"annual_return":-0.9745757365334382,"annual_volatility":0.42124814539651095,"calmar":-10.015947566899023,"max_drawdown":-0.09730240000000027,"sharpe":-8.474814759456434,"sortino":-8.211780156174015},"periods_per_year":252,"yearly_returns":{"2024":-0.08371680112000035}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"month_boundary","periods_per_year":252,"returns":[{"date":"2024-01-29","return":0.01},{"date":"2024-01-30","return":0.02},{"date":"2024-01-31","return":-0.005},{"date":"2024-02-01","return":0.004},{"date":"2024-02-02","return":0.006},{"date":"2024-02-03","return":-0.003},{"date":"2024-02-04","return":0.002}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":4,"net_drawdown_pct":0.49999999999999084,"peak_date":"2024-01-30","recovery_date":"2024-02-02","valley_date":"2024-01-31"},{"duration":null,"net_drawdown_pct":0.3000000000000044,"peak_date":"2024-02-02","recovery_date":null,"valley_date":"2024-02-03"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-01":0.0250490000000001,"2024-02":0.009007915855999915},"performance_stats":{"annual_return":2.3652023834203946,"annual_volatility":0.13358143583597237,"calmar":473.04047668408833,"max_drawdown":-0.0049999999999999,"sharpe":9.162949869044505,"sortino":34.9857113690718},"periods_per_year":252,"yearly_returns":{"2024":0.03428255514027723}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"year_boundary","periods_per_year":252,"returns":[{"date":"2023-12-28","return":0.01},{"date":"2023-12-29","return":-0.002},{"date":"2023-12-30","return":0.003},{"date":"2023-12-31","return":0.004},{"date":"2024-01-01","return":-0.006},{"date":"2024-01-02","return":0.005}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":null,"net_drawdown_pct":0.6000000000000106,"peak_date":"2023-12-31","recovery_date":null,"valley_date":"2024-01-01"},{"duration":2,"net_drawdown_pct":0.19999999999999116,"peak_date":"2023-12-28","recovery_date":"2023-12-30","valley_date":"2023-12-29"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2023-12":0.015047955759999843,"2024-01":-0.0010300000000000864},"performance_stats":{"annual_return":0.7932394985838493,"annual_volatility":0.08904830149980404,"calmar":132.20658309730743,"max_drawdown":-0.0060000000000000366,"sharpe":6.603157950197331,"sortino":14.345731072343437},"periods_per_year":252,"yearly_returns":{"2023":0.015047955759999843,"2024":-0.0010300000000000864}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"multi_year","periods_per_year":252,"returns":[{"date":"2022-12-20","return":0.001},{"date":"2022-12-21","return":-0.002},{"date":"2022-12-22","return":0.003},{"date":"2022-12-23","return":0.002},{"date":"2022-12-26","return":-0.001},{"date":"2022-12-27","return":0.004},{"date":"2022-12-28","return":-0.003},{"date":"2022-12-29","return":0.002},{"date":"2022-12-30","return":0.001},{"date":"2023-01-02","return":-0.002},{"date":"2023-01-03","return":0.003},{"date":"2023-01-04","return":0.004},{"date":"2023-01-05","return":0.002},{"date":"2023-01-06","return":-0.001},{"date":"2023-01-09","return":0.005},{"date":"2023-01-10","return":0.001},{"date":"2023-01-11","return":-0.004},{"date":"2023-01-12","return":0.002},{"date":"2023-01-13","return":0.003},{"date":"2023-01-16","return":0.001}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":4,"net_drawdown_pct":0.3999999999999963,"peak_date":"2023-01-10","recovery_date":"2023-01-13","valley_date":"2023-01-11"},{"duration":6,"net_drawdown_pct":0.29999999999999444,"peak_date":"2022-12-27","recovery_date":"2023-01-03","valley_date":"2022-12-28"},{"duration":3,"net_drawdown_pct":0.19999999999999485,"peak_date":"2022-12-20","recovery_date":"2022-12-22","valley_date":"2022-12-21"},{"duration":3,"net_drawdown_pct":0.10000000000000636,"peak_date":"2022-12-23","recovery_date":"2022-12-27","valley_date":"2022-12-26"},{"duration":3,"net_drawdown_pct":0.10000000000000533,"peak_date":"2023-01-05","recovery_date":"2023-01-09","valley_date":"2023-01-06"}],"monthly_returns":{"2022-12":0.006999909853231401,"2023-01":0.014052888740403002},"performance_stats":{"annual_return":0.3017706685969348,"annual_volatility":0.039384340997272935,"calmar":75.44266714923522,"max_drawdown":-0.003999999999999919,"sharpe":6.718406181236385,"sortino":12.600000000000003},"periods_per_year":252,"yearly_returns":{"2022":0.006999909853231401,"2023":0.014052888740403002}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"volatile_sortino","periods_per_year":252,"returns":[{"date":"2024-07-01","return":0.03},{"date":"2024-07-02","return":-0.04},{"date":"2024-07-03","return":0.02},{"date":"2024-07-04","return":-0.03},{"date":"2024-07-05","return":0.05},{"date":"2024-07-08","return":-0.06},{"date":"2024-07-09","return":0.04},{"date":"2024-07-10","return":-0.02},{"date":"2024-07-11","return":0.01}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":null,"net_drawdown_pct":6.252371200000003,"peak_date":"2024-07-01","recovery_date":null,"valley_date":"2024-07-08"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-07":-0.006018491211397081},"performance_stats":{"annual_return":-0.1555138213292112,"annual_volatility":0.6148170459575759,"calmar":-2.487277488086619,"max_drawdown":-0.06252371200000001,"sharpe":2.370083473451819e-16,"sortino":3.4156538187100914e-16},"periods_per_year":252,"yearly_returns":{"2024":-0.006018491211397081}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"single_return","periods_per_year":252,"returns":[{"date":"2024-08-01","return":0.01}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":1,"net_drawdown_pct":0,"peak_date":"2024-08-01","recovery_date":"2024-08-01","valley_date":"2024-08-01"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-08":0.010000000000000009},"performance_stats":{"annual_return":11.274002099240244,"annual_volatility":null,"calmar":null,"max_drawdown":0,"sharpe":null,"sortino":null},"periods_per_year":252,"yearly_returns":{"2024":0.010000000000000009}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"},{"input":{"vector_id":"tiny_returns","periods_per_year":252,"returns":[{"date":"2024-09-02","return":0.0001},{"date":"2024-09-03","return":-0.0002},{"date":"2024-09-04","return":0.00015},{"date":"2024-09-05","return":0.00005},{"date":"2024-09-06","return":-0.0001},{"date":"2024-09-09","return":0.0002}]},"expected":{"result":{"schema":"apex-pyfolio-tearsheets/1","data_as_of":"0.9.9","drawdown_table":[{"duration":6,"net_drawdown_pct":0.019999999999996746,"peak_date":"2024-09-02","recovery_date":"2024-09-09","valley_date":"2024-09-03"},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null},{"duration":null,"net_drawdown_pct":null,"peak_date":null,"recovery_date":null,"valley_date":null}],"monthly_returns":{"2024-09":0.00019995749000023544},"performance_stats":{"annual_return":0.00843273190178051,"annual_volatility":0.0024421302176583465,"calmar":42.16365950889163,"max_drawdown":-0.0002000000000000518,"sharpe":3.4396200248709086,"sortino":5.796550698475775},"periods_per_year":252,"yearly_returns":{"2024":0.00019995749000023544}}},"match":"subset","verified_at":"2026-07-05T12:00:00.000Z"}]}