f/fundlab/cef_merged.json
Greg Pomerantz 6f8bde4c35 CEF stage 2b: per-share financial-highlights parser (cef_annual.py)
Joint backtracking placement for CEF tables that drop zero columns;
NAV-identity fallback when the printed total row is short; 4 fund-
family layouts verified (Franklin/classic/abrdn/Korea). 16/50 of the
CEF shortlist now have a verified div/gains/ROC split + FY-end
discount series. 17 new parser unit tests (123/123 green).
2026-08-28 07:30:16 -04:00

398 lines
5.8 KiB
JSON

{
"TWN": {
"char_actual": 0.66,
"shares": {
"share_div": 0.061122956645344735,
"share_gains": 0.9388770433546558,
"share_roc": 0.0
},
"disc_now_approx": -0.1502,
"n_tender": 0,
"bdc": false,
"report_filed": "2025-11-05",
"mkt_end": [
50.25,
44.73,
31.1,
25.2,
35.83
],
"nav_end": [
59.13,
53.78,
39.73,
29.96,
42.83
]
},
"PEO": {
"char_actual": 0.45,
"shares": {
"share_div": 0.4163424124513619,
"share_gains": 0.5836575875486382,
"share_roc": 0.0
},
"disc_now_approx": -0.0976,
"n_tender": 0,
"bdc": false,
"report_filed": "2026-02-20",
"mkt_end": [
21.74,
21.74,
20.63,
21.8,
16.52
],
"nav_end": [
24.09,
24.21,
24.83,
25.85,
19.22
]
},
"KF": {
"char_actual": 0.54,
"shares": {
"share_div": 0.2741935483870966,
"share_gains": 0.7244039270687233,
"share_roc": 0.0014025245441795222
},
"disc_now_approx": -0.1442,
"n_tender": 0,
"bdc": false,
"report_filed": "2026-08-27",
"mkt_end": [
75.21,
26.93,
24.13,
23.14,
24.35
],
"nav_end": [
87.88,
30.87,
28.78,
26.52,
28.54
]
},
"LENDX": {
"char_actual": 0.47,
"shares": {
"share_div": 0.4533483822422874,
"share_gains": 0.40481565086531224,
"share_roc": 0.1418359668924003
},
"disc_now_approx": null,
"n_tender": 40,
"bdc": false,
"report_filed": "2026-05-08",
"mkt_end": [],
"nav_end": [
46.13,
46.09,
46.4,
48.79,
51.23
]
},
"EMO": {
"char_actual": 0.4,
"shares": {
"share_div": 0.6651270207852193,
"share_gains": 0.0,
"share_roc": 0.33487297921478054
},
"disc_now_approx": -0.0681,
"n_tender": 6,
"bdc": false,
"report_filed": "2026-01-27",
"mkt_end": [
45.55,
50.49,
34.5,
30.43,
21.65
],
"nav_end": [
48.88,
55.82,
38.75,
35.97,
26.53
]
},
"EMF": {
"char_actual": 0.4,
"shares": {
"share_div": 0.5065502183406113,
"share_gains": 0.4934497816593886,
"share_roc": 0.0
},
"disc_now_approx": -0.1158,
"n_tender": 0,
"bdc": false,
"report_filed": "2025-10-30",
"mkt_end": [
15.27,
12.81,
11.71,
11.85,
17.89
],
"nav_end": [
17.27,
14.81,
13.63,
13.72,
20.09
]
},
"ADX": {
"char_actual": 0.65,
"shares": {
"share_div": 0.08865979381443298,
"share_gains": 0.9113402061855671,
"share_roc": 0.0
},
"disc_now_approx": -0.0566,
"n_tender": 0,
"bdc": false,
"report_filed": "2026-02-20",
"mkt_end": [
23.32,
20.2,
17.71,
14.54,
19.41
],
"nav_end": [
24.72,
22.64,
20.56,
17.38,
22.5
]
},
"HQL": {
"char_actual": 0.49,
"shares": {
"share_div": 0.36363636363636365,
"share_gains": 0.6098484848484849,
"share_roc": 0.026515151515151516
},
"disc_now_approx": -0.1061,
"n_tender": 0,
"bdc": false,
"report_filed": "2025-12-08",
"mkt_end": [
15.51,
15.08,
12.47,
13.66,
20.8
],
"nav_end": [
17.35,
16.38,
15.0,
15.49,
21.22
]
},
"HQH": {
"char_actual": 0.51,
"shares": {
"share_div": 0.3466257668711656,
"share_gains": 0.583844580777096,
"share_roc": 0.06952965235173823
},
"disc_now_approx": -0.0629,
"n_tender": 0,
"bdc": false,
"report_filed": "2025-12-08",
"mkt_end": [
18.46,
18.62,
15.55,
17.28,
25.57
],
"nav_end": [
19.7,
20.33,
18.84,
19.36,
25.47
]
},
"AEF": {
"char_actual": 0.82,
"shares": {
"share_div": 0.19999999999999996,
"share_gains": 0.0,
"share_roc": 0.7999999999999999
},
"disc_now_approx": -0.0826,
"n_tender": 0,
"bdc": false,
"report_filed": "2026-03-09",
"mkt_end": [
7.0,
5.19,
5.11,
5.15,
7.92
],
"nav_end": [
7.63,
5.96,
5.96,
5.78,
8.7
]
},
"ASGI": {
"char_actual": 0.55,
"shares": {
"share_div": 0.3477751756440281,
"share_gains": 0.4508196721311476,
"share_roc": 0.20140515222482439
},
"disc_now_approx": -0.0177,
"n_tender": 0,
"bdc": false,
"report_filed": "2025-12-08",
"mkt_end": [
21.13,
20.21,
16.1,
15.73,
19.93
],
"nav_end": [
21.51,
21.17,
19.16,
18.93,
22.27
]
},
"AOD": {
"char_actual": 0.27,
"shares": {
"share_div": 0.8126361655773419,
"share_gains": 0.0,
"share_roc": 0.18736383442265794
},
"disc_now_approx": 0.0,
"n_tender": 0,
"bdc": false,
"report_filed": "2026-01-08",
"mkt_end": [
11.63,
10.16,
8.4,
8.92,
12.01
],
"nav_end": [
11.63,
11.15,
9.9,
10.05,
12.95
]
},
"AGD": {
"char_actual": 0.27,
"shares": {
"share_div": 0.8126361655773419,
"share_gains": 0.0,
"share_roc": 0.18736383442265794
},
"disc_now_approx": 0.0,
"n_tender": 0,
"bdc": false,
"report_filed": "2026-01-08",
"mkt_end": [
11.63,
10.16,
8.4,
8.92,
12.01
],
"nav_end": [
11.63,
11.15,
9.9,
10.05,
12.95
]
},
"EOD": {
"char_actual": 0.58,
"shares": {
"share_div": 0.47131147540983603,
"share_gains": 0.0,
"share_roc": 0.5286885245901639
},
"disc_now_approx": null,
"n_tender": 0,
"bdc": false,
"report_filed": "2026-01-05",
"mkt_end": [],
"nav_end": [
6.44,
5.53,
4.52,
4.57,
6.03
]
},
"CSQ": {
"char_actual": 0.53,
"shares": {
"share_div": 0.36713286713286714,
"share_gains": 0.45454545454545464,
"share_roc": 0.17832167832167836
},
"disc_now_approx": null,
"n_tender": 5,
"bdc": false,
"report_filed": "2025-06-27",
"mkt_end": [],
"nav_end": [
9.32,
10.04,
8.99
]
},
"HERZ": {
"char_actual": 0.94,
"shares": {
"share_div": 0.0,
"share_gains": 0.2098765432098765,
"share_roc": 0.7901234567901234
},
"disc_now_approx": -0.0453,
"n_tender": 0,
"bdc": false,
"report_filed": "2025-09-08",
"mkt_end": [
2.53,
2.35,
3.95,
4.01,
6.27
],
"nav_end": [
2.65,
3.1,
4.98,
4.63,
7.06
]
}
}