more fixes

This commit is contained in:
Bojan Kucera 2025-06-04 18:37:26 -04:00
parent ab7ef2b678
commit 4c2220d148
5 changed files with 138 additions and 43 deletions

View file

@ -208,14 +208,13 @@ export function identifyMarketRegime(
const recentData = ohlcv.slice(-lookbackPeriod);
const prices = recentData.map(candle => candle.close);
const volumes = recentData.map(candle => candle.volume);
// returns and volatility
// returns and volatility
const returns = [];
for (let i = 1; i < prices.length; i++) {
returns.push((prices[i] - prices[i - 1]) / prices[i - 1]);
}
const volatility = Volatility(returns);
const volatility = calculateVolatility(returns);
const averageVolume = volumes.reduce((sum, vol) => sum + vol, 0) / volumes.length;
// Trend analysis
@ -319,11 +318,10 @@ export function IntradayPatterns(
for (let hour = 0; hour < 24; hour++) {
const data = hourlyData[hour];
hourlyReturns[hour] = data.returns.length > 0 ?
hourlyReturns[hour] = data.returns.length > 0 ?
data.returns.reduce((sum, ret) => sum + ret, 0) / data.returns.length : 0;
hourlyVolatility[hour] = Volatility(data.returns);
hourlyVolatility[hour] = calculateVolatility(data.returns);
hourlyVolume[hour] = data.volumes.length > 0 ?
data.volumes.reduce((sum, vol) => sum + vol, 0) / data.volumes.length : 0;
@ -374,21 +372,20 @@ export function PriceDiscovery(
returns1.push((prices1[i] - prices1[i - 1]) / prices1[i - 1]);
returns2.push((prices2[i] - prices2[i - 1]) / prices2[i - 1]);
}
// correlations with lags
const correlation0 = Correlation(returns1, returns2);
// correlations with lags
const correlation0 = calculateCorrelation(returns1, returns2);
const correlation1 = returns1.length > 1 ?
Correlation(returns1.slice(1), returns2.slice(0, -1)) : 0;
calculateCorrelation(returns1.slice(1), returns2.slice(0, -1)) : 0;
const correlationMinus1 = returns1.length > 1 ?
Correlation(returns1.slice(0, -1), returns2.slice(1)) : 0;
calculateCorrelation(returns1.slice(0, -1), returns2.slice(1)) : 0;
// Price lead-lag (simplified)
const priceLeadLag = correlation1 - correlationMinus1;
// Information shares (simplified Hasbrouck methodology)
const variance1 = Variance(returns1);
const variance2 = Variance(returns2);
const covariance = Covariance(returns1, returns2);
const variance1 = calculateVariance(returns1);
const variance2 = calculateVariance(returns2);
const covariance = calculateCovariance(returns1, returns2);
const totalVariance = variance1 + variance2 + 2 * covariance;
const informationShare1 = totalVariance > 0 ? (variance1 + covariance) / totalVariance : 0.5;
@ -436,14 +433,13 @@ export function MarketStress(
returns.push((recentData[i].close - recentData[i - 1].close) / recentData[i - 1].close);
volumes.push(recentData[i].volume);
}
// Volatility stress
const volatility = Volatility(returns);
// Volatility stress
const volatility = calculateVolatility(returns);
const volatilityStress = Math.min(1, volatility / 0.05); // Normalize to 5% daily vol
// Liquidity stress (volume-based)
const averageVolume = volumes.reduce((sum, vol) => sum + vol, 0) / volumes.length;
const volumeVariability = Volatility(volumes.map(vol => vol / averageVolume));
const volumeVariability = calculateVolatility(volumes.map(vol => vol / averageVolume));
const liquidityStress = Math.min(1, volumeVariability);
// Correlation stress (simplified - would need multiple assets)
@ -542,7 +538,7 @@ export function ImplementationShortfall(
// Helper functions
function Volatility(returns: number[]): number {
function calculateVolatility(returns: number[]): number {
if (returns.length < 2) return 0;
const mean = returns.reduce((sum, ret) => sum + ret, 0) / returns.length;
@ -551,7 +547,7 @@ function Volatility(returns: number[]): number {
return Math.sqrt(variance);
}
function Correlation(x: number[], y: number[]): number {
function calculateCorrelation(x: number[], y: number[]): number {
if (x.length !== y.length || x.length < 2) return 0;
const n = x.length;