more fixes
This commit is contained in:
parent
ab7ef2b678
commit
4c2220d148
5 changed files with 138 additions and 43 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue