You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
4.8 KiB
239 lines
4.8 KiB
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** |
|
* Qwt Widget Library |
|
* Copyright (C) 1997 Josef Wilgen |
|
* Copyright (C) 2002 Uwe Rathmann |
|
* |
|
* This library is free software; you can redistribute it and/or |
|
* modify it under the terms of the Qwt License, Version 1.0 |
|
*****************************************************************************/ |
|
|
|
#ifndef QWT_SAMPLES_H |
|
#define QWT_SAMPLES_H 1 |
|
|
|
#include "qwt_global.h" |
|
#include "qwt_interval.h" |
|
#include <qvector.h> |
|
#include <qrect.h> |
|
|
|
//! \brief A sample of the types (x1-x2, y) or (x, y1-y2) |
|
class QWT_EXPORT QwtIntervalSample |
|
{ |
|
public: |
|
QwtIntervalSample(); |
|
QwtIntervalSample( double, const QwtInterval & ); |
|
QwtIntervalSample( double value, double min, double max ); |
|
|
|
bool operator==( const QwtIntervalSample & ) const; |
|
bool operator!=( const QwtIntervalSample & ) const; |
|
|
|
//! Value |
|
double value; |
|
|
|
//! Interval |
|
QwtInterval interval; |
|
}; |
|
|
|
/*! |
|
Constructor |
|
The value is set to 0.0, the interval is invalid |
|
*/ |
|
inline QwtIntervalSample::QwtIntervalSample(): |
|
value( 0.0 ) |
|
{ |
|
} |
|
|
|
//! Constructor |
|
inline QwtIntervalSample::QwtIntervalSample( |
|
double v, const QwtInterval &intv ): |
|
value( v ), |
|
interval( intv ) |
|
{ |
|
} |
|
|
|
//! Constructor |
|
inline QwtIntervalSample::QwtIntervalSample( |
|
double v, double min, double max ): |
|
value( v ), |
|
interval( min, max ) |
|
{ |
|
} |
|
|
|
//! Compare operator |
|
inline bool QwtIntervalSample::operator==( |
|
const QwtIntervalSample &other ) const |
|
{ |
|
return value == other.value && interval == other.interval; |
|
} |
|
|
|
//! Compare operator |
|
inline bool QwtIntervalSample::operator!=( |
|
const QwtIntervalSample &other ) const |
|
{ |
|
return !( *this == other ); |
|
} |
|
|
|
//! \brief A sample of the types (x1...xn, y) or (x, y1..yn) |
|
class QWT_EXPORT QwtSetSample |
|
{ |
|
public: |
|
QwtSetSample(); |
|
QwtSetSample( double, const QVector<double> & = QVector<double>() ); |
|
|
|
bool operator==( const QwtSetSample &other ) const; |
|
bool operator!=( const QwtSetSample &other ) const; |
|
|
|
double added() const; |
|
|
|
//! value |
|
double value; |
|
|
|
//! Vector of values associated to value |
|
QVector<double> set; |
|
}; |
|
|
|
/*! |
|
Constructor |
|
The value is set to 0.0 |
|
*/ |
|
inline QwtSetSample::QwtSetSample(): |
|
value( 0.0 ) |
|
{ |
|
} |
|
|
|
/*! |
|
Constructor |
|
|
|
\param v Value |
|
\param s Set of values |
|
*/ |
|
inline QwtSetSample::QwtSetSample( double v, const QVector< double > &s ): |
|
value( v ), |
|
set( s ) |
|
{ |
|
} |
|
|
|
//! Compare operator |
|
inline bool QwtSetSample::operator==( const QwtSetSample &other ) const |
|
{ |
|
return value == other.value && set == other.set; |
|
} |
|
|
|
//! Compare operator |
|
inline bool QwtSetSample::operator!=( const QwtSetSample &other ) const |
|
{ |
|
return !( *this == other ); |
|
} |
|
|
|
//! \return All values of the set added |
|
inline double QwtSetSample::added() const |
|
{ |
|
double y = 0.0; |
|
for ( int i = 0; i < set.size(); i++ ) |
|
y += set[i]; |
|
|
|
return y; |
|
} |
|
|
|
/*! |
|
\brief Open-High-Low-Close sample used in financial charts |
|
|
|
In financial charts the movement of a price in a time interval is often |
|
represented by the opening/closing prices and the lowest/highest prices |
|
in this interval. |
|
|
|
\sa QwtTradingChartData |
|
*/ |
|
class QWT_EXPORT QwtOHLCSample |
|
{ |
|
public: |
|
QwtOHLCSample( double time = 0.0, |
|
double open = 0.0, double high = 0.0, |
|
double low = 0.0, double close = 0.0 ); |
|
|
|
QwtInterval boundingInterval() const; |
|
|
|
bool isValid() const; |
|
|
|
/*! |
|
Time of the sample, usually a number representing |
|
a specific interval - like a day. |
|
*/ |
|
double time; |
|
|
|
//! Opening price |
|
double open; |
|
|
|
//! Highest price |
|
double high; |
|
|
|
//! Lowest price |
|
double low; |
|
|
|
//! Closing price |
|
double close; |
|
}; |
|
|
|
|
|
/*! |
|
Constructor |
|
|
|
\param t Time value |
|
\param o Open value |
|
\param h High value |
|
\param l Low value |
|
\param c Close value |
|
*/ |
|
inline QwtOHLCSample::QwtOHLCSample( double t, |
|
double o, double h, double l, double c ): |
|
time( t ), |
|
open( o ), |
|
high( h ), |
|
low( l ), |
|
close( c ) |
|
{ |
|
} |
|
|
|
/*! |
|
\brief Check if a sample is valid |
|
|
|
A sample is valid, when all of the following checks are true: |
|
|
|
- low <= high |
|
- low <= open <= high |
|
- low <= close <= high |
|
|
|
\return True, when the sample is valid |
|
*/ |
|
inline bool QwtOHLCSample::isValid() const |
|
{ |
|
return ( low <= high ) |
|
&& ( open >= low ) |
|
&& ( open <= high ) |
|
&& ( close >= low ) |
|
&& ( close <= high ); |
|
} |
|
|
|
/*! |
|
\brief Calculate the bounding interval of the OHLC values |
|
|
|
For valid samples the limits of this interval are always low/high. |
|
|
|
\return Bounding interval |
|
\sa isValid() |
|
*/ |
|
inline QwtInterval QwtOHLCSample::boundingInterval() const |
|
{ |
|
double minY = open; |
|
minY = qMin( minY, high ); |
|
minY = qMin( minY, low ); |
|
minY = qMin( minY, close ); |
|
|
|
double maxY = open; |
|
maxY = qMax( maxY, high ); |
|
maxY = qMax( maxY, low ); |
|
maxY = qMax( maxY, close ); |
|
|
|
return QwtInterval( minY, maxY ); |
|
} |
|
|
|
#endif
|
|
|