Update 更新文档
This commit is contained in:
90
cleaned_source_code/data_processing/DataQualityValidator.h
Normal file
90
cleaned_source_code/data_processing/DataQualityValidator.h
Normal file
@@ -0,0 +1,90 @@
|
||||
#ifndef DATA_QUALITY_VALIDATOR_H
|
||||
#define DATA_QUALITY_VALIDATOR_H
|
||||
#include <QObject>
|
||||
#include <QMap>
|
||||
#include <QSet>
|
||||
#include <QDateTime>
|
||||
#include <QMutex>
|
||||
#include <QTimer>
|
||||
#include "../common_structures/TradingStructures.h"
|
||||
struct DataQualityMetrics {
|
||||
qint64 totalPackets = 0;
|
||||
qint64 validPackets = 0;
|
||||
qint64 invalidPackets = 0;
|
||||
qint64 suspiciousPackets = 0;
|
||||
double validityRate = 0.0;
|
||||
QDateTime lastUpdate;
|
||||
void updateMetrics(bool isValid, bool isSuspicious = false) {
|
||||
totalPackets++;
|
||||
if (isValid) {
|
||||
validPackets++;
|
||||
} else {
|
||||
invalidPackets++;
|
||||
}
|
||||
if (isSuspicious) {
|
||||
suspiciousPackets++;
|
||||
}
|
||||
validityRate = totalPackets > 0 ? static_cast<double>(validPackets) / totalPackets : 0.0;
|
||||
lastUpdate = QDateTime::currentDateTime();
|
||||
}
|
||||
};
|
||||
struct ValidationRules {
|
||||
double maxPriceDeviation = 0.1;
|
||||
double minValidPrice = 0.01;
|
||||
double maxValidPrice = 1000000.0;
|
||||
qint64 minValidVolume = 1;
|
||||
qint64 maxValidVolume = 1000000000;
|
||||
int maxOrderBookDepth = 10;
|
||||
int maxTimestampDeviationMs = 5000;
|
||||
bool enableCrossMarketValidation = true;
|
||||
bool enableStatisticalOutlierDetection = true;
|
||||
bool isValid() const {
|
||||
return maxPriceDeviation > 0 && minValidPrice > 0 && maxValidPrice > minValidPrice;
|
||||
}
|
||||
};
|
||||
class DataQualityValidator : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
static DataQualityValidator* instance();
|
||||
void setValidationRules(const ValidationRules& rules);
|
||||
ValidationRules getValidationRules() const;
|
||||
bool validateQuoteData(const Trading::QuoteData& quote);
|
||||
bool validateOrderBook(const Trading::OrderBook& orderBook);
|
||||
bool validateOrder(const Trading::Order& order);
|
||||
bool validateTrade(const Trading::Trade& trade);
|
||||
bool validateDataPacket(const Trading::DataPacket& packet);
|
||||
DataQualityMetrics getQualityMetrics() const;
|
||||
void resetMetrics();
|
||||
void addAnomalyPattern(const QString& patternName, const QVariant& pattern);
|
||||
void removeAnomalyPattern(const QString& patternName);
|
||||
bool checkForAnomalies(const Trading::DataPacket& packet);
|
||||
void updatePriceStatistics(const QString& symbol, double price);
|
||||
void updateVolumeStatistics(const QString& symbol, qint64 volume);
|
||||
bool isStatisticalOutlier(const QString& symbol, double value, const QString& metric) const;
|
||||
signals:
|
||||
void dataValidationFailed(const Trading::DataPacket& packet, const QString& reason);
|
||||
void dataQualityAlert(const QString& symbol, const QString& alertType, const QString& message);
|
||||
void qualityMetricsUpdated(const DataQualityMetrics& metrics);
|
||||
void anomalyDetected(const Trading::DataPacket& packet, const QString& pattern);
|
||||
private:
|
||||
explicit DataQualityValidator(QObject *parent = nullptr);
|
||||
~DataQualityValidator();
|
||||
bool validateQuoteInternal(const Trading::QuoteData& quote);
|
||||
bool validateOrderBookInternal(const Trading::OrderBook& orderBook);
|
||||
bool validateOrderInternal(const Trading::Order& order);
|
||||
bool validateTradeInternal(const Trading::Trade& trade);
|
||||
void updateQualityMetrics(bool isValid, bool isSuspicious = false);
|
||||
void checkCrossMarketData(const Trading::DataPacket& packet);
|
||||
void performStatisticalAnalysis(const Trading::DataPacket& packet);
|
||||
ValidationRules m_validationRules;
|
||||
DataQualityMetrics m_qualityMetrics;
|
||||
QMap<QString, QList<double>> m_priceHistory;
|
||||
QMap<QString, QList<qint64>> m_volumeHistory;
|
||||
QMap<QString, QMap<QString, double>> m_statisticalModels;
|
||||
QMap<QString, QVariant> m_anomalyPatterns;
|
||||
QTimer* m_metricsUpdateTimer;
|
||||
QTimer* m_statisticalUpdateTimer;
|
||||
mutable QMutex m_mutex;
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user