{"schema_version":"1.3","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-09-20T00:06:20.073895","stale":false,"tracked_asset_count":662,"tracked_asset_classes":{"bonds":16,"commodities":9,"crypto":98,"etfs":30,"stocks":509},"universe_policy":"live eligible universe captured with each observation","price_sources":{"crypto":"Binance USDT spot daily completed candles","non_crypto":"Yahoo Finance adjusted daily OHLC"}},"model":{"version":"meridian-portfolio-v3-2026-08-26","frozen_at":"2026-08-26","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":"crypto daily including weekends; non-crypto daily candidate with 30-day execution lock"},"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":"1.00 if allocation_level <= 50 else 1.00 + (allocation_level - 50) / 100","invested_exposure_formula":"0.50 + allocation_level / 100 if allocation_level <= 50 else 1.00","starting_budget_examples":[{"allocation_level":0,"internal_level":1.0,"invested_exposure":0.5,"starting_class_weights":{"crypto":0.15,"stocks":0.26,"etfs":0.09,"commodities":0.0,"bonds":0.0,"cash":0.5}},{"allocation_level":50,"internal_level":1.0,"invested_exposure":1.0,"starting_class_weights":{"crypto":0.3,"stocks":0.52,"etfs":0.18,"commodities":0.0,"bonds":0.0,"cash":0.0}},{"allocation_level":100,"internal_level":1.5,"invested_exposure":1.0,"starting_class_weights":{"crypto":0.4,"stocks":0.52,"etfs":0.08,"commodities":0.0,"bonds":0.0,"cash":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. Levels below 50 cash-scale the unchanged default book, level 50 is the full default book, and levels above 50 remain fully invested while extending the tested composer range.","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":"each daily model sleeve versus the last execution-authorized target","crypto_drift_threshold":0.2,"non_crypto_drift_threshold":0.1,"non_crypto_min_days_between_trades":30,"total_exposure_cap":1.0,"threshold":0.1,"execution_rule":"publish one complete target book after updating only eligible sleeves; the execution consumer reconciles to that complete book","state_model":"raw daily candidates advance every recommendation; committed effective targets advance only on INITIAL_TARGET or a sleeve-qualified REBALANCE, never on HOLD","changes_vs_orders":"changes and orders compare consecutive complete effective targets; orders is empty on 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."}