-
Notifications
You must be signed in to change notification settings - Fork 163
/
Copy pathCrossing.h
89 lines (77 loc) · 2.81 KB
/
Crossing.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/************************************************************************
* Copyright(c) 2014, One Unified. All rights reserved. *
* email: [email protected] *
* *
* This file is provided as is WITHOUT ANY WARRANTY *
* without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
* This software may not be used nor distributed without proper license *
* agreement. *
* *
* See the file LICENSE.txt for redistribution information. *
************************************************************************/
// Started 2014/02/22
#pragma once
namespace ou {
namespace tf { // TradeFrame
template<typename T>
class Crossing {
public:
enum enumCrossing { EUnknown, ELT, EGT, ELTX, EGTX }; // Less Than 0, Greater Than 0, X = crossing detected
Crossing( void );
Crossing( T val, T hysterisis = 0 ); // set crossing to something other than zero
Crossing( const Crossing& rhs );
~Crossing( void );
enumCrossing State( void ) const { return m_state; }
enumCrossing State( T val );
enumCrossing State( T val, T cross ); // cross is new crossing level
protected:
private:
enumCrossing m_state;
T m_hysterisis; // not used yet
T m_cross;
};
template<typename T>
Crossing<T>::Crossing(void): m_state( EUnknown ), m_cross( 0 ), m_hysterisis( 0 ) {
}
template<typename T>
Crossing<T>::Crossing( T cross, T hysterisis ): m_state( EUnknown ), m_cross( cross ), m_hysterisis( hysterisis ) {
}
template<typename T>
Crossing<T>::Crossing( const Crossing& rhs ): m_state( rhs.m_state ), m_cross( rhs.m_cross ), m_hysterisis( rhs.m_hysterisis ) {
}
template<typename T>
Crossing<T>::~Crossing(void) {
}
template<typename T>
typename Crossing<T>::enumCrossing Crossing<T>::State( T val, T cross ) {
m_cross = cross;
return State( val );
}
template<typename T>
typename Crossing<T>::enumCrossing Crossing<T>::State( T val ) {
switch ( m_state ) {
case EUnknown:
if ( m_cross < val ) m_state = EGT;
if ( m_cross > val ) m_state = ELT;
break;
case ELT:
if ( m_cross < val ) m_state = EGTX;
break;
case EGT:
if ( m_cross > val ) m_state = ELTX;
break;
case ELTX:
if ( m_cross < val ) m_state = EGTX;
else m_state = ELT;
break;
case EGTX:
if ( m_cross > val ) m_state = ELTX;
else m_state = EGT;
break;
}
return m_state;
}
} // namespace tf
} // ou