{"schema_version":"1.0","data_type":"portfolio_methodology","audience":"software_agents","access_phase":"public_testing","authentication_required":false,"historical_market_data_included":false,"user_specific_data_included":false,"product":{"name":"Meridian","purpose":"A systematic cross-asset strategy that ranks eligible trends, composes daily target portfolios, and reports model-to-model rebalance instructions.","human_ui":{"free":true,"provides_same_core_strategy_functionality":true},"agent_api":{"designed_for":"automated research and portfolio-management agents","current_status":"testing"}},"current_coverage":{"status":"ready","recommendation_timestamp":"2026-08-04T00:05:48.513707","stale":false,"tracked_asset_count":656,"tracked_asset_classes":{"bonds":16,"commodities":9,"crypto":90,"etfs":30,"stocks":511},"universe_policy":"live eligible universe captured with each observation"},"model":{"version":"meridian-portfolio-v1-2026-07-31","frozen_at":"2026-07-31","portfolio_indicator":{"id":"ema_atr","name":"OpenLL","positioning":{"category":"independent_open_implementation","comparison":"An open-source alternative to the Larsson Line methodology, designed to be practically identical in calculation behavior.","affiliation":"OpenLL is independently developed. It is not created by, affiliated with, or endorsed by CTO Larsson."},"ema_fast":30,"ema_slow":60,"atr_period":60,"atr_multiplier":0.3,"calculation":{"source":"regime_calculator.py:compute_regime_df","input":"daily OHLC bars in chronological order","ema":{"preferred":"pandas_ta.ema(close, length=period) when pandas_ta imports","fallback":"close.ewm(span=period, adjust=False).mean()"},"true_range":"max(abs(high - low), abs(high - previous_close), abs(low - previous_close))","atr":{"preferred":"pandas_ta.atr(high, low, close, length=period) when pandas_ta imports","fallback":"rolling arithmetic mean of true range over atr_period bars"},"ema_gap":"fast EMA - slow EMA","threshold":"ATR * atr_multiplier","upper_boundary":"slow EMA + threshold","lower_boundary":"slow EMA - threshold","warmup":"Require at least max(ema_fast, ema_slow, atr_period) input bars, then drop rows with undefined calculated values.","comparison_semantics":"BULL and BEAR use strict inequalities; equality at either boundary is NEUTRAL."},"regime_rules":{"BULL":"fast EMA > slow EMA + (ATR * atr_multiplier)","BEAR":"fast EMA < slow EMA - (ATR * atr_multiplier)","NEUTRAL":"all other cases, including equality at either boundary"},"reason_for_band":"Require trend separation before flipping to reduce noise and whipsaw."},"shape_signals_enabled":false,"target_cadence":"daily 00:00 UTC refresh"},"methodology":{"design_thesis":"Price is treated as the aggregate of available information. Meridian enters established trends instead of predicting bottoms, earnings, or valuation.","conviction":{"range":[0.0,1.0],"pillars":{"band":"regime position, EMA dynamics, trend trajectory, and persistence","shape":"price-structure proxy; live chart-pattern signals are disabled because causal portfolio tests found no risk-adjusted benefit","support":"support density, proximity, strength, and recent break risk","momentum":"price growth trajectory, acceleration, and recent relative strength"},"class_pillar_weights":{"crypto":{"band":0.3,"shape":0.15,"support":0.15,"momentum":0.4},"stocks":{"band":0.3,"shape":0.15,"support":0.15,"momentum":0.4},"etfs":{"band":0.2,"shape":0.2,"support":0.4,"momentum":0.2},"commodities":{"band":0.2,"shape":0.2,"support":0.4,"momentum":0.2},"bonds":{"band":0.15,"shape":0.1,"support":0.5,"momentum":0.25}},"volatility_adjustment":"adjusted conviction = conviction * (1 - normalized realized volatility * (1 - internal allocation level))","sticky_hold_bonus":0.1},"eligibility":{"minimum_adjusted_conviction":0.4,"required_asset_regime":"BULL","excluded_signals":["EXIT","SELL","OUT"],"macro_gates":{"crypto":"BTC must be BULL for new risk entries","stocks_and_etfs":"S&P 500 must be BULL for new risk entries","commodities_and_bonds":"no broad-market gate"},"fundamental_gate_enabled":false},"composition":{"allocation_levels":[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100],"internal_level_formula":"0.75 + allocation_level / 100 * 0.50","starting_budget_examples":[{"allocation_level":0,"internal_level":0.75,"starting_class_weights":{"crypto":0.2,"stocks":0.52,"etfs":0.23,"commodities":0.02,"bonds":0.03}},{"allocation_level":50,"internal_level":1.0,"starting_class_weights":{"crypto":0.3,"stocks":0.52,"etfs":0.18,"commodities":0.0,"bonds":0.0}},{"allocation_level":100,"internal_level":1.25,"starting_class_weights":{"crypto":0.34,"stocks":0.52,"etfs":0.14,"commodities":0.0,"bonds":0.0}}],"budget_semantics":"Class budgets are starting allocations, not hard ceilings. Weak or empty sleeves can be redistributed to strong eligible classes; unplaceable capital stays cash.","weighting":"power-weighted adjusted conviction with risk-dependent single-name caps","base_conviction_power":3.5,"base_single_name_cap":0.15,"diversification":"ETFs are deduplicated to one per sector; other classes to two per sector.","book_variant":{"fundamental_gate":false,"crypto_season":false,"sticky":true}},"rebalance":{"comparison":"current daily model target versus the previous daily model target","aggregate_drift_formula":"sum of absolute target/current weight differences across named assets; cash is implicit","threshold":0.1,"execution_rule":"emit orders only when aggregate drift strictly exceeds the threshold","changes_vs_orders":"changes always describes every target difference; orders is empty when policy says HOLD"}},"evidence":{"historical_research":{"status":"research_only","point_in_time_universe":false,"research_window":{"start":"2000-01-03","end":"2026-07-13"},"historical_series_exposed_by_agent_api":false,"used_by_planner":false,"valuation_calendar":"union of native asset dates","signal_calendar":"S&P 500 sessions","execution_delay_sessions":1,"modeled_cost_per_traded_dollar":0.001},"forward_shadow":{"paper_only":true,"historical_backfill":false,"purpose":"Record the frozen live model prospectively without changing recommendations.","validated_performance":false}},"limitations":["Historical portfolio research uses current survivors and can overstate results.","Trend following reacts after confirmation, so it can lag fast crashes and whipsaw in ranges.","The production book does not use valuation, earnings, or news inputs.","Taxes, FX, futures roll, venue-specific spread, market impact, and cash yield are excluded.","Holdings can cluster by sector or risk regime, reducing effective diversification.","Observed drawdown is a historical reference, not a loss cap, forecast, or guarantee."],"api_contract":{"about":"/api/agent/about","signals":"/api/agent/signals?asset_class={asset_class}","drawdown_choices":"/api/agent/drawdowns","current_book":"/api/agent/book?dd={historical_max_drawdown_pct}","book_default":"omit dd to select allocation level 50","book_assumption":"caller held the previous Meridian daily target","cold_start":"book may return retryable HTTP 503 while today's target is prepared"},"disclaimer":"Methodology and model outputs are provided for research and automation, not as personalized financial advice."}