{
  "site": "AI Fin Hub",
  "count": 44,
  "calculators": [
    {
      "calculator": "kelly-sizer",
      "title": "Kelly Criterion Calculator",
      "category": "Calculators",
      "summary": "Size positions with full, half, quarter, or eighth Kelly and stress-test the choice with a drawdown Monte Carlo simulator. Client-side. Private by default.",
      "run": "https://aifinhub.io/api/run/kelly-sizer",
      "example": "https://aifinhub.io/api/run/kelly-sizer?win_rate=0.55&win_loss_ratio=1.5&fraction=quarter&max_cap_pct=0.1&trades=500&sims=500&ruin_threshold_pct=0.5&seed=42",
      "inputs": {
        "fraction": {
          "type": "string",
          "enum": [
            "full",
            "half",
            "quarter",
            "eighth"
          ],
          "default": "quarter",
          "description": "Share of full Kelly to bet."
        },
        "max_cap_pct": {
          "type": "number",
          "default": 0.1,
          "minimum": 0,
          "maximum": 1,
          "description": "Maximum fraction of bankroll per trade as a decimal (0.1 = 10%)."
        },
        "ruin_threshold_pct": {
          "type": "number",
          "default": 0.5,
          "minimum": 0,
          "maximum": 1,
          "description": "Bankroll level (decimal of the start) that counts as ruin, e.g. 0.5."
        },
        "seed": {
          "type": "number",
          "default": 42,
          "description": "Random seed; same inputs and seed give the same result."
        },
        "sims": {
          "type": "number",
          "default": 500,
          "minimum": 1,
          "maximum": 20000,
          "description": "Number of simulated paths (whole number)."
        },
        "trades": {
          "type": "number",
          "default": 500,
          "minimum": 1,
          "maximum": 2000,
          "description": "Trades per simulated path (whole number)."
        },
        "win_loss_ratio": {
          "type": "number",
          "default": 1.5,
          "minimum": 0,
          "description": "Average win divided by average loss (b)."
        },
        "win_rate": {
          "type": "number",
          "default": 0.55,
          "minimum": 0,
          "maximum": 1,
          "description": "Probability of a winning trade as a decimal (0.55 = 55%)."
        }
      },
      "page": "https://aifinhub.io/kelly-sizer/",
      "contract": "https://aifinhub.io/contracts/kelly-sizer.json"
    },
    {
      "calculator": "backtest-overfitting-score",
      "title": "Backtest Overfitting Score",
      "category": "Calculators",
      "summary": "Upload a returns CSV (one column per strategy you tried) or simulate a strategy search: the probability of backtest overfitting (PBO) by CSCV and the Deflated Sharpe Ratio.",
      "run": "https://aifinhub.io/api/run/backtest-overfitting-score",
      "example": "https://aifinhub.io/api/run/backtest-overfitting-score",
      "inputs": {
        "max_combos": {
          "type": "number",
          "default": 500,
          "minimum": 50,
          "maximum": 2000,
          "description": "Maximum CSCV splits evaluated; above this a seeded random sample is used."
        },
        "names": {
          "type": "array",
          "default": [
            "config_1",
            "config_2",
            "config_3",
            "config_4",
            "config_5",
            "config_6",
            "config_7",
            "config_8"
          ],
          "default_with": [
            "returns"
          ],
          "description": "Optional strategy names, same length as returns. Left out next to your own returns, the strategies are named STRATEGY_1 to STRATEGY_n for any strategy count; the default names label only the default sample returns."
        },
        "returns": {
          "type": "array",
          "default": [
            [
              -0.007607,
              -0.008433,
              0.002527,
              0.009548,
              0.000386,
              -0.003086,
              -0.013818,
              0.003103,
              -0.001452,
              -0.001876,
              -0.009661,
              0.003698,
              -0.008879,
              0.000087,
              0.005411,
              -0.013957,
              -0.016225,
              -0.008241,
              -0.00932,
              -0.005203,
              0.013635,
              -0.01494,
              0.013488,
              0.001743,
              0.001842,
              -0.009871,
              -0.011032,
              -0.003489,
              -0.001506,
              -0.007647,
              -0.003465,
              -0.002703,
              0.001128,
              -0.000813,
              -0.011485,
              0.001114,
              -0.014121,
              -0.007701,
              0.021711,
              -0.008674,
              0.001477,
              -0.023238,
              -0.001341,
              0.003694,
              -0.010272,
              -0.010004,
              0.0139,
              0.003259,
              -0.001892,
              0.002446,
              -0.00491,
              -0.00949,
              0.001046,
              0.010993,
              -0.007657,
              0.002868,
              0.010116,
              -0.015102,
              0.012324,
              0.003874,
              -0.006297,
              -0.007557,
              0.001614,
              0.003874,
              0.005329,
              -0.01097,
              -0.006333,
              -0.011446,
              -0.010086,
              0.023615,
              0.009435,
              0.006638,
              0.011219,
              0.015323,
              0.002509,
              0.01685,
              0.006612,
              0.00075,
              0.005775,
              -0.000548,
              -0.001559,
              -0.006039,
              0.010799,
              0.011098,
              0.000106,
              -0.003287,
              0.018143,
              -0.001286,
              0.013772,
              -0.007472,
              -0.001242,
              -0.012453,
              0.001156,
              -0.003853,
              -0.002835,
              0.002068,
              0.008257,
              -0.002199,
              0.014797,
              -0.00126,
              -0.004281,
              0.014395,
              -0.014099,
              0.013682,
              0.008156,
              -0.003939,
              -0.004044,
              0.001098,
              0.015018,
              0.007361,
              -0.005574,
              -0.008443,
              0.011462,
              0.018576,
              0.007605,
              -0.002427,
              -0.006412,
              -0.021952,
              -0.006747,
              -0.008918,
              -0.00762,
              -0.012725,
              0.010202,
              0.004645,
              0.01703,
              0.000061,
              0.008105,
              -0.003123,
              -0.000806,
              -0.008311,
              -0.003523,
              -0.007899,
              0.002521,
              0.005408,
              0.007466,
              -0.008198,
              0.002437,
              -0.005085,
              0.01975,
              0.00599,
              0.001853,
              0.018434,
              0.00253,
              0.000584,
              0.000106,
              0.003099,
              0.002464,
              0.005883,
              -0.002776,
              -0.011954,
              0.005296,
              -0.005343,
              -0.002491,
              0.017611,
              0.00696,
              0.008335,
              -0.001531,
              -0.003152,
              -0.00285,
              0.005455,
              0.005163,
              -0.005818,
              -0.014524,
              0.006273,
              0.008741,
              0.00559,
              0.007341,
              -0.001281,
              0.018982,
              -0.002406,
              -0.010218,
              -0.005839,
              0.000264,
              -0.002979,
              -0.000778,
              -0.0101,
              0.004605,
              -0.003556,
              -0.001231,
              -0.002957,
              -0.005795,
              -0.009402,
              -0.001695,
              0.000745,
              -0.010244,
              -0.012969,
              -0.005555,
              -0.008597,
              0.006853,
              0.003049,
              0.003559,
              0.003363,
              -0.003207,
              0.001758,
              0.002949,
              -0.001688,
              0.002311,
              0.000368,
              -0.006301,
              0.000936,
              -0.010952,
              0.009508,
              -0.009308,
              -0.00056,
              -0.009114,
              -0.001343,
              0.003215,
              -0.017557,
              -0.006617,
              -0.005486,
              -0.001897,
              -0.009472,
              0.002418,
              0.001107,
              0.01974,
              0.011345,
              0.010953,
              0.006522,
              0.00396,
              0.002117,
              -0.009888,
              0.005347,
              0.012451,
              0.01582,
              0.00519,
              -0.009875,
              -0.002421,
              0.012211,
              -0.01189,
              -0.012948,
              -0.002372,
              -0.013299,
              -0.00759,
              0.003687,
              0.001551,
              -0.003671,
              -0.002077,
              0.004934,
              0.000243,
              -0.010124,
              0.005935,
              -0.011534,
              0.005383,
              0.014001,
              0.01137,
              0.00832,
              0.001503,
              0.006466,
              -0.00883,
              -0.00862,
              -0.006858,
              -0.018451
            ],
            [
              -0.002599,
              -0.01249,
              -0.000768,
              0.014659,
              -0.007903,
              0.001668,
              -0.00597,
              0.006913,
              -0.002515,
              -0.009598,
              0.012531,
              0.022728,
              -0.008417,
              0.003026,
              -0.005167,
              0.0072,
              -0.012631,
              -0.007466,
              -0.006282,
              0.000575,
              -0.005115,
              0.001796,
              0.00165,
              0.004601,
              0.002381,
              0.004698,
              -0.007147,
              0.01338,
              -0.002692,
              0.01626,
              0.004157,
              -0.009184,
              0.003456,
              -0.004427,
              -0.004837,
              0.0042,
              -0.000564,
              0.003732,
              0.002595,
              0.00147,
              -0.003464,
              -0.007321,
              0.007342,
              -0.006111,
              -0.017633,
              -0.016906,
              -0.000206,
              -0.006414,
              0.007947,
              -0.007423,
              -0.006619,
              -0.001341,
              0.008039,
              0.004998,
              0.004973,
              -0.012833,
              -0.014551,
              0.006823,
              -0.002911,
              -0.004485,
              -0.001641,
              0.006185,
              -0.002446,
              0.002514,
              -0.003903,
              -0.00003,
              0.008278,
              -0.010454,
              0.004771,
              0.004374,
              -0.022943,
              -0.010161,
              0.006163,
              -0.004155,
              0.004424,
              -0.009182,
              0.006865,
              -0.011443,
              0.001149,
              -0.006493,
              0.002135,
              -0.010179,
              -0.007789,
              -0.011033,
              -0.005326,
              -0.01244,
              -0.003092,
              -0.00182,
              -0.003007,
              -0.003795,
              -0.00116,
              -0.001842,
              -0.012457,
              -0.021907,
              -0.006275,
              0.008307,
              -0.006231,
              -0.005329,
              0.017913,
              -0.004898,
              0.002562,
              -0.009148,
              -0.007493,
              -0.004149,
              -0.01313,
              -0.001028,
              -0.002185,
              -0.014841,
              0.012308,
              -0.00101,
              -0.001641,
              0.002098,
              0.026443,
              -0.002785,
              -0.005596,
              -0.003746,
              0.000018,
              -0.007626,
              0.006118,
              -0.0022,
              0.018846,
              -0.005512,
              0.011388,
              0.007531,
              -0.004823,
              -0.003043,
              -0.007229,
              0.004015,
              0.009033,
              0.000679,
              0.000818,
              -0.002525,
              -0.008156,
              0.011269,
              -0.009309,
              0.002143,
              -0.001107,
              0.01047,
              0.000274,
              0.005718,
              0.001913,
              0.013187,
              -0.005715,
              0.00549,
              0.012165,
              -0.008927,
              0.012049,
              0.005841,
              -0.00299,
              -0.001533,
              -0.00256,
              0.012738,
              0.001877,
              -0.005116,
              0.010483,
              -0.014202,
              0.008472,
              -0.003035,
              -0.003723,
              0.006801,
              0.019795,
              0.018834,
              -0.002,
              -0.001073,
              0.019896,
              0.001447,
              0.005193,
              -0.005287,
              0.002826,
              -0.005817,
              -0.006516,
              -0.008045,
              0.00054,
              0.002332,
              0.001308,
              -0.012459,
              -0.012143,
              0.00048,
              0.002915,
              0.006755,
              -0.01107,
              -0.005805,
              0.012398,
              -0.001902,
              -0.008612,
              -0.002507,
              0.004902,
              -0.00165,
              -0.009832,
              -0.007272,
              0.00347,
              0.000857,
              0.004866,
              0.003938,
              0.010866,
              -0.008823,
              0.0217,
              0.007548,
              0.010955,
              -0.001893,
              -0.006616,
              -0.013243,
              0.00621,
              0.003595,
              -0.013117,
              -0.008922,
              -0.012827,
              -0.001665,
              -0.007163,
              0.012076,
              -0.000828,
              0.014302,
              -0.003096,
              0.002416,
              0.001582,
              -0.003323,
              0.002436,
              -0.006585,
              0.000963,
              0.00037,
              -0.006513,
              0.003063,
              0.000498,
              0.007974,
              -0.00442,
              0.002107,
              0.00479,
              0.000312,
              -0.006624,
              -0.009057,
              -0.001558,
              -0.015349,
              0.000891,
              0.003371,
              -0.00437,
              0.000723,
              0.006585,
              0.003907,
              -0.019742,
              -0.014603,
              -0.001371,
              -0.01082,
              0.006477,
              -0.001051,
              0.003705,
              -0.005935,
              0.016919,
              0.003175,
              -0.009761,
              0.010011,
              0.006377,
              -0.002754
            ],
            [
              0.003486,
              -0.01331,
              0.001114,
              0.002542,
              0.003635,
              0.014253,
              -0.007912,
              0.019006,
              0.002954,
              -0.00251,
              0.004889,
              -0.006149,
              -0.006969,
              0.005837,
              -0.002009,
              -0.009907,
              -0.01021,
              -0.006779,
              -0.012268,
              0.013655,
              0.011315,
              -0.001646,
              0.003776,
              0.010479,
              -0.001971,
              -0.00643,
              0.002708,
              -0.000718,
              0.020762,
              -0.00495,
              0.002591,
              0.002292,
              -0.002019,
              -0.003038,
              -0.008764,
              0.014829,
              0.001607,
              0.008474,
              0.00003,
              0.004912,
              -0.009748,
              -0.005388,
              -0.019528,
              0.009265,
              -0.009732,
              -0.009528,
              -0.022486,
              0.001387,
              0.000133,
              0.012331,
              -0.001881,
              0.002814,
              0.003454,
              -0.00165,
              0.000802,
              0.012993,
              0.019009,
              -0.005461,
              -0.010639,
              0.026615,
              -0.002979,
              -0.022924,
              -0.003852,
              -0.001726,
              0.014881,
              0.010805,
              0.010043,
              0.014801,
              -0.005783,
              -0.002314,
              0.002512,
              0.005949,
              0.000233,
              0.005222,
              -0.003598,
              0.006489,
              -0.003603,
              -0.004326,
              -0.006227,
              -0.005739,
              0.009195,
              -0.011944,
              -0.012541,
              0.012824,
              -0.006702,
              -0.003601,
              -0.010387,
              0.006808,
              -0.000709,
              0.009398,
              0.003454,
              -0.005537,
              -0.018698,
              0.001332,
              0.000639,
              0.000286,
              0.00154,
              0.000774,
              0.00292,
              0.000921,
              -0.001871,
              0.000798,
              0.001025,
              0.000922,
              0.007591,
              0.013319,
              0.009731,
              -0.001231,
              0.006471,
              -0.003417,
              0.006932,
              0.006744,
              0.013241,
              -0.024821,
              -0.006818,
              0.011626,
              0.00466,
              -0.014313,
              0.003097,
              0.016559,
              0.00463,
              0.021152,
              0.012273,
              0.011978,
              0.010992,
              -0.006009,
              0.012956,
              0.000066,
              -0.002637,
              0.026311,
              0.006168,
              0.011745,
              -0.006737,
              -0.000939,
              0.008149,
              0.000019,
              0.014362,
              -0.021293,
              -0.007537,
              0.005119,
              0.002852,
              0.007819,
              0.001501,
              -0.008867,
              -0.009108,
              -0.010194,
              0.015899,
              -0.00692,
              0.01571,
              -0.003153,
              -0.012947,
              -0.012684,
              0.002476,
              0.009866,
              -0.004376,
              -0.003654,
              0.002282,
              0.010798,
              -0.004496,
              0.008029,
              -0.009739,
              0.008663,
              0.001425,
              -0.007216,
              0.009156,
              -0.004389,
              0.000084,
              -0.006304,
              -0.008008,
              -0.001895,
              -0.002614,
              -0.008904,
              0.008343,
              0.018334,
              0.004495,
              -0.014895,
              0.015643,
              0.010954,
              -0.000684,
              -0.001145,
              -0.014152,
              -0.000439,
              -0.003169,
              0.008985,
              -0.018804,
              0.013682,
              -0.000287,
              0.013181,
              0.000439,
              0.000605,
              0.006022,
              0.004664,
              -0.009431,
              0.003879,
              0.002882,
              -0.009042,
              0.007386,
              -0.01762,
              -0.004178,
              -0.001909,
              0.01808,
              -0.007329,
              -0.012838,
              -0.00906,
              -0.001583,
              -0.006148,
              -0.000189,
              0.011673,
              0.008158,
              0.008813,
              0.002587,
              -0.008601,
              0.022004,
              0.000851,
              -0.003402,
              -0.000193,
              -0.015078,
              0.001615,
              0.006137,
              0.016117,
              -0.002529,
              0.002285,
              -0.009308,
              0.00888,
              0.005664,
              -0.004795,
              0.011285,
              -0.005619,
              -0.003784,
              -0.005674,
              -0.000319,
              -0.017527,
              -0.013529,
              0.011023,
              0.012447,
              -0.023654,
              0.000652,
              -0.005188,
              -0.011734,
              0.002771,
              -0.007129,
              -0.008234,
              -0.006469,
              -0.016879,
              -0.010539,
              -0.001697,
              0.005634,
              -0.008947,
              0.011191,
              -0.000963,
              0.004449,
              0.013423
            ],
            [
              0.008852,
              -0.010706,
              -0.002378,
              0.005423,
              0.004518,
              -0.000613,
              0.000615,
              0.013326,
              0.00759,
              -0.0091,
              -0.004475,
              0.002714,
              -0.004472,
              0.008336,
              -0.002838,
              -0.001532,
              -0.008167,
              -0.005782,
              -0.000678,
              0.010727,
              -0.015255,
              -0.007146,
              0.001326,
              0.018322,
              0.002475,
              -0.001778,
              0.002247,
              -0.01457,
              -0.00048,
              0.002975,
              0.007482,
              0.009793,
              0.005549,
              -0.001337,
              -0.000496,
              0.010937,
              0.008461,
              0.006448,
              -0.005786,
              0.004251,
              -0.013087,
              0.002977,
              0.00819,
              0.000845,
              -0.01503,
              -0.014416,
              -0.000959,
              0.013313,
              -0.005762,
              0.002067,
              0.004587,
              0.022055,
              -0.003401,
              0.001916,
              -0.001477,
              -0.004317,
              -0.019222,
              -0.008712,
              0.013596,
              -0.000347,
              -0.009065,
              -0.000463,
              -0.001257,
              -0.005261,
              0.004553,
              -0.012928,
              -0.010092,
              -0.00059,
              -0.007615,
              0.017119,
              -0.013338,
              -0.006089,
              0.012117,
              0.016367,
              0.002061,
              0.001139,
              -0.017257,
              -0.000665,
              -0.008947,
              0.000609,
              0.021839,
              -0.010826,
              0.002841,
              0.001951,
              -0.003404,
              0.003122,
              0.003013,
              0.015499,
              0.020236,
              -0.007719,
              -0.002011,
              0.003386,
              -0.001359,
              0.012023,
              0.000961,
              0.008937,
              -0.000753,
              -0.028231,
              0.005139,
              -0.001166,
              0.005966,
              -0.011924,
              0.009752,
              0.010457,
              -0.000199,
              -0.016738,
              0.001022,
              0.005433,
              0.003096,
              0.0006,
              0.002228,
              -0.017246,
              -0.011228,
              -0.020622,
              0.009741,
              0.012772,
              0.003404,
              -0.003908,
              -0.008984,
              -0.000814,
              -0.022696,
              -0.001972,
              0.004675,
              -0.000933,
              -0.015595,
              0.001657,
              -0.010628,
              -0.000527,
              -0.009139,
              -0.00587,
              -0.011357,
              0.004861,
              -0.009659,
              -0.015855,
              -0.006604,
              -0.005845,
              -0.002768,
              0.005903,
              -0.00951,
              -0.005424,
              0.000457,
              0.018983,
              0.004286,
              0.013662,
              -0.008631,
              0.003531,
              0.000912,
              -0.018602,
              -0.004687,
              -0.016904,
              0.000894,
              0.00101,
              -0.001467,
              -0.014426,
              -0.00351,
              0.005983,
              -0.013143,
              -0.00345,
              -0.005084,
              0.009319,
              -0.007078,
              -0.006828,
              0.012212,
              -0.006276,
              0.01022,
              -0.01452,
              -0.004641,
              -0.002479,
              -0.002729,
              0.0192,
              0.001188,
              -0.008389,
              0.012928,
              -0.004732,
              0.010695,
              -0.01944,
              -0.003619,
              -0.006542,
              0.002616,
              0.006235,
              -0.014373,
              0.005552,
              -0.007615,
              -0.01575,
              -0.001048,
              0.008588,
              -0.005942,
              -0.0041,
              -0.003245,
              -0.007467,
              0.003649,
              0.001682,
              0.008666,
              0.001958,
              0.000471,
              -0.023063,
              -0.009793,
              -0.000602,
              0.007254,
              0.002173,
              0.010535,
              0.019484,
              0.003534,
              0.013919,
              -0.000796,
              -0.012619,
              0.011209,
              0.001546,
              0.000545,
              -0.00369,
              -0.008794,
              0.007748,
              -0.021979,
              0.00259,
              0.004601,
              0.004005,
              0.006019,
              0.007067,
              0.000473,
              0.01317,
              -0.015218,
              -0.003715,
              -0.0023,
              0.000023,
              -0.000084,
              -0.003739,
              0.005473,
              -0.017922,
              -0.002169,
              -0.000483,
              0.001692,
              -0.020054,
              0.006654,
              -0.001044,
              -0.012923,
              0.015904,
              -0.00658,
              0.006153,
              -0.002146,
              -0.000691,
              -0.010927,
              -0.004342,
              -0.011426,
              0.004418,
              0.003777,
              0.002299,
              -0.005798,
              -0.025346,
              -0.016124,
              -0.024896,
              -0.00642,
              0.002277
            ],
            [
              0.011729,
              -0.005773,
              -0.007699,
              0.006794,
              -0.000552,
              -0.008731,
              0.019041,
              0.033483,
              0.007347,
              -0.000291,
              0.001521,
              0.015613,
              -0.001193,
              0.010122,
              -0.00869,
              -0.019155,
              -0.006399,
              -0.004445,
              0.003505,
              0.004141,
              0.004318,
              0.001827,
              -0.003733,
              0.008366,
              -0.01758,
              -0.007719,
              -0.005996,
              -0.005417,
              0.007886,
              0.011099,
              -0.001841,
              0.021641,
              0.000632,
              -0.009277,
              0.001416,
              0.003799,
              0.008694,
              -0.002379,
              -0.009175,
              -0.002104,
              -0.00056,
              -0.002422,
              -0.01603,
              -0.003501,
              -0.008582,
              -0.008568,
              0.003612,
              0.002075,
              0.012406,
              -0.002588,
              0.015132,
              0.007146,
              -0.001863,
              0.008983,
              0.00495,
              -0.00158,
              0.018503,
              0.010479,
              -0.006045,
              -0.002337,
              0.001861,
              -0.014421,
              0.00303,
              -0.005246,
              -0.003122,
              0.000034,
              -0.014536,
              -0.012657,
              0.016035,
              0.007777,
              0.010025,
              0.017608,
              0.007086,
              -0.001172,
              -0.01303,
              0.001829,
              -0.007165,
              0.009146,
              -0.004829,
              0.005551,
              0.007639,
              -0.000074,
              -0.014306,
              -0.000761,
              -0.013949,
              0.002893,
              0.012667,
              -0.004379,
              -0.004138,
              -0.007296,
              0.004135,
              0.002569,
              0.012599,
              -0.00043,
              0.007188,
              0.017048,
              -0.009827,
              0.010878,
              0.005988,
              -0.003293,
              -0.005724,
              0.00403,
              -0.003844,
              0.009897,
              -0.003228,
              0.003344,
              -0.015898,
              0.004611,
              -0.008967,
              -0.006089,
              -0.010759,
              0.003398,
              -0.015596,
              0.004213,
              0.009417,
              -0.00463,
              0.009835,
              -0.006524,
              0.001871,
              -0.002942,
              0.003756,
              -0.001074,
              0.005464,
              0.002217,
              0.005844,
              -0.0083,
              0.016704,
              0.006948,
              0.011722,
              -0.006093,
              -0.008204,
              -0.007806,
              0.004224,
              -0.010366,
              0.002536,
              0.00412,
              0.016236,
              -0.010085,
              0.002869,
              -0.01268,
              0.001888,
              0.014263,
              -0.017421,
              -0.008968,
              -0.002271,
              -0.000096,
              0.001382,
              0.000378,
              -0.004642,
              -0.002268,
              -0.008866,
              0.005075,
              0.003363,
              0.002907,
              0.011057,
              -0.000787,
              0.014325,
              -0.022647,
              -0.005624,
              0.010579,
              0.000866,
              -0.003546,
              0.022907,
              0.007693,
              0.002303,
              -0.007771,
              -0.005333,
              0.004746,
              0.010793,
              0.003392,
              0.004414,
              -0.006833,
              -0.006227,
              -0.005267,
              0.001398,
              -0.002947,
              -0.004245,
              0.011868,
              0.000303,
              0.001265,
              -0.011969,
              0.01069,
              0.010384,
              0.007087,
              0.003364,
              0.000833,
              0.01531,
              -0.014459,
              0.002397,
              0.014341,
              0.008909,
              0.005115,
              -0.013495,
              0.009696,
              -0.005752,
              -0.013766,
              0.009333,
              0.010953,
              -0.017236,
              -0.013103,
              -0.019697,
              0.009537,
              -0.004786,
              -0.001116,
              0.005204,
              -0.017204,
              0.003276,
              -0.00737,
              -0.009889,
              0.007233,
              0.004274,
              -0.005628,
              0.015721,
              0.004893,
              0.006023,
              -0.007373,
              0.002966,
              -0.002997,
              -0.003431,
              0.01014,
              -0.007883,
              -0.00338,
              -0.004258,
              -0.007795,
              0.017959,
              0.002908,
              0.000229,
              -0.006163,
              -0.000723,
              -0.012504,
              0.005908,
              -0.025767,
              -0.00452,
              0.010136,
              0.001943,
              -0.019074,
              0.008654,
              0.009423,
              0.009538,
              -0.007598,
              -0.01274,
              -0.000106,
              -0.000541,
              0.006797,
              0.011531,
              -0.009658,
              -0.0114,
              -0.007155,
              -0.009824,
              0.002054,
              -0.007449,
              -0.010328
            ],
            [
              0.011256,
              -0.000223,
              0.001441,
              -0.001179,
              -0.012583,
              0.003316,
              0.010388,
              0.01025,
              0.01555,
              -0.002517,
              0.002669,
              0.001067,
              0.002634,
              0.010967,
              0.001981,
              0.00513,
              -0.004714,
              -0.002447,
              0.024113,
              0.001211,
              -0.003333,
              -0.010601,
              -0.008761,
              0.012841,
              0.016576,
              -0.005681,
              -0.010863,
              0.002369,
              0.006501,
              -0.004645,
              -0.006234,
              0.007844,
              0.00037,
              0.000444,
              0.010076,
              0.010562,
              -0.00168,
              -0.006651,
              -0.005482,
              -0.009678,
              0.002108,
              0.002485,
              0.004866,
              0.00583,
              -0.013947,
              -0.01345,
              -0.003561,
              -0.011908,
              -0.004512,
              0.015576,
              0.013835,
              -0.00485,
              0.003579,
              0.009374,
              -0.010021,
              -0.002477,
              0.000416,
              -0.004641,
              0.000633,
              0.006917,
              -0.027076,
              -0.00093,
              0.005321,
              -0.001833,
              0.01852,
              0.008322,
              0.001178,
              -0.020347,
              -0.003362,
              0.004747,
              -0.009566,
              -0.002999,
              -0.024022,
              0.011943,
              0.010809,
              0.005892,
              0.000108,
              0.024052,
              0.001224,
              0.003922,
              0.010204,
              0.004479,
              -0.008172,
              0.010669,
              -0.008238,
              0.007124,
              -0.005708,
              0.001868,
              -0.003056,
              0.011157,
              0.014347,
              0.005166,
              0.005869,
              -0.016238,
              0.006389,
              0.005478,
              0.011501,
              -0.010862,
              0.006021,
              -0.005646,
              0.01212,
              -0.014722,
              -0.016397,
              -0.000976,
              0.003076,
              0.00203,
              -0.002783,
              -0.009184,
              -0.007076,
              0.005028,
              0.004236,
              0.018429,
              0.007052,
              0.018105,
              -0.010309,
              -0.002394,
              0.00331,
              0.000534,
              0.011778,
              0.008003,
              0.006434,
              0.003531,
              0.004997,
              0.00461,
              -0.007504,
              0.001296,
              -0.01234,
              -0.00878,
              0.008247,
              0.007796,
              -0.001149,
              -0.00522,
              0.002953,
              -0.001744,
              -0.000605,
              -0.007237,
              -0.001682,
              0.001705,
              0.020191,
              -0.001263,
              -0.005979,
              0.033385,
              0.003368,
              0.00115,
              0.005386,
              -0.012863,
              0.003545,
              0.009453,
              0.022688,
              -0.006624,
              -0.001311,
              -0.009879,
              -0.001674,
              -0.007016,
              -0.002642,
              -0.020404,
              0.006088,
              0.00398,
              -0.006127,
              0.011828,
              0.010052,
              0.007447,
              0.004753,
              0.008225,
              -0.005209,
              -0.012407,
              -0.000213,
              0.011395,
              0.012609,
              -0.010347,
              0.006798,
              -0.004541,
              -0.004424,
              0.010899,
              0.003831,
              -0.003812,
              0.016229,
              -0.015076,
              0.001982,
              0.00495,
              -0.00768,
              0.013847,
              -0.005161,
              0.006032,
              0.014895,
              -0.00216,
              0.005364,
              0.008787,
              0.000558,
              -0.003571,
              0.004095,
              0.003615,
              0.011424,
              -0.00324,
              -0.005738,
              -0.007359,
              0.016256,
              -0.00762,
              0.002604,
              0.003739,
              0.002564,
              -0.000472,
              -0.006371,
              0.004742,
              0.020126,
              -0.021834,
              -0.002943,
              -0.000946,
              0.001758,
              0.014899,
              -0.011367,
              -0.000837,
              -0.018771,
              0.000841,
              -0.006678,
              -0.00388,
              -0.010419,
              -0.004883,
              -0.005978,
              0.006797,
              -0.00313,
              -0.002307,
              0.004947,
              -0.019637,
              -0.008832,
              -0.014962,
              -0.004709,
              -0.000226,
              0.000391,
              -0.007044,
              -0.003552,
              -0.006143,
              0.007567,
              -0.010228,
              -0.007883,
              0.012963,
              0.005235,
              -0.00732,
              -0.004037,
              -0.014201,
              -0.012702,
              0.003607,
              0.012718,
              0.00157,
              0.000148,
              -0.00375,
              -0.00369,
              -0.002591,
              0.000397,
              -0.000262,
              -0.001766,
              -0.000278
            ],
            [
              0.007631,
              0.004042,
              -0.003391,
              -0.001324,
              0.002492,
              0.003408,
              0.004977,
              0.005391,
              0.009904,
              0.00359,
              -0.013735,
              -0.002114,
              0.006711,
              0.010716,
              -0.009982,
              -0.011107,
              -0.012562,
              -0.018067,
              0.009087,
              -0.009137,
              0.001357,
              0.013068,
              -0.016555,
              0.013036,
              -0.010255,
              0.002186,
              0.006072,
              0.006931,
              -0.00557,
              0.013895,
              -0.011879,
              -0.001353,
              0.008163,
              -0.008732,
              0.007106,
              0.004134,
              -0.012348,
              0.002976,
              0.004026,
              -0.011379,
              0.009395,
              0.001386,
              -0.007777,
              -0.009859,
              -0.020942,
              -0.019683,
              -0.010013,
              0.00459,
              -0.006786,
              0.001025,
              0.006314,
              -0.009702,
              0.003731,
              0.0063,
              0.008087,
              -0.013245,
              0.000883,
              -0.00239,
              0.012924,
              -0.005082,
              -0.001465,
              -0.008386,
              0.003671,
              0.00183,
              0.003836,
              -0.014406,
              -0.004504,
              -0.006225,
              -0.006222,
              0.015315,
              0.000619,
              0.01276,
              0.013281,
              0.017771,
              -0.002314,
              -0.00229,
              0.007379,
              0.010253,
              0.002479,
              -0.002408,
              0.009221,
              0.011061,
              -0.007428,
              0.002185,
              -0.016834,
              0.016038,
              -0.009821,
              0.011365,
              0.005714,
              -0.002801,
              0.001172,
              0.009558,
              -0.009161,
              -0.015026,
              0.014644,
              0.007483,
              -0.012905,
              -0.005553,
              0.00531,
              -0.008305,
              -0.009963,
              0.004821,
              0.000998,
              -0.003496,
              -0.007968,
              -0.002101,
              0.005229,
              -0.000745,
              -0.000517,
              0.01048,
              0.002966,
              -0.001683,
              0.029784,
              0.002484,
              -0.007352,
              0.020163,
              0.010221,
              0.001169,
              -0.004935,
              0.005096,
              -0.000041,
              0.004792,
              0.003576,
              0.006878,
              0.012652,
              -0.020815,
              0.029841,
              0.031106,
              0.002828,
              0.00235,
              0.010255,
              0.00582,
              0.011567,
              0.004781,
              -0.002398,
              0.001545,
              0.016446,
              -0.003486,
              0.001459,
              0.006074,
              -0.000095,
              0.019416,
              -0.007524,
              0.006644,
              -0.012779,
              -0.007376,
              0.017699,
              0.011036,
              -0.006762,
              -0.021686,
              0.004537,
              0.013187,
              0.010867,
              0.010066,
              -0.005867,
              -0.001485,
              -0.00612,
              0.003709,
              -0.0066,
              0.013079,
              -0.006814,
              0.005428,
              -0.002822,
              0.011532,
              -0.001725,
              -0.003191,
              0.008966,
              0.013052,
              0.0041,
              -0.001376,
              0.008191,
              -0.001881,
              0.007918,
              0.007948,
              0.006348,
              -0.003603,
              -0.009235,
              0.000673,
              -0.008589,
              -0.017069,
              -0.002686,
              0.014393,
              0.004456,
              -0.01166,
              0.006483,
              -0.00938,
              -0.003064,
              -0.001005,
              -0.003182,
              0.009465,
              0.011355,
              0.004696,
              -0.017993,
              0.020861,
              -0.016795,
              -0.007922,
              -0.000219,
              -0.009241,
              -0.009295,
              -0.01554,
              0.006853,
              0.000789,
              -0.001668,
              -0.007994,
              0.007739,
              -0.007413,
              0.002101,
              0.00182,
              0.004953,
              0.003292,
              0.00232,
              -0.003627,
              0.012066,
              0.007845,
              0.002976,
              0.008208,
              0.002466,
              0.005215,
              -0.007241,
              0.003357,
              0.000656,
              -0.000032,
              0.009229,
              -0.004244,
              0.006663,
              0.00577,
              0.003643,
              0.010436,
              -0.00003,
              -0.002328,
              -0.002684,
              -0.007725,
              -0.004625,
              0.019142,
              -0.003996,
              -0.017522,
              -0.010835,
              0.004204,
              -0.024369,
              -0.015649,
              -0.011136,
              0.005935,
              -0.001589,
              -0.004825,
              0.001895,
              0.00843,
              -0.000644,
              0.006872,
              -0.010314,
              -0.012681,
              0.002772,
              0.007539
            ],
            [
              0.002048,
              0.005523,
              -0.008066,
              -0.003909,
              0.010556,
              -0.002183,
              0.011698,
              -0.001406,
              0.018,
              0.006978,
              -0.002558,
              0.01189,
              0.010698,
              0.00931,
              -0.001249,
              -0.003277,
              -0.008838,
              -0.013396,
              0.000021,
              -0.009976,
              0.002116,
              -0.005387,
              -0.007579,
              0.00689,
              0.008725,
              -0.012971,
              -0.000674,
              -0.009595,
              0.023219,
              0.008246,
              -0.000345,
              0.001351,
              -0.003896,
              -0.006942,
              0.017163,
              -0.001102,
              -0.008344,
              0.020793,
              0.012062,
              -0.00376,
              0.016507,
              -0.006928,
              0.000304,
              0.006745,
              -0.013109,
              -0.012801,
              0.003163,
              0.025392,
              0.016923,
              0.004972,
              0.000482,
              -0.00692,
              -0.00272,
              -0.016127,
              -0.005475,
              0.011086,
              0.001796,
              -0.008449,
              -0.008578,
              0.001564,
              -0.021133,
              -0.014325,
              -0.000398,
              0.002364,
              -0.002013,
              0.000277,
              -0.010549,
              -0.000514,
              0.0089,
              0.011132,
              -0.015534,
              -0.014591,
              0.008161,
              0.001962,
              0.008913,
              0.022393,
              0.026505,
              -0.002767,
              -0.002542,
              -0.006752,
              0.003652,
              0.019488,
              -0.033398,
              0.007073,
              -0.00783,
              0.015248,
              0.004515,
              0.014988,
              -0.004112,
              -0.010998,
              0.006237,
              0.015724,
              -0.011523,
              -0.002247,
              0.008054,
              0.000407,
              0.006845,
              0.000312,
              0.003805,
              -0.011588,
              0.002502,
              -0.004538,
              0.028605,
              0.010201,
              -0.001033,
              0.011886,
              0.00564,
              0.017292,
              0.005632,
              0.009578,
              -0.015656,
              -0.004341,
              0.024859,
              -0.024528,
              0.017137,
              0.016584,
              0.020839,
              0.006452,
              -0.007646,
              -0.018027,
              0.001231,
              -0.003496,
              0.000994,
              0.009503,
              -0.002081,
              -0.00169,
              0.001376,
              -0.001782,
              0.006596,
              -0.013976,
              -0.008982,
              0.007135,
              0.002409,
              0.003218,
              0.001068,
              -0.003573,
              0.002234,
              -0.00098,
              -0.006153,
              0.008412,
              0.002468,
              0.015212,
              0.001556,
              -0.009053,
              -0.007837,
              0.00353,
              0.028753,
              -0.006503,
              -0.005639,
              -0.003013,
              -0.028265,
              -0.004795,
              -0.012861,
              -0.014399,
              0.002507,
              0.004764,
              0.000413,
              -0.012965,
              -0.007046,
              0.014343,
              -0.004563,
              -0.004432,
              -0.012528,
              0.004261,
              -0.008489,
              0.001216,
              0.017456,
              0.007674,
              -0.001264,
              0.004878,
              0.008573,
              0.000756,
              0.003848,
              0.000074,
              0.008992,
              -0.0025,
              0.009588,
              0.006549,
              0.011056,
              0.023766,
              0.00169,
              0.012332,
              0.004776,
              0.012552,
              0.002776,
              -0.026795,
              0.006117,
              -0.014597,
              0.009576,
              -0.013017,
              0.005232,
              0.006244,
              0.000137,
              0.003258,
              -0.010708,
              -0.002772,
              0.002943,
              0.005565,
              -0.001682,
              0.002634,
              0.004574,
              0.006207,
              -0.014891,
              0.006187,
              0.01193,
              -0.002907,
              0.020392,
              0.00402,
              -0.007208,
              0.004126,
              -0.009064,
              -0.008286,
              -0.016542,
              -0.000151,
              0.012171,
              -0.007094,
              0.017559,
              -0.009326,
              -0.007272,
              0.000138,
              -0.003668,
              -0.017945,
              0.017881,
              0.00225,
              0.00138,
              -0.015835,
              0.008341,
              -0.003081,
              0.009376,
              -0.012552,
              -0.001771,
              -0.008746,
              -0.000842,
              -0.000032,
              -0.004745,
              0.010096,
              0.007954,
              0.016613,
              -0.013507,
              0.000423,
              -0.026589,
              0.019477,
              -0.021889,
              0.002099,
              0.005214,
              -0.003103,
              0.001465,
              -0.003244,
              -0.019464,
              0.005564,
              -0.01604,
              0.009813
            ]
          ],
          "default_with": [
            "names"
          ],
          "description": "2-D array [strategy][time] of simple periodic returns as decimals (0.012 = 1.2%). At least 2 strategies, all the same length, at least 60 observations and at least 4 observations per block (T >= 8s). Sharpe annualization assumes daily rows (x sqrt(252))."
        },
        "s": {
          "type": "number",
          "default": 8,
          "minimum": 2,
          "maximum": 8,
          "description": "Half the number of CSCV time blocks: the series is cut into S = 2s blocks and every choice of s blocks is an in-sample set (C(2s, s) splits)."
        },
        "seed": {
          "type": "number",
          "default": 42,
          "description": "Seed for the split sample (only used when C(2s, s) > max_combos)."
        }
      },
      "page": "https://aifinhub.io/backtest-overfitting-score/",
      "contract": "https://aifinhub.io/contracts/backtest-overfitting-score.json"
    },
    {
      "calculator": "data-vendor-tco",
      "title": "Market Data API Cost Calculator",
      "category": "Comparators",
      "summary": "Compute annual cost of market data across Databento, Massive (formerly Polygon), Alpaca, Tiingo, FMP, and Alpha Vantage for your exact universe, bar resolution, and real-time needs.",
      "run": "https://aifinhub.io/api/run/data-vendor-tco",
      "example": "https://aifinhub.io/api/run/data-vendor-tco?universe=medium&resolution=minute&history=5-year&needs_live=true&needs_options=false&needs_futures=false&needs_depth=false&business_use=false&market=us-equities",
      "inputs": {
        "business_use": {
          "type": "boolean",
          "default": false,
          "description": "Business (commercial) use. Boolean true/false (default false). Personal-only plans then do not fit (with the vendor's words); business plans and plans for both pass; a vendor whose business plans are not priced here is not on record."
        },
        "depth_history_years": {
          "type": "number",
          "minimum": 0,
          "maximum": 30,
          "description": "Years of order-book (L2/L3) history required (decimals allowed: 0.25 = 3 months). Optional, no default: left out, order-book depth needs no history, so a plan with live depth and 1 month of L2/L3 history fits. A plan with less L2/L3 history than asked is a conditional fit."
        },
        "history": {
          "type": "string",
          "enum": [
            "1-year",
            "5-year",
            "10-year",
            "20-plus-year"
          ],
          "default": "5-year",
          "default_with": [
            "resolution",
            "needs_depth"
          ],
          "description": "History depth needed for the bars. Excludes tiers whose plan states less at the requested resolution (a tier can state its intraday depth apart from its price history); tiers with no stated depth stay eligible and are flagged historyVerified=false. Left out, 5 years is assumed for bars only and sentences mark it (assumed); it never sets order-book history. With resolution level2, a history you state is the order-book history required."
        },
        "market": {
          "type": "string",
          "enum": [
            "us-equities",
            "crypto",
            "forex",
            "non-us-equities"
          ],
          "default": "us-equities",
          "description": "Market the data is for (default us-equities). This dataset prices US equities, US equity options (Alpaca, Alpha Vantage) and CME futures; crypto, forex and non-us-equities are outside it, so every vendor returns not-on-record with outOfCoverage true."
        },
        "needs_depth": {
          "type": "boolean",
          "default": false,
          "description": "Order-book depth (L2/L3: MBP-10 or MBO) required, live when needs_live is true. Boolean true/false (default false). A plan fits only if its L2/L3 history also covers the history requested; a plan with depth but a shorter L2/L3 history (Databento Standard and Plus keep 1 month) is a conditional fit. Resolution level2 asks for years of order-book history directly."
        },
        "needs_futures": {
          "type": "boolean",
          "default": false,
          "description": "Futures data required. Boolean true/false (default false)."
        },
        "needs_live": {
          "type": "boolean",
          "default": true,
          "description": "Real-time data required. Boolean true/false (default true)."
        },
        "needs_options": {
          "type": "boolean",
          "default": false,
          "description": "Options data required. Boolean true/false (default false)."
        },
        "resolution": {
          "type": "string",
          "enum": [
            "daily",
            "minute",
            "second",
            "tick",
            "level2"
          ],
          "default": "minute",
          "description": "Bar resolution needed."
        },
        "symbols": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1000000,
          "description": "Optional exact number of symbols. Replaces the universe size in the plan-limit checks, so a 30-symbol live stream fits 25 symbols but not a small universe of up to 50."
        },
        "universe": {
          "type": "string",
          "enum": [
            "small",
            "medium",
            "large",
            "all-us-equities"
          ],
          "default": "medium",
          "description": "Symbols covered: small (<=50), medium (~500), large (~2,000), all-us-equities (~10,000); the plan-limit checks use 50, 500, 2,000 and 10,000 unless symbols gives the exact count. Every plan is priced per plan, not per symbol, so it moves no price, but a plan whose stated symbol or request cap is under it does not fit (Tiingo Starter covers 500 unique symbols a month; Alpaca Basic streams 30 symbols in real time)."
        },
        "vendor_id": {
          "type": "string",
          "enum": [
            "databento",
            "polygon",
            "alpaca",
            "tiingo",
            "fmp",
            "alpha-vantage"
          ],
          "description": "Optional: score only this vendor."
        }
      },
      "page": "https://aifinhub.io/data-vendor-tco/",
      "contract": "https://aifinhub.io/contracts/data-vendor-tco.json"
    },
    {
      "calculator": "finance-mcp-directory",
      "title": "Finance MCP Directory",
      "category": "Directories",
      "summary": "Security-graded catalog of finance MCP servers from Alpaca, Massive, IBKR, Tradier, TradeStation, Robinhood and tastytrade: scope, auth, idempotency.",
      "run": "https://aifinhub.io/api/run/finance-mcp-directory",
      "example": "https://aifinhub.io/api/run/finance-mcp-directory",
      "inputs": {
        "grade": {
          "type": "string",
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "F",
            "a",
            "b",
            "c",
            "d",
            "f"
          ],
          "description": "Exact overall grade. Case-insensitive."
        },
        "min_grade": {
          "type": "string",
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "F",
            "a",
            "b",
            "c",
            "d",
            "f"
          ],
          "description": "Minimum overall grade (B = A or B). Case-insensitive."
        },
        "q": {
          "type": "string",
          "default": "",
          "description": "Case-insensitive text search over name, description, vendor and capabilities."
        },
        "scope": {
          "type": "string",
          "enum": [
            "all",
            "read-only",
            "read-write",
            "execution",
            "full"
          ],
          "description": "Exact scope, or all."
        },
        "source": {
          "type": "string",
          "enum": [
            "all",
            "official",
            "community"
          ],
          "description": "official = vendor-published, community = third-party, or all."
        },
        "vendor": {
          "type": "string",
          "enum": [
            "all",
            "alpaca",
            "polygon",
            "databento",
            "ibkr",
            "tradier",
            "robinhood",
            "tastytrade",
            "tradestation",
            "tiingo",
            "community"
          ],
          "description": "Vendor, or all."
        }
      },
      "page": "https://aifinhub.io/finance-mcp-directory/",
      "contract": "https://aifinhub.io/contracts/finance-mcp-directory.json"
    },
    {
      "calculator": "token-cost-optimizer",
      "title": "Token-Cost Optimizer",
      "category": "Calculators",
      "summary": "Compute the dollar cost of a trading research loop across Claude, GPT and Gemini: prompt length × model × retries × call volume → cost per idea and per validated trade.",
      "run": "https://aifinhub.io/api/run/token-cost-optimizer",
      "example": "https://aifinhub.io/api/run/token-cost-optimizer?model_id=claude-sonnet-5-5&input_tokens_per_call=8000&output_tokens_per_call=1500&calls_per_idea=5&retry_rate=0.15&ideas_per_day=10&validation_rate=0.3&cache_hit_rate=0.5",
      "inputs": {
        "cache_hit_rate": {
          "type": "number",
          "default": 0.5,
          "minimum": 0,
          "maximum": 1,
          "description": "Fraction of input tokens billed at the cache-read rate; applied to Anthropic models only."
        },
        "calls_per_idea": {
          "type": "number",
          "default": 5,
          "minimum": 0,
          "description": "Model calls in one research loop."
        },
        "ideas_per_day": {
          "type": "number",
          "default": 10,
          "minimum": 0,
          "description": "Research loops run per day."
        },
        "input_tokens_per_call": {
          "type": "number",
          "default": 8000,
          "minimum": 0,
          "description": "Prompt plus context tokens per call."
        },
        "model_id": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "claude-sonnet-5-5",
          "description": "Model priced in the table. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini)."
        },
        "output_tokens_per_call": {
          "type": "number",
          "default": 1500,
          "minimum": 0,
          "description": "Generated tokens per call."
        },
        "retry_rate": {
          "type": "number",
          "default": 0.15,
          "minimum": 0,
          "maximum": 1,
          "description": "Extra calls as a fraction of calls (0.15 = 15% more calls)."
        },
        "validation_rate": {
          "type": "number",
          "default": 0.3,
          "minimum": 0,
          "maximum": 1,
          "description": "Fraction of ideas that become validated trades (0.3 = 30%); 0 gives an infinite cost per trade."
        }
      },
      "page": "https://aifinhub.io/token-cost-optimizer/",
      "contract": "https://aifinhub.io/contracts/token-cost-optimizer.json"
    },
    {
      "calculator": "agent-skill-tester",
      "title": "Agent Skill Tester for Markets",
      "category": "Playgrounds",
      "summary": "Paste a SKILL.md definition + sample input + your Anthropic API key. See structured extraction, token cost, and latency — all in your browser. No signup, key never leaves the page.",
      "run": "https://aifinhub.io/api/run/agent-skill-tester",
      "example": "https://aifinhub.io/api/run/agent-skill-tester?runs=%5B%7B%22prompt%22%3A%22Extract+revenue+and+net+income+from%3A+Q3+revenue+was+%244.2+billion+and+net+income+%24610+million.%22%2C%22agent_response%22%3A%22%7B%5C%22revenue_usd%5C%22%3A+4200000000%2C+%5C%22net_income_usd%5C%22%3A+610000000%7D%22%2C%22criteria%22%3A%5B%22valid_json%22%2C%22has_field%3Arevenue_usd%22%2C%22numbers_grounded_in_prompt%22%2C%22no_apology%22%5D%7D%5D",
      "inputs": {
        "runs": {
          "type": "array",
          "default": [
            {
              "prompt": "Extract revenue and net income from: Q3 revenue was $4.2 billion and net income $610 million.",
              "agent_response": "{\"revenue_usd\": 4200000000, \"net_income_usd\": 610000000}",
              "criteria": [
                "valid_json",
                "has_field:revenue_usd",
                "numbers_grounded_in_prompt",
                "no_apology"
              ]
            }
          ],
          "description": "Array of runs to score. Each item: { prompt: string (the input document the agent saw), agent_response: string (the agent's output), criteria: string[] (at least one) }. Criteria: valid_json, non_empty, no_apology, refuses, cites_source, numbers_grounded_in_prompt, has_field:<dotted.path>, field_type:<dotted.path>:<string|number|integer|boolean|array|object|null>, min_length:<n>, max_length:<n>, contains:<text>, not_contains:<text>, regex:<pattern>. Unknown criteria return verdict \"error\"."
        }
      },
      "page": "https://aifinhub.io/agent-skill-tester/",
      "contract": "https://aifinhub.io/contracts/agent-skill-tester.json"
    },
    {
      "calculator": "prompt-regression-tester",
      "title": "Prompt Regression Tester",
      "category": "Playgrounds",
      "summary": "Run the same prompt against current Claude, GPT and Gemini models with your own keys. Diff outputs, score drift, catch regressions.",
      "run": "https://aifinhub.io/api/run/prompt-regression-tester",
      "example": "https://aifinhub.io/api/run/prompt-regression-tester?baseline=Q3+revenue+rose+12%25+to+%244.2+billion%3B+net+income+was+%24610+million.&candidates=%5B%7B%22label%22%3A%22new+model%22%2C%22output%22%3A%22Revenue+grew+12%25+to+%244.2B+in+Q3%2C+with+net+income+of+%24610M.%22%7D%2C%7B%22label%22%3A%22prompt+v2%22%2C%22output%22%3A%22Q3+revenue+rose+12%25+to+%244.2+billion%3B+net+income+was+%24610+million.%22%7D%5D&n=3",
      "inputs": {
        "baseline": {
          "type": "string",
          "default": "Q3 revenue rose 12% to $4.2 billion; net income was $610 million.",
          "description": "Reference output text (for example the current model's answer)."
        },
        "candidate": {
          "type": "string",
          "description": "A single candidate output string; shorthand for one-element candidates."
        },
        "candidates": {
          "type": "array",
          "default": [
            {
              "label": "new model",
              "output": "Revenue grew 12% to $4.2B in Q3, with net income of $610M."
            },
            {
              "label": "prompt v2",
              "output": "Q3 revenue rose 12% to $4.2 billion; net income was $610 million."
            }
          ],
          "default_with": [
            "candidate"
          ],
          "description": "Array of {label?: string, output: string} to compare against the baseline. Use this or candidate."
        },
        "n": {
          "type": "number",
          "default": 3,
          "minimum": 2,
          "maximum": 5,
          "description": "Character n-gram width."
        }
      },
      "page": "https://aifinhub.io/prompt-regression-tester/",
      "contract": "https://aifinhub.io/contracts/prompt-regression-tester.json"
    },
    {
      "calculator": "hallucination-detector",
      "title": "Hallucination Detector",
      "category": "Playgrounds",
      "summary": "Paste a source document + an LLM's extraction. Every numeric claim in the output is checked against the source. Client-side. Catches silent fabrication before it ends up in your pipeline.",
      "run": "https://aifinhub.io/api/run/hallucination-detector",
      "example": "https://aifinhub.io/api/run/hallucination-detector?source=Q3+2026+revenue+was+%244.21+billion%2C+up+12%25+year+over+year.+Net+income+was+%24610+million+and+diluted+EPS+was+%241.45.+The+company+repurchased+3.2+million+shares.&output=Revenue+reached+%244.21+billion+in+Q3+2026%2C+up+12%25.+Net+income+came+in+at+%24640+million%2C+or+%241.45+per+diluted+share.",
      "inputs": {
        "output": {
          "type": "string",
          "default": "Revenue reached $4.21 billion in Q3 2026, up 12%. Net income came in at $640 million, or $1.45 per diluted share.",
          "description": "LLM output to audit."
        },
        "source": {
          "type": "string",
          "default": "Q3 2026 revenue was $4.21 billion, up 12% year over year. Net income was $610 million and diluted EPS was $1.45. The company repurchased 3.2 million shares.",
          "description": "Source document text the output should be grounded in."
        }
      },
      "page": "https://aifinhub.io/hallucination-detector/",
      "contract": "https://aifinhub.io/contracts/hallucination-detector.json"
    },
    {
      "calculator": "kalshi-poly-arb",
      "title": "Kalshi vs Polymarket Arbitrage Calculator",
      "category": "Comparators",
      "summary": "Check a Kalshi vs Polymarket arbitrage after both venues' published fees: enter the YES and NO asks, get both trade directions, fees and net profit.",
      "run": "https://aifinhub.io/api/run/kalshi-poly-arb",
      "example": "https://aifinhub.io/api/run/kalshi-poly-arb?kalshi_yes_ask=0.52&kalshi_no_ask=0.49&poly_yes_ask=0.55&poly_no_ask=0.46",
      "inputs": {
        "contracts": {
          "type": "number",
          "minimum": 1,
          "description": "Number of YES + NO pairs to buy (whole number, 1 or more); each pair pays $1."
        },
        "days_to_resolution": {
          "type": "number",
          "minimum": 0,
          "description": "Days until both contracts settle, for the annualized return."
        },
        "kalshi": {
          "type": "string",
          "description": "Alternative nested form: { yes_ask, no_ask } (with polymarket). When given, the flat ask params are ignored."
        },
        "kalshi_fee_multiplier": {
          "type": "number",
          "minimum": 0,
          "description": "The Kalshi series fee multiplier M (fee_multiplier in Kalshi's series API); 1 on nearly every series."
        },
        "kalshi_no_ask": {
          "type": "number",
          "default": 0.49,
          "minimum": 0,
          "maximum": 1,
          "description": "Kalshi NO ask, between 0 and 1."
        },
        "kalshi_order": {
          "type": "string",
          "enum": [
            "taker",
            "maker_fee_series",
            "maker"
          ],
          "description": "Kalshi order type: taker (fee rate 0.07), maker_fee_series (a resting order on a series with maker fees, 0.0175) or maker (a resting order on any other series, no fee)."
        },
        "kalshi_yes_ask": {
          "type": "number",
          "default": 0.52,
          "minimum": 0,
          "maximum": 1,
          "description": "Kalshi YES ask as a price between 0 and 1 (0.52 = 52 cents)."
        },
        "poly_no_ask": {
          "type": "number",
          "default": 0.46,
          "minimum": 0,
          "maximum": 1,
          "description": "Polymarket NO ask, between 0 and 1."
        },
        "poly_yes_ask": {
          "type": "number",
          "default": 0.55,
          "minimum": 0,
          "maximum": 1,
          "description": "Polymarket YES ask, between 0 and 1."
        },
        "polymarket": {
          "type": "string",
          "description": "Alternative nested form: { yes_ask, no_ask } (with kalshi)."
        },
        "polymarket_category": {
          "type": "string",
          "enum": [
            "crypto",
            "sports",
            "finance",
            "politics",
            "economics",
            "culture",
            "weather",
            "other",
            "mentions",
            "tech",
            "geopolitics"
          ],
          "description": "The Polymarket market's category, which sets its taker fee rate (crypto 0.07; sports, economics, culture, weather, other 0.05; finance, politics, mentions, tech 0.04; geopolitics 0)."
        },
        "polymarket_fee_rate": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Optional override for the Polymarket taker fee rate (for a changed schedule); ignored for maker orders."
        },
        "polymarket_order": {
          "type": "string",
          "enum": [
            "taker",
            "maker"
          ],
          "description": "taker pays the category rate; maker (a resting order) pays no fee."
        },
        "question": {
          "type": "string",
          "description": "Optional event text, echoed back."
        }
      },
      "page": "https://aifinhub.io/kalshi-poly-arb/",
      "contract": "https://aifinhub.io/contracts/kalshi-poly-arb.json"
    },
    {
      "calculator": "order-book-replay",
      "title": "Order Book Replay Visualizer",
      "category": "Playgrounds",
      "summary": "Drop a Level-2 snapshot CSV and replay the book snapshot by snapshot. Animated depth bars, best bid/ask, spread and imbalance. Understand microstructure before.",
      "run": "https://aifinhub.io/api/run/order-book-replay",
      "example": "https://aifinhub.io/api/run/order-book-replay",
      "inputs": {
        "depth_bps": {
          "type": "number",
          "default": 10,
          "minimum": 1,
          "maximum": 1000,
          "description": "Window around mid, in basis points, for the cumulative depth sums."
        },
        "snapshots": {
          "type": "array",
          "default": [
            {
              "t": 0,
              "bids": [
                {
                  "price": 100.01,
                  "size": 200
                },
                {
                  "price": 100,
                  "size": 350
                },
                {
                  "price": 99.99,
                  "size": 500
                },
                {
                  "price": 99.98,
                  "size": 650
                },
                {
                  "price": 99.97,
                  "size": 800
                }
              ],
              "asks": [
                {
                  "price": 100.03,
                  "size": 180
                },
                {
                  "price": 100.04,
                  "size": 320
                },
                {
                  "price": 100.05,
                  "size": 460
                },
                {
                  "price": 100.06,
                  "size": 600
                },
                {
                  "price": 100.07,
                  "size": 740
                }
              ]
            },
            {
              "t": 500,
              "bids": [
                {
                  "price": 100.01,
                  "size": 250
                },
                {
                  "price": 100,
                  "size": 400
                },
                {
                  "price": 99.99,
                  "size": 550
                },
                {
                  "price": 99.98,
                  "size": 700
                },
                {
                  "price": 99.97,
                  "size": 850
                }
              ],
              "asks": [
                {
                  "price": 100.03,
                  "size": 220
                },
                {
                  "price": 100.04,
                  "size": 360
                },
                {
                  "price": 100.05,
                  "size": 500
                },
                {
                  "price": 100.06,
                  "size": 640
                },
                {
                  "price": 100.07,
                  "size": 780
                }
              ]
            },
            {
              "t": 1000,
              "bids": [
                {
                  "price": 100.03,
                  "size": 300
                },
                {
                  "price": 100.02,
                  "size": 450
                },
                {
                  "price": 100.01,
                  "size": 600
                },
                {
                  "price": 100,
                  "size": 750
                },
                {
                  "price": 99.99,
                  "size": 900
                }
              ],
              "asks": [
                {
                  "price": 100.05,
                  "size": 260
                },
                {
                  "price": 100.06,
                  "size": 400
                },
                {
                  "price": 100.07,
                  "size": 540
                },
                {
                  "price": 100.08,
                  "size": 680
                },
                {
                  "price": 100.09,
                  "size": 820
                }
              ]
            },
            {
              "t": 1500,
              "bids": [
                {
                  "price": 100.03,
                  "size": 200
                },
                {
                  "price": 100.02,
                  "size": 350
                },
                {
                  "price": 100.01,
                  "size": 500
                },
                {
                  "price": 100,
                  "size": 650
                },
                {
                  "price": 99.99,
                  "size": 800
                }
              ],
              "asks": [
                {
                  "price": 100.05,
                  "size": 300
                },
                {
                  "price": 100.06,
                  "size": 440
                },
                {
                  "price": 100.07,
                  "size": 580
                },
                {
                  "price": 100.08,
                  "size": 720
                },
                {
                  "price": 100.09,
                  "size": 860
                }
              ]
            },
            {
              "t": 2000,
              "bids": [
                {
                  "price": 100.03,
                  "size": 250
                },
                {
                  "price": 100.02,
                  "size": 400
                },
                {
                  "price": 100.01,
                  "size": 550
                },
                {
                  "price": 100,
                  "size": 700
                },
                {
                  "price": 99.99,
                  "size": 850
                }
              ],
              "asks": [
                {
                  "price": 100.05,
                  "size": 180
                },
                {
                  "price": 100.06,
                  "size": 320
                },
                {
                  "price": 100.07,
                  "size": 460
                },
                {
                  "price": 100.08,
                  "size": 600
                },
                {
                  "price": 100.09,
                  "size": 740
                }
              ]
            },
            {
              "t": 2500,
              "bids": [
                {
                  "price": 100.04,
                  "size": 300
                },
                {
                  "price": 100.03,
                  "size": 450
                },
                {
                  "price": 100.02,
                  "size": 600
                },
                {
                  "price": 100.01,
                  "size": 750
                },
                {
                  "price": 100,
                  "size": 900
                }
              ],
              "asks": [
                {
                  "price": 100.06,
                  "size": 220
                },
                {
                  "price": 100.07,
                  "size": 360
                },
                {
                  "price": 100.08,
                  "size": 500
                },
                {
                  "price": 100.09,
                  "size": 640
                },
                {
                  "price": 100.1,
                  "size": 780
                }
              ]
            },
            {
              "t": 3000,
              "bids": [
                {
                  "price": 100.05,
                  "size": 200
                },
                {
                  "price": 100.04,
                  "size": 350
                },
                {
                  "price": 100.03,
                  "size": 500
                },
                {
                  "price": 100.02,
                  "size": 650
                },
                {
                  "price": 100.01,
                  "size": 800
                }
              ],
              "asks": [
                {
                  "price": 100.07,
                  "size": 260
                },
                {
                  "price": 100.08,
                  "size": 400
                },
                {
                  "price": 100.09,
                  "size": 540
                },
                {
                  "price": 100.1,
                  "size": 680
                },
                {
                  "price": 100.11,
                  "size": 820
                }
              ]
            },
            {
              "t": 3500,
              "bids": [
                {
                  "price": 100.06,
                  "size": 250
                },
                {
                  "price": 100.05,
                  "size": 400
                },
                {
                  "price": 100.04,
                  "size": 550
                },
                {
                  "price": 100.03,
                  "size": 700
                },
                {
                  "price": 100.02,
                  "size": 850
                }
              ],
              "asks": [
                {
                  "price": 100.08,
                  "size": 300
                },
                {
                  "price": 100.09,
                  "size": 440
                },
                {
                  "price": 100.1,
                  "size": 580
                },
                {
                  "price": 100.11,
                  "size": 720
                },
                {
                  "price": 100.12,
                  "size": 860
                }
              ]
            },
            {
              "t": 4000,
              "bids": [
                {
                  "price": 100.05,
                  "size": 300
                },
                {
                  "price": 100.04,
                  "size": 450
                },
                {
                  "price": 100.03,
                  "size": 600
                },
                {
                  "price": 100.02,
                  "size": 750
                },
                {
                  "price": 100.01,
                  "size": 900
                }
              ],
              "asks": [
                {
                  "price": 100.07,
                  "size": 180
                },
                {
                  "price": 100.08,
                  "size": 320
                },
                {
                  "price": 100.09,
                  "size": 460
                },
                {
                  "price": 100.1,
                  "size": 600
                },
                {
                  "price": 100.11,
                  "size": 740
                }
              ]
            },
            {
              "t": 4500,
              "bids": [
                {
                  "price": 100.06,
                  "size": 200
                },
                {
                  "price": 100.05,
                  "size": 350
                },
                {
                  "price": 100.04,
                  "size": 500
                },
                {
                  "price": 100.03,
                  "size": 650
                },
                {
                  "price": 100.02,
                  "size": 800
                }
              ],
              "asks": [
                {
                  "price": 100.08,
                  "size": 220
                },
                {
                  "price": 100.09,
                  "size": 360
                },
                {
                  "price": 100.1,
                  "size": 500
                },
                {
                  "price": 100.11,
                  "size": 640
                },
                {
                  "price": 100.12,
                  "size": 780
                }
              ]
            },
            {
              "t": 5000,
              "bids": [
                {
                  "price": 100.06,
                  "size": 250
                },
                {
                  "price": 100.05,
                  "size": 400
                },
                {
                  "price": 100.04,
                  "size": 550
                },
                {
                  "price": 100.03,
                  "size": 700
                },
                {
                  "price": 100.02,
                  "size": 850
                }
              ],
              "asks": [
                {
                  "price": 100.08,
                  "size": 260
                },
                {
                  "price": 100.09,
                  "size": 400
                },
                {
                  "price": 100.1,
                  "size": 540
                },
                {
                  "price": 100.11,
                  "size": 680
                },
                {
                  "price": 100.12,
                  "size": 820
                }
              ]
            },
            {
              "t": 5500,
              "bids": [
                {
                  "price": 100.04,
                  "size": 300
                },
                {
                  "price": 100.03,
                  "size": 450
                },
                {
                  "price": 100.02,
                  "size": 600
                },
                {
                  "price": 100.01,
                  "size": 750
                },
                {
                  "price": 100,
                  "size": 900
                }
              ],
              "asks": [
                {
                  "price": 100.06,
                  "size": 300
                },
                {
                  "price": 100.07,
                  "size": 440
                },
                {
                  "price": 100.08,
                  "size": 580
                },
                {
                  "price": 100.09,
                  "size": 720
                },
                {
                  "price": 100.1,
                  "size": 860
                }
              ]
            }
          ],
          "description": "Array of snapshots, each {t?: number (unix ms), bids: [{price, size}], asks: [{price, size}]}. Prices must be > 0, sizes >= 0; levels with size 0 are ignored. Order within a side does not matter."
        }
      },
      "page": "https://aifinhub.io/order-book-replay/",
      "contract": "https://aifinhub.io/contracts/order-book-replay.json"
    },
    {
      "calculator": "calibration-dojo",
      "title": "Calibration Dojo",
      "category": "Playgrounds",
      "summary": "Train your probabilistic intuition. Answer binary forecasting questions at any confidence level; track Brier score and reliability curve over time. All state stored locally.",
      "run": "https://aifinhub.io/api/run/calibration-dojo",
      "example": "https://aifinhub.io/api/run/calibration-dojo",
      "inputs": {
        "answers": {
          "type": "array",
          "description": "For op=score: array of { probability: number 0-1 (forecast that the statement is true), actual?: 0 or 1, questionId?: string }. actual may be omitted for a bank question (questionId from op=list); the bank truth is used."
        },
        "op": {
          "type": "string",
          "enum": [
            "list",
            "score"
          ],
          "description": "list = return the question bank; score = score answers. Defaults to score when answers is given, list otherwise."
        }
      },
      "page": "https://aifinhub.io/calibration-dojo/",
      "contract": "https://aifinhub.io/contracts/calibration-dojo.json"
    },
    {
      "calculator": "trading-system-blueprinter",
      "title": "Trading System Blueprinter",
      "category": "Generators",
      "summary": "Pick your data source, LLM, broker, storage, risk engine, and logger. Get a Mermaid architecture diagram and a copyable starter file tree — the full stack before you write code.",
      "run": "https://aifinhub.io/api/run/trading-system-blueprinter",
      "example": "https://aifinhub.io/api/run/trading-system-blueprinter?data=alpaca&broker=alpaca&llm=claude-opus-5-5&storage=duckdb&risk=fractional-kelly&logging=heartbeat-json&schedule=launchd",
      "inputs": {
        "broker": {
          "type": "string",
          "enum": [
            "alpaca",
            "ibkr",
            "tradier",
            "paper"
          ],
          "default": "alpaca",
          "description": "Order routing."
        },
        "data": {
          "type": "string",
          "enum": [
            "alpaca",
            "polygon",
            "databento",
            "tiingo"
          ],
          "default": "alpaca",
          "description": "Market-data source."
        },
        "llm": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "claude-opus-5-5",
          "description": "Research model. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini)."
        },
        "logging": {
          "type": "string",
          "enum": [
            "heartbeat-json",
            "loki-grafana",
            "sentry",
            "stdout"
          ],
          "default": "heartbeat-json",
          "description": "Logging and observability."
        },
        "risk": {
          "type": "string",
          "enum": [
            "fractional-kelly",
            "vol-target",
            "max-dd-kill",
            "no-risk-layer"
          ],
          "default": "fractional-kelly",
          "description": "Risk engine."
        },
        "schedule": {
          "type": "string",
          "enum": [
            "launchd",
            "cron",
            "github-actions",
            "airflow"
          ],
          "default": "launchd",
          "description": "Scheduler; sets the schedule folder in the file tree."
        },
        "selections": {
          "type": "string",
          "description": "Alternative to the flat keys: an object mapping layer key to option id, e.g. {\"broker\": \"ibkr\"}. Unknown layers or options throw."
        },
        "storage": {
          "type": "string",
          "enum": [
            "duckdb",
            "sqlite",
            "postgres",
            "files"
          ],
          "default": "duckdb",
          "description": "Persistence layer."
        }
      },
      "page": "https://aifinhub.io/trading-system-blueprinter/",
      "contract": "https://aifinhub.io/contracts/trading-system-blueprinter.json"
    },
    {
      "calculator": "risk-adjusted-returns",
      "title": "Risk-Adjusted Returns Calculator",
      "category": "Calculators",
      "summary": "Paste a returns CSV. Sharpe, Sortino, Calmar, Omega, alpha, beta, tracking error, information ratio, max drawdown, and tail moments — plus a benchmark-relative block when you include one.",
      "run": "https://aifinhub.io/api/run/risk-adjusted-returns",
      "example": "https://aifinhub.io/api/run/risk-adjusted-returns?returns=%5B0.01%2C0.02%2C-0.005%2C0.015%2C-0.01%5D&benchmark=%5B0.01%2C0.02%2C-0.005%2C0.015%2C-0.01%5D&risk_free_annual=0.02",
      "inputs": {
        "benchmark": {
          "type": "array",
          "default": [
            0.01,
            0.02,
            -0.005,
            0.015,
            -0.01
          ],
          "default_with": [
            "returns"
          ],
          "description": "Optional simple daily benchmark returns, same length and dates as returns. Left out next to your own returns, the benchmark-relative figures are not computed; the default benchmark goes only with the default sample returns."
        },
        "returns": {
          "type": "array",
          "default": [
            0.01,
            0.02,
            -0.005,
            0.015,
            -0.01
          ],
          "default_with": [
            "benchmark"
          ],
          "description": "Simple daily strategy returns as decimals (0.012 = 1.2%), each above -1; annualization uses 252 days."
        },
        "risk_free_annual": {
          "type": "number",
          "default": 0.02,
          "minimum": -1,
          "maximum": 1,
          "description": "Annual risk-free rate as a decimal (0.02 = 2%); returns in excess of rf/252 feed Sharpe, Sortino and Omega."
        }
      },
      "page": "https://aifinhub.io/risk-adjusted-returns/",
      "contract": "https://aifinhub.io/contracts/risk-adjusted-returns.json"
    },
    {
      "calculator": "walk-forward-validator",
      "title": "Walk-Forward Validator",
      "category": "Playgrounds",
      "summary": "Upload a returns CSV. Rolling or expanding IS/OOS windows, per-window Sharpe, walk-forward efficiency, and a concatenated OOS equity curve. Catches regime decay that PBO alone misses.",
      "run": "https://aifinhub.io/api/run/walk-forward-validator",
      "example": "https://aifinhub.io/api/run/walk-forward-validator",
      "inputs": {
        "is_len": {
          "type": "number",
          "default": 252,
          "minimum": 20,
          "description": "In-sample window length in observations."
        },
        "mode": {
          "type": "string",
          "enum": [
            "rolling",
            "expanding"
          ],
          "default": "rolling",
          "description": "rolling = fixed in-sample length; expanding = in-sample always starts at row 0."
        },
        "oos_len": {
          "type": "number",
          "default": 63,
          "minimum": 5,
          "description": "Out-of-sample window length in observations."
        },
        "returns": {
          "type": "array",
          "default": [
            -0.001963,
            -0.012479,
            0.001678,
            0.005818,
            0.002904,
            0.016199,
            -0.010215,
            -0.011291,
            -0.00885,
            0.011087,
            0.010352,
            -0.018134,
            -0.000351,
            -0.027556,
            0.013853,
            0.002829,
            0.01201,
            -0.005335,
            0.002408,
            -0.000679,
            -0.007028,
            -0.000491,
            0.008923,
            0.01677,
            -0.004295,
            -0.003625,
            0.01502,
            -0.008017,
            -0.014938,
            0.010538,
            -0.000181,
            -0.007533,
            0.000998,
            0.001664,
            0.020646,
            -0.010313,
            0.007983,
            0.000161,
            0.021717,
            -0.003661,
            0.004743,
            -0.016916,
            -0.00144,
            -0.002367,
            -0.00147,
            -0.008733,
            0.001381,
            0.001706,
            0.010257,
            -0.005394,
            0.011349,
            -0.00457,
            0.018437,
            0.006194,
            -0.014261,
            -0.010064,
            -0.000592,
            0.002704,
            -0.00545,
            -0.020481,
            0.000865,
            -0.015018,
            -0.000369,
            0.004206,
            0.020835,
            0.008116,
            -0.004725,
            -0.013077,
            0.002622,
            0.007969,
            0.006208,
            -0.002521,
            -0.003776,
            -0.003893,
            -0.014943,
            -0.002636,
            0.00064,
            -0.025395,
            0.000012,
            -0.004952,
            0.008274,
            0.004452,
            -0.012216,
            -0.002064,
            0.007842,
            0.014103,
            -0.008355,
            -0.015776,
            0.001045,
            0.020947,
            0.009039,
            -0.001656,
            0.000899,
            0.001202,
            0.00042,
            0.012725,
            0.011733,
            0.004129,
            0.003595,
            -0.001224,
            0.016571,
            -0.009856,
            0.014524,
            -0.002465,
            0.012585,
            -0.022801,
            0.001213,
            -0.008061,
            -0.000258,
            -0.003008,
            0.000886,
            0.010896,
            -0.00097,
            -0.01486,
            0.014959,
            0.006791,
            -0.004182,
            -0.012974,
            0.00402,
            -0.001335,
            0.000572,
            0.00246,
            0.00089,
            0.001763,
            -0.010631,
            -0.000107,
            -0.025486,
            0.018308,
            -0.004904,
            -0.004578,
            -0.000555,
            0.00095,
            0.010346,
            0.023064,
            0.001872,
            0.005515,
            -0.003406,
            -0.002496,
            -0.018304,
            -0.007502,
            0.00874,
            0.000996,
            0.00124,
            0.014657,
            0.009317,
            -0.00018,
            -0.001824,
            0.013271,
            -0.008061,
            0.002583,
            -0.012792,
            -0.004015,
            -0.008025,
            0.007647,
            0.004245,
            -0.010974,
            0.002517,
            0.005698,
            -0.002801,
            -0.003722,
            0.015448,
            -0.000347,
            -0.004969,
            0.007854,
            0.009593,
            0.008483,
            -0.006378,
            0.006256,
            -0.005028,
            0.002652,
            0.027214,
            0.003921,
            -0.015909,
            -0.002812,
            -0.0178,
            0.005756,
            -0.001616,
            -0.005424,
            -0.004348,
            0.016863,
            -0.00286,
            0.009739,
            -0.004282,
            0.006231,
            0.018314,
            0.007417,
            0.019838,
            0.010201,
            0.010844,
            0.010215,
            0.021008,
            0.002428,
            0.007751,
            0.011907,
            -0.008095,
            0.026528,
            0.003778,
            -0.008891,
            0.013017,
            -0.008592,
            0.008911,
            0.004709,
            0.012014,
            0.011634,
            -0.006732,
            -0.020783,
            0.000184,
            -0.00912,
            -0.008424,
            0.001358,
            -0.01852,
            -0.022151,
            0.00869,
            0.005651,
            0.00504,
            -0.011843,
            0.009225,
            -0.007563,
            0.007073,
            0.018178,
            -0.002588,
            -0.02005,
            -0.003395,
            -0.010913,
            0.018344,
            -0.016453,
            0.002408,
            0.020756,
            -0.005477,
            0.006213,
            0.00265,
            -0.011139,
            -0.013776,
            -0.002056,
            -0.000221,
            -0.017122,
            -0.015053,
            0.005493,
            0.015325,
            0.014373,
            0.000144,
            -0.00285,
            0.005115,
            0.026171,
            -0.005289,
            -0.015803,
            0.00196,
            0.000421,
            0.000596,
            -0.010572,
            0.001909,
            0.0117,
            0.007828,
            -0.001836,
            0.013003,
            0.001742,
            -0.007949,
            -0.016554,
            -0.00236,
            0.000244,
            0.021866,
            -0.005071,
            -0.005584,
            -0.016252,
            0.012277,
            0.006241,
            -0.004893,
            -0.007244,
            0.001554,
            0.012722,
            -0.001346,
            -0.008163,
            -0.013011,
            -0.011898,
            -0.006021,
            0.010052,
            0.023784,
            0.002652,
            -0.006692,
            -0.015492,
            0.004846,
            -0.007853,
            0.008334,
            0.010547,
            -0.000355,
            0.013627,
            -0.017681,
            0.008238,
            0.006914,
            -0.009842,
            0.008807,
            -0.008494,
            -0.00458,
            -0.018812,
            0.010621,
            -0.002476,
            0.000113,
            0.011247,
            -0.005866,
            0.000106,
            0.004621,
            0.001003,
            0.010875,
            -0.019995,
            0.00679,
            0.002305,
            -0.002696,
            -0.008726,
            0.006733,
            -0.001433,
            0.002676,
            0.020325,
            -0.012187,
            -0.00255,
            0.002901,
            -0.008843,
            -0.002478,
            -0.002239,
            -0.011717,
            -0.004133,
            -0.009637,
            0.005595,
            -0.009859,
            0.003201,
            0.003989,
            -0.013604,
            -0.003335,
            0,
            0.004707,
            -0.003641,
            0.008311,
            -0.009983,
            -0.0033,
            0.013249,
            0.005493,
            -0.005222,
            -0.000089,
            -0.001464,
            -0.007478,
            0.008983,
            -0.015762,
            0.006781,
            -0.0015,
            -0.003109,
            -0.003681,
            -0.001463,
            0.014056,
            -0.007641,
            -0.009482,
            -0.000922,
            0.003782,
            0.00393,
            0.000465,
            0.008987,
            0.006819,
            -0.020218,
            -0.01141,
            0.011072,
            0.006203,
            -0.000737,
            0.009408,
            0.001834,
            0.006954,
            0.007475,
            0.014111,
            0.004754,
            -0.003789,
            0.003102,
            0.007121,
            0.00311,
            0.008445,
            -0.014787,
            -0.015603,
            0.01063,
            -0.000421,
            -0.000965,
            0.01096,
            -0.009481,
            0.01617,
            0.021536,
            0.013751,
            -0.001799,
            0.007637,
            0.002021,
            0.015693,
            -0.010612,
            0.002416,
            -0.004587,
            -0.003785,
            -0.009463,
            -0.022902,
            -0.006746,
            0.00795,
            0.001794,
            -0.012557,
            -0.022758,
            0.002901,
            -0.007373,
            0.008675,
            0.01275,
            -0.010448,
            0.023442,
            0.00614,
            -0.001848,
            0.004913,
            -0.009453,
            -0.003378,
            0.000054,
            -0.003948,
            -0.01194,
            0.003708,
            0.0007,
            -0.006101,
            0.000456,
            -0.00847,
            0.025746,
            -0.003852,
            -0.036062,
            0.00377,
            -0.008647,
            0.004019,
            -0.001825,
            0.008475,
            0.008483,
            -0.019366,
            0.0007,
            -0.002969,
            -0.007622,
            -0.022445,
            -0.01142,
            0.008933,
            -0.00202,
            -0.011522,
            0.002611,
            0.015917,
            -0.003327,
            -0.008393,
            -0.009948,
            0.005769,
            0.009727,
            -0.021601,
            -0.000128,
            0.010065,
            -0.004138,
            0.003234,
            0.003487,
            0.012028,
            0.008942,
            0.016704,
            -0.019694,
            -0.020774,
            0.002391,
            -0.004847,
            0.020564,
            0.003117,
            0.01344,
            -0.005059,
            0.016582,
            -0.005442,
            0.020337,
            0.011846,
            -0.005612,
            0.005714,
            -0.017366,
            -0.000424,
            0.010079,
            -0.010446,
            -0.002289,
            0.004748,
            -0.005261,
            0.001651,
            0.004862,
            0.009383,
            0.003789,
            0.001858,
            0.004966,
            -0.012115,
            0.006609,
            -0.001566,
            -0.019978,
            0.001681,
            0.002556,
            0.003041,
            -0.00071,
            0.023267,
            0.010219,
            0.022246,
            -0.002453,
            -0.006633,
            -0.003383,
            -0.01549,
            0.000828,
            0.008374,
            -0.005278,
            0.002477,
            -0.005417,
            0.001817,
            0.006532,
            -0.002944,
            -0.011195,
            -0.005382,
            0.001508,
            0.012814,
            -0.014852
          ],
          "description": "Daily simple returns as decimals, at least 50."
        },
        "step": {
          "type": "number",
          "default": 63,
          "minimum": 1,
          "description": "Rows between consecutive windows; step < oos_len makes OOS blocks overlap."
        }
      },
      "page": "https://aifinhub.io/walk-forward-validator/",
      "contract": "https://aifinhub.io/contracts/walk-forward-validator.json"
    },
    {
      "calculator": "options-greeks-explorer",
      "title": "Options Greeks Calculator",
      "category": "Playgrounds",
      "summary": "Black-Scholes pricer + live Greeks visualizer. Drag spot, strike, vol, DTE, rate, dividend yield — see delta, gamma, theta, vega, rho update with the payoff curve. Call + put.",
      "run": "https://aifinhub.io/api/run/options-greeks-explorer",
      "example": "https://aifinhub.io/api/run/options-greeks-explorer?type=call&spot=100&strike=100&vol_pct=25&days_to_exp=30&rf_pct=4.5&div_pct=0",
      "inputs": {
        "days_to_exp": {
          "type": "number",
          "default": 30,
          "minimum": 0,
          "description": "Calendar days to expiry; T = days / 365."
        },
        "div_pct": {
          "type": "number",
          "default": 0,
          "description": "Continuous dividend yield, annual, in percent."
        },
        "rf_pct": {
          "type": "number",
          "default": 4.5,
          "description": "Risk-free rate, annual, continuously compounded, in percent (4.5 = 4.5%)."
        },
        "spot": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Underlying price."
        },
        "strike": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Strike price."
        },
        "type": {
          "type": "string",
          "enum": [
            "call",
            "put"
          ],
          "default": "call",
          "description": "Option type."
        },
        "vol_pct": {
          "type": "number",
          "default": 25,
          "minimum": 0,
          "maximum": 500,
          "description": "Implied volatility, annual, in percent (25 = 25%)."
        }
      },
      "page": "https://aifinhub.io/options-greeks-explorer/",
      "contract": "https://aifinhub.io/contracts/options-greeks-explorer.json"
    },
    {
      "calculator": "correlation-matrix-visualizer",
      "title": "Portfolio Correlation Matrix",
      "category": "Calculators",
      "summary": "Paste a multi-asset returns CSV. See the Pearson correlation heatmap, condition number, average absolute correlation, and eigenvalue concentration — the diagnostics for detecting redundant strategies before you allocate capital.",
      "run": "https://aifinhub.io/api/run/correlation-matrix-visualizer",
      "example": "https://aifinhub.io/api/run/correlation-matrix-visualizer",
      "inputs": {
        "series": {
          "type": "array",
          "default": [
            {
              "name": "SPY",
              "values": [
                -0.012843,
                0.005562,
                -0.001332,
                0.001416,
                0.00507,
                0.006107,
                0.002444,
                0.004272,
                -0.002891,
                0.003178,
                0.00737,
                -0.004567,
                0.014355,
                0.001974,
                -0.016935,
                -0.010687,
                0.009715,
                -0.01316,
                0.002776,
                0.009778,
                -0.009737,
                0.008914,
                -0.01883,
                0.001544,
                0.003879,
                -0.002691,
                0.008995,
                0.005585,
                -0.014312,
                0.001967,
                -0.002495,
                -0.006723,
                -0.0054,
                -0.005222,
                0.008261,
                -0.015781,
                0.006483,
                0.017268,
                -0.00435,
                0.005738,
                0.014771,
                -0.005635,
                0.018411,
                0.003669,
                0.018039,
                0.009265,
                -0.010561,
                0.01211,
                -0.002028,
                0.01238,
                0.009775,
                0.000424,
                -0.000378,
                0.00086,
                0.012193,
                0.014755,
                -0.00371,
                0.00031,
                -0.002188,
                -0.002964,
                -0.001428,
                0.010406,
                0.01182,
                0.015166,
                0.001065,
                -0.014253,
                0.007842,
                -0.001464,
                0.00991,
                -0.008253,
                0.00308,
                -0.001735,
                -0.003622,
                0.000376,
                0.012419,
                0.008751,
                -0.001225,
                -0.002371,
                -0.006899,
                -0.001794,
                -0.004752,
                0.001034,
                0.017518,
                -0.00552,
                -0.004451,
                -0.010671,
                0.001204,
                0.000336,
                0.007898,
                -0.007922
              ]
            },
            {
              "name": "QQQ",
              "values": [
                -0.031916,
                0.002634,
                -0.011198,
                0.005715,
                0.018762,
                -0.004141,
                0.018624,
                0.014513,
                -0.017789,
                0.009618,
                -0.014868,
                -0.018661,
                0.034994,
                -0.001143,
                0.000166,
                -0.004298,
                0.022187,
                -0.026972,
                0.009172,
                0.01473,
                0.023033,
                -0.000811,
                -0.027468,
                -0.001253,
                0.003574,
                -0.000692,
                0.025005,
                -0.013477,
                0.008568,
                0.019203,
                0.008534,
                -0.022472,
                -0.003708,
                0.006383,
                0.008743,
                -0.029749,
                0.009631,
                0.018816,
                -0.015848,
                0.00575,
                0.017909,
                -0.00919,
                0.010624,
                -0.001175,
                0.028728,
                0.01482,
                -0.001177,
                0.021045,
                -0.008706,
                0.005515,
                0.016491,
                -0.005974,
                0.013348,
                0.027957,
                0.00799,
                0.014165,
                0.002433,
                0.003304,
                -0.007366,
                0.018022,
                0.010786,
                -0.008399,
                0.004896,
                0.040605,
                -0.009269,
                -0.008257,
                0.014355,
                0.013894,
                -0.012422,
                -0.016563,
                -0.006656,
                0.004864,
                0.006888,
                0.017675,
                0.006275,
                -0.002203,
                -0.016777,
                -0.004303,
                -0.013832,
                0.005731,
                -0.015763,
                -0.002646,
                0.001072,
                -0.014675,
                -0.010051,
                -0.01666,
                0.001137,
                -0.008157,
                -0.019128,
                -0.015845
              ]
            },
            {
              "name": "TLT",
              "values": [
                -0.00348,
                -0.009532,
                -0.009495,
                0.000817,
                -0.013736,
                -0.015894,
                0.004593,
                -0.001288,
                -0.001997,
                -0.001013,
                -0.003634,
                0.009398,
                0.00554,
                -0.006177,
                -0.001788,
                0.002708,
                0.002679,
                -0.001143,
                0.012816,
                -0.004805,
                -0.002266,
                -0.003514,
                0.000678,
                -0.007108,
                0.000749,
                -0.01357,
                -0.007189,
                -0.005792,
                0.004324,
                -0.004217,
                0.004665,
                0.002427,
                0.005592,
                -0.004194,
                -0.004193,
                0.003148,
                -0.000006,
                -0.009479,
                -0.002826,
                -0.008549,
                -0.006357,
                -0.003985,
                0.001047,
                0.008022,
                0.003591,
                0.00166,
                0.004496,
                -0.005119,
                0.00236,
                -0.004365,
                -0.003749,
                -0.002313,
                0.014693,
                -0.00415,
                0.001604,
                -0.006466,
                -0.001518,
                -0.003088,
                0.008285,
                -0.002019,
                -0.003034,
                -0.000748,
                -0.018276,
                -0.001174,
                0.002488,
                0.006478,
                -0.014903,
                0.007155,
                -0.002883,
                0.006239,
                0.009014,
                -0.004145,
                0.004603,
                -0.006128,
                -0.003621,
                0.001894,
                -0.002112,
                0.003447,
                0.004219,
                0.006163,
                -0.004697,
                -0.007648,
                -0.003381,
                0.01139,
                -0.010122,
                -0.001475,
                -0.008228,
                0.001127,
                -0.001511,
                0.009058
              ]
            },
            {
              "name": "GLD",
              "values": [
                -0.003609,
                -0.012319,
                -0.021546,
                -0.002169,
                -0.004775,
                0.005111,
                0.013753,
                -0.00704,
                -0.010183,
                -0.003458,
                0.001939,
                -0.000451,
                0.011093,
                -0.010069,
                0.005469,
                -0.000815,
                0.006727,
                -0.005372,
                0.007507,
                -0.007042,
                0.009549,
                0.005708,
                -0.005644,
                -0.016476,
                0.003559,
                0.013871,
                -0.008904,
                0.008505,
                -0.004197,
                0.006495,
                0.005826,
                0.008331,
                -0.008403,
                0.003081,
                -0.009843,
                -0.00735,
                -0.003255,
                -0.004908,
                0.003471,
                -0.009825,
                -0.007725,
                -0.006961,
                -0.000686,
                -0.004962,
                0.004599,
                0.002335,
                -0.009787,
                -0.005587,
                -0.007217,
                0.011802,
                -0.013529,
                -0.007763,
                -0.00092,
                -0.015819,
                -0.006159,
                0.007921,
                0.001881,
                0.005359,
                -0.004545,
                -0.002579,
                0.009985,
                -0.002308,
                -0.012648,
                -0.010327,
                -0.001297,
                -0.014548,
                -0.002061,
                -0.003556,
                0.006531,
                -0.004733,
                -0.002126,
                0.000976,
                -0.002299,
                0.000269,
                0.006541,
                -0.019175,
                0.001406,
                0.012067,
                0.006353,
                0.001284,
                -0.003715,
                -0.01589,
                0.005951,
                -0.008455,
                -0.008778,
                -0.00084,
                0.003219,
                0.012961,
                0.011134,
                -0.008317
              ]
            },
            {
              "name": "XLE",
              "values": [
                -0.002192,
                -0.018241,
                -0.012517,
                -0.002803,
                0.018884,
                0.020946,
                0.010029,
                -0.009388,
                -0.006646,
                -0.001194,
                -0.005981,
                -0.018604,
                0.024496,
                -0.022882,
                -0.016148,
                -0.007482,
                0.016719,
                -0.015994,
                0.002954,
                -0.003783,
                -0.028953,
                -0.018085,
                -0.013025,
                -0.009177,
                -0.009086,
                -0.02035,
                0.011058,
                0.010048,
                0.006068,
                -0.003638,
                -0.015797,
                0.030323,
                0.012459,
                0.001212,
                -0.005477,
                -0.01347,
                -0.011012,
                0.015869,
                0.018623,
                -0.002396,
                -0.018033,
                -0.003577,
                0.014222,
                0.025015,
                0.030849,
                0.015369,
                -0.013728,
                0.019073,
                -0.006631,
                -0.004999,
                -0.012875,
                0.008698,
                -0.027086,
                -0.002681,
                0.015284,
                -0.011607,
                -0.002139,
                -0.010654,
                0.003021,
                0.028778,
                -0.033415,
                0.006098,
                0.013032,
                -0.019776,
                -0.011667,
                -0.000766,
                0.017896,
                -0.011583,
                -0.00953,
                -0.014308,
                0.016854,
                -0.004918,
                0.009794,
                0.019875,
                -0.004763,
                0.025017,
                0.007828,
                0.003628,
                0.002251,
                -0.010632,
                -0.001618,
                -0.005849,
                -0.000072,
                -0.000858,
                -0.007604,
                -0.006899,
                0.038137,
                -0.011498,
                -0.000513,
                -0.009543
              ]
            }
          ],
          "description": "Array of at least 2 items { name: string, values: number[] }; all values arrays the same length (at least 5; 30+ recommended). Use periodic returns as decimals, not price levels."
        }
      },
      "page": "https://aifinhub.io/correlation-matrix-visualizer/",
      "contract": "https://aifinhub.io/contracts/correlation-matrix-visualizer.json"
    },
    {
      "calculator": "returns-distribution-analyzer",
      "title": "Returns Distribution Analyzer",
      "category": "Calculators",
      "summary": "Paste a returns CSV. Histogram, normal QQ plot, skewness, excess kurtosis, Jarque-Bera test, tail-weight index. See why Sharpe alone misleads.",
      "run": "https://aifinhub.io/api/run/returns-distribution-analyzer",
      "example": "https://aifinhub.io/api/run/returns-distribution-analyzer?returns=%5B0.01%2C0.02%2C-0.005%2C0.015%2C-0.01%5D&bins=30",
      "inputs": {
        "bins": {
          "type": "number",
          "default": 30,
          "minimum": 10,
          "maximum": 100,
          "description": "Histogram bin count."
        },
        "returns": {
          "type": "array",
          "default": [
            0.01,
            0.02,
            -0.005,
            0.015,
            -0.01
          ],
          "description": "Array of periodic returns as decimals (0.012 = 1.2%), at least 4 (the page requires 30)."
        }
      },
      "page": "https://aifinhub.io/returns-distribution-analyzer/",
      "contract": "https://aifinhub.io/contracts/returns-distribution-analyzer.json"
    },
    {
      "calculator": "price-blind-auditor",
      "title": "Price-Blind Research Auditor",
      "category": "Playgrounds",
      "summary": "Paste a research prompt or agent context bundle. The auditor flags price numbers, directional words, and outcome-leaking phrases that cause LLMs to retroactively rationalize positions. Builds a price-blind research boundary.",
      "run": "https://aifinhub.io/api/run/price-blind-auditor",
      "example": "https://aifinhub.io/api/run/price-blind-auditor",
      "inputs": {
        "text": {
          "type": "string",
          "description": "The prompt bundle an LLM will see (system prompt, user prompt, retrieved context), as plain text; lines are scanned separately."
        }
      },
      "page": "https://aifinhub.io/price-blind-auditor/",
      "contract": "https://aifinhub.io/contracts/price-blind-auditor.json"
    },
    {
      "calculator": "prompt-injection-tester",
      "title": "Prompt Injection Tester",
      "category": "Playgrounds",
      "summary": "Red-team a finance agent against 23 documented prompt-injection attacks — direct override, role confusion, indirect injection via retrieved content.",
      "run": "https://aifinhub.io/api/run/prompt-injection-tester",
      "example": "https://aifinhub.io/api/run/prompt-injection-tester",
      "inputs": {
        "attack_id": {
          "type": "string",
          "enum": [
            "DO_01",
            "DO_02",
            "DO_03",
            "RC_01",
            "JB_01",
            "II_01",
            "RC_02",
            "RC_03",
            "II_02",
            "II_03",
            "II_04",
            "JB_02",
            "JB_03",
            "TH_01",
            "TH_02",
            "SE_01",
            "SE_02",
            "SE_03",
            "FN_01",
            "FN_02",
            "FN_03",
            "FN_04",
            "MP_01"
          ],
          "default": "",
          "description": "Attack id from the catalogue (DO_01 ... MP_01). Omit to list the catalogue."
        },
        "op": {
          "type": "string",
          "enum": [
            "list",
            "classify"
          ],
          "description": "Explicit operation; defaults to classify when attack_id is given, list otherwise."
        },
        "output": {
          "type": "string",
          "default": "",
          "description": "The target model's raw reply to the attack payload."
        }
      },
      "page": "https://aifinhub.io/prompt-injection-tester/",
      "contract": "https://aifinhub.io/contracts/prompt-injection-tester.json"
    },
    {
      "calculator": "efficient-frontier-builder",
      "title": "Efficient Frontier Calculator",
      "category": "Calculators",
      "summary": "Paste a multi-asset returns CSV. See the Markowitz mean-variance frontier, the minimum-variance portfolio, the max-Sharpe (tangency) portfolio, and the per-asset weights for each highlighted point. Closed-form solution, client-side.",
      "run": "https://aifinhub.io/api/run/efficient-frontier-builder",
      "example": "https://aifinhub.io/api/run/efficient-frontier-builder",
      "inputs": {
        "assets": {
          "type": "array",
          "default": [
            {
              "name": "US Equities",
              "returns": [
                -0.026084,
                -0.009339,
                0.022423,
                0.024265,
                -0.00407,
                -0.032333,
                -0.00286,
                -0.013928,
                0.011828,
                0.020775,
                0.011517,
                0.006625,
                0.003477,
                0.00601,
                -0.008305,
                -0.01288,
                -0.013881,
                0.015359,
                0.011678,
                -0.016119,
                -0.003055,
                0.010377,
                -0.010538,
                -0.022867,
                0.001126,
                0.004041,
                -0.019115,
                -0.020235,
                0.016568,
                -0.005748,
                -0.011775,
                0.032105,
                0.002526,
                -0.000716,
                0.021207,
                0.005723,
                -0.002615,
                0.014075,
                0.017308,
                0.012199,
                0.014812,
                -0.024036,
                -0.007398,
                -0.009666,
                0.034898,
                -0.00267,
                -0.008985,
                0.013844,
                0.006004,
                -0.012636,
                0.00792,
                -0.001344,
                -0.033702,
                0.010719,
                -0.009275,
                -0.002554,
                -0.001274,
                -0.004542,
                0.009619,
                0.003683,
                0.00918,
                0.008551,
                0.003124,
                -0.04027,
                -0.004669,
                0.022377,
                0.027628,
                0.008361,
                0.000285,
                -0.010508,
                0.010258,
                -0.003251,
                0.015045,
                -0.007165,
                -0.004979,
                0.020983,
                0.008768,
                0.012502,
                0.000001,
                0.020556,
                -0.021939,
                0.018329,
                -0.001071,
                -0.004927,
                0.005116,
                -0.019207,
                -0.01628,
                -0.016438,
                -0.013193,
                0.011414,
                0.005628,
                -0.02627,
                -0.030247,
                0.015763,
                -0.006258,
                0.023799
              ]
            },
            {
              "name": "Intl Equities",
              "returns": [
                -0.01789,
                -0.016342,
                0.011449,
                0.013527,
                0.002128,
                -0.000148,
                -0.003973,
                -0.005458,
                0.004932,
                0.012879,
                0.00009,
                -0.004105,
                0.004944,
                0.005493,
                0.012637,
                0.016019,
                -0.011988,
                0.012194,
                0.008298,
                -0.00734,
                -0.002411,
                -0.01554,
                -0.003597,
                -0.026939,
                0.014074,
                0.001976,
                -0.001698,
                0.000053,
                -0.002408,
                0.015902,
                -0.007393,
                0.009357,
                -0.004008,
                0.001894,
                0.013792,
                -0.000589,
                0.00913,
                0.007222,
                0.003309,
                0.016436,
                0.006723,
                -0.009458,
                -0.000424,
                -0.036102,
                0.020203,
                -0.001423,
                0.006391,
                0.0019,
                -0.011855,
                -0.008596,
                -0.000051,
                -0.020171,
                -0.002348,
                0.008743,
                0.002821,
                0.013084,
                0.024959,
                0.005673,
                -0.01992,
                0.01727,
                0.007925,
                0.025043,
                0.019246,
                -0.018409,
                0.007818,
                -0.012283,
                0.005164,
                -0.000647,
                0.000651,
                0.016975,
                -0.016459,
                0.010047,
                0.011959,
                0.008598,
                0.008194,
                -0.020397,
                0.016703,
                0.000529,
                0.008447,
                0.008478,
                -0.025,
                0.011464,
                0.007115,
                -0.003013,
                -0.003825,
                -0.030416,
                -0.001629,
                -0.007607,
                -0.009038,
                -0.011127,
                0.004869,
                -0.014431,
                -0.003256,
                0.011009,
                -0.000182,
                0.030479
              ]
            },
            {
              "name": "Aggregate Bonds",
              "returns": [
                0.003383,
                -0.005414,
                -0.000468,
                0.003312,
                0.001429,
                0.005737,
                -0.005907,
                -0.000994,
                -0.002542,
                0.004991,
                -0.004859,
                0.00201,
                0.001642,
                0.000324,
                -0.003314,
                -0.002803,
                0.00019,
                -0.000551,
                -0.007022,
                -0.000428,
                -0.001826,
                0.005103,
                0.00709,
                -0.002827,
                -0.002037,
                0.00013,
                0.004804,
                0.005379,
                0.002667,
                -0.00091,
                -0.003758,
                -0.007383,
                0.001706,
                0.000864,
                0.005508,
                -0.007142,
                0.004368,
                -0.004738,
                -0.007385,
                0.001689,
                -0.004507,
                -0.000357,
                -0.000415,
                0.005325,
                0.004308,
                -0.000416,
                0.00277,
                -0.007876,
                0.001166,
                -0.006418,
                -0.005774,
                -0.001906,
                0.0091,
                -0.002563,
                -0.002665,
                -0.001689,
                -0.005174,
                -0.003989,
                0.00354,
                0.001622,
                0.001807,
                -0.008514,
                0.007035,
                0.010241,
                -0.001968,
                -0.000503,
                -0.005232,
                -0.000794,
                0.009881,
                -0.001286,
                0.006395,
                -0.002523,
                0.004048,
                0.00066,
                -0.003002,
                0.003417,
                -0.000537,
                -0.00362,
                0.003066,
                -0.005197,
                -0.00165,
                -0.005964,
                -0.001629,
                -0.007396,
                -0.003472,
                -0.001102,
                0.005919,
                -0.000683,
                0.001568,
                -0.000526,
                0.004182,
                -0.002288,
                0.008541,
                -0.002672,
                0.00223,
                -0.000601
              ]
            },
            {
              "name": "Commodities",
              "returns": [
                0.010693,
                -0.014358,
                0.001653,
                0.026449,
                0.036177,
                -0.024715,
                -0.01015,
                0.003149,
                -0.004191,
                0.008498,
                0.006201,
                0.006443,
                0.007429,
                0.001224,
                0.008414,
                0.004634,
                -0.026895,
                0.014692,
                -0.009684,
                0.003576,
                0.01979,
                -0.013675,
                0.006075,
                -0.006749,
                0.017848,
                -0.024232,
                0.006072,
                -0.00843,
                -0.005465,
                -0.010567,
                0.005011,
                -0.00479,
                -0.002642,
                -0.006506,
                0.005338,
                -0.015151,
                -0.010684,
                -0.02011,
                -0.017681,
                -0.01455,
                -0.014944,
                0.003162,
                0.015392,
                -0.015318,
                0.009544,
                -0.000737,
                -0.01655,
                -0.003292,
                0.013558,
                0.007808,
                -0.010701,
                0.006641,
                -0.014237,
                -0.022369,
                0.011828,
                -0.004968,
                0.008261,
                0.019919,
                0.00125,
                -0.009036,
                -0.003743,
                0.00962,
                -0.012011,
                0.025194,
                0.006848,
                0.037353,
                0.011328,
                -0.021955,
                -0.00327,
                -0.007504,
                -0.0303,
                0.008215,
                -0.000348,
                -0.012391,
                0.007949,
                -0.002983,
                -0.013971,
                -0.009568,
                -0.009759,
                -0.009918,
                -0.013714,
                -0.022232,
                -0.013597,
                0.016836,
                -0.003036,
                -0.004977,
                -0.024345,
                -0.024586,
                0.002842,
                0.014054,
                0.005342,
                -0.004593,
                -0.010622,
                -0.018985,
                0.012889,
                0.014289
              ]
            }
          ],
          "description": "Array of 2-20 items { name: string, returns: number[] } of simple periodic returns as decimals; all the same length, at least 60 observations."
        },
        "periods_per_year": {
          "type": "number",
          "minimum": 1,
          "maximum": 366,
          "description": "Return periods per year in the input (252 daily, 52 weekly, 12 monthly)."
        },
        "risk_free_annual": {
          "type": "number",
          "default": 0.04,
          "description": "Annual risk-free rate as a decimal (0.04 = 4%)."
        },
        "steps": {
          "type": "number",
          "default": 60,
          "minimum": 10,
          "maximum": 120,
          "description": "Number of frontier points swept (whole number)."
        }
      },
      "page": "https://aifinhub.io/efficient-frontier-builder/",
      "contract": "https://aifinhub.io/contracts/efficient-frontier-builder.json"
    },
    {
      "calculator": "options-payoff-builder",
      "title": "Options Payoff Calculator",
      "category": "Playgrounds",
      "summary": "Build 1–4 leg option strategies. Pick call/put, long/short, strike, and contracts. See the at-expiry payoff diagram, break-even points, maximum profit and loss, and the aggregated Greeks at current spot. Presets for straddle, strangle, iron condor, spreads, butterfly.",
      "run": "https://aifinhub.io/api/run/options-payoff-builder",
      "example": "https://aifinhub.io/api/run/options-payoff-builder?legs=%5B%7B%22side%22%3A%22long%22%2C%22type%22%3A%22call%22%2C%22strike%22%3A105%2C%22contracts%22%3A1%7D%2C%7B%22side%22%3A%22short%22%2C%22type%22%3A%22call%22%2C%22strike%22%3A115%2C%22contracts%22%3A1%7D%5D&spot=100&annual_vol=0.25&days_to_expiry=30&risk_free_rate=0.045&dividend_yield=0&grid_points=121&spot_range_pct=0.4",
      "inputs": {
        "annual_vol": {
          "type": "number",
          "default": 0.25,
          "minimum": 0,
          "maximum": 5,
          "description": "Implied volatility as a decimal (0.28 = 28%)."
        },
        "days_to_expiry": {
          "type": "number",
          "default": 30,
          "minimum": 0,
          "description": "Calendar days to expiry."
        },
        "dividend_yield": {
          "type": "number",
          "default": 0,
          "description": "Continuous dividend yield as a decimal (0.015 = 1.5%)."
        },
        "grid_points": {
          "type": "number",
          "default": 121,
          "minimum": 50,
          "maximum": 400,
          "description": "Points in the returned P&L grid."
        },
        "legs": {
          "type": "array",
          "default": [
            {
              "side": "long",
              "type": "call",
              "strike": 105,
              "contracts": 1
            },
            {
              "side": "short",
              "type": "call",
              "strike": 115,
              "contracts": 1
            }
          ],
          "description": "Array of legs, each {side: \"long\"|\"short\", type: \"call\"|\"put\", strike: number > 0 (USD), contracts: number > 0}. 1 to 8 legs; all share one expiry. Default: one long 100-strike call."
        },
        "multiplier": {
          "type": "number",
          "minimum": 0,
          "description": "Shares per contract; every dollar output is per-share value x contracts x multiplier. 100 for US equity options, 1 for per-share values."
        },
        "risk_free_rate": {
          "type": "number",
          "default": 0.045,
          "description": "Annual risk-free rate as a decimal (0.045 = 4.5%)."
        },
        "spot": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Underlying price."
        },
        "spot_range_pct": {
          "type": "number",
          "default": 0.4,
          "minimum": 0.05,
          "maximum": 2,
          "description": "Half-width of the P&L grid as a fraction of spot (0.4 = +/-40%)."
        }
      },
      "page": "https://aifinhub.io/options-payoff-builder/",
      "contract": "https://aifinhub.io/contracts/options-payoff-builder.json"
    },
    {
      "calculator": "pair-trading-tester",
      "title": "Pair Trading Cointegration Tester",
      "category": "Playgrounds",
      "summary": "Paste two price series. Engle-Granger cointegration test: OLS hedge ratio, Augmented Dickey-Fuller on residuals, Ornstein-Uhlenbeck half-life, z-score time series with configurable entry/exit bands. Everything client-side.",
      "run": "https://aifinhub.io/api/run/pair-trading-tester",
      "example": "https://aifinhub.io/api/run/pair-trading-tester?a=%5B100%2C98.5874%2C97.8259%2C98.015%2C97.6033%2C97.5598%2C97.4391%2C95.4593%2C96.8625%2C97.6213%2C96.884%2C97.9378%2C96.7864%2C96.052%2C96.7539%2C97.0884%2C96.2998%2C96.8609%2C96.4113%2C94.7817%2C94.0908%2C95.2396%2C94.912%2C95.9782%2C94.1185%2C94.1316%2C95.6987%2C94.2103%2C94.2116%2C95.9806%2C95.3522%2C94.9435%2C93.114%2C94.4138%2C93.5007%2C92.7732%2C93.5529%2C92.4435%2C91.7068%2C91.0294%2C89.8526%2C90.4241%2C89.7977%2C88.3319%2C90.5591%2C91.0151%2C90.6968%2C90.7679%2C89.7283%2C90.0064%2C90.209%2C92.9212%2C92.3561%2C91.9658%2C89.6928%2C89.0712%2C89.7689%2C89.4756%2C89.6975%2C89.6835%2C89.6376%2C90.0946%2C90.1572%2C90.8464%2C93.7497%2C92.1072%2C93.1928%2C94.5939%2C91.9662%2C94.5231%2C95.2861%2C95.7917%2C95.5093%2C94.1203%2C93.5651%2C92.9154%2C94.495%2C94.4734%2C94.3377%2C95.4258%5D&b=%5B151.141%2C149.3602%2C148.5811%2C149.3006%2C149.0083%2C149.3586%2C148.3213%2C145.2459%2C146.8073%2C148.1455%2C147.1322%2C148.4226%2C147.5568%2C146.0558%2C145.4098%2C146.5035%2C146.4691%2C147.5213%2C145.983%2C144.2597%2C142.6992%2C144.0918%2C143.485%2C145.0805%2C142.3363%2C141.9733%2C144.8319%2C143.6638%2C144.3719%2C147.3897%2C146.2313%2C146.8656%2C144.1777%2C145.6877%2C143.6726%2C142.1663%2C144.0035%2C140.4674%2C140.1333%2C139.8269%2C138.2176%2C137.391%2C137.1818%2C134.8946%2C138.3316%2C138.8633%2C138.7863%2C139.4953%2C137.8307%2C138.0143%2C138.1207%2C141.8669%2C140.5081%2C139.9323%2C136.2529%2C135.6546%2C137.3739%2C137.2101%2C138.5398%2C139.4239%2C138.4136%2C138.4121%2C138.646%2C137.7651%2C142.8305%2C140.5458%2C142.8138%2C145.3761%2C141.5616%2C144.592%2C146.166%2C146.9859%2C146.5194%2C144.7299%2C144.0425%2C142.9379%2C144.9803%2C145.411%2C144.2937%2C146.1881%5D&lags=1&z_window=30",
      "inputs": {
        "a": {
          "type": "array",
          "default": [
            100,
            98.5874,
            97.8259,
            98.015,
            97.6033,
            97.5598,
            97.4391,
            95.4593,
            96.8625,
            97.6213,
            96.884,
            97.9378,
            96.7864,
            96.052,
            96.7539,
            97.0884,
            96.2998,
            96.8609,
            96.4113,
            94.7817,
            94.0908,
            95.2396,
            94.912,
            95.9782,
            94.1185,
            94.1316,
            95.6987,
            94.2103,
            94.2116,
            95.9806,
            95.3522,
            94.9435,
            93.114,
            94.4138,
            93.5007,
            92.7732,
            93.5529,
            92.4435,
            91.7068,
            91.0294,
            89.8526,
            90.4241,
            89.7977,
            88.3319,
            90.5591,
            91.0151,
            90.6968,
            90.7679,
            89.7283,
            90.0064,
            90.209,
            92.9212,
            92.3561,
            91.9658,
            89.6928,
            89.0712,
            89.7689,
            89.4756,
            89.6975,
            89.6835,
            89.6376,
            90.0946,
            90.1572,
            90.8464,
            93.7497,
            92.1072,
            93.1928,
            94.5939,
            91.9662,
            94.5231,
            95.2861,
            95.7917,
            95.5093,
            94.1203,
            93.5651,
            92.9154,
            94.495,
            94.4734,
            94.3377,
            95.4258
          ],
          "default_with": [
            "b"
          ],
          "description": "Prices of asset A (the dependent leg), strictly positive, same length as b, at least 60 observations."
        },
        "b": {
          "type": "array",
          "default": [
            151.141,
            149.3602,
            148.5811,
            149.3006,
            149.0083,
            149.3586,
            148.3213,
            145.2459,
            146.8073,
            148.1455,
            147.1322,
            148.4226,
            147.5568,
            146.0558,
            145.4098,
            146.5035,
            146.4691,
            147.5213,
            145.983,
            144.2597,
            142.6992,
            144.0918,
            143.485,
            145.0805,
            142.3363,
            141.9733,
            144.8319,
            143.6638,
            144.3719,
            147.3897,
            146.2313,
            146.8656,
            144.1777,
            145.6877,
            143.6726,
            142.1663,
            144.0035,
            140.4674,
            140.1333,
            139.8269,
            138.2176,
            137.391,
            137.1818,
            134.8946,
            138.3316,
            138.8633,
            138.7863,
            139.4953,
            137.8307,
            138.0143,
            138.1207,
            141.8669,
            140.5081,
            139.9323,
            136.2529,
            135.6546,
            137.3739,
            137.2101,
            138.5398,
            139.4239,
            138.4136,
            138.4121,
            138.646,
            137.7651,
            142.8305,
            140.5458,
            142.8138,
            145.3761,
            141.5616,
            144.592,
            146.166,
            146.9859,
            146.5194,
            144.7299,
            144.0425,
            142.9379,
            144.9803,
            145.411,
            144.2937,
            146.1881
          ],
          "default_with": [
            "a"
          ],
          "description": "Prices of asset B, strictly positive, aligned with a."
        },
        "entry_z": {
          "type": "number",
          "minimum": 0,
          "description": "|z| above which a position opens, for the signal counts."
        },
        "exit_z": {
          "type": "number",
          "minimum": 0,
          "description": "|z| below which an open position closes; must be below entry_z."
        },
        "lags": {
          "type": "number",
          "default": 1,
          "minimum": 0,
          "maximum": 10,
          "description": "Lagged differences in the ADF regression (0 = plain Dickey-Fuller)."
        },
        "z_window": {
          "type": "number",
          "default": 30,
          "minimum": 5,
          "maximum": 252,
          "description": "Rolling window for the spread z-score, in observations."
        }
      },
      "page": "https://aifinhub.io/pair-trading-tester/",
      "contract": "https://aifinhub.io/contracts/pair-trading-tester.json"
    },
    {
      "calculator": "execution-simulator",
      "title": "Execution Simulator",
      "category": "Playgrounds",
      "summary": "Estimate execution cost in closed form with the Almgren et al. (2005) impact model: permanent and temporary impact, half-spread, and a latency-drift band. See the slippage a naive backtest hides.",
      "run": "https://aifinhub.io/api/run/execution-simulator",
      "example": "https://aifinhub.io/api/run/execution-simulator?side=buy&order_size=50000&adv=5000000&spread_bps=8&daily_vol_pct=2&participation_pct=10&latency_ms=150&latency_jitter_ms=75&ref_price=100&inverse_turnover=263",
      "inputs": {
        "adv": {
          "type": "number",
          "default": 5000000,
          "minimum": 0,
          "description": "Average daily volume in shares."
        },
        "daily_vol_pct": {
          "type": "number",
          "default": 2,
          "minimum": 0,
          "description": "Daily return volatility in percent (2 = 2%/day)."
        },
        "inverse_turnover": {
          "type": "number",
          "default": 263,
          "minimum": 0,
          "description": "Shares outstanding divided by average daily volume (inverse turnover, Θ/V in Almgren et al.); scales permanent impact by its fourth root. 263 is IBM in the paper's Table 3."
        },
        "latency_jitter_ms": {
          "type": "number",
          "default": 75,
          "minimum": 0,
          "description": "Latency standard deviation in milliseconds."
        },
        "latency_ms": {
          "type": "number",
          "default": 150,
          "minimum": 0,
          "description": "Mean order-to-market latency in milliseconds."
        },
        "order_size": {
          "type": "number",
          "default": 50000,
          "minimum": 0,
          "description": "Order size in shares."
        },
        "participation_pct": {
          "type": "number",
          "default": 10,
          "minimum": 0,
          "maximum": 100,
          "description": "Share of market volume the order takes while working, in percent (10 = 10%). Sets the temporary impact (power 3/5), the duration and the timing risk."
        },
        "ref_price": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Reference (mid) price in USD, converts bps to dollars."
        },
        "side": {
          "type": "string",
          "enum": [
            "buy",
            "sell"
          ],
          "default": "buy",
          "description": "Order side (costs are symmetric)."
        },
        "spread_bps": {
          "type": "number",
          "default": 8,
          "minimum": 0,
          "description": "Full quoted bid-ask spread in basis points (half is charged)."
        }
      },
      "page": "https://aifinhub.io/execution-simulator/",
      "contract": "https://aifinhub.io/contracts/execution-simulator.json"
    },
    {
      "calculator": "broker-api-comparator",
      "title": "Broker API Comparator",
      "category": "Comparators",
      "summary": "Alpaca vs IBKR vs Tradier vs Schwab vs Robinhood — compare auth, rate limits, order types, market data, MCP, and fees before wiring a line of code.",
      "run": "https://aifinhub.io/api/run/broker-api-comparator",
      "example": "https://aifinhub.io/api/run/broker-api-comparator?require_options=false&require_futures=false&require_crypto=false&require_mcp=false&require_free_tier=false&max_auth_complexity=5",
      "inputs": {
        "max_auth_complexity": {
          "type": "number",
          "default": 5,
          "minimum": 1,
          "maximum": 5,
          "description": "Highest acceptable auth complexity on a 1-5 scale (1 = API key header, 5 = local TWS/IB Gateway process). Always counted as one filter."
        },
        "require_crypto": {
          "type": "boolean",
          "default": false,
          "description": "Only brokers with crypto trading pass Boolean: true or false (default false).."
        },
        "require_free_tier": {
          "type": "boolean",
          "default": false,
          "description": "Only brokers with a free API tier or sandbox pass Boolean: true or false (default false).."
        },
        "require_futures": {
          "type": "boolean",
          "default": false,
          "description": "Only brokers with futures trading pass Boolean: true or false (default false).."
        },
        "require_mcp": {
          "type": "boolean",
          "default": false,
          "description": "Only brokers with an official or community MCP server pass Boolean: true or false (default false).."
        },
        "require_options": {
          "type": "boolean",
          "default": false,
          "description": "Only brokers with options trading pass Boolean: true or false (default false).."
        }
      },
      "page": "https://aifinhub.io/broker-api-comparator/",
      "contract": "https://aifinhub.io/contracts/broker-api-comparator.json"
    },
    {
      "calculator": "synthetic-market-data-generator",
      "title": "Synthetic Market Data Generator",
      "category": "Generators",
      "summary": "Generate synthetic price series — geometric Brownian motion, GARCH(1,1) with volatility clustering, regime-switching bull/bear, or copula-linked correlated pairs. Download CSV/JSON. For backtest scaffolding when you cannot share real data.",
      "run": "https://aifinhub.io/api/run/synthetic-market-data-generator",
      "example": "https://aifinhub.io/api/run/synthetic-market-data-generator?model=gbm&seed=42&days=252&s0=100&drift=8&vol=20&trading_days_per_year=252&omega=0.00002&alpha=0.1&beta=0.85&bull_drift=15&bull_vol=15&bear_drift=-20&bear_vol=35&p_bull_to_bear=0.01&p_bear_to_bull=0.03&s0a=100&drift_a=8&vol_a=20&s0b=100&drift_b=6&vol_b=25&rho=0.6",
      "inputs": {
        "alpha": {
          "type": "number",
          "default": 0.1,
          "minimum": 0,
          "description": "GARCH ARCH coefficient; alpha + beta must be < 1."
        },
        "bear_drift": {
          "type": "number",
          "default": -20,
          "description": "Bear-regime annual drift, %."
        },
        "bear_vol": {
          "type": "number",
          "default": 35,
          "minimum": 0,
          "description": "Bear-regime annual volatility, %."
        },
        "beta": {
          "type": "number",
          "default": 0.85,
          "minimum": 0,
          "description": "GARCH persistence coefficient; alpha + beta must be < 1."
        },
        "bull_drift": {
          "type": "number",
          "default": 15,
          "description": "Bull-regime annual drift, %."
        },
        "bull_vol": {
          "type": "number",
          "default": 15,
          "minimum": 0,
          "description": "Bull-regime annual volatility, %."
        },
        "days": {
          "type": "number",
          "default": 252,
          "minimum": 1,
          "maximum": 5000,
          "description": "Steps to simulate (the path has days + 1 prices). Default 252 for gbm and pair, 504 for garch, 756 for regime."
        },
        "drift": {
          "type": "number",
          "default": 8,
          "description": "Annual drift in percent (8 = 8%)."
        },
        "drift_a": {
          "type": "number",
          "default": 8,
          "description": "Asset A annual drift, %."
        },
        "drift_b": {
          "type": "number",
          "default": 6,
          "description": "Asset B annual drift, %."
        },
        "model": {
          "type": "string",
          "enum": [
            "gbm",
            "garch",
            "regime",
            "pair"
          ],
          "default": "gbm",
          "description": "Generator."
        },
        "omega": {
          "type": "number",
          "default": 0.00002,
          "minimum": 0,
          "description": "GARCH long-run variance constant, daily variance units (0.00002)."
        },
        "p_bear_to_bull": {
          "type": "number",
          "default": 0.03,
          "minimum": 0,
          "maximum": 1,
          "description": "Daily probability of switching bear to bull."
        },
        "p_bull_to_bear": {
          "type": "number",
          "default": 0.01,
          "minimum": 0,
          "maximum": 1,
          "description": "Daily probability of switching bull to bear."
        },
        "rho": {
          "type": "number",
          "default": 0.6,
          "minimum": -1,
          "maximum": 1,
          "description": "Correlation of the two assets' shocks."
        },
        "s0": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Start price (gbm, garch, regime)."
        },
        "s0a": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Asset A start price."
        },
        "s0b": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Asset B start price."
        },
        "seed": {
          "type": "number",
          "default": 42,
          "minimum": 0,
          "description": "RNG seed; the same seed and parameters reproduce the same path."
        },
        "trading_days_per_year": {
          "type": "number",
          "default": 252,
          "minimum": 1,
          "maximum": 366,
          "description": "Steps per year for dt and for annualizing the stats (252 equities, 365 crypto)."
        },
        "vol": {
          "type": "number",
          "default": 20,
          "minimum": 0,
          "description": "Annual volatility in percent (20 = 20%)."
        },
        "vol_a": {
          "type": "number",
          "default": 20,
          "minimum": 0,
          "description": "Asset A annual volatility, %."
        },
        "vol_b": {
          "type": "number",
          "default": 25,
          "minimum": 0,
          "description": "Asset B annual volatility, %."
        }
      },
      "page": "https://aifinhub.io/synthetic-market-data-generator/",
      "contract": "https://aifinhub.io/contracts/synthetic-market-data-generator.json"
    },
    {
      "calculator": "financial-document-token-estimator",
      "title": "Financial Document Token Estimator",
      "category": "Calculators",
      "summary": "Paste a 10-K, 10-Q, 8-K or earnings transcript and see token count + one-pass extraction cost across ten frontier LLMs, with cache-hit toggle.",
      "run": "https://aifinhub.io/api/run/financial-document-token-estimator",
      "example": "https://aifinhub.io/api/run/financial-document-token-estimator?mode=archetype&archetype_id=10-k&output_tokens=1500&peers=0&cache_hit_rate=0",
      "inputs": {
        "archetype_id": {
          "type": "string",
          "enum": [
            "10-k",
            "10-q",
            "8-k",
            "earnings-call"
          ],
          "default": "10-k",
          "description": "Document preset (mode=archetype). Filings are the main document without exhibits, median of the EDGAR sample measured 2026-10-19: 10-k ~365,600 chars, 10-q ~140,900, 8-k ~4,200. earnings-call ~60,000 chars (a 60-minute call)."
        },
        "cache_hit_rate": {
          "type": "number",
          "default": 0,
          "minimum": 0,
          "maximum": 1,
          "description": "Share (0-1) of input tokens billed at the cache-read rate; 0 for a document read once."
        },
        "mode": {
          "type": "string",
          "enum": [
            "archetype",
            "paste"
          ],
          "default": "archetype",
          "default_with": [
            "pasted_text"
          ],
          "description": "archetype = representative document size; paste = count pasted_text. Left out, pasted text means paste, else archetype."
        },
        "output_tokens": {
          "type": "number",
          "default": 1500,
          "minimum": 0,
          "description": "Expected output tokens for the extraction."
        },
        "pasted_text": {
          "type": "string",
          "default": "",
          "description": "Raw document text (mode=paste); tokens = characters / the model's chars-per-token ratio (3.5 Anthropic, 4.0 others)."
        },
        "peers": {
          "type": "number",
          "default": 0,
          "minimum": 0,
          "description": "Additional same-size documents read in one synthesis call (0 = one pass). Fractions are floored."
        }
      },
      "page": "https://aifinhub.io/financial-document-token-estimator/",
      "contract": "https://aifinhub.io/contracts/financial-document-token-estimator.json"
    },
    {
      "calculator": "sec-filing-chunk-optimizer",
      "title": "SEC Filing Chunk Optimizer",
      "category": "Generators",
      "summary": "Pick a filing archetype, tune chunk size and overlap, and see chunk count, embedding cost, and structural-boundary warnings across three chunking strategies.",
      "run": "https://aifinhub.io/api/run/sec-filing-chunk-optimizer",
      "example": "https://aifinhub.io/api/run/sec-filing-chunk-optimizer?archetype_id=10k-body&chunk_size=1024&overlap_pct=0.15&strategy=structural&embedding_model_id=openai-embed-3-small&query_reembed_count=100",
      "inputs": {
        "archetype_id": {
          "type": "string",
          "enum": [
            "10k-body",
            "mdna",
            "notes",
            "earnings-call"
          ],
          "default": "10k-body",
          "description": "Filing archetype with a representative token count."
        },
        "chunk_size": {
          "type": "number",
          "default": 1024,
          "minimum": 256,
          "maximum": 8192,
          "description": "Target chunk size in tokens."
        },
        "embedding_model_id": {
          "type": "string",
          "enum": [
            "openai-embed-3-small",
            "voyage-finance-2",
            "openai-embed-3-large"
          ],
          "default": "openai-embed-3-small",
          "description": "Embedding model priced per 1M input tokens."
        },
        "overlap_pct": {
          "type": "number",
          "default": 0.15,
          "minimum": 0,
          "maximum": 0.3,
          "description": "Overlap between consecutive chunks as a decimal (0.15 = 15%)."
        },
        "query_reembed_count": {
          "type": "number",
          "default": 100,
          "minimum": 0,
          "description": "Number of search queries to embed (about 40 tokens each)."
        },
        "strategy": {
          "type": "string",
          "enum": [
            "structural",
            "recursive",
            "semantic"
          ],
          "default": "structural",
          "description": "Chunking strategy."
        }
      },
      "page": "https://aifinhub.io/sec-filing-chunk-optimizer/",
      "contract": "https://aifinhub.io/contracts/sec-filing-chunk-optimizer.json"
    },
    {
      "calculator": "structured-schema-validator-finance",
      "title": "Structured Schema Validator for Finance",
      "category": "Playgrounds",
      "summary": "Paste LLM JSON output and validate against four pre-built finance schemas — research output, trade decision, risk snapshot, peer comparison — with sanity checks on unit and GAAP basis.",
      "run": "https://aifinhub.io/api/run/structured-schema-validator-finance",
      "example": "https://aifinhub.io/api/run/structured-schema-validator-finance?schema_id=trade_decision&json=%7B%22ticker%22%3A%22AAPL%22%2C%22side%22%3A%22long%22%2C%22size_shares%22%3A250%2C%22rationale%22%3A%22Earnings+beat+confirmed+the+margin-expansion+thesis%3B+sized+for+1%25+portfolio+risk+against+the+declared+stop.%22%2C%22stop_loss%22%3A178.5%2C%22take_profit%22%3A212%7D",
      "inputs": {
        "json": {
          "type": "object",
          "default": {
            "ticker": "AAPL",
            "side": "long",
            "size_shares": 250,
            "rationale": "Earnings beat confirmed the margin-expansion thesis; sized for 1% portfolio risk against the declared stop.",
            "stop_loss": 178.5,
            "take_profit": 212
          },
          "description": "The model output to validate: a parsed JSON object, or the raw output text as a string (parse errors are reported in parseError, not thrown)."
        },
        "schema_id": {
          "type": "string",
          "enum": [
            "research_output",
            "trade_decision",
            "risk_snapshot",
            "peer_comparison"
          ],
          "default": "trade_decision",
          "description": "Reference schema."
        }
      },
      "page": "https://aifinhub.io/structured-schema-validator-finance/",
      "contract": "https://aifinhub.io/contracts/structured-schema-validator-finance.json"
    },
    {
      "calculator": "agent-cost-envelope-calculator",
      "title": "Agent Cost Envelope Calculator",
      "category": "Calculators",
      "summary": "Model an LLM research loop end-to-end — steps, tool calls, convergence checks, markets per day — and see per-loop, daily, and monthly cost with cost-cap recommendations.",
      "run": "https://aifinhub.io/api/run/agent-cost-envelope-calculator",
      "example": "https://aifinhub.io/api/run/agent-cost-envelope-calculator?model_id=claude-sonnet-5-5&input_tokens_per_step=8000&output_tokens_per_step=1500&steps_per_loop=5&convergence_check_pct=10&markets_per_day=10&target_monthly_usd=200&calendar_mode=business",
      "inputs": {
        "calendar_mode": {
          "type": "string",
          "enum": [
            "business",
            "crypto"
          ],
          "default": "business",
          "description": "Days billed per month: business = 22 trading days, crypto = 30 days."
        },
        "convergence_check_pct": {
          "type": "number",
          "default": 10,
          "minimum": 0,
          "description": "Cost of the final convergence/self-check step as a percent of one normal step (10 = 10%)."
        },
        "input_tokens_per_step": {
          "type": "number",
          "default": 8000,
          "minimum": 0,
          "description": "Input tokens sent to the model per step (prompt, context, tool results)."
        },
        "markets_per_day": {
          "type": "number",
          "default": 10,
          "minimum": 0,
          "description": "Loops run per day (markets, tickers or ideas analyzed)."
        },
        "model_id": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "claude-sonnet-5-5",
          "description": "Model whose list price is used. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini)."
        },
        "output_tokens_per_step": {
          "type": "number",
          "default": 1500,
          "minimum": 0,
          "description": "Tokens the model generates per step (reasoning, tool-call arguments, answer)."
        },
        "steps_per_loop": {
          "type": "number",
          "default": 5,
          "minimum": 1,
          "description": "Model calls per loop (one loop = one market analyzed). Fractional values are floored."
        },
        "target_monthly_usd": {
          "type": "number",
          "default": 200,
          "minimum": 0,
          "description": "Monthly budget used for budget utilization and the token cap; must be greater than 0."
        }
      },
      "page": "https://aifinhub.io/agent-cost-envelope-calculator/",
      "contract": "https://aifinhub.io/contracts/agent-cost-envelope-calculator.json"
    },
    {
      "calculator": "fallback-chain-simulator",
      "title": "Fallback Chain Simulator",
      "category": "Playgrounds",
      "summary": "Define a provider fallback chain, simulate rate-limit and latency failures, and see p50/p95/p99 latency, success rate, total cost, and the degradation-event distribution.",
      "run": "https://aifinhub.io/api/run/fallback-chain-simulator",
      "example": "https://aifinhub.io/api/run/fallback-chain-simulator?primary_provider_id=anthropic&primary_model_id=claude-sonnet-5-5&primary_rate_429=0.08&primary_p99_latency_ms=3500&fallback1_provider_id=openai&fallback1_model_id=gpt-5-4-mini&fallback1_rate_429=0.05&fallback1_p99_latency_ms=3000&fallback2_enabled=true&fallback2_provider_id=google&fallback2_model_id=gemini-3-8-flash&fallback2_rate_429=0.03&fallback2_p99_latency_ms=2500&deadline_ms=3000&input_tokens=4000&output_tokens=500&trials=1000&seed=1",
      "inputs": {
        "chain": {
          "type": "object",
          "description": "Alternative nested form: { primary, fallback1, fallback2?, deadline_ms, input_tokens, output_tokens } with each leg { provider_id, model_id, rate_429, p99_latency_ms }. When given, the flat leg params are ignored."
        },
        "deadline_ms": {
          "type": "number",
          "default": 3000,
          "minimum": 0,
          "description": "End-to-end deadline for the whole chain in ms; a request whose answer arrives later fails."
        },
        "fallback1_model_id": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "gpt-5-4-mini",
          "default_with": [
            "fallback1_provider_id"
          ],
          "description": "fallback1 model id; must belong to the leg's provider. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini). Left out next to a given provider, it is that provider's model in the default chain (anthropic claude-sonnet-5-5, openai gpt-5-4-mini, google gemini-3-8-flash)."
        },
        "fallback1_p99_latency_ms": {
          "type": "number",
          "default": 3000,
          "minimum": 0,
          "description": "fallback1 99th-percentile latency in ms (default 3000); the median is the model's reference p50."
        },
        "fallback1_provider_id": {
          "type": "string",
          "enum": [
            "anthropic",
            "openai",
            "google"
          ],
          "default": "openai",
          "default_with": [
            "fallback1_model_id"
          ],
          "description": "fallback1 provider (default openai). Left out next to a given model id, it is that model's provider."
        },
        "fallback1_rate_429": {
          "type": "number",
          "default": 0.05,
          "minimum": 0,
          "maximum": 1,
          "description": "Probability (0-1) that a fallback1 call is throttled with a 429 (default 0.05)."
        },
        "fallback2_enabled": {
          "type": "boolean",
          "default": true,
          "description": "Include a third leg (fallback 2). Boolean true/false (default true)."
        },
        "fallback2_model_id": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "gemini-3-8-flash",
          "default_with": [
            "fallback2_provider_id"
          ],
          "description": "fallback2 model id; must belong to the leg's provider. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini). Left out next to a given provider, it is that provider's model in the default chain (anthropic claude-sonnet-5-5, openai gpt-5-4-mini, google gemini-3-8-flash)."
        },
        "fallback2_p99_latency_ms": {
          "type": "number",
          "default": 2500,
          "minimum": 0,
          "description": "fallback2 99th-percentile latency in ms (default 2500); the median is the model's reference p50."
        },
        "fallback2_provider_id": {
          "type": "string",
          "enum": [
            "anthropic",
            "openai",
            "google"
          ],
          "default": "google",
          "default_with": [
            "fallback2_model_id"
          ],
          "description": "fallback2 provider (default google). Left out next to a given model id, it is that model's provider."
        },
        "fallback2_rate_429": {
          "type": "number",
          "default": 0.03,
          "minimum": 0,
          "maximum": 1,
          "description": "Probability (0-1) that a fallback2 call is throttled with a 429 (default 0.03)."
        },
        "input_tokens": {
          "type": "number",
          "default": 4000,
          "minimum": 0,
          "description": "Input tokens per call (for cost)."
        },
        "output_tokens": {
          "type": "number",
          "default": 500,
          "minimum": 0,
          "description": "Output tokens per call (for cost)."
        },
        "primary_model_id": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "claude-sonnet-5-5",
          "default_with": [
            "primary_provider_id"
          ],
          "description": "primary model id; must belong to the leg's provider. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini). Left out next to a given provider, it is that provider's model in the default chain (anthropic claude-sonnet-5-5, openai gpt-5-4-mini, google gemini-3-8-flash)."
        },
        "primary_p99_latency_ms": {
          "type": "number",
          "default": 3500,
          "minimum": 0,
          "description": "primary 99th-percentile latency in ms (default 3500); the median is the model's reference p50."
        },
        "primary_provider_id": {
          "type": "string",
          "enum": [
            "anthropic",
            "openai",
            "google"
          ],
          "default": "anthropic",
          "default_with": [
            "primary_model_id"
          ],
          "description": "primary provider (default anthropic). Left out next to a given model id, it is that model's provider."
        },
        "primary_rate_429": {
          "type": "number",
          "default": 0.08,
          "minimum": 0,
          "maximum": 1,
          "description": "Probability (0-1) that a primary call is throttled with a 429 (default 0.08)."
        },
        "seed": {
          "type": "number",
          "default": 1,
          "description": "Random seed; same inputs and seed give the same result."
        },
        "trials": {
          "type": "number",
          "default": 1000,
          "minimum": 1,
          "maximum": 100000,
          "description": "Number of simulated requests (whole number)."
        }
      },
      "page": "https://aifinhub.io/fallback-chain-simulator/",
      "contract": "https://aifinhub.io/contracts/fallback-chain-simulator.json"
    },
    {
      "calculator": "model-selector-finance",
      "title": "Model Selector for Finance",
      "category": "Comparators",
      "summary": "Input task, latency budget, cost budget, context size, and quality sensitivity; get ranked model recommendations with rationale — grounded in published pricing and vendor capabilities, not benchmark scores.",
      "run": "https://aifinhub.io/api/run/model-selector-finance",
      "example": "https://aifinhub.io/api/run/model-selector-finance?task=summarize&latency=sub_5s&cost=b50&context=k32_200k&quality=medium",
      "inputs": {
        "context": {
          "type": "string",
          "enum": [
            "lt_32k",
            "k32_200k",
            "k200_1m",
            "gt_1m"
          ],
          "default": "k32_200k",
          "description": "Context-window need in tokens: under 32K, 32K-200K, 200K-1M, over 1M."
        },
        "cost": {
          "type": "string",
          "enum": [
            "b10",
            "b50",
            "b200",
            "b200_plus"
          ],
          "default": "b50",
          "description": "Monthly budget ceiling at the reference workload (6,000 input + 1,200 output tokens per call, 3,000 calls/month): $10, $50, $200 or more than $200."
        },
        "latency": {
          "type": "string",
          "enum": [
            "sub_1s",
            "sub_5s",
            "sub_30s",
            "batch"
          ],
          "default": "sub_5s",
          "description": "Latency budget per call: under 1 s, under 5 s, under 30 s, or batch (no limit)."
        },
        "quality": {
          "type": "string",
          "enum": [
            "low",
            "medium",
            "high"
          ],
          "default": "medium",
          "description": "Quality sensitivity; high favours flagship tiers, low favours cheap tiers."
        },
        "task": {
          "type": "string",
          "enum": [
            "extract",
            "summarize",
            "forecast",
            "compare",
            "rank",
            "synthesize"
          ],
          "default": "summarize",
          "description": "Task type the model will run."
        }
      },
      "page": "https://aifinhub.io/model-selector-finance/",
      "contract": "https://aifinhub.io/contracts/model-selector-finance.json"
    },
    {
      "calculator": "batch-vs-realtime-cost-calculator",
      "title": "Batch vs Real-Time Cost Calculator",
      "category": "Calculators",
      "summary": "Jobs per day, tokens per job, model, deadline — get real-time vs batch cost side-by-side with savings estimate and batch-eligibility flag. Based on vendor-published batch pricing.",
      "run": "https://aifinhub.io/api/run/batch-vs-realtime-cost-calculator",
      "example": "https://aifinhub.io/api/run/batch-vs-realtime-cost-calculator?model_id=claude-sonnet-5-5&jobs_per_day=500&input_tokens_per_job=15000&output_tokens_per_job=1500&deadline_hours=24",
      "inputs": {
        "deadline_hours": {
          "type": "number",
          "default": 24,
          "minimum": 0,
          "description": "How long results can wait. Batch is used only when this is at least the vendor batch SLA (24 h); must be greater than 0."
        },
        "input_tokens_per_job": {
          "type": "number",
          "default": 15000,
          "minimum": 0,
          "description": "Input tokens per job."
        },
        "jobs_per_day": {
          "type": "number",
          "default": 500,
          "minimum": 0,
          "description": "LLM requests (jobs) per day."
        },
        "model_id": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "claude-sonnet-5-5",
          "description": "Model whose list price and batch terms are used. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini)."
        },
        "output_tokens_per_job": {
          "type": "number",
          "default": 1500,
          "minimum": 0,
          "description": "Output tokens per job."
        }
      },
      "page": "https://aifinhub.io/batch-vs-realtime-cost-calculator/",
      "contract": "https://aifinhub.io/contracts/batch-vs-realtime-cost-calculator.json"
    },
    {
      "calculator": "forecast-scoring-sandbox",
      "title": "Forecast Scoring Sandbox",
      "category": "Playgrounds",
      "summary": "Paste a forecast stream (probability + outcome) and see Brier score with full decomposition, log loss, reliability diagram, and bootstrap confidence intervals. Works on any prob + binary outcome CSV.",
      "run": "https://aifinhub.io/api/run/forecast-scoring-sandbox",
      "example": "https://aifinhub.io/api/run/forecast-scoring-sandbox",
      "inputs": {
        "bootstrap_resamples": {
          "type": "number",
          "minimum": 0,
          "maximum": 20000,
          "description": "Bootstrap resamples for the 95% intervals (whole number, 0 = skip). Seeded, so results are reproducible."
        },
        "forecasts": {
          "type": "array",
          "default": [
            {
              "prob": 0.6116,
              "outcome": 1
            },
            {
              "prob": 0.2413,
              "outcome": 0
            },
            {
              "prob": 0.5151,
              "outcome": 1
            },
            {
              "prob": 0.7806,
              "outcome": 1
            },
            {
              "prob": 0.7085,
              "outcome": 1
            },
            {
              "prob": 0.9285,
              "outcome": 1
            },
            {
              "prob": 0.4567,
              "outcome": 0
            },
            {
              "prob": 0.5556,
              "outcome": 1
            },
            {
              "prob": 0.0636,
              "outcome": 0
            },
            {
              "prob": 0.2901,
              "outcome": 0
            },
            {
              "prob": 0.3226,
              "outcome": 0
            },
            {
              "prob": 0.3229,
              "outcome": 1
            },
            {
              "prob": 0.5248,
              "outcome": 1
            },
            {
              "prob": 0.8689,
              "outcome": 1
            },
            {
              "prob": 0.1544,
              "outcome": 1
            },
            {
              "prob": 0.531,
              "outcome": 1
            },
            {
              "prob": 0.6319,
              "outcome": 1
            },
            {
              "prob": 0.7363,
              "outcome": 1
            },
            {
              "prob": 0.0861,
              "outcome": 0
            },
            {
              "prob": 0.3397,
              "outcome": 1
            },
            {
              "prob": 0.4632,
              "outcome": 0
            },
            {
              "prob": 0.7156,
              "outcome": 0
            },
            {
              "prob": 0.6064,
              "outcome": 1
            },
            {
              "prob": 0.4834,
              "outcome": 1
            },
            {
              "prob": 0.4628,
              "outcome": 0
            },
            {
              "prob": 0.6358,
              "outcome": 0
            },
            {
              "prob": 0.4015,
              "outcome": 0
            },
            {
              "prob": 0.5665,
              "outcome": 1
            },
            {
              "prob": 0.5495,
              "outcome": 0
            },
            {
              "prob": 0.8171,
              "outcome": 1
            },
            {
              "prob": 0.7797,
              "outcome": 1
            },
            {
              "prob": 0.6885,
              "outcome": 0
            },
            {
              "prob": 0.4069,
              "outcome": 1
            },
            {
              "prob": 0.6873,
              "outcome": 1
            },
            {
              "prob": 0.477,
              "outcome": 0
            },
            {
              "prob": 0.202,
              "outcome": 0
            },
            {
              "prob": 0.0545,
              "outcome": 0
            },
            {
              "prob": 0.83,
              "outcome": 1
            },
            {
              "prob": 0.644,
              "outcome": 1
            },
            {
              "prob": 0.8006,
              "outcome": 1
            },
            {
              "prob": 0.7005,
              "outcome": 1
            },
            {
              "prob": 0.3634,
              "outcome": 1
            },
            {
              "prob": 0.2142,
              "outcome": 0
            },
            {
              "prob": 0.439,
              "outcome": 1
            },
            {
              "prob": 0.4753,
              "outcome": 1
            },
            {
              "prob": 0.4507,
              "outcome": 0
            },
            {
              "prob": 0.5532,
              "outcome": 0
            },
            {
              "prob": 0.5839,
              "outcome": 1
            },
            {
              "prob": 0.3468,
              "outcome": 0
            },
            {
              "prob": 0.4419,
              "outcome": 1
            },
            {
              "prob": 0.4895,
              "outcome": 0
            },
            {
              "prob": 0.6959,
              "outcome": 1
            },
            {
              "prob": 0.4164,
              "outcome": 0
            },
            {
              "prob": 0.1464,
              "outcome": 0
            },
            {
              "prob": 0.6264,
              "outcome": 0
            },
            {
              "prob": 0.6437,
              "outcome": 0
            },
            {
              "prob": 0.097,
              "outcome": 0
            },
            {
              "prob": 0.1371,
              "outcome": 0
            },
            {
              "prob": 0.7351,
              "outcome": 1
            },
            {
              "prob": 0.2478,
              "outcome": 0
            },
            {
              "prob": 0.3712,
              "outcome": 1
            },
            {
              "prob": 0.086,
              "outcome": 0
            },
            {
              "prob": 0.1293,
              "outcome": 0
            },
            {
              "prob": 0.4576,
              "outcome": 0
            },
            {
              "prob": 0.9319,
              "outcome": 1
            },
            {
              "prob": 0.5308,
              "outcome": 1
            },
            {
              "prob": 0.1206,
              "outcome": 0
            },
            {
              "prob": 0.7578,
              "outcome": 1
            },
            {
              "prob": 0.3031,
              "outcome": 0
            },
            {
              "prob": 0.8722,
              "outcome": 1
            },
            {
              "prob": 0.4556,
              "outcome": 0
            },
            {
              "prob": 0.907,
              "outcome": 0
            },
            {
              "prob": 0.7428,
              "outcome": 0
            },
            {
              "prob": 0.8038,
              "outcome": 0
            },
            {
              "prob": 0.534,
              "outcome": 0
            },
            {
              "prob": 0.708,
              "outcome": 1
            },
            {
              "prob": 0.8266,
              "outcome": 1
            },
            {
              "prob": 0.6718,
              "outcome": 1
            },
            {
              "prob": 0.9079,
              "outcome": 1
            },
            {
              "prob": 0.5081,
              "outcome": 1
            },
            {
              "prob": 0.913,
              "outcome": 1
            },
            {
              "prob": 0.7671,
              "outcome": 1
            },
            {
              "prob": 0.5628,
              "outcome": 1
            },
            {
              "prob": 0.6314,
              "outcome": 0
            },
            {
              "prob": 0.7891,
              "outcome": 1
            },
            {
              "prob": 0.4478,
              "outcome": 0
            },
            {
              "prob": 0.7792,
              "outcome": 0
            },
            {
              "prob": 0.6429,
              "outcome": 1
            },
            {
              "prob": 0.2988,
              "outcome": 0
            },
            {
              "prob": 0.6932,
              "outcome": 0
            },
            {
              "prob": 0.2757,
              "outcome": 0
            },
            {
              "prob": 0.2425,
              "outcome": 0
            },
            {
              "prob": 0.2513,
              "outcome": 0
            },
            {
              "prob": 0.1898,
              "outcome": 1
            },
            {
              "prob": 0.534,
              "outcome": 1
            },
            {
              "prob": 0.8913,
              "outcome": 1
            },
            {
              "prob": 0.9111,
              "outcome": 0
            },
            {
              "prob": 0.2472,
              "outcome": 1
            },
            {
              "prob": 0.6036,
              "outcome": 1
            },
            {
              "prob": 0.0688,
              "outcome": 0
            },
            {
              "prob": 0.7694,
              "outcome": 1
            },
            {
              "prob": 0.5462,
              "outcome": 1
            },
            {
              "prob": 0.2897,
              "outcome": 1
            },
            {
              "prob": 0.6614,
              "outcome": 0
            },
            {
              "prob": 0.0963,
              "outcome": 0
            },
            {
              "prob": 0.118,
              "outcome": 0
            },
            {
              "prob": 0.9207,
              "outcome": 1
            },
            {
              "prob": 0.382,
              "outcome": 1
            },
            {
              "prob": 0.2754,
              "outcome": 0
            },
            {
              "prob": 0.8545,
              "outcome": 1
            },
            {
              "prob": 0.0979,
              "outcome": 0
            },
            {
              "prob": 0.8213,
              "outcome": 1
            },
            {
              "prob": 0.7177,
              "outcome": 1
            },
            {
              "prob": 0.9499,
              "outcome": 1
            },
            {
              "prob": 0.2261,
              "outcome": 0
            },
            {
              "prob": 0.1295,
              "outcome": 0
            },
            {
              "prob": 0.5591,
              "outcome": 1
            },
            {
              "prob": 0.7734,
              "outcome": 0
            },
            {
              "prob": 0.2254,
              "outcome": 1
            },
            {
              "prob": 0.8302,
              "outcome": 1
            },
            {
              "prob": 0.6368,
              "outcome": 1
            },
            {
              "prob": 0.4734,
              "outcome": 0
            },
            {
              "prob": 0.1246,
              "outcome": 0
            },
            {
              "prob": 0.3651,
              "outcome": 0
            },
            {
              "prob": 0.349,
              "outcome": 0
            },
            {
              "prob": 0.1132,
              "outcome": 0
            },
            {
              "prob": 0.5355,
              "outcome": 0
            },
            {
              "prob": 0.3697,
              "outcome": 0
            },
            {
              "prob": 0.1944,
              "outcome": 0
            },
            {
              "prob": 0.537,
              "outcome": 1
            },
            {
              "prob": 0.6084,
              "outcome": 0
            },
            {
              "prob": 0.4809,
              "outcome": 1
            },
            {
              "prob": 0.0937,
              "outcome": 1
            },
            {
              "prob": 0.468,
              "outcome": 0
            },
            {
              "prob": 0.7695,
              "outcome": 1
            },
            {
              "prob": 0.075,
              "outcome": 0
            },
            {
              "prob": 0.6921,
              "outcome": 0
            },
            {
              "prob": 0.6378,
              "outcome": 0
            },
            {
              "prob": 0.3382,
              "outcome": 0
            },
            {
              "prob": 0.738,
              "outcome": 0
            },
            {
              "prob": 0.443,
              "outcome": 0
            },
            {
              "prob": 0.5461,
              "outcome": 0
            },
            {
              "prob": 0.8276,
              "outcome": 0
            },
            {
              "prob": 0.4662,
              "outcome": 1
            },
            {
              "prob": 0.1732,
              "outcome": 0
            },
            {
              "prob": 0.4532,
              "outcome": 0
            },
            {
              "prob": 0.5243,
              "outcome": 0
            },
            {
              "prob": 0.2983,
              "outcome": 0
            },
            {
              "prob": 0.7292,
              "outcome": 0
            },
            {
              "prob": 0.5018,
              "outcome": 1
            },
            {
              "prob": 0.1507,
              "outcome": 1
            },
            {
              "prob": 0.8793,
              "outcome": 1
            },
            {
              "prob": 0.9044,
              "outcome": 0
            },
            {
              "prob": 0.572,
              "outcome": 1
            },
            {
              "prob": 0.7079,
              "outcome": 0
            },
            {
              "prob": 0.655,
              "outcome": 1
            },
            {
              "prob": 0.1483,
              "outcome": 0
            },
            {
              "prob": 0.8662,
              "outcome": 1
            },
            {
              "prob": 0.7007,
              "outcome": 0
            },
            {
              "prob": 0.198,
              "outcome": 0
            },
            {
              "prob": 0.6565,
              "outcome": 1
            },
            {
              "prob": 0.5257,
              "outcome": 0
            },
            {
              "prob": 0.8426,
              "outcome": 1
            },
            {
              "prob": 0.0648,
              "outcome": 0
            },
            {
              "prob": 0.7416,
              "outcome": 1
            },
            {
              "prob": 0.5789,
              "outcome": 1
            },
            {
              "prob": 0.943,
              "outcome": 1
            },
            {
              "prob": 0.2844,
              "outcome": 0
            },
            {
              "prob": 0.1861,
              "outcome": 0
            },
            {
              "prob": 0.4199,
              "outcome": 1
            },
            {
              "prob": 0.6753,
              "outcome": 1
            },
            {
              "prob": 0.5781,
              "outcome": 0
            },
            {
              "prob": 0.4762,
              "outcome": 1
            },
            {
              "prob": 0.4191,
              "outcome": 1
            },
            {
              "prob": 0.6264,
              "outcome": 0
            },
            {
              "prob": 0.4104,
              "outcome": 0
            },
            {
              "prob": 0.8167,
              "outcome": 1
            },
            {
              "prob": 0.765,
              "outcome": 0
            },
            {
              "prob": 0.9276,
              "outcome": 1
            },
            {
              "prob": 0.6712,
              "outcome": 1
            },
            {
              "prob": 0.7273,
              "outcome": 0
            },
            {
              "prob": 0.1366,
              "outcome": 0
            },
            {
              "prob": 0.1657,
              "outcome": 0
            },
            {
              "prob": 0.6893,
              "outcome": 0
            },
            {
              "prob": 0.22,
              "outcome": 1
            },
            {
              "prob": 0.5081,
              "outcome": 1
            },
            {
              "prob": 0.8771,
              "outcome": 1
            },
            {
              "prob": 0.477,
              "outcome": 1
            },
            {
              "prob": 0.2583,
              "outcome": 1
            },
            {
              "prob": 0.0835,
              "outcome": 0
            },
            {
              "prob": 0.9217,
              "outcome": 1
            },
            {
              "prob": 0.1064,
              "outcome": 0
            },
            {
              "prob": 0.797,
              "outcome": 1
            },
            {
              "prob": 0.4639,
              "outcome": 0
            },
            {
              "prob": 0.4387,
              "outcome": 0
            },
            {
              "prob": 0.7163,
              "outcome": 1
            },
            {
              "prob": 0.9031,
              "outcome": 1
            },
            {
              "prob": 0.1449,
              "outcome": 0
            },
            {
              "prob": 0.0834,
              "outcome": 0
            },
            {
              "prob": 0.8509,
              "outcome": 1
            }
          ],
          "description": "Array of at least one { prob: number in [0,1], outcome: 0 or 1 }."
        },
        "n_bins": {
          "type": "number",
          "default": 10,
          "minimum": 1,
          "maximum": 100,
          "description": "Equal-width probability bins for the decomposition and reliability diagram (whole number)."
        }
      },
      "page": "https://aifinhub.io/forecast-scoring-sandbox/",
      "contract": "https://aifinhub.io/contracts/forecast-scoring-sandbox.json"
    },
    {
      "calculator": "walk-forward-validation-visualizer",
      "title": "Walk-Forward Validation Visualizer",
      "category": "Playgrounds",
      "summary": "Paste a strategy returns CSV, get per-window in-sample vs out-of-sample Sharpe and the IS→OOS drop. Rolling and anchored window modes.",
      "run": "https://aifinhub.io/api/run/walk-forward-validation-visualizer",
      "example": "https://aifinhub.io/api/run/walk-forward-validation-visualizer",
      "inputs": {
        "mode": {
          "type": "string",
          "enum": [
            "rolling",
            "anchored"
          ],
          "default": "rolling",
          "description": "rolling = fixed-length training window before each test block; anchored = training always starts at row 0."
        },
        "num_windows": {
          "type": "number",
          "default": 4,
          "minimum": 1,
          "maximum": 50,
          "description": "Number of test windows."
        },
        "rows": {
          "type": "array",
          "default": [
            {
              "strategy": 0.008538,
              "benchmark": 0.010128,
              "date": "2024-01-02"
            },
            {
              "strategy": -0.009035,
              "benchmark": -0.002693,
              "date": "2024-01-03"
            },
            {
              "strategy": -0.00485,
              "benchmark": -0.005739,
              "date": "2024-01-04"
            },
            {
              "strategy": -0.004299,
              "benchmark": -0.008399,
              "date": "2024-01-06"
            },
            {
              "strategy": 0.001682,
              "benchmark": -0.014444,
              "date": "2024-01-07"
            },
            {
              "strategy": -0.010691,
              "benchmark": -0.001063,
              "date": "2024-01-09"
            },
            {
              "strategy": 0.008703,
              "benchmark": 0.000927,
              "date": "2024-01-10"
            },
            {
              "strategy": -0.009063,
              "benchmark": -0.002943,
              "date": "2024-01-11"
            },
            {
              "strategy": 0.01387,
              "benchmark": 0.007545,
              "date": "2024-01-13"
            },
            {
              "strategy": -0.017203,
              "benchmark": -0.004229,
              "date": "2024-01-14"
            },
            {
              "strategy": 0.00198,
              "benchmark": -0.012984,
              "date": "2024-01-16"
            },
            {
              "strategy": -0.005247,
              "benchmark": 0.002364,
              "date": "2024-01-17"
            },
            {
              "strategy": 0.011788,
              "benchmark": 0.011842,
              "date": "2024-01-18"
            },
            {
              "strategy": 0.009747,
              "benchmark": 0.004972,
              "date": "2024-01-20"
            },
            {
              "strategy": 0.00087,
              "benchmark": -0.00282,
              "date": "2024-01-21"
            },
            {
              "strategy": 0.025601,
              "benchmark": -0.013159,
              "date": "2024-01-23"
            },
            {
              "strategy": 0.024723,
              "benchmark": 0.015524,
              "date": "2024-01-24"
            },
            {
              "strategy": -0.00461,
              "benchmark": -0.001381,
              "date": "2024-01-25"
            },
            {
              "strategy": -0.001132,
              "benchmark": 0.000951,
              "date": "2024-01-27"
            },
            {
              "strategy": 0.009532,
              "benchmark": 0.001385,
              "date": "2024-01-28"
            },
            {
              "strategy": 0.002474,
              "benchmark": -0.004438,
              "date": "2024-01-30"
            },
            {
              "strategy": 0.001653,
              "benchmark": -0.00602,
              "date": "2024-01-31"
            },
            {
              "strategy": -0.017705,
              "benchmark": -0.003071,
              "date": "2024-02-01"
            },
            {
              "strategy": -0.001297,
              "benchmark": -0.00175,
              "date": "2024-02-03"
            },
            {
              "strategy": 0.016704,
              "benchmark": -0.009671,
              "date": "2024-02-04"
            },
            {
              "strategy": -0.002093,
              "benchmark": 0.006072,
              "date": "2024-02-06"
            },
            {
              "strategy": -0.010562,
              "benchmark": 0.006235,
              "date": "2024-02-07"
            },
            {
              "strategy": 0.019989,
              "benchmark": 0.004561,
              "date": "2024-02-08"
            },
            {
              "strategy": 0.014457,
              "benchmark": -0.001855,
              "date": "2024-02-10"
            },
            {
              "strategy": -0.014516,
              "benchmark": 0.000499,
              "date": "2024-02-11"
            },
            {
              "strategy": 0.001912,
              "benchmark": 0.004835,
              "date": "2024-02-13"
            },
            {
              "strategy": -0.017212,
              "benchmark": -0.00224,
              "date": "2024-02-14"
            },
            {
              "strategy": -0.00907,
              "benchmark": 0.008297,
              "date": "2024-02-15"
            },
            {
              "strategy": 0.003058,
              "benchmark": 0.003732,
              "date": "2024-02-17"
            },
            {
              "strategy": -0.011051,
              "benchmark": -0.001967,
              "date": "2024-02-18"
            },
            {
              "strategy": 0.002497,
              "benchmark": 0.002087,
              "date": "2024-02-20"
            },
            {
              "strategy": -0.01918,
              "benchmark": 0.00103,
              "date": "2024-02-21"
            },
            {
              "strategy": 0.015659,
              "benchmark": 0.003739,
              "date": "2024-02-22"
            },
            {
              "strategy": -0.000613,
              "benchmark": -0.00639,
              "date": "2024-02-24"
            },
            {
              "strategy": 0.007792,
              "benchmark": 0.004002,
              "date": "2024-02-25"
            },
            {
              "strategy": -0.001473,
              "benchmark": -0.008621,
              "date": "2024-02-27"
            },
            {
              "strategy": -0.008194,
              "benchmark": -0.006566,
              "date": "2024-02-28"
            },
            {
              "strategy": 0.006163,
              "benchmark": -0.011074,
              "date": "2024-02-29"
            },
            {
              "strategy": -0.000594,
              "benchmark": -0.001632,
              "date": "2024-03-02"
            },
            {
              "strategy": -0.012849,
              "benchmark": -0.021191,
              "date": "2024-03-03"
            },
            {
              "strategy": -0.002912,
              "benchmark": -0.005024,
              "date": "2024-03-05"
            },
            {
              "strategy": -0.013931,
              "benchmark": -0.000794,
              "date": "2024-03-06"
            },
            {
              "strategy": -0.002914,
              "benchmark": 0.006406,
              "date": "2024-03-07"
            },
            {
              "strategy": -0.001987,
              "benchmark": 0.010563,
              "date": "2024-03-09"
            },
            {
              "strategy": -0.022437,
              "benchmark": 0.006555,
              "date": "2024-03-10"
            },
            {
              "strategy": 0.00308,
              "benchmark": 0.001108,
              "date": "2024-03-12"
            },
            {
              "strategy": -0.00148,
              "benchmark": -0.01693,
              "date": "2024-03-13"
            },
            {
              "strategy": -0.012127,
              "benchmark": 0.00766,
              "date": "2024-03-14"
            },
            {
              "strategy": 0.012776,
              "benchmark": 0.011662,
              "date": "2024-03-16"
            },
            {
              "strategy": 0.004278,
              "benchmark": 0.000996,
              "date": "2024-03-17"
            },
            {
              "strategy": -0.006677,
              "benchmark": 0.010027,
              "date": "2024-03-19"
            },
            {
              "strategy": 0.006854,
              "benchmark": 0.000816,
              "date": "2024-03-20"
            },
            {
              "strategy": 0.035752,
              "benchmark": -0.001844,
              "date": "2024-03-21"
            },
            {
              "strategy": -0.001126,
              "benchmark": -0.007271,
              "date": "2024-03-23"
            },
            {
              "strategy": -0.018662,
              "benchmark": 0.007279,
              "date": "2024-03-24"
            },
            {
              "strategy": -0.008372,
              "benchmark": 0.012291,
              "date": "2024-03-26"
            },
            {
              "strategy": 0.000831,
              "benchmark": 0.004401,
              "date": "2024-03-27"
            },
            {
              "strategy": -0.003225,
              "benchmark": -0.004881,
              "date": "2024-03-28"
            },
            {
              "strategy": 0.005582,
              "benchmark": 0.000149,
              "date": "2024-03-30"
            },
            {
              "strategy": -0.007725,
              "benchmark": -0.008267,
              "date": "2024-03-31"
            },
            {
              "strategy": -0.029234,
              "benchmark": 0.010008,
              "date": "2024-04-02"
            },
            {
              "strategy": -0.008016,
              "benchmark": 0.002909,
              "date": "2024-04-03"
            },
            {
              "strategy": -0.002689,
              "benchmark": -0.010913,
              "date": "2024-04-04"
            },
            {
              "strategy": -0.008693,
              "benchmark": 0.015632,
              "date": "2024-04-06"
            },
            {
              "strategy": 0.010906,
              "benchmark": 0.003799,
              "date": "2024-04-07"
            },
            {
              "strategy": 0.00794,
              "benchmark": -0.010689,
              "date": "2024-04-09"
            },
            {
              "strategy": -0.002492,
              "benchmark": 0.003529,
              "date": "2024-04-10"
            },
            {
              "strategy": -0.005407,
              "benchmark": -0.004725,
              "date": "2024-04-11"
            },
            {
              "strategy": -0.014941,
              "benchmark": 0.006628,
              "date": "2024-04-13"
            },
            {
              "strategy": 0.000292,
              "benchmark": -0.003231,
              "date": "2024-04-14"
            },
            {
              "strategy": -0.01554,
              "benchmark": 0.008623,
              "date": "2024-04-16"
            },
            {
              "strategy": 0.006896,
              "benchmark": -0.005388,
              "date": "2024-04-17"
            },
            {
              "strategy": -0.022319,
              "benchmark": -0.007422,
              "date": "2024-04-18"
            },
            {
              "strategy": -0.006387,
              "benchmark": 0.006,
              "date": "2024-04-20"
            },
            {
              "strategy": 0.012044,
              "benchmark": 0.009683,
              "date": "2024-04-21"
            },
            {
              "strategy": 0.016803,
              "benchmark": 0.004976,
              "date": "2024-04-23"
            },
            {
              "strategy": -0.015922,
              "benchmark": -0.001079,
              "date": "2024-04-24"
            },
            {
              "strategy": -0.004215,
              "benchmark": 0.006967,
              "date": "2024-04-25"
            },
            {
              "strategy": 0.010124,
              "benchmark": -0.001797,
              "date": "2024-04-27"
            },
            {
              "strategy": -0.014712,
              "benchmark": -0.004754,
              "date": "2024-04-28"
            },
            {
              "strategy": 0.009615,
              "benchmark": 0.006856,
              "date": "2024-04-30"
            },
            {
              "strategy": 0.017401,
              "benchmark": -0.000832,
              "date": "2024-05-01"
            },
            {
              "strategy": 0.001001,
              "benchmark": -0.021464,
              "date": "2024-05-02"
            },
            {
              "strategy": -0.011647,
              "benchmark": 0.016024,
              "date": "2024-05-04"
            },
            {
              "strategy": 0.005878,
              "benchmark": 0.013184,
              "date": "2024-05-05"
            },
            {
              "strategy": 0.002472,
              "benchmark": 0.001345,
              "date": "2024-05-07"
            },
            {
              "strategy": -0.014185,
              "benchmark": -0.002034,
              "date": "2024-05-08"
            },
            {
              "strategy": 0.000274,
              "benchmark": 0.007506,
              "date": "2024-05-09"
            },
            {
              "strategy": 0.010928,
              "benchmark": 0.002581,
              "date": "2024-05-11"
            },
            {
              "strategy": -0.015124,
              "benchmark": -0.004217,
              "date": "2024-05-12"
            },
            {
              "strategy": -0.003655,
              "benchmark": 0.00067,
              "date": "2024-05-14"
            },
            {
              "strategy": -0.009135,
              "benchmark": 0.009495,
              "date": "2024-05-15"
            },
            {
              "strategy": 0.010549,
              "benchmark": -0.00217,
              "date": "2024-05-16"
            },
            {
              "strategy": -0.015304,
              "benchmark": -0.015582,
              "date": "2024-05-18"
            },
            {
              "strategy": 0.00091,
              "benchmark": 0.003508,
              "date": "2024-05-19"
            },
            {
              "strategy": -0.007701,
              "benchmark": 0.003669,
              "date": "2024-05-21"
            },
            {
              "strategy": 0.010217,
              "benchmark": -0.002894,
              "date": "2024-05-22"
            },
            {
              "strategy": -0.008943,
              "benchmark": 0.002487,
              "date": "2024-05-23"
            },
            {
              "strategy": -0.007827,
              "benchmark": -0.00274,
              "date": "2024-05-25"
            },
            {
              "strategy": 0.01371,
              "benchmark": -0.013883,
              "date": "2024-05-26"
            },
            {
              "strategy": -0.006219,
              "benchmark": -0.003419,
              "date": "2024-05-28"
            },
            {
              "strategy": 0.00434,
              "benchmark": 0.009265,
              "date": "2024-05-29"
            },
            {
              "strategy": -0.016585,
              "benchmark": 0.002056,
              "date": "2024-05-30"
            },
            {
              "strategy": -0.009965,
              "benchmark": -0.003465,
              "date": "2024-06-01"
            },
            {
              "strategy": 0.000573,
              "benchmark": 0.003763,
              "date": "2024-06-02"
            },
            {
              "strategy": -0.010124,
              "benchmark": 0.006134,
              "date": "2024-06-04"
            },
            {
              "strategy": 0.000907,
              "benchmark": 0.016407,
              "date": "2024-06-05"
            },
            {
              "strategy": 0.007244,
              "benchmark": 0.00366,
              "date": "2024-06-06"
            },
            {
              "strategy": 0.002072,
              "benchmark": -0.004384,
              "date": "2024-06-08"
            },
            {
              "strategy": -0.012711,
              "benchmark": 0.013436,
              "date": "2024-06-09"
            },
            {
              "strategy": 0.013983,
              "benchmark": 0.011829,
              "date": "2024-06-11"
            },
            {
              "strategy": 0.0127,
              "benchmark": 0.003955,
              "date": "2024-06-12"
            },
            {
              "strategy": -0.009799,
              "benchmark": -0.001265,
              "date": "2024-06-13"
            },
            {
              "strategy": 0.020076,
              "benchmark": -0.009506,
              "date": "2024-06-15"
            },
            {
              "strategy": 0.018974,
              "benchmark": 0.006435,
              "date": "2024-06-16"
            },
            {
              "strategy": 0.012356,
              "benchmark": 0.006964,
              "date": "2024-06-18"
            },
            {
              "strategy": -0.010154,
              "benchmark": 0.012788,
              "date": "2024-06-19"
            },
            {
              "strategy": -0.013309,
              "benchmark": -0.01354,
              "date": "2024-06-20"
            },
            {
              "strategy": -0.00334,
              "benchmark": -0.006174,
              "date": "2024-06-22"
            },
            {
              "strategy": 0.00329,
              "benchmark": -0.008276,
              "date": "2024-06-23"
            },
            {
              "strategy": 0.001063,
              "benchmark": 0.000029,
              "date": "2024-06-25"
            },
            {
              "strategy": 0.001222,
              "benchmark": -0.003633,
              "date": "2024-06-26"
            },
            {
              "strategy": -0.014286,
              "benchmark": 0.013976,
              "date": "2024-06-27"
            },
            {
              "strategy": -0.025105,
              "benchmark": 0.002238,
              "date": "2024-06-29"
            },
            {
              "strategy": 0.004061,
              "benchmark": -0.013407,
              "date": "2024-06-30"
            },
            {
              "strategy": 0.011599,
              "benchmark": 0.014488,
              "date": "2024-07-02"
            },
            {
              "strategy": -0.030022,
              "benchmark": 0.00373,
              "date": "2024-07-03"
            },
            {
              "strategy": -0.007892,
              "benchmark": -0.001737,
              "date": "2024-07-04"
            },
            {
              "strategy": -0.004524,
              "benchmark": -0.018544,
              "date": "2024-07-06"
            },
            {
              "strategy": 0.002724,
              "benchmark": 0.000756,
              "date": "2024-07-07"
            },
            {
              "strategy": 0.006471,
              "benchmark": -0.003572,
              "date": "2024-07-09"
            },
            {
              "strategy": -0.007293,
              "benchmark": 0.003563,
              "date": "2024-07-10"
            },
            {
              "strategy": 0.016563,
              "benchmark": -0.003857,
              "date": "2024-07-11"
            },
            {
              "strategy": 0.007157,
              "benchmark": -0.004608,
              "date": "2024-07-13"
            },
            {
              "strategy": 0.007971,
              "benchmark": 0.010455,
              "date": "2024-07-14"
            },
            {
              "strategy": -0.003698,
              "benchmark": -0.002027,
              "date": "2024-07-16"
            },
            {
              "strategy": 0.014246,
              "benchmark": 0.006433,
              "date": "2024-07-17"
            },
            {
              "strategy": -0.014005,
              "benchmark": 0.013663,
              "date": "2024-07-18"
            },
            {
              "strategy": 0.000198,
              "benchmark": -0.00883,
              "date": "2024-07-20"
            },
            {
              "strategy": 0.011667,
              "benchmark": 0.006418,
              "date": "2024-07-21"
            },
            {
              "strategy": 0.012365,
              "benchmark": -0.006557,
              "date": "2024-07-23"
            },
            {
              "strategy": 0.001055,
              "benchmark": -0.008527,
              "date": "2024-07-24"
            },
            {
              "strategy": -0.006774,
              "benchmark": -0.003852,
              "date": "2024-07-25"
            },
            {
              "strategy": 0.01441,
              "benchmark": -0.003044,
              "date": "2024-07-27"
            },
            {
              "strategy": 0.001434,
              "benchmark": -0.006146,
              "date": "2024-07-28"
            },
            {
              "strategy": -0.002771,
              "benchmark": 0.001131,
              "date": "2024-07-30"
            },
            {
              "strategy": 0.003228,
              "benchmark": -0.007136,
              "date": "2024-07-31"
            },
            {
              "strategy": -0.018225,
              "benchmark": 0.005673,
              "date": "2024-08-01"
            },
            {
              "strategy": -0.015463,
              "benchmark": 0.003644,
              "date": "2024-08-03"
            },
            {
              "strategy": -0.001978,
              "benchmark": -0.000454,
              "date": "2024-08-04"
            },
            {
              "strategy": -0.000292,
              "benchmark": 0.007515,
              "date": "2024-08-06"
            },
            {
              "strategy": -0.000067,
              "benchmark": 0.008026,
              "date": "2024-08-07"
            },
            {
              "strategy": -0.004606,
              "benchmark": 0.001826,
              "date": "2024-08-08"
            },
            {
              "strategy": 0.004295,
              "benchmark": 0.004589,
              "date": "2024-08-10"
            },
            {
              "strategy": 0.002043,
              "benchmark": 0.00198,
              "date": "2024-08-11"
            },
            {
              "strategy": -0.005863,
              "benchmark": -0.006557,
              "date": "2024-08-13"
            },
            {
              "strategy": 0.013963,
              "benchmark": -0.002738,
              "date": "2024-08-14"
            },
            {
              "strategy": 0.007384,
              "benchmark": 0.011303,
              "date": "2024-08-15"
            },
            {
              "strategy": -0.004937,
              "benchmark": 0.003281,
              "date": "2024-08-17"
            },
            {
              "strategy": 0.00063,
              "benchmark": -0.005382,
              "date": "2024-08-18"
            },
            {
              "strategy": -0.004042,
              "benchmark": -0.009135,
              "date": "2024-08-20"
            },
            {
              "strategy": -0.004109,
              "benchmark": -0.013532,
              "date": "2024-08-21"
            },
            {
              "strategy": -0.016423,
              "benchmark": -0.007807,
              "date": "2024-08-22"
            },
            {
              "strategy": -0.025791,
              "benchmark": -0.003393,
              "date": "2024-08-24"
            },
            {
              "strategy": -0.008503,
              "benchmark": 0.007272,
              "date": "2024-08-25"
            },
            {
              "strategy": 0.001698,
              "benchmark": -0.002267,
              "date": "2024-08-27"
            },
            {
              "strategy": 0.015058,
              "benchmark": 0.011,
              "date": "2024-08-28"
            },
            {
              "strategy": 0.0036,
              "benchmark": -0.02159,
              "date": "2024-08-29"
            },
            {
              "strategy": -0.004001,
              "benchmark": -0.010592,
              "date": "2024-08-31"
            },
            {
              "strategy": -0.010952,
              "benchmark": -0.011262,
              "date": "2024-09-01"
            },
            {
              "strategy": 0.000783,
              "benchmark": -0.001587,
              "date": "2024-09-03"
            },
            {
              "strategy": -0.015374,
              "benchmark": 0.007549,
              "date": "2024-09-04"
            },
            {
              "strategy": 0.029542,
              "benchmark": -0.003219,
              "date": "2024-09-05"
            },
            {
              "strategy": 0.005966,
              "benchmark": -0.003728,
              "date": "2024-09-07"
            },
            {
              "strategy": 0.00413,
              "benchmark": -0.002338,
              "date": "2024-09-08"
            },
            {
              "strategy": -0.024146,
              "benchmark": -0.017483,
              "date": "2024-09-10"
            },
            {
              "strategy": -0.000306,
              "benchmark": 0.009238,
              "date": "2024-09-11"
            },
            {
              "strategy": 0.006664,
              "benchmark": -0.003435,
              "date": "2024-09-12"
            },
            {
              "strategy": 0.010603,
              "benchmark": -0.000441,
              "date": "2024-09-14"
            },
            {
              "strategy": -0.001093,
              "benchmark": -0.003452,
              "date": "2024-09-15"
            },
            {
              "strategy": 0.001293,
              "benchmark": 0.011808,
              "date": "2024-09-17"
            },
            {
              "strategy": -0.003454,
              "benchmark": 0.018433,
              "date": "2024-09-18"
            },
            {
              "strategy": -0.007257,
              "benchmark": -0.001605,
              "date": "2024-09-19"
            },
            {
              "strategy": -0.000819,
              "benchmark": 0.005652,
              "date": "2024-09-21"
            },
            {
              "strategy": 0.01063,
              "benchmark": -0.012928,
              "date": "2024-09-22"
            },
            {
              "strategy": 0.015343,
              "benchmark": -0.016632,
              "date": "2024-09-24"
            },
            {
              "strategy": 0.022439,
              "benchmark": -0.014814,
              "date": "2024-09-25"
            },
            {
              "strategy": -0.017399,
              "benchmark": 0.018529,
              "date": "2024-09-26"
            },
            {
              "strategy": 0.005517,
              "benchmark": -0.00857,
              "date": "2024-09-28"
            },
            {
              "strategy": 0.005001,
              "benchmark": 0.014181,
              "date": "2024-09-29"
            },
            {
              "strategy": 0.002244,
              "benchmark": -0.001163,
              "date": "2024-10-01"
            },
            {
              "strategy": 0.005913,
              "benchmark": 0.001884,
              "date": "2024-10-02"
            },
            {
              "strategy": 0.004575,
              "benchmark": -0.003345,
              "date": "2024-10-03"
            },
            {
              "strategy": -0.000194,
              "benchmark": 0.006838,
              "date": "2024-10-05"
            },
            {
              "strategy": 0.001614,
              "benchmark": -0.006469,
              "date": "2024-10-06"
            },
            {
              "strategy": 0.008926,
              "benchmark": -0.002936,
              "date": "2024-10-08"
            },
            {
              "strategy": 0.003551,
              "benchmark": 0.007777,
              "date": "2024-10-09"
            },
            {
              "strategy": 0.01369,
              "benchmark": -0.015217,
              "date": "2024-10-10"
            },
            {
              "strategy": -0.006121,
              "benchmark": 0.002248,
              "date": "2024-10-12"
            },
            {
              "strategy": 0.005587,
              "benchmark": 0.012377,
              "date": "2024-10-13"
            },
            {
              "strategy": -0.009903,
              "benchmark": -0.008052,
              "date": "2024-10-15"
            },
            {
              "strategy": 0.00142,
              "benchmark": 0.016188,
              "date": "2024-10-16"
            },
            {
              "strategy": 0.026184,
              "benchmark": -0.000017,
              "date": "2024-10-17"
            },
            {
              "strategy": 0.009614,
              "benchmark": 0.002076,
              "date": "2024-10-19"
            },
            {
              "strategy": 0.0053,
              "benchmark": -0.007489,
              "date": "2024-10-20"
            },
            {
              "strategy": 0.011917,
              "benchmark": -0.004725,
              "date": "2024-10-22"
            },
            {
              "strategy": -0.013585,
              "benchmark": 0.003527,
              "date": "2024-10-23"
            },
            {
              "strategy": -0.011222,
              "benchmark": 0.008703,
              "date": "2024-10-24"
            },
            {
              "strategy": -0.009386,
              "benchmark": 0.008608,
              "date": "2024-10-26"
            },
            {
              "strategy": 0.018157,
              "benchmark": -0.012119,
              "date": "2024-10-27"
            },
            {
              "strategy": -0.0066,
              "benchmark": -0.012938,
              "date": "2024-10-29"
            },
            {
              "strategy": 0.015147,
              "benchmark": -0.007633,
              "date": "2024-10-30"
            },
            {
              "strategy": -0.011954,
              "benchmark": -0.003934,
              "date": "2024-10-31"
            },
            {
              "strategy": 0.005687,
              "benchmark": 0.000532,
              "date": "2024-11-02"
            },
            {
              "strategy": 0.017285,
              "benchmark": 0.012507,
              "date": "2024-11-03"
            },
            {
              "strategy": -0.010812,
              "benchmark": -0.00511,
              "date": "2024-11-05"
            },
            {
              "strategy": -0.005358,
              "benchmark": -0.004182,
              "date": "2024-11-06"
            },
            {
              "strategy": -0.019386,
              "benchmark": -0.008108,
              "date": "2024-11-07"
            },
            {
              "strategy": 0.018922,
              "benchmark": 0.00009,
              "date": "2024-11-09"
            },
            {
              "strategy": -0.00159,
              "benchmark": -0.000298,
              "date": "2024-11-10"
            },
            {
              "strategy": -0.007819,
              "benchmark": 0.005112,
              "date": "2024-11-12"
            },
            {
              "strategy": -0.012536,
              "benchmark": -0.006723,
              "date": "2024-11-13"
            },
            {
              "strategy": 0.001341,
              "benchmark": 0.01639,
              "date": "2024-11-14"
            },
            {
              "strategy": -0.008409,
              "benchmark": -0.004769,
              "date": "2024-11-16"
            },
            {
              "strategy": 0.009245,
              "benchmark": 0.003726,
              "date": "2024-11-17"
            },
            {
              "strategy": -0.002429,
              "benchmark": -0.00393,
              "date": "2024-11-19"
            },
            {
              "strategy": 0.002911,
              "benchmark": 0.003127,
              "date": "2024-11-20"
            },
            {
              "strategy": 0.026725,
              "benchmark": -0.01297,
              "date": "2024-11-21"
            },
            {
              "strategy": 0.006205,
              "benchmark": 0.000173,
              "date": "2024-11-23"
            },
            {
              "strategy": -0.011584,
              "benchmark": 0.008726,
              "date": "2024-11-24"
            },
            {
              "strategy": 0.006461,
              "benchmark": -0.005389,
              "date": "2024-11-26"
            },
            {
              "strategy": 0.023686,
              "benchmark": -0.001837,
              "date": "2024-11-27"
            },
            {
              "strategy": -0.013444,
              "benchmark": -0.001276,
              "date": "2024-11-28"
            },
            {
              "strategy": 0.015965,
              "benchmark": 0.011464,
              "date": "2024-11-30"
            },
            {
              "strategy": 0.025414,
              "benchmark": -0.002788,
              "date": "2024-12-01"
            },
            {
              "strategy": 0.016531,
              "benchmark": 0.012993,
              "date": "2024-12-03"
            },
            {
              "strategy": 0.009368,
              "benchmark": 0.001694,
              "date": "2024-12-04"
            },
            {
              "strategy": -0.01292,
              "benchmark": 0.00199,
              "date": "2024-12-05"
            },
            {
              "strategy": 0.005555,
              "benchmark": 0.005871,
              "date": "2024-12-07"
            },
            {
              "strategy": 0.002591,
              "benchmark": 0.002151,
              "date": "2024-12-08"
            },
            {
              "strategy": 0.001749,
              "benchmark": -0.009941,
              "date": "2024-12-10"
            },
            {
              "strategy": -0.001953,
              "benchmark": 0.004667,
              "date": "2024-12-11"
            },
            {
              "strategy": 0.003645,
              "benchmark": 0.011478,
              "date": "2024-12-12"
            },
            {
              "strategy": -0.004807,
              "benchmark": 0.010766,
              "date": "2024-12-14"
            },
            {
              "strategy": 0.008585,
              "benchmark": 0.001628,
              "date": "2024-12-15"
            },
            {
              "strategy": 0.00677,
              "benchmark": 0.007118,
              "date": "2024-12-17"
            },
            {
              "strategy": -0.019627,
              "benchmark": 0.002115,
              "date": "2024-12-18"
            }
          ],
          "description": "Array of {strategy: number (daily simple return, decimal), benchmark?: number, date?: string}, at least 60 rows."
        },
        "train_pct": {
          "type": "number",
          "default": 0.7,
          "minimum": 0,
          "maximum": 1,
          "description": "Training share of each window as a decimal (0.7 = 70% train, 30% test)."
        }
      },
      "page": "https://aifinhub.io/walk-forward-validation-visualizer/",
      "contract": "https://aifinhub.io/contracts/walk-forward-validation-visualizer.json"
    },
    {
      "calculator": "deflated-sharpe-ratio",
      "title": "Deflated Sharpe Ratio Calculator",
      "category": "Calculators",
      "summary": "Bailey & López de Prado deflated Sharpe — corrects observed Sharpe for selection bias across K trials. Reports deflated Sharpe, PSR (probability of skill), and the multiple-testing haircut.",
      "run": "https://aifinhub.io/api/run/deflated-sharpe-ratio",
      "example": "https://aifinhub.io/api/run/deflated-sharpe-ratio?observed_sr=2&n=252&skew=-0.4&kurt=4.5&num_trials=100&periods_per_year=252",
      "inputs": {
        "kurt": {
          "type": "number",
          "default": 4.5,
          "minimum": 1,
          "description": "FULL kurtosis of per-period returns (3 = normal, i.e. excess kurtosis + 3). Must be >= 1 + skew^2."
        },
        "n": {
          "type": "number",
          "default": 252,
          "minimum": 2,
          "description": "Number of return observations in the backtest."
        },
        "num_trials": {
          "type": "number",
          "default": 100,
          "minimum": 1,
          "description": "Number of strategy variants tried before selecting this one (K), discarded ones included."
        },
        "observed_sr": {
          "type": "number",
          "default": 2,
          "description": "Observed annualized Sharpe ratio of the selected strategy."
        },
        "periods_per_year": {
          "type": "number",
          "default": 252,
          "minimum": 0,
          "description": "Return periods per year used to annualize (252 daily, 52 weekly, 12 monthly)."
        },
        "skew": {
          "type": "number",
          "default": -0.4,
          "description": "Skewness of the per-period returns (0 = symmetric)."
        }
      },
      "page": "https://aifinhub.io/deflated-sharpe-ratio/",
      "contract": "https://aifinhub.io/contracts/deflated-sharpe-ratio.json"
    },
    {
      "calculator": "earnings-call-summarization-cost",
      "title": "Earnings-Call Summarization Cost Calculator",
      "category": "Calculators",
      "summary": "LLM cost per stock per quarter to summarize earnings transcripts with current Claude, GPT and Gemini models. Cache-hit-rate aware; prices from a dated model catalog.",
      "run": "https://aifinhub.io/api/run/earnings-call-summarization-cost",
      "example": "https://aifinhub.io/api/run/earnings-call-summarization-cost?tickers_per_quarter=50&avg_transcript_tokens=15000&avg_summary_tokens=800&cache_hit_rate=0.1&summarization_attempts=1",
      "inputs": {
        "avg_summary_tokens": {
          "type": "number",
          "default": 800,
          "minimum": 0,
          "description": "Average output tokens per summary."
        },
        "avg_transcript_tokens": {
          "type": "number",
          "default": 15000,
          "minimum": 0,
          "description": "Average input tokens per call: transcript plus prompt."
        },
        "cache_hit_rate": {
          "type": "number",
          "default": 0.1,
          "minimum": 0,
          "maximum": 1,
          "description": "Blended share (0-1) of input tokens billed at the cache-read rate. A first read of a transcript is a miss; only a stable prompt prefix and re-reads can hit (about 0.1 for a 1,500-token cached prompt on a 15,000-token call)."
        },
        "model_id": {
          "type": "string",
          "enum": [
            "claude-fable-5-1",
            "claude-opus-5-5",
            "claude-opus-5",
            "claude-sonnet-5-5",
            "claude-sonnet-5",
            "claude-haiku-5-5",
            "claude-haiku-4-5",
            "claude-fable-5",
            "claude-opus-4-8",
            "claude-opus-4-7",
            "claude-opus-4-6",
            "claude-sonnet-4-6",
            "claude-sonnet-4-5",
            "gpt-6-astra",
            "gpt-6-1-sol",
            "gpt-6-1-terra",
            "gpt-6-sol",
            "gpt-6-luna",
            "gpt-5-6-sol",
            "gpt-5-6-terra",
            "gpt-5-6-luna",
            "gpt-5-5",
            "gpt-5-5-pro",
            "gpt-5-4",
            "gpt-5-4-pro",
            "gpt-5-4-mini",
            "gpt-5-4-nano",
            "gpt-5-3-codex",
            "gpt-5-2",
            "gpt-5-2-pro",
            "gpt-5-1",
            "gpt-5",
            "gpt-5-mini",
            "gpt-5-nano",
            "o3",
            "o3-pro",
            "o4-mini",
            "gpt-4-1",
            "gpt-4-1-mini",
            "gemini-4-argon",
            "gemini-3-8-flash",
            "gemini-3-6-flash",
            "gemini-3-5-flash-lite",
            "gemini-3-1-pro-preview",
            "gemini-2-5-pro",
            "gemini-2-5-flash",
            "gemini-2-5-flash-lite",
            "gemini-3-5-flash",
            "gemini-3-7-flash"
          ],
          "default": "",
          "description": "Optional: price only this model; omit to rank the current lineup by annual cost. One of the listed ids: every Anthropic, OpenAI and Google model in the aidevhub.io catalog (https://aidevhub.io/api/models.json), current or legacy, with dots as dashes (gpt-5.4-mini → gpt-5-4-mini)."
        },
        "models": {
          "type": "array",
          "description": "Optional: the model ids to rank instead of the current lineup (array of ids, or a comma-separated string)."
        },
        "summarization_attempts": {
          "type": "number",
          "default": 1,
          "minimum": 1,
          "description": "Passes per transcript (re-runs or chained steps); multiplies cost."
        },
        "tickers_per_quarter": {
          "type": "number",
          "default": 50,
          "minimum": 0,
          "description": "Tickers summarized each quarter (one call each)."
        }
      },
      "page": "https://aifinhub.io/earnings-call-summarization-cost/",
      "contract": "https://aifinhub.io/contracts/earnings-call-summarization-cost.json"
    },
    {
      "calculator": "quant-interview-question-generator",
      "title": "Quant Interview Question Generator",
      "category": "Generators",
      "summary": "Curated bank of probability, stats, derivatives, microstructure, and regression questions across easy/medium/hard difficulty. Reproducible by seed. Nothing generated live.",
      "run": "https://aifinhub.io/api/run/quant-interview-question-generator",
      "example": "https://aifinhub.io/api/run/quant-interview-question-generator?difficulty=medium&n=8&seed=7",
      "inputs": {
        "difficulty": {
          "type": "string",
          "enum": [
            "any",
            "easy",
            "medium",
            "hard"
          ],
          "default": "medium",
          "description": "Difficulty filter."
        },
        "n": {
          "type": "number",
          "default": 8,
          "minimum": 1,
          "maximum": 50,
          "description": "Number of questions to return (fewer if the filters match fewer)."
        },
        "seed": {
          "type": "number",
          "default": 7,
          "minimum": 0,
          "description": "Shuffle seed; the same seed and filters return the same set."
        },
        "topics": {
          "type": "string",
          "description": "Comma-separated topics to include, any of: probability, stats, derivatives, microstructure, regression. Default: all five."
        }
      },
      "page": "https://aifinhub.io/quant-interview-question-generator/",
      "contract": "https://aifinhub.io/contracts/quant-interview-question-generator.json"
    },
    {
      "calculator": "sharpe-vs-sortino-calculator",
      "title": "Sharpe Ratio Calculator",
      "category": "Calculators",
      "summary": "Paste daily returns; get Sharpe, Sortino, Calmar, and Omega side-by-side with a recommendation on which ratio fits your distribution.",
      "run": "https://aifinhub.io/api/run/sharpe-vs-sortino-calculator",
      "example": "https://aifinhub.io/api/run/sharpe-vs-sortino-calculator?returns=%5B0.01%2C0.02%2C-0.005%2C0.015%2C-0.01%5D&rf_annual=0.04&periods_per_year=252",
      "inputs": {
        "periods_per_year": {
          "type": "number",
          "enum": [
            252,
            52,
            12
          ],
          "default": 252,
          "description": "Return frequency for annualization: 252 daily, 52 weekly, 12 monthly."
        },
        "returns": {
          "type": "array",
          "default": [
            0.01,
            0.02,
            -0.005,
            0.015,
            -0.01
          ],
          "description": "Simple periodic returns as decimals (0.012 = 1.2%), each above -1, at least 2."
        },
        "rf_annual": {
          "type": "number",
          "default": 0.04,
          "minimum": -1,
          "maximum": 1,
          "description": "Annual risk-free rate as a decimal (0.04 = 4%); also the Sortino target."
        }
      },
      "page": "https://aifinhub.io/sharpe-vs-sortino-calculator/",
      "contract": "https://aifinhub.io/contracts/sharpe-vs-sortino-calculator.json"
    },
    {
      "calculator": "cointegration-half-life-solver",
      "title": "Cointegration Half-Life Solver",
      "category": "Playgrounds",
      "summary": "Engle-Granger residual ADF + Ornstein-Uhlenbeck half-life from any two price/return series. Hedge ratio, p-value, spread chart.",
      "run": "https://aifinhub.io/api/run/cointegration-half-life-solver",
      "example": "https://aifinhub.io/api/run/cointegration-half-life-solver",
      "inputs": {
        "a": {
          "type": "array",
          "default": [
            155.13,
            154.77,
            155.38,
            156.6,
            156.49,
            154.05,
            154.76,
            154.58,
            155.61,
            154.05,
            152.77,
            153.84,
            154.34,
            155.19,
            156.19,
            155.72,
            155.09,
            159.49,
            158.89,
            158.23,
            156.51,
            156.43,
            156.74,
            156.47,
            156.84,
            156.83,
            157.68,
            158.52,
            159.96,
            158,
            158.72,
            156.09,
            155.02,
            152.99,
            153.17,
            153.34,
            153.55,
            157.71,
            156.08,
            158.42,
            156.52,
            155.1,
            156.4,
            155.42,
            158.35,
            159.01,
            157.54,
            157.99,
            155.26,
            158.09,
            156.46,
            158.13,
            156.97,
            158.26,
            158.46,
            161.16,
            160.2,
            161.34,
            163.12,
            163.95,
            162.1,
            163,
            163.49,
            165.62,
            164.91,
            166.9,
            168.25,
            169.96,
            170.02,
            170.06,
            168.35,
            166.62,
            165.22,
            165.28,
            168.5,
            171.17,
            173.41,
            175.41,
            176.5,
            176.15,
            177.43,
            180.16,
            178.9,
            176.78,
            179.58,
            180.42,
            182.57,
            184.09,
            183.15,
            187.62,
            191.21,
            192.21,
            192.91,
            191.91,
            190.88,
            190.32,
            191.93,
            194.16,
            196.02,
            196.41,
            197.5,
            196.52,
            197.59,
            199.32,
            198.62,
            195.76,
            194.6,
            195.57,
            195.4,
            198.05,
            194.78,
            195.1,
            197.01,
            196.43,
            192.25,
            194.06,
            199.15,
            200.56,
            198.33,
            197.23
          ],
          "default_with": [
            "b"
          ],
          "description": "Price levels of asset A, oldest first (array of numbers, at least 30). A series that looks like returns (mean near 0, all |values| < 0.5) is compounded into a price path first."
        },
        "b": {
          "type": "array",
          "default": [
            100,
            98.78,
            99.15,
            100.14,
            99.63,
            98.31,
            98.25,
            98.72,
            99.8,
            98.59,
            97.32,
            98.01,
            98.47,
            99.98,
            100.96,
            100.86,
            100.58,
            103.17,
            102.87,
            102.06,
            100.9,
            101,
            101.15,
            100.8,
            100.74,
            101.02,
            101.72,
            102.84,
            103.06,
            101.22,
            101.93,
            100.48,
            100.31,
            98.83,
            98.83,
            98.06,
            98.27,
            101.51,
            101.46,
            102.31,
            100.96,
            100.67,
            101.34,
            101.25,
            101.62,
            101.73,
            100.71,
            101.28,
            100.46,
            102.34,
            101.82,
            102.52,
            102.52,
            103.5,
            102.88,
            103.91,
            103.78,
            105.09,
            105.75,
            105.9,
            105.07,
            105.88,
            106.38,
            108.13,
            107.72,
            108.32,
            108.87,
            109.18,
            109.41,
            109.61,
            108.95,
            107.84,
            107.41,
            108.04,
            109.67,
            110.74,
            111.91,
            112.78,
            113.57,
            113.78,
            114.66,
            116.69,
            116.31,
            115.5,
            117.76,
            118.05,
            119.2,
            120.24,
            118.87,
            121.76,
            123.92,
            124.14,
            125.07,
            125.23,
            124.12,
            123.98,
            124.44,
            125.83,
            126.72,
            126.8,
            128.52,
            127.54,
            128.55,
            129.98,
            129.6,
            127.28,
            126.13,
            126.43,
            127.1,
            129.07,
            127.77,
            127.77,
            128.6,
            128.4,
            125.36,
            126.37,
            129.29,
            130.59,
            129.39,
            128.86
          ],
          "default_with": [
            "a"
          ],
          "description": "Price levels of asset B, same length as a."
        },
        "lookback": {
          "type": "number",
          "minimum": 30,
          "description": "Optional: use only the most recent N rows (whole number, at least 30). Omit or exceed the length to use all rows."
        }
      },
      "page": "https://aifinhub.io/cointegration-half-life-solver/",
      "contract": "https://aifinhub.io/contracts/cointegration-half-life-solver.json"
    },
    {
      "calculator": "statistical-arbitrage-capacity",
      "title": "Statistical Arbitrage Capacity Calculator",
      "category": "Calculators",
      "summary": "Maximum strategy AUM from alpha, slippage, fees, daily volume and volatility, and signal half-life. Square-root impact closed-form.",
      "run": "https://aifinhub.io/api/run/statistical-arbitrage-capacity",
      "example": "https://aifinhub.io/api/run/statistical-arbitrage-capacity?alpha_per_trade_bps=12&slippage_bps=3&fee_bps=1&daily_volume_usd=50000000&daily_vol_pct=2&names=1&signal_half_life_days=5&impact_k=0.2&trading_days=252",
      "inputs": {
        "alpha_per_trade_bps": {
          "type": "number",
          "default": 12,
          "minimum": 0,
          "description": "Gross alpha per trade before costs."
        },
        "daily_vol_pct": {
          "type": "number",
          "default": 2,
          "minimum": 0,
          "description": "Daily return volatility of a typical traded name, in percent (2 = 2%/day)."
        },
        "daily_volume_usd": {
          "type": "number",
          "default": 50000000,
          "minimum": 0,
          "description": "Average daily dollar volume of a typical traded name."
        },
        "fee_bps": {
          "type": "number",
          "default": 1,
          "minimum": 0,
          "description": "Fees per trade."
        },
        "impact_k": {
          "type": "number",
          "default": 0.2,
          "minimum": 0,
          "description": "Dimensionless square-root impact coefficient Y (per unit of daily volatility); published fits run about 0.1 to 1."
        },
        "names": {
          "type": "number",
          "default": 1,
          "minimum": 1,
          "description": "Names traded in parallel at this volume; strategy AUM = per-name capacity x names."
        },
        "signal_half_life_days": {
          "type": "number",
          "default": 5,
          "minimum": 0,
          "description": "Signal half-life; trades per year = trading_days / half-life (affects annual P&L, not per-trade capacity)."
        },
        "slippage_bps": {
          "type": "number",
          "default": 3,
          "minimum": 0,
          "description": "Fixed slippage per trade (spread, fill quality)."
        },
        "trading_days": {
          "type": "number",
          "default": 252,
          "minimum": 1,
          "description": "Trading days per year."
        }
      },
      "page": "https://aifinhub.io/statistical-arbitrage-capacity/",
      "contract": "https://aifinhub.io/contracts/statistical-arbitrage-capacity.json"
    },
    {
      "calculator": "var-backtest-kupiec-christoffersen",
      "title": "VaR Backtest — Kupiec & Christoffersen",
      "category": "Playgrounds",
      "summary": "Paste P&L + VaR series and run Kupiec POF, Christoffersen independence, and joint conditional-coverage tests. Likelihood-ratio χ² p-values.",
      "run": "https://aifinhub.io/api/run/var-backtest-kupiec-christoffersen",
      "example": "https://aifinhub.io/api/run/var-backtest-kupiec-christoffersen",
      "inputs": {
        "confidence_level": {
          "type": "number",
          "default": 0.95,
          "minimum": 0,
          "maximum": 1,
          "description": "VaR confidence level as a decimal (0.95, 0.99); expected exception rate = 1 - confidence."
        },
        "pnl": {
          "type": "array",
          "default": [
            -22727.98,
            -31722.79,
            -39252.11,
            -2545.31,
            -25908.73,
            8117.41,
            22054.31,
            2684.17,
            -10043.49,
            -9248.59,
            -5033.9,
            7915.21,
            -16028.18,
            -6642.27,
            -10882.29,
            6545.26,
            -20207.63,
            13863.39,
            1277.27,
            25174.3,
            1272.43,
            11381.25,
            23129.64,
            679.8,
            -23705.84,
            11288.09,
            4912.8,
            17981.04,
            -9317.42,
            -18807.42,
            724.51,
            3117.39,
            -10308.82,
            -2439.71,
            -10294.99,
            -13841.85,
            7537.28,
            -24667.29,
            -7972.95,
            18369.52,
            1916.03,
            -2807.87,
            2101.23,
            297.47,
            7216.89,
            -18172.68,
            18404.85,
            -5246.56,
            -9030.1,
            -96.43,
            19052.25,
            -5840.97,
            18667.75,
            -15739.09,
            -4300.5,
            761.11,
            10001.56,
            -11291.4,
            5030.78,
            12577.04,
            21829.4,
            -18573.94,
            190.96,
            -6542.46,
            3285.48,
            27574.68,
            942.26,
            -10018.91,
            12018.48,
            11924.86,
            -15078.72,
            8876.8,
            10257.32,
            7049.62,
            7643.52,
            -3587.1,
            2001.67,
            14051.82,
            25721.07,
            -9717.35,
            6890.51,
            13470.78,
            -4013.68,
            -4591.9,
            17414.99,
            5779.38,
            24056.94,
            915.43,
            -8484.14,
            -11923.81,
            -16493.06,
            -6173.74,
            -7546.58,
            -6648.91,
            -23079.08,
            -17590.9,
            -10144.84,
            8909.34,
            -12612.92,
            -15354.25,
            5950.48,
            13256.57,
            -11324.47,
            -14644.14,
            -2679.5,
            17205.72,
            -220.79,
            16104.88,
            -5538.37,
            10864.91,
            9808.42,
            8910.86,
            -10681.77,
            -6217.45,
            15599.1,
            -9110.72,
            4793.89,
            3646.07,
            3538.42,
            -5308.52,
            -37673.83,
            23443.8,
            -19850.68,
            -2343.33,
            880.74,
            17232.97,
            -2373.88,
            -17652.71,
            9096.75,
            22927.44,
            2876.1,
            14482.86,
            -19772.37,
            2401.25,
            -1111.12,
            -5424.17,
            1033.22,
            21288.24,
            3276.67,
            -16237.62,
            11934.91,
            -12295.3,
            5606.06,
            4654.85,
            -5561.2,
            3537.28,
            -8580,
            -1651.55,
            7615.67,
            16961.96,
            -16372.53,
            -18141.53,
            3191.49,
            -18603.96,
            18255.16,
            -8319.52,
            -6036.63,
            3905.77,
            16364.8,
            -6484.19,
            -3477.11,
            7354.16,
            -9870.37,
            -5027.01,
            -5134.82,
            19240.39,
            -620.12,
            -5715.93,
            14878.55,
            -13436.73,
            15259.59,
            -8823.06,
            3086.04,
            -2560.28,
            -13141.61,
            6242.12,
            7114.17,
            -6036.64,
            -3043.44,
            2884.93,
            4362.76,
            13523.14,
            -14388.31,
            4565.93,
            -15402.55,
            15547.33,
            -2545.48,
            19091.53,
            9466.2,
            2962.47,
            22014.84,
            -7394.33,
            14645.28,
            1306.47,
            11196.48,
            -5656.97,
            -18357.66,
            -27892.88,
            1592.63,
            3282.69,
            10660.31,
            6351.9,
            -3554.99,
            -20177.02,
            -4198.46,
            -4872.7,
            -15237.81,
            535.12,
            -8141.47,
            -19354.18,
            -15637.06,
            -2636.86,
            4606.17,
            -7642.48,
            -1242.9,
            -29819.41,
            17459.7,
            -15659.75,
            -4110.96,
            -10476.92,
            -1111.13,
            4427.31,
            -12655.08,
            16507.19,
            9936.93,
            -1889.58,
            -2617.89,
            -2015.86,
            -5098.18,
            5653.96,
            8443.86,
            -908.29,
            2344.76,
            -13263.44,
            21269.34,
            -14292.3,
            -911.47,
            -5444.77,
            -17776.27,
            -12637.83,
            17474.71,
            7886.99,
            32493.2,
            27140.31,
            -15228.79,
            171.75,
            -6098.38,
            12540,
            1171.76,
            66.66
          ],
          "default_with": [
            "var_series"
          ],
          "description": "Daily P&L, negative = loss, at least 30 observations."
        },
        "var_series": {
          "type": "array",
          "default": [
            18500,
            18579.98,
            18659.83,
            18739.42,
            18818.64,
            18897.34,
            18975.41,
            19052.71,
            19129.13,
            19204.55,
            19278.84,
            19351.88,
            19423.56,
            19493.76,
            19562.37,
            19629.28,
            19694.39,
            19757.59,
            19818.77,
            19877.84,
            19934.71,
            19989.29,
            20041.48,
            20091.2,
            20138.38,
            20182.94,
            20224.81,
            20263.92,
            20300.2,
            20333.61,
            20364.08,
            20391.57,
            20416.03,
            20437.43,
            20455.73,
            20470.9,
            20482.92,
            20491.76,
            20497.42,
            20499.88,
            20499.15,
            20495.21,
            20488.09,
            20477.78,
            20464.31,
            20447.7,
            20427.97,
            20405.15,
            20379.29,
            20350.42,
            20318.59,
            20283.86,
            20246.27,
            20205.88,
            20162.77,
            20116.99,
            20068.63,
            20017.76,
            19964.46,
            19908.82,
            19850.93,
            19790.87,
            19728.75,
            19664.66,
            19598.71,
            19531,
            19461.65,
            19390.75,
            19318.43,
            19244.8,
            19169.98,
            19094.08,
            19017.24,
            18939.57,
            18861.19,
            18782.24,
            18702.84,
            18623.11,
            18543.18,
            18463.19,
            18383.25,
            18303.5,
            18224.07,
            18145.08,
            18066.65,
            17988.92,
            17912,
            17836.03,
            17761.12,
            17687.39,
            17614.96,
            17543.95,
            17474.46,
            17406.62,
            17340.52,
            17276.28,
            17214,
            17153.78,
            17095.71,
            17039.88,
            16986.4,
            16935.33,
            16886.76,
            16840.78,
            16797.45,
            16756.85,
            16719.03,
            16684.07,
            16652,
            16622.9,
            16596.8,
            16573.74,
            16553.76,
            16536.9,
            16523.18,
            16512.62,
            16505.24,
            16501.05,
            16500.06,
            16502.27,
            16507.67,
            16516.26,
            16528.03,
            16542.95,
            16561,
            16582.15,
            16606.37,
            16633.62,
            16663.86,
            16697.03,
            16733.09,
            16771.98,
            16813.62,
            16857.97,
            16904.95,
            16954.47,
            17006.47,
            17060.86,
            17117.55,
            17176.45,
            17237.47,
            17300.51,
            17365.46,
            17432.24,
            17500.72,
            17570.8,
            17642.36,
            17715.3,
            17789.49,
            17864.82,
            17941.17,
            18018.41,
            18096.42,
            18175.08,
            18254.25,
            18333.82,
            18413.66,
            18493.63,
            18573.61,
            18653.48,
            18733.1,
            18812.35,
            18891.09,
            18969.21,
            19046.59,
            19123.08,
            19198.58,
            19272.97,
            19346.11,
            19417.9,
            19488.23,
            19556.97,
            19624.02,
            19689.27,
            19752.63,
            19813.97,
            19873.22,
            19930.27,
            19985.03,
            20037.41,
            20087.34,
            20134.72,
            20179.49,
            20221.57,
            20260.9,
            20297.42,
            20331.05,
            20361.76,
            20389.49,
            20414.2,
            20435.84,
            20454.39,
            20469.81,
            20482.08,
            20491.17,
            20497.09,
            20499.8,
            20499.32,
            20495.64,
            20488.77,
            20478.72,
            20465.5,
            20449.13,
            20429.65,
            20407.08,
            20381.46,
            20352.83,
            20321.24,
            20286.73,
            20249.36,
            20209.2,
            20166.3,
            20120.73,
            20072.58,
            20021.9,
            19968.79,
            19913.34,
            19855.62,
            19795.73,
            19733.77,
            19669.83,
            19604.03,
            19536.46,
            19467.23,
            19396.45,
            19324.24,
            19250.71,
            19175.98,
            19100.16,
            19023.39,
            18945.78,
            18867.46,
            18788.55,
            18709.17,
            18629.47,
            18549.55,
            18469.56,
            18389.61,
            18309.84,
            18230.38,
            18151.35,
            18072.87,
            17995.08,
            17918.1,
            17842.04,
            17767.04,
            17693.21,
            17620.68,
            17549.55,
            17479.94
          ],
          "default_with": [
            "pnl"
          ],
          "description": "Daily VaR forecasts as positive loss amounts in the same units, same length as pnl. An exception is pnl < -VaR."
        }
      },
      "page": "https://aifinhub.io/var-backtest-kupiec-christoffersen/",
      "contract": "https://aifinhub.io/contracts/var-backtest-kupiec-christoffersen.json"
    },
    {
      "calculator": "llm-finance-error-taxonomy",
      "title": "LLM Finance Error Taxonomy",
      "category": "Playgrounds",
      "summary": "12 documented LLM failure modes in finance, from hallucinated tickers and stale prices to unit, currency and off-by-100 errors. Paste output to see flags.",
      "run": "https://aifinhub.io/api/run/llm-finance-error-taxonomy",
      "example": "https://aifinhub.io/api/run/llm-finance-error-taxonomy",
      "inputs": {
        "ground_truth": {
          "type": "string",
          "default": "",
          "description": "Optional verified source text. When non-empty, each currency amount, percent, number of 1,000 or more and year in text is looked up in it."
        },
        "text": {
          "type": "string",
          "default": "",
          "description": "The model's answer to scan."
        }
      },
      "page": "https://aifinhub.io/llm-finance-error-taxonomy/",
      "contract": "https://aifinhub.io/contracts/llm-finance-error-taxonomy.json"
    },
    {
      "calculator": "position-sizing-edge-variance",
      "title": "Position Sizing under Edge Variance",
      "category": "Calculators",
      "summary": "Bayesian-Kelly bet sizing when your edge is itself uncertain. Compare deterministic Kelly, Bayesian-adjusted, and conservative lower-bound versions. Includes 5%-CVaR.",
      "run": "https://aifinhub.io/api/run/position-sizing-edge-variance",
      "example": "https://aifinhub.io/api/run/position-sizing-edge-variance?edge_mean=0.04&edge_stddev=0.02&outcome_variance=0.04&kelly_fraction=0.25",
      "inputs": {
        "edge_mean": {
          "type": "number",
          "default": 0.04,
          "description": "Expected return per bet mu as a decimal (0.04 = 4%)."
        },
        "edge_stddev": {
          "type": "number",
          "default": 0.02,
          "minimum": 0,
          "description": "Standard error of the edge estimate sigma_mu, decimal."
        },
        "kelly_fraction": {
          "type": "number",
          "default": 0.25,
          "minimum": 0,
          "maximum": 1,
          "description": "Fraction of full Kelly actually bet (0.25 = quarter Kelly)."
        },
        "outcome_variance": {
          "type": "number",
          "default": 0.04,
          "minimum": 0,
          "description": "Per-bet outcome variance sigma^2 (a variance, not a std-dev: 0.04 = 20% per-bet std-dev)."
        }
      },
      "page": "https://aifinhub.io/position-sizing-edge-variance/",
      "contract": "https://aifinhub.io/contracts/position-sizing-edge-variance.json"
    },
    {
      "calculator": "drawdown-recovery-markov",
      "title": "Drawdown-Recovery Markov Simulator",
      "category": "Calculators",
      "summary": "Time to recover from an N% drawdown given monthly Sharpe + skew + kurtosis. Cornish-Fisher Monte Carlo, percentile distribution of recovery months.",
      "run": "https://aifinhub.io/api/run/drawdown-recovery-markov",
      "example": "https://aifinhub.io/api/run/drawdown-recovery-markov?monthly_sharpe=0.3&monthly_vol=0.04&monthly_skew=-0.3&monthly_excess_kurt=2&recovery_threshold=0.2&paths=2000&max_months=240&seed=42",
      "inputs": {
        "max_months": {
          "type": "number",
          "default": 240,
          "minimum": 1,
          "maximum": 1200,
          "description": "Simulation horizon in months; paths not recovered by then count as never recovered."
        },
        "monthly_excess_kurt": {
          "type": "number",
          "default": 2,
          "description": "Excess kurtosis of monthly returns (0 = normal). Cornish-Fisher is a valid distribution only in Maillard's domain (at skew 0: 0 to 8); see cornishFisherValid."
        },
        "monthly_sharpe": {
          "type": "number",
          "default": 0.3,
          "description": "Monthly Sharpe ratio (mean monthly return / monthly volatility). Annual Sharpe ~ monthly x sqrt(12)."
        },
        "monthly_skew": {
          "type": "number",
          "default": -0.3,
          "description": "Skewness of monthly returns (0 = symmetric)."
        },
        "monthly_vol": {
          "type": "number",
          "default": 0.04,
          "minimum": 0,
          "maximum": 1,
          "description": "Monthly return volatility as a decimal (0.04 = 4%/month)."
        },
        "paths": {
          "type": "number",
          "default": 2000,
          "minimum": 1,
          "maximum": 50000,
          "description": "Number of simulated paths (whole number)."
        },
        "recovery_threshold": {
          "type": "number",
          "default": 0.2,
          "minimum": 0,
          "maximum": 1,
          "description": "Drawdown each path starts from, as a decimal (0.2 = 20% below peak)."
        },
        "seed": {
          "type": "number",
          "default": 42,
          "description": "Random seed; same inputs and seed give the same result."
        }
      },
      "page": "https://aifinhub.io/drawdown-recovery-markov/",
      "contract": "https://aifinhub.io/contracts/drawdown-recovery-markov.json"
    }
  ]
}