35761-vm/api/alerts.php
Flatlogic Bot a824cabd7e v.13
2025-11-15 10:10:41 +00:00

76 lines
2.6 KiB
PHP

<?php
header('Content-Type: application/json');
require_once __DIR__ . '/../db/config.php';
// --- Configuration ---
$symbol = $_GET['symbol'] ?? 'BTCUSDT';
$time_window_minutes = 30;
$crash_threshold = -20.0; // -20%
$pump_threshold = 100.0; // +100%
// --- Response Structure ---
$response = [
'status' => 'Nominal',
'symbol' => $symbol,
'change_percent' => 0,
'details' => 'No significant price change detected.'
];
try {
$pdo = db();
// 1. Get the most recent price
$stmt_latest = $pdo->prepare("SELECT price FROM price_history WHERE symbol = :symbol ORDER BY timestamp DESC LIMIT 1");
$stmt_latest->execute([':symbol' => $symbol]);
$latest_price_row = $stmt_latest->fetch(PDO::FETCH_ASSOC);
if (!$latest_price_row) {
$response['details'] = 'No recent price data available for this symbol.';
echo json_encode($response);
exit;
}
$latest_price = $latest_price_row['price'];
// 2. Get the oldest price from the 30-minute window
$stmt_oldest = $pdo->prepare(
"SELECT price FROM price_history
WHERE symbol = :symbol AND timestamp >= NOW() - INTERVAL :minutes MINUTE
ORDER BY timestamp ASC LIMIT 1"
);
$stmt_oldest->execute([':symbol' => $symbol, ':minutes' => $time_window_minutes]);
$oldest_price_row = $stmt_oldest->fetch(PDO::FETCH_ASSOC);
if (!$oldest_price_row) {
$response['details'] = 'Not enough historical data in the last 30 minutes to calculate change.';
echo json_encode($response);
exit;
}
$oldest_price = $oldest_price_row['price'];
// 3. Calculate percentage change
if ($oldest_price > 0) {
$change_percent = (($latest_price - $oldest_price) / $oldest_price) * 100;
$response['change_percent'] = round($change_percent, 2);
} else {
$change_percent = 0;
}
// 4. Determine status
if ($change_percent <= $crash_threshold) {
$response['status'] = 'Crash Alert';
$response['details'] = "Price dropped by " . $response['change_percent'] . "% in the last $time_window_minutes minutes.";
} elseif ($change_percent >= $pump_threshold) {
$response['status'] = 'Pump Alert';
$response['details'] = "Price surged by " . $response['change_percent'] . "% in the last $time_window_minutes minutes.";
} else {
$response['details'] = "Price change of " . $response['change_percent'] . "% is within normal limits.";
}
} catch (PDOException $e) {
http_response_code(500);
$response['status'] = 'Error';
$response['details'] = 'Database error: ' . $e->getMessage();
}
echo json_encode($response);