Trading System API  3.0
Library for Simulating and Deploying Trading and Investment Strategies
TSAIntraday.h
1 /* ===================================================================
2 *
3 * T R A D I N G S Y S T E M A P I ™
4 * Copyright © 1999 - 2014 by Peter Ritter ( TradingSystemAPI.com )
5 * A L L R I G H T S R E S E R V E D
6 *
7 * Consult your license regarding permissions and restrictions.
8 * You may obtain a copy of the License at:
9 * http://www.TradingSystemAPI.com/licenses/LICENSE-TSAPI-3.0.html
10 *
11 * ====================================================================
12 */
13 
14 #ifndef TSA_INTRADAY__INCLUDED
15 #define TSA_INTRADAY__INCLUDED
16 
17 #include <ctime>
18 
19 #include "TSATypeDef.h"
20 #include "TSASupport.h"
21 #include "TSAVariant.h"
22 #include "TSATime.h"
23 #include "TSATypeDef.h"
24 #include "TSASeriesTemplate.h"
25 #include "TSAHolidayGroup.h"
26 
27 namespace tsa {
28  class date_time;
29  class ExchangeHolidayList;
30 
35  /*
36  ** ====================================================
37  ** >>> class time_point_stream <<<
38  ** ====================================================
39  */
40 
45  class dll_export time_point_stream : public object {
46  public:
47  virtual uint64_t session_start_usec(void) = 0;
48 
55  virtual date_time next_timestamp(const date_time& current_timestamp) = 0;
56  };
57 
58  /*
59  ** ====================================================
60  ** >>> class time_point_stream_daily <<<
61  ** ====================================================
62  */
63 
69  class dll_export time_point_stream_daily : public time_point_stream {
70  tsa_declare_testable;
71  public:
72  virtual uint64_t session_start_usec(void){ return 0; }
73  public:
74  virtual date_time next_timestamp(const date_time& currentTimestamp) override;
75  };
76 
77  /*
78  ** ====================================================
79  ** >>> class platform_sequence <<<
80  ** ====================================================
81  */
82 
86  class dll_export time_point_stream__platform : public time_point_stream {
87  tsa_declare_testable;
88  date_time m_next_timestamp;
89  public:
90  virtual uint64_t session_start_usec(void);
91  void set_next_timestamp(const date_time& _dt);
92  public:
93  virtual date_time next_timestamp(const date_time& currentTimestamp) override;
94  };
95 
96  /*
97  ** ====================================================
98  ** >>> class auto_time_point_stream <<<
99  ** ====================================================
100  */
101  // Internal
102  class dll_export auto_time_point_stream : public time_point_stream {
103  tsa_declare_testable;
104  friend class strategy_delegate;
105  friend class instrument;
106  private:
107  int64_t m_session_start_usec;
108  int64_t m_session_end_usec;
109  int64_t m_interval_usec;
110  duration m_interval_duration;
111  bool m_start_at_end_of_first_ival;
112  const holiday_list* m_holiday_list_ptr;
113  public:
115  auto_time_point_stream(void);
116  virtual ~auto_time_point_stream(void);
117  public:
119  void session(const std::string& start_hhmm, const std::string& end_hhmm);
121  void holidays(const holiday_list&);
122  /* @brief Sets the interval length by setting the @a interval_type and
123  @a interval_multiplier. For example, a 5 minute bar can be defined
124  by setting the @a interval_type to tsa::minute and the @a interval_multiplier to 5.
125  */
126  void duration(tsa::duration);
128  tsa::duration duration(void) const;
129  void SetStartAtEndOfFirstInterval(bool flag);
130  private:
131  void next(date_time&, holiday_list&);
132  public:
133  virtual uint64_t session_start_usec(void){ return m_session_start_usec; }
134  virtual date_time next_timestamp(const date_time& currentTimestamp) override;
135  public:
136  unsigned session_start_hhmm(void) const;
137  unsigned session_end_hhmm(void) const;
138  };
139 
141 
143  // Internal
144  enum auto_schedule_ival_type {
145  hour, // strategy time_point is incremented by given number of @a hours
146  minute, // strategy time_point is incremented by given number of @a minutes
147  second, // strategy time_point is incremented by given number of @a seconds
148  millisecond // strategy time_point is incremented by given number of @a milliseconds
149  };
150 
151  // internal
152  class dll_export sequence_intra_OLD : public time_point_stream {
153  tsa_declare_testable;
154  friend class strategy_delegate;
155  friend class instrument;
156  private:
157  unsigned m_nSessionStartMilSec;
158  unsigned m_nSessionEndMilSec;
159  unsigned m_nIntervalMilSec;
160  bool m_bStartAtEndOfFirstInterval;
161  holiday_list m_holidayList;
162  public:
163  sequence_intra_OLD(void);
164  virtual ~sequence_intra_OLD(void);
165  public:
167  void session_start(
168  unsigned HH,
169  unsigned MM,
170  unsigned SS = 0,
171  unsigned MMM = 0
172  );
175  void session_end(
176  unsigned HH,
177  unsigned MM,
178  unsigned SS = 0,
179  unsigned MMM = 0
180  );
185  void interval(auto_schedule_ival_type interval_type, size_t interval_multiplier);
187  unsigned GetIntervalInMilliSecs(void) const;
188  void SetStartAtEndOfFirstInterval(bool flag);
189  private:
190  //returns millisecs since midnight
191  virtual uint64_t session_start_usec(void){ return (uint64_t)GetStartTimeInMilliSecs() * 1000; }
192  unsigned GetStartTimeInMilliSecs(void) const;
193  //returns millisecs since midnight
194  unsigned GetEndTimeInMilliSecs(void) const;
195  void SetParameters(unsigned nStartMillisecs, unsigned nEndMillisecs,
196  unsigned nIntervalMillisecs, bool startAtEndOfFirstInterval);
197  void IncrementToNextInterval(date_time& _time, holiday_list&);
198  public:
199  virtual date_time next_timestamp(const date_time& currentTimestamp) override;
200  public:
201  unsigned GetStartDateTime(void) const; //hhmmssmmm
202  unsigned GetEndDateTime(void) const; //hhmmssmmm
203  };
204 } //tsa
205 
206 #endif
Namespace for the &#39;Trading System API&#39; library.
Definition: original1.TSA3Core.cpp:20
A platform time point stream.
Definition: TSAIntraday.h:86
Represents a duration - the difference between two date_time values.
Definition: TSATime.h:945
Parent class for many library classes.
Definition: TSATypeDef.h:462
Class to dynamically generate daily intervals for strategy scheduling purposes. Instances should be d...
Definition: TSAIntraday.h:69
Class representing a gregorian-date and time-of-day combination. The time component has microsecond r...
Definition: TSATime.h:428
Class instrument represents a tradeable security such as a stock, option, futures contract...
Definition: TSAInstrument.h:64
Parent class to classes generating a strategy scheduling sequences. (see strategy::schedule_with()) ...
Definition: TSAIntraday.h:45