wip
This commit is contained in:
@@ -3059,30 +3059,37 @@ class ChartManager {
|
||||
|
||||
let targetPrice = currentPrice;
|
||||
|
||||
// CRITICAL FIX: Check if price_delta is normalized (< 1.0) or real price change
|
||||
if (trendVector.price_delta !== undefined && trendVector.price_delta !== null) {
|
||||
const priceDelta = parseFloat(trendVector.price_delta);
|
||||
|
||||
// If price_delta is very small (< 1.0), it's likely normalized - scale it
|
||||
if (Math.abs(priceDelta) < 1.0) {
|
||||
// Normalized value - treat as percentage of current price
|
||||
targetPrice = currentPrice * (1 + priceDelta);
|
||||
// CRITICAL FIX: Use calculated_direction and calculated_steepness from trend_vector
|
||||
// The price_delta in trend_vector is the pivot range, not the predicted change
|
||||
// We should use direction and steepness to estimate the trend
|
||||
const direction = parseFloat(trendVector.calculated_direction) || 0; // -1, 0, or 1
|
||||
const steepness = parseFloat(trendVector.calculated_steepness) || 0;
|
||||
|
||||
// Steepness is in price units, but we need to scale it reasonably
|
||||
// If steepness is > 100, it's likely in absolute price units (too large)
|
||||
// Scale it down to a reasonable percentage move
|
||||
let priceChange = 0;
|
||||
|
||||
if (steepness > 0) {
|
||||
// If steepness is large (> 10), treat it as absolute price change but cap it
|
||||
if (steepness > 10) {
|
||||
// Cap at 2% of current price
|
||||
const maxChange = 0.02 * currentPrice;
|
||||
priceChange = Math.min(steepness, maxChange) * direction;
|
||||
} else {
|
||||
// Real price delta - add directly
|
||||
targetPrice = currentPrice + priceDelta;
|
||||
// Small steepness - use as percentage
|
||||
priceChange = (steepness / 100) * currentPrice * direction;
|
||||
}
|
||||
} else {
|
||||
// Fallback: Use direction and steepness
|
||||
const direction = trendVector.direction === 'up' ? 1 :
|
||||
(trendVector.direction === 'down' ? -1 : 0);
|
||||
const steepness = parseFloat(trendVector.steepness) || 0; // 0 to 1
|
||||
|
||||
// Estimate price change based on steepness (max 1% move per projection period)
|
||||
const maxChange = 0.01 * currentPrice;
|
||||
const projectedChange = maxChange * steepness * direction;
|
||||
targetPrice = currentPrice + projectedChange;
|
||||
// Fallback: Use angle if available
|
||||
const angle = parseFloat(trendVector.calculated_angle) || 0;
|
||||
// Angle is in radians, convert to price change
|
||||
// Small angle = small change, large angle = large change
|
||||
priceChange = Math.tan(angle) * currentPrice * 0.01; // Scale down
|
||||
}
|
||||
|
||||
targetPrice = currentPrice + priceChange;
|
||||
|
||||
// Sanity check: Don't let target price go to 0 or negative
|
||||
if (targetPrice <= 0 || !isFinite(targetPrice)) {
|
||||
console.warn('Invalid target price calculated:', targetPrice, 'using current price instead');
|
||||
|
||||
Reference in New Issue
Block a user