{
  "generatedAt": "2026-05-30T08:55:12.579Z",
  "stocks": [
    {
      "id": "stock-aapl",
      "symbol": "AAPL",
      "name": "Apple Inc.",
      "exchange": "NASDAQ",
      "currency": "USD"
    },
    {
      "id": "stock-msft",
      "symbol": "MSFT",
      "name": "Microsoft Corp.",
      "exchange": "NASDAQ",
      "currency": "USD"
    },
    {
      "id": "stock-dbs",
      "symbol": "DBS.SI",
      "name": "DBS Group Holdings",
      "exchange": "SGX",
      "currency": "SGD"
    }
  ],
  "news": [
    {
      "id": "news-fed",
      "source": "Fixture Global Macro",
      "sourceUrl": "https://example.com/fed",
      "headline": "US Fed signals cautious rate path, tech risk appetite improves",
      "region": "global",
      "publishedAt": "2026-05-29T20:00:00+08:00",
      "retrievedAt": "2026-05-30T08:00:00+08:00",
      "affectedSymbols": [
        "AAPL",
        "MSFT"
      ],
      "topics": [
        "macro"
      ],
      "sentimentScore": 0.4,
      "impactScore": 0.6,
      "rawPayload": {}
    },
    {
      "id": "news-mas",
      "source": "Fixture Local",
      "sourceUrl": "https://example.com/mas-bank-risk",
      "headline": "MAS flags higher capital scrutiny for local banks",
      "region": "local",
      "publishedAt": "2026-05-30T09:00:00+08:00",
      "retrievedAt": "2026-05-30T09:05:00+08:00",
      "affectedSymbols": [
        "DBS.SI"
      ],
      "topics": [
        "regulation"
      ],
      "sentimentScore": -0.8,
      "impactScore": 0.9,
      "rawPayload": {}
    }
  ],
  "simulations": [
    {
      "id": "sim-aapl-20260530",
      "stock": {
        "id": "stock-aapl",
        "symbol": "AAPL",
        "name": "Apple Inc.",
        "exchange": "NASDAQ",
        "currency": "USD"
      },
      "strategy": {
        "strategyKey": "moving_average_breakout",
        "version": "1.0.0",
        "entry": {
          "breakoutWindowDays": 20,
          "volumeMultiple": 1.2,
          "trendSmaDays": 50
        },
        "exit": {
          "maxHoldDays": 10,
          "stopLossPct": 8,
          "exitSmaDays": 10
        },
        "newsFilter": {
          "enabled": true,
          "lookbackHours": 48,
          "blockEntryOnNegativeImpactScoreGte": 0.75,
          "regions": [
            "local",
            "regional",
            "global"
          ]
        }
      },
      "status": "closed",
      "openedAt": "2026-05-30T16:00:00+08:00",
      "entryPrice": 195,
      "currentPrice": 195.55,
      "currentPlPct": 0.28,
      "finalPlPct": 0.28,
      "reason": "Breakout: close above 20-day high, volume above threshold, trend above 50-day SMA, no blocking news",
      "consideredNews": [
        {
          "id": "news-fed",
          "source": "Fixture Global Macro",
          "sourceUrl": "https://example.com/fed",
          "headline": "US Fed signals cautious rate path, tech risk appetite improves",
          "region": "global",
          "publishedAt": "2026-05-29T20:00:00+08:00",
          "retrievedAt": "2026-05-30T08:00:00+08:00",
          "affectedSymbols": [
            "AAPL",
            "MSFT"
          ],
          "topics": [
            "macro"
          ],
          "sentimentScore": 0.4,
          "impactScore": 0.6,
          "rawPayload": {}
        }
      ],
      "closedAt": "2026-05-02T16:00:00+08:00",
      "exitPrice": 195.55
    },
    {
      "id": "sim-msft-20260530",
      "stock": {
        "id": "stock-msft",
        "symbol": "MSFT",
        "name": "Microsoft Corp.",
        "exchange": "NASDAQ",
        "currency": "USD"
      },
      "strategy": {
        "strategyKey": "moving_average_breakout",
        "version": "1.0.0",
        "entry": {
          "breakoutWindowDays": 20,
          "volumeMultiple": 1.2,
          "trendSmaDays": 50
        },
        "exit": {
          "maxHoldDays": 10,
          "stopLossPct": 8,
          "exitSmaDays": 10
        },
        "newsFilter": {
          "enabled": true,
          "lookbackHours": 48,
          "blockEntryOnNegativeImpactScoreGte": 0.75,
          "regions": [
            "local",
            "regional",
            "global"
          ]
        }
      },
      "status": "closed",
      "openedAt": "2026-05-30T16:00:00+08:00",
      "entryPrice": 415,
      "currentPrice": 413.95,
      "currentPlPct": -0.25,
      "finalPlPct": -0.25,
      "reason": "Breakout: close above 20-day high, volume above threshold, trend above 50-day SMA, no blocking news",
      "consideredNews": [
        {
          "id": "news-fed",
          "source": "Fixture Global Macro",
          "sourceUrl": "https://example.com/fed",
          "headline": "US Fed signals cautious rate path, tech risk appetite improves",
          "region": "global",
          "publishedAt": "2026-05-29T20:00:00+08:00",
          "retrievedAt": "2026-05-30T08:00:00+08:00",
          "affectedSymbols": [
            "AAPL",
            "MSFT"
          ],
          "topics": [
            "macro"
          ],
          "sentimentScore": 0.4,
          "impactScore": 0.6,
          "rawPayload": {}
        }
      ],
      "closedAt": "2026-05-02T16:00:00+08:00",
      "exitPrice": 413.95
    },
    {
      "id": "sim-DBS-SI-blocked",
      "stock": {
        "id": "stock-dbs",
        "symbol": "DBS.SI",
        "name": "DBS Group Holdings",
        "exchange": "SGX",
        "currency": "SGD"
      },
      "strategy": {
        "strategyKey": "moving_average_breakout",
        "version": "1.0.0",
        "entry": {
          "breakoutWindowDays": 20,
          "volumeMultiple": 1.2,
          "trendSmaDays": 50
        },
        "exit": {
          "maxHoldDays": 10,
          "stopLossPct": 8,
          "exitSmaDays": 10
        },
        "newsFilter": {
          "enabled": true,
          "lookbackHours": 48,
          "blockEntryOnNegativeImpactScoreGte": 0.75,
          "regions": [
            "local",
            "regional",
            "global"
          ]
        }
      },
      "status": "cancelled",
      "entryPrice": null,
      "currentPlPct": null,
      "finalPlPct": null,
      "reason": "Blocked by local news: MAS flags higher capital scrutiny for local banks",
      "consideredNews": [
        {
          "id": "news-mas",
          "source": "Fixture Local",
          "sourceUrl": "https://example.com/mas-bank-risk",
          "headline": "MAS flags higher capital scrutiny for local banks",
          "region": "local",
          "publishedAt": "2026-05-30T09:00:00+08:00",
          "retrievedAt": "2026-05-30T09:05:00+08:00",
          "affectedSymbols": [
            "DBS.SI"
          ],
          "topics": [
            "regulation"
          ],
          "sentimentScore": -0.8,
          "impactScore": 0.9,
          "rawPayload": {}
        }
      ]
    }
  ],
  "events": [
    {
      "id": "evt-1",
      "simulationId": "sim-aapl-20260530",
      "eventType": "SIGNAL_CREATED",
      "eventTimestamp": "2026-05-30T16:00:00+08:00",
      "payload": {
        "signal": {
          "action": "enter",
          "reason": "Breakout: close above 20-day high, volume above threshold, trend above 50-day SMA, no blocking news",
          "price": 195,
          "tradingDate": "2026-05-01",
          "metadata": {
            "prev20High": 189.74,
            "avg20Volume": 1396,
            "sma50": 185.52,
            "consideredNewsIds": [
              "news-fed"
            ]
          }
        },
        "stock": "AAPL",
        "strategy": {
          "strategyKey": "moving_average_breakout",
          "version": "1.0.0",
          "entry": {
            "breakoutWindowDays": 20,
            "volumeMultiple": 1.2,
            "trendSmaDays": 50
          },
          "exit": {
            "maxHoldDays": 10,
            "stopLossPct": 8,
            "exitSmaDays": 10
          },
          "newsFilter": {
            "enabled": true,
            "lookbackHours": 48,
            "blockEntryOnNegativeImpactScoreGte": 0.75,
            "regions": [
              "local",
              "regional",
              "global"
            ]
          }
        },
        "consideredNews": [
          {
            "id": "news-fed",
            "source": "Fixture Global Macro",
            "sourceUrl": "https://example.com/fed",
            "headline": "US Fed signals cautious rate path, tech risk appetite improves",
            "region": "global",
            "publishedAt": "2026-05-29T20:00:00+08:00",
            "retrievedAt": "2026-05-30T08:00:00+08:00",
            "affectedSymbols": [
              "AAPL",
              "MSFT"
            ],
            "topics": [
              "macro"
            ],
            "sentimentScore": 0.4,
            "impactScore": 0.6,
            "rawPayload": {}
          }
        ]
      },
      "previousHash": null,
      "eventHash": "cd58d8ca1915b6ef61c0ed00dc1776bdb14c01b6951728723e57bb08d5b264ae",
      "createdAt": "2026-05-30T16:00:00+08:00"
    },
    {
      "id": "evt-2",
      "simulationId": "sim-aapl-20260530",
      "eventType": "SIMULATED_ENTRY_RECORDED",
      "eventTimestamp": "2026-05-30T16:00:00+08:00",
      "payload": {
        "entryPrice": 195,
        "fillPolicy": "same_day_close"
      },
      "previousHash": "cd58d8ca1915b6ef61c0ed00dc1776bdb14c01b6951728723e57bb08d5b264ae",
      "eventHash": "3243ed33e4026e8437eab05ead422711897c8c11e49313d72f8c2be3e238aacc",
      "createdAt": "2026-05-30T16:00:00+08:00"
    },
    {
      "id": "evt-3",
      "simulationId": "sim-aapl-20260530",
      "eventType": "PRICE_SNAPSHOT_RECORDED",
      "eventTimestamp": "2026-05-02T16:00:00+08:00",
      "payload": {
        "close": 195.55,
        "currentPlPct": 0.28
      },
      "previousHash": "3243ed33e4026e8437eab05ead422711897c8c11e49313d72f8c2be3e238aacc",
      "eventHash": "355b6c312dde0a78e1e46c6d5a4673550cb335828570de0af4717c2b5b46cbc5",
      "createdAt": "2026-05-02T16:00:00+08:00"
    },
    {
      "id": "evt-4",
      "simulationId": "sim-aapl-20260530",
      "eventType": "SIMULATED_EXIT_RECORDED",
      "eventTimestamp": "2026-05-02T16:00:00+08:00",
      "payload": {
        "exitPrice": 195.55,
        "reason": "Max hold 10 trading days reached"
      },
      "previousHash": "355b6c312dde0a78e1e46c6d5a4673550cb335828570de0af4717c2b5b46cbc5",
      "eventHash": "43ea6b1911bf32f9f1f3faa2b318f76ad55a618b76481366950a5664d2c19758",
      "createdAt": "2026-05-02T16:00:00+08:00"
    },
    {
      "id": "evt-5",
      "simulationId": "sim-aapl-20260530",
      "eventType": "POSITION_CLOSED",
      "eventTimestamp": "2026-05-02T16:00:00+08:00",
      "payload": {
        "finalPlPct": 0.28
      },
      "previousHash": "43ea6b1911bf32f9f1f3faa2b318f76ad55a618b76481366950a5664d2c19758",
      "eventHash": "2de2f4f5984c0f8dddc21c4001a0f96c82ddbf93e4c829dd2a47919b651507c2",
      "createdAt": "2026-05-02T16:00:00+08:00"
    },
    {
      "id": "evt-6",
      "simulationId": "sim-msft-20260530",
      "eventType": "SIGNAL_CREATED",
      "eventTimestamp": "2026-05-30T16:00:00+08:00",
      "payload": {
        "signal": {
          "action": "enter",
          "reason": "Breakout: close above 20-day high, volume above threshold, trend above 50-day SMA, no blocking news",
          "price": 415,
          "tradingDate": "2026-05-01",
          "metadata": {
            "prev20High": 409.74,
            "avg20Volume": 1396,
            "sma50": 405.5199999999999,
            "consideredNewsIds": [
              "news-fed"
            ]
          }
        },
        "stock": "MSFT",
        "strategy": {
          "strategyKey": "moving_average_breakout",
          "version": "1.0.0",
          "entry": {
            "breakoutWindowDays": 20,
            "volumeMultiple": 1.2,
            "trendSmaDays": 50
          },
          "exit": {
            "maxHoldDays": 10,
            "stopLossPct": 8,
            "exitSmaDays": 10
          },
          "newsFilter": {
            "enabled": true,
            "lookbackHours": 48,
            "blockEntryOnNegativeImpactScoreGte": 0.75,
            "regions": [
              "local",
              "regional",
              "global"
            ]
          }
        },
        "consideredNews": [
          {
            "id": "news-fed",
            "source": "Fixture Global Macro",
            "sourceUrl": "https://example.com/fed",
            "headline": "US Fed signals cautious rate path, tech risk appetite improves",
            "region": "global",
            "publishedAt": "2026-05-29T20:00:00+08:00",
            "retrievedAt": "2026-05-30T08:00:00+08:00",
            "affectedSymbols": [
              "AAPL",
              "MSFT"
            ],
            "topics": [
              "macro"
            ],
            "sentimentScore": 0.4,
            "impactScore": 0.6,
            "rawPayload": {}
          }
        ]
      },
      "previousHash": null,
      "eventHash": "9edb1f17cac72be6b3d879cea346013268cfebefb3d9786b6fd20e9b8ebbd96d",
      "createdAt": "2026-05-30T16:00:00+08:00"
    },
    {
      "id": "evt-7",
      "simulationId": "sim-msft-20260530",
      "eventType": "SIMULATED_ENTRY_RECORDED",
      "eventTimestamp": "2026-05-30T16:00:00+08:00",
      "payload": {
        "entryPrice": 415,
        "fillPolicy": "same_day_close"
      },
      "previousHash": "9edb1f17cac72be6b3d879cea346013268cfebefb3d9786b6fd20e9b8ebbd96d",
      "eventHash": "52432d5f50ebc92fa37935f0cc4a79bfdc15e06bf529986099dc7ad5f5230582",
      "createdAt": "2026-05-30T16:00:00+08:00"
    },
    {
      "id": "evt-8",
      "simulationId": "sim-msft-20260530",
      "eventType": "PRICE_SNAPSHOT_RECORDED",
      "eventTimestamp": "2026-05-02T16:00:00+08:00",
      "payload": {
        "close": 413.95,
        "currentPlPct": -0.25
      },
      "previousHash": "52432d5f50ebc92fa37935f0cc4a79bfdc15e06bf529986099dc7ad5f5230582",
      "eventHash": "d7363b8e9a6c169cfdff1388c1499e78cdfff17979f04dae502046ffb800a185",
      "createdAt": "2026-05-02T16:00:00+08:00"
    },
    {
      "id": "evt-9",
      "simulationId": "sim-msft-20260530",
      "eventType": "SIMULATED_EXIT_RECORDED",
      "eventTimestamp": "2026-05-02T16:00:00+08:00",
      "payload": {
        "exitPrice": 413.95,
        "reason": "Max hold 10 trading days reached"
      },
      "previousHash": "d7363b8e9a6c169cfdff1388c1499e78cdfff17979f04dae502046ffb800a185",
      "eventHash": "9565e708e23627ba8e7061c393d5dbd93f29ff0626856e164327b719d7c21e85",
      "createdAt": "2026-05-02T16:00:00+08:00"
    },
    {
      "id": "evt-10",
      "simulationId": "sim-msft-20260530",
      "eventType": "POSITION_CLOSED",
      "eventTimestamp": "2026-05-02T16:00:00+08:00",
      "payload": {
        "finalPlPct": -0.25
      },
      "previousHash": "9565e708e23627ba8e7061c393d5dbd93f29ff0626856e164327b719d7c21e85",
      "eventHash": "5740aaa0cb96a49c90c662649856bccb7cb9b8815b3120ffd7af632e79942499",
      "createdAt": "2026-05-02T16:00:00+08:00"
    }
  ],
  "performance": {
    "total": 3,
    "open": 0,
    "closed": 2,
    "cancelled": 1,
    "winRate": 50,
    "averageClosedPlPct": 0.02
  },
  "checkpoint": {
    "checkpointDate": "2026-05-30",
    "eventCount": 10,
    "firstEventHash": "2de2f4f5984c0f8dddc21c4001a0f96c82ddbf93e4c829dd2a47919b651507c2",
    "lastEventHash": "d7363b8e9a6c169cfdff1388c1499e78cdfff17979f04dae502046ffb800a185",
    "merkleRoot": "fb2bbbcebe568d29f30cc9ce51f29e1da62006af34ca12740d88e933f2d398b2"
  }
}