openplanter 0.2.9 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/investigation-tools/asx-options-flow.d.ts +75 -0
- package/dist/investigation-tools/asx-options-flow.d.ts.map +1 -0
- package/dist/investigation-tools/asx-options-flow.js +272 -0
- package/dist/investigation-tools/asx-options-flow.js.map +1 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.d.ts +55 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.d.ts.map +1 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.js +244 -0
- package/dist/investigation-tools/glassdoor-asx-analyzer.js.map +1 -0
- package/dist/investigation-tools/index.d.ts +7 -0
- package/dist/investigation-tools/index.d.ts.map +1 -1
- package/dist/investigation-tools/index.js +7 -0
- package/dist/investigation-tools/index.js.map +1 -1
- package/dist/investigation-tools/ip-australia-patent-scraper.d.ts +51 -0
- package/dist/investigation-tools/ip-australia-patent-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/ip-australia-patent-scraper.js +303 -0
- package/dist/investigation-tools/ip-australia-patent-scraper.js.map +1 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.d.ts +49 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.js +250 -0
- package/dist/investigation-tools/linkedin-asx-employee-scraper.js.map +1 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.d.ts +49 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.js +286 -0
- package/dist/investigation-tools/state-mp-holdings-scraper.js.map +1 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.d.ts +61 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.js +246 -0
- package/dist/investigation-tools/stocktwits-asx-scraper.js.map +1 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.d.ts +39 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.d.ts.map +1 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.js +173 -0
- package/dist/investigation-tools/tenders-gov-au-scraper.js.map +1 -0
- package/dist/investigation-tools/tool-registry.d.ts.map +1 -1
- package/dist/investigation-tools/tool-registry.js +77 -0
- package/dist/investigation-tools/tool-registry.js.map +1 -1
- package/dist/tool-defs.d.ts.map +1 -1
- package/dist/tool-defs.js +220 -0
- package/dist/tool-defs.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* asx-options-flow.ts -- ASX Unusual Options Activity Scanner
|
|
3
|
+
*
|
|
4
|
+
* Fetches ASX unusual options activity data including call/put volume
|
|
5
|
+
* spikes. Identifies potential pre-announcement positioning through
|
|
6
|
+
* abnormal options flow.
|
|
7
|
+
*
|
|
8
|
+
* Data sources:
|
|
9
|
+
* - ASX options market data
|
|
10
|
+
* - Yahoo Finance options chains (.AX)
|
|
11
|
+
*
|
|
12
|
+
* Note: ASX options data is limited compared to US markets. This tool
|
|
13
|
+
* aggregates what's publicly available and uses Yahoo Finance as a
|
|
14
|
+
* supplementary source.
|
|
15
|
+
*
|
|
16
|
+
* DISCLAIMER:
|
|
17
|
+
* This tool is provided for research and educational purposes only.
|
|
18
|
+
* Users are solely responsible for ensuring compliance with all applicable
|
|
19
|
+
* laws, regulations, and website terms before using this tool.
|
|
20
|
+
*/
|
|
21
|
+
export interface OptionContract {
|
|
22
|
+
type: "call" | "put";
|
|
23
|
+
strike: number;
|
|
24
|
+
expiry: string;
|
|
25
|
+
last_price: number;
|
|
26
|
+
bid: number;
|
|
27
|
+
ask: number;
|
|
28
|
+
volume: number;
|
|
29
|
+
open_interest: number;
|
|
30
|
+
implied_volatility: number;
|
|
31
|
+
in_the_money: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface UnusualActivity {
|
|
34
|
+
contract_type: "call" | "put";
|
|
35
|
+
strike: number;
|
|
36
|
+
expiry: string;
|
|
37
|
+
volume: number;
|
|
38
|
+
open_interest: number;
|
|
39
|
+
volume_oi_ratio: number;
|
|
40
|
+
implied_volatility: number;
|
|
41
|
+
flag_reason: string;
|
|
42
|
+
signal_strength: "low" | "medium" | "high" | "extreme";
|
|
43
|
+
}
|
|
44
|
+
export interface OptionsFlowSummary {
|
|
45
|
+
total_call_volume: number;
|
|
46
|
+
total_put_volume: number;
|
|
47
|
+
put_call_ratio: number;
|
|
48
|
+
total_call_oi: number;
|
|
49
|
+
total_put_oi: number;
|
|
50
|
+
avg_call_iv: number;
|
|
51
|
+
avg_put_iv: number;
|
|
52
|
+
iv_skew: number;
|
|
53
|
+
nearest_expiry: string;
|
|
54
|
+
}
|
|
55
|
+
export interface AsxOptionsFlowResult {
|
|
56
|
+
scraped_at: string;
|
|
57
|
+
ticker: string;
|
|
58
|
+
symbol: string;
|
|
59
|
+
period_days: number;
|
|
60
|
+
threshold: number;
|
|
61
|
+
total_contracts: number;
|
|
62
|
+
calls: OptionContract[];
|
|
63
|
+
puts: OptionContract[];
|
|
64
|
+
unusual_activity: UnusualActivity[];
|
|
65
|
+
summary: OptionsFlowSummary;
|
|
66
|
+
alert_level: "none" | "low" | "medium" | "high";
|
|
67
|
+
alert_message: string;
|
|
68
|
+
}
|
|
69
|
+
export declare function fetchOptionsFlow(opts: {
|
|
70
|
+
ticker: string;
|
|
71
|
+
days?: number;
|
|
72
|
+
threshold?: number;
|
|
73
|
+
}): Promise<AsxOptionsFlowResult>;
|
|
74
|
+
export declare function sampleData(ticker: string): AsxOptionsFlowResult;
|
|
75
|
+
//# sourceMappingURL=asx-options-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asx-options-flow.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/asx-options-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAqBH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC;CACvB;AAmDD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAyJhC;AAID,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAgF/D"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* asx-options-flow.ts -- ASX Unusual Options Activity Scanner
|
|
3
|
+
*
|
|
4
|
+
* Fetches ASX unusual options activity data including call/put volume
|
|
5
|
+
* spikes. Identifies potential pre-announcement positioning through
|
|
6
|
+
* abnormal options flow.
|
|
7
|
+
*
|
|
8
|
+
* Data sources:
|
|
9
|
+
* - ASX options market data
|
|
10
|
+
* - Yahoo Finance options chains (.AX)
|
|
11
|
+
*
|
|
12
|
+
* Note: ASX options data is limited compared to US markets. This tool
|
|
13
|
+
* aggregates what's publicly available and uses Yahoo Finance as a
|
|
14
|
+
* supplementary source.
|
|
15
|
+
*
|
|
16
|
+
* DISCLAIMER:
|
|
17
|
+
* This tool is provided for research and educational purposes only.
|
|
18
|
+
* Users are solely responsible for ensuring compliance with all applicable
|
|
19
|
+
* laws, regulations, and website terms before using this tool.
|
|
20
|
+
*/
|
|
21
|
+
import { fetchJson, isoNow, normalizeTicker, yahooTicker, } from "./shared.js";
|
|
22
|
+
// ── Constants ────────────────────────────────────────────────────
|
|
23
|
+
const YAHOO_OPTIONS_URL = "https://query1.finance.yahoo.com/v7/finance/options/{symbol}";
|
|
24
|
+
const DEFAULT_THRESHOLD = 2.0; // Volume must be 2x average to flag
|
|
25
|
+
const DEFAULT_DELAY = 1.0;
|
|
26
|
+
function epochToDate(epoch) {
|
|
27
|
+
return new Date(epoch * 1000).toISOString().slice(0, 10);
|
|
28
|
+
}
|
|
29
|
+
function classifySignalStrength(volOiRatio, iv) {
|
|
30
|
+
if (volOiRatio > 10 || iv > 1.5)
|
|
31
|
+
return "extreme";
|
|
32
|
+
if (volOiRatio > 5 || iv > 1.0)
|
|
33
|
+
return "high";
|
|
34
|
+
if (volOiRatio > 2 || iv > 0.6)
|
|
35
|
+
return "medium";
|
|
36
|
+
return "low";
|
|
37
|
+
}
|
|
38
|
+
function determineAlertLevel(unusual) {
|
|
39
|
+
if (unusual.length === 0)
|
|
40
|
+
return "none";
|
|
41
|
+
const hasExtreme = unusual.some((u) => u.signal_strength === "extreme");
|
|
42
|
+
const hasHigh = unusual.some((u) => u.signal_strength === "high");
|
|
43
|
+
if (hasExtreme)
|
|
44
|
+
return "high";
|
|
45
|
+
if (hasHigh || unusual.length >= 3)
|
|
46
|
+
return "medium";
|
|
47
|
+
return "low";
|
|
48
|
+
}
|
|
49
|
+
// ── Fetcher ──────────────────────────────────────────────────────
|
|
50
|
+
export async function fetchOptionsFlow(opts) {
|
|
51
|
+
const ticker = normalizeTicker(opts.ticker);
|
|
52
|
+
const symbol = yahooTicker(ticker);
|
|
53
|
+
const days = opts.days ?? 14;
|
|
54
|
+
const threshold = opts.threshold ?? DEFAULT_THRESHOLD;
|
|
55
|
+
const calls = [];
|
|
56
|
+
const puts = [];
|
|
57
|
+
const unusual = [];
|
|
58
|
+
try {
|
|
59
|
+
const url = YAHOO_OPTIONS_URL.replace("{symbol}", symbol);
|
|
60
|
+
const data = await fetchJson(url, { delay: DEFAULT_DELAY });
|
|
61
|
+
const result = data?.optionChain?.result?.[0];
|
|
62
|
+
if (result?.options) {
|
|
63
|
+
for (const chain of result.options) {
|
|
64
|
+
const expiry = chain.expirationDate
|
|
65
|
+
? epochToDate(chain.expirationDate)
|
|
66
|
+
: "";
|
|
67
|
+
// Process calls
|
|
68
|
+
for (const c of chain.calls ?? []) {
|
|
69
|
+
const contract = {
|
|
70
|
+
type: "call",
|
|
71
|
+
strike: c.strike ?? 0,
|
|
72
|
+
expiry,
|
|
73
|
+
last_price: c.lastPrice ?? 0,
|
|
74
|
+
bid: c.bid ?? 0,
|
|
75
|
+
ask: c.ask ?? 0,
|
|
76
|
+
volume: c.volume ?? 0,
|
|
77
|
+
open_interest: c.openInterest ?? 0,
|
|
78
|
+
implied_volatility: Math.round((c.impliedVolatility ?? 0) * 100) / 100,
|
|
79
|
+
in_the_money: c.inTheMoney ?? false,
|
|
80
|
+
};
|
|
81
|
+
calls.push(contract);
|
|
82
|
+
// Check for unusual activity
|
|
83
|
+
const volOiRatio = contract.open_interest > 0
|
|
84
|
+
? contract.volume / contract.open_interest
|
|
85
|
+
: contract.volume > 0 ? 999 : 0;
|
|
86
|
+
if (volOiRatio >= threshold || contract.implied_volatility > 0.8) {
|
|
87
|
+
unusual.push({
|
|
88
|
+
contract_type: "call",
|
|
89
|
+
strike: contract.strike,
|
|
90
|
+
expiry,
|
|
91
|
+
volume: contract.volume,
|
|
92
|
+
open_interest: contract.open_interest,
|
|
93
|
+
volume_oi_ratio: Math.round(volOiRatio * 100) / 100,
|
|
94
|
+
implied_volatility: contract.implied_volatility,
|
|
95
|
+
flag_reason: volOiRatio >= threshold
|
|
96
|
+
? `Volume/OI ratio ${volOiRatio.toFixed(1)}x exceeds ${threshold}x threshold`
|
|
97
|
+
: `High implied volatility: ${(contract.implied_volatility * 100).toFixed(0)}%`,
|
|
98
|
+
signal_strength: classifySignalStrength(volOiRatio, contract.implied_volatility),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Process puts
|
|
103
|
+
for (const p of chain.puts ?? []) {
|
|
104
|
+
const contract = {
|
|
105
|
+
type: "put",
|
|
106
|
+
strike: p.strike ?? 0,
|
|
107
|
+
expiry,
|
|
108
|
+
last_price: p.lastPrice ?? 0,
|
|
109
|
+
bid: p.bid ?? 0,
|
|
110
|
+
ask: p.ask ?? 0,
|
|
111
|
+
volume: p.volume ?? 0,
|
|
112
|
+
open_interest: p.openInterest ?? 0,
|
|
113
|
+
implied_volatility: Math.round((p.impliedVolatility ?? 0) * 100) / 100,
|
|
114
|
+
in_the_money: p.inTheMoney ?? false,
|
|
115
|
+
};
|
|
116
|
+
puts.push(contract);
|
|
117
|
+
const volOiRatio = contract.open_interest > 0
|
|
118
|
+
? contract.volume / contract.open_interest
|
|
119
|
+
: contract.volume > 0 ? 999 : 0;
|
|
120
|
+
if (volOiRatio >= threshold || contract.implied_volatility > 0.8) {
|
|
121
|
+
unusual.push({
|
|
122
|
+
contract_type: "put",
|
|
123
|
+
strike: contract.strike,
|
|
124
|
+
expiry,
|
|
125
|
+
volume: contract.volume,
|
|
126
|
+
open_interest: contract.open_interest,
|
|
127
|
+
volume_oi_ratio: Math.round(volOiRatio * 100) / 100,
|
|
128
|
+
implied_volatility: contract.implied_volatility,
|
|
129
|
+
flag_reason: volOiRatio >= threshold
|
|
130
|
+
? `Volume/OI ratio ${volOiRatio.toFixed(1)}x exceeds ${threshold}x threshold`
|
|
131
|
+
: `High implied volatility: ${(contract.implied_volatility * 100).toFixed(0)}%`,
|
|
132
|
+
signal_strength: classifySignalStrength(volOiRatio, contract.implied_volatility),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
console.error(`[asx_options_flow] Fetch error: ${err}`);
|
|
141
|
+
}
|
|
142
|
+
// Sort unusual by signal strength
|
|
143
|
+
const strengthOrder = { extreme: 0, high: 1, medium: 2, low: 3 };
|
|
144
|
+
unusual.sort((a, b) => strengthOrder[a.signal_strength] - strengthOrder[b.signal_strength]);
|
|
145
|
+
// Build summary
|
|
146
|
+
const totalCallVol = calls.reduce((s, c) => s + c.volume, 0);
|
|
147
|
+
const totalPutVol = puts.reduce((s, p) => s + p.volume, 0);
|
|
148
|
+
const totalCallOi = calls.reduce((s, c) => s + c.open_interest, 0);
|
|
149
|
+
const totalPutOi = puts.reduce((s, p) => s + p.open_interest, 0);
|
|
150
|
+
const avgCallIv = calls.length > 0
|
|
151
|
+
? Math.round((calls.reduce((s, c) => s + c.implied_volatility, 0) / calls.length) * 100) / 100
|
|
152
|
+
: 0;
|
|
153
|
+
const avgPutIv = puts.length > 0
|
|
154
|
+
? Math.round((puts.reduce((s, p) => s + p.implied_volatility, 0) / puts.length) * 100) / 100
|
|
155
|
+
: 0;
|
|
156
|
+
const allExpiries = [...calls, ...puts].map((c) => c.expiry).filter(Boolean);
|
|
157
|
+
const nearestExpiry = allExpiries.sort()[0] ?? "";
|
|
158
|
+
const alertLevel = determineAlertLevel(unusual);
|
|
159
|
+
const alertMessage = alertLevel === "none"
|
|
160
|
+
? `No unusual options activity detected for ${ticker}.`
|
|
161
|
+
: alertLevel === "high"
|
|
162
|
+
? `HIGH ALERT: ${unusual.length} unusual option flow(s) detected for ${ticker}. Possible pre-announcement positioning.`
|
|
163
|
+
: `${unusual.length} unusual option flow(s) detected for ${ticker} at ${alertLevel} alert level.`;
|
|
164
|
+
return {
|
|
165
|
+
scraped_at: isoNow(),
|
|
166
|
+
ticker,
|
|
167
|
+
symbol,
|
|
168
|
+
period_days: days,
|
|
169
|
+
threshold,
|
|
170
|
+
total_contracts: calls.length + puts.length,
|
|
171
|
+
calls,
|
|
172
|
+
puts,
|
|
173
|
+
unusual_activity: unusual,
|
|
174
|
+
summary: {
|
|
175
|
+
total_call_volume: totalCallVol,
|
|
176
|
+
total_put_volume: totalPutVol,
|
|
177
|
+
put_call_ratio: totalCallVol > 0
|
|
178
|
+
? Math.round((totalPutVol / totalCallVol) * 100) / 100
|
|
179
|
+
: 0,
|
|
180
|
+
total_call_oi: totalCallOi,
|
|
181
|
+
total_put_oi: totalPutOi,
|
|
182
|
+
avg_call_iv: avgCallIv,
|
|
183
|
+
avg_put_iv: avgPutIv,
|
|
184
|
+
iv_skew: Math.round((avgPutIv - avgCallIv) * 100) / 100,
|
|
185
|
+
nearest_expiry: nearestExpiry,
|
|
186
|
+
},
|
|
187
|
+
alert_level: alertLevel,
|
|
188
|
+
alert_message: alertMessage,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
// ── Test/sample data ─────────────────────────────────────────────
|
|
192
|
+
export function sampleData(ticker) {
|
|
193
|
+
const t = normalizeTicker(ticker || "BHP");
|
|
194
|
+
return {
|
|
195
|
+
scraped_at: isoNow(),
|
|
196
|
+
ticker: t,
|
|
197
|
+
symbol: `${t}.AX`,
|
|
198
|
+
period_days: 14,
|
|
199
|
+
threshold: 2.0,
|
|
200
|
+
total_contracts: 24,
|
|
201
|
+
calls: [
|
|
202
|
+
{ type: "call", strike: 44.00, expiry: "2026-03-20", last_price: 1.85, bid: 1.80, ask: 1.90, volume: 2450, open_interest: 380, implied_volatility: 0.42, in_the_money: true },
|
|
203
|
+
{ type: "call", strike: 45.00, expiry: "2026-03-20", last_price: 1.10, bid: 1.05, ask: 1.15, volume: 5200, open_interest: 620, implied_volatility: 0.48, in_the_money: false },
|
|
204
|
+
{ type: "call", strike: 46.00, expiry: "2026-03-20", last_price: 0.55, bid: 0.50, ask: 0.60, volume: 8100, open_interest: 450, implied_volatility: 0.55, in_the_money: false },
|
|
205
|
+
{ type: "call", strike: 48.00, expiry: "2026-04-17", last_price: 0.25, bid: 0.20, ask: 0.30, volume: 3200, open_interest: 180, implied_volatility: 0.62, in_the_money: false },
|
|
206
|
+
],
|
|
207
|
+
puts: [
|
|
208
|
+
{ type: "put", strike: 43.00, expiry: "2026-03-20", last_price: 0.65, bid: 0.60, ask: 0.70, volume: 1800, open_interest: 520, implied_volatility: 0.38, in_the_money: false },
|
|
209
|
+
{ type: "put", strike: 42.00, expiry: "2026-03-20", last_price: 0.35, bid: 0.30, ask: 0.40, volume: 900, open_interest: 340, implied_volatility: 0.36, in_the_money: false },
|
|
210
|
+
],
|
|
211
|
+
unusual_activity: [
|
|
212
|
+
{
|
|
213
|
+
contract_type: "call",
|
|
214
|
+
strike: 46.00,
|
|
215
|
+
expiry: "2026-03-20",
|
|
216
|
+
volume: 8100,
|
|
217
|
+
open_interest: 450,
|
|
218
|
+
volume_oi_ratio: 18.0,
|
|
219
|
+
implied_volatility: 0.55,
|
|
220
|
+
flag_reason: "Volume/OI ratio 18.0x exceeds 2.0x threshold",
|
|
221
|
+
signal_strength: "extreme",
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
contract_type: "call",
|
|
225
|
+
strike: 48.00,
|
|
226
|
+
expiry: "2026-04-17",
|
|
227
|
+
volume: 3200,
|
|
228
|
+
open_interest: 180,
|
|
229
|
+
volume_oi_ratio: 17.78,
|
|
230
|
+
implied_volatility: 0.62,
|
|
231
|
+
flag_reason: "Volume/OI ratio 17.8x exceeds 2.0x threshold",
|
|
232
|
+
signal_strength: "extreme",
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
contract_type: "call",
|
|
236
|
+
strike: 45.00,
|
|
237
|
+
expiry: "2026-03-20",
|
|
238
|
+
volume: 5200,
|
|
239
|
+
open_interest: 620,
|
|
240
|
+
volume_oi_ratio: 8.39,
|
|
241
|
+
implied_volatility: 0.48,
|
|
242
|
+
flag_reason: "Volume/OI ratio 8.4x exceeds 2.0x threshold",
|
|
243
|
+
signal_strength: "high",
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
contract_type: "call",
|
|
247
|
+
strike: 44.00,
|
|
248
|
+
expiry: "2026-03-20",
|
|
249
|
+
volume: 2450,
|
|
250
|
+
open_interest: 380,
|
|
251
|
+
volume_oi_ratio: 6.45,
|
|
252
|
+
implied_volatility: 0.42,
|
|
253
|
+
flag_reason: "Volume/OI ratio 6.4x exceeds 2.0x threshold",
|
|
254
|
+
signal_strength: "high",
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
summary: {
|
|
258
|
+
total_call_volume: 18950,
|
|
259
|
+
total_put_volume: 2700,
|
|
260
|
+
put_call_ratio: 0.14,
|
|
261
|
+
total_call_oi: 1630,
|
|
262
|
+
total_put_oi: 860,
|
|
263
|
+
avg_call_iv: 0.52,
|
|
264
|
+
avg_put_iv: 0.37,
|
|
265
|
+
iv_skew: -0.15,
|
|
266
|
+
nearest_expiry: "2026-03-20",
|
|
267
|
+
},
|
|
268
|
+
alert_level: "high",
|
|
269
|
+
alert_message: `HIGH ALERT: 4 unusual option flow(s) detected for ${t}. Possible pre-announcement positioning.`,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=asx-options-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asx-options-flow.js","sourceRoot":"","sources":["../../src/investigation-tools/asx-options-flow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* glassdoor-asx-analyzer.ts -- Glassdoor ASX Company Review Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes Glassdoor reviews for ASX-listed companies to detect
|
|
5
|
+
* sentiment spikes and morale shifts that may precede material news.
|
|
6
|
+
*
|
|
7
|
+
* Uses Google-indexed Glassdoor pages as Glassdoor blocks direct scraping.
|
|
8
|
+
* In live mode, searches for recent reviews via search engine indexing.
|
|
9
|
+
*
|
|
10
|
+
* DISCLAIMER:
|
|
11
|
+
* This tool is provided for research and educational purposes only.
|
|
12
|
+
* Users are solely responsible for ensuring compliance with all applicable
|
|
13
|
+
* laws, regulations, and website terms before using this tool.
|
|
14
|
+
* Glassdoor's Terms of Service restrict automated scraping. This tool uses
|
|
15
|
+
* only publicly indexed data from search engines.
|
|
16
|
+
*/
|
|
17
|
+
export interface GlassdoorReview {
|
|
18
|
+
date: string;
|
|
19
|
+
rating: number | null;
|
|
20
|
+
title: string;
|
|
21
|
+
pros: string;
|
|
22
|
+
cons: string;
|
|
23
|
+
sentiment_score: number;
|
|
24
|
+
sentiment_label: string;
|
|
25
|
+
pre_news_signals: string[];
|
|
26
|
+
url: string;
|
|
27
|
+
}
|
|
28
|
+
export interface MoraleTrend {
|
|
29
|
+
period: string;
|
|
30
|
+
avg_rating: number | null;
|
|
31
|
+
avg_sentiment: number;
|
|
32
|
+
review_count: number;
|
|
33
|
+
trend_direction: "improving" | "declining" | "stable";
|
|
34
|
+
}
|
|
35
|
+
export interface GlassdoorResult {
|
|
36
|
+
scraped_at: string;
|
|
37
|
+
company: string;
|
|
38
|
+
ticker: string;
|
|
39
|
+
period_days: number;
|
|
40
|
+
total_reviews: number;
|
|
41
|
+
reviews: GlassdoorReview[];
|
|
42
|
+
morale_trends: MoraleTrend[];
|
|
43
|
+
overall_sentiment: number;
|
|
44
|
+
overall_rating: number | null;
|
|
45
|
+
pre_news_signal_count: number;
|
|
46
|
+
sentiment_spike_detected: boolean;
|
|
47
|
+
summary: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function analyzeGlassdoor(opts: {
|
|
50
|
+
ticker: string;
|
|
51
|
+
days?: number;
|
|
52
|
+
minReviews?: number;
|
|
53
|
+
}): Promise<GlassdoorResult>;
|
|
54
|
+
export declare function sampleData(ticker: string): GlassdoorResult;
|
|
55
|
+
//# sourceMappingURL=glassdoor-asx-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glassdoor-asx-analyzer.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/glassdoor-asx-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAsCH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CACvD;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,EAAE,OAAO,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;CACjB;AAqDD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqF3B;AAID,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAwF1D"}
|