14 #ifndef TSA_INSTRUMENT__INCLUDED 15 #define TSA_INSTRUMENT__INCLUDED 19 #include "TSASupport.h" 20 #include "TSAMetrics.h" 21 #include "TSAMetrics2.h" 23 #include "TSAOrderManager.h" 24 #include "TSAIntraday.h" 25 #include "TSAPriceBar.h" 26 #include "TSAStrategyPtr.h" 31 class strategy_delegate;
69 friend class tsa::strategy_delegate;
86 bool m_includeExpired;
96 bool m_is_initialized;
98 bar_log* m_bar_log_ptr;
100 order_manager m_order_mgr;
101 strategy_delegate* m_strat_base_ptr;
103 bool m_is_stand_alone;
106 bool m_allow_zero_and_sub_zero_prices;
108 instrument_price_bar m_curr_price_bar;
109 instrument_price_bar m_prev_bar_price_bar;
110 date_time m_last_price_bar_update_timestamp;
113 bool m_is_scheduled_by_series;
114 bool m_is_time_master;
115 bool m_bar_duration_is_intraday;
116 bool m_undefined_values_allowed;
117 bool m_bMasterOHLCnotAvailable;
122 bool m_use_bid_ask_for_sim_market_orders;
125 void use_bid_ask_for_sim_market_orders(
bool flag);
127 bool use_bid_ask_for_sim_market_orders(
void)
const;
129 mutable enum class chart_mkt_order_price_type{
130 open, close, last, not_init
131 }m_chart_mkt_order_price_type = chart_mkt_order_price_type::not_init;
132 double m_chart_mkt_order_price;
134 double chart_mkt_order_price(
void)
const;
145 void set_next_bar(
const date_time&,
double o,
double h,
double l,
double c,
double v);
147 struct daily_equity {
149 double strategy_equity;
150 daily_equity(
const date& _d,
double _eq) : day(_d), strategy_equity(_eq) {}
152 std::vector<daily_equity> m_daily_equity;
154 std::vector<component*> m_components;
157 std::list<order*> m_pre_submit_orders;
158 void pre_submit_order(
order*);
159 void un_pre_submit_order(
order*);
161 void include_expired(
bool _ie) { m_includeExpired = _ie; }
162 bool include_expiry(
void)
const {
return m_includeExpired; }
164 void register_with_strategy();
167 std::ostream* m_verbose_stream_ptr;
169 void set_ohlc(
double,
double,
double,
double);
170 const order_manager* order_manager_ptr(
void)
const;
174 const std::vector<trade_info>& closed_trades(
void)
const;
183 const std::vector<trade_leg>& current_trade_legs(
void)
const;
186 void initialize(
void);
187 bool fetch_ohlc_data(
void);
189 size_t bar_count(
void)
const;
190 void notify_increment_bar(
void);
191 bool EvaluateInterval(
void);
192 void EvaluateOrderQueueBacktesting(
void);
194 void Do_PRE_OPEN(
void);
198 void Do_POST_CLOSE(
void);
199 void Do_POST_EVAL(
void);
200 void evaluate_order_queue_BAR(
void);
201 void evaluate_order_queue_POST_CLOSE(
void);
203 bool is_finalized(
void)
const;
205 virtual const date_time& metrics_source__begin_timestamp(
void)
const override;
206 virtual const date_time& metrics_source__end_timestamp(
void)
const override;
207 virtual bool is_contract(
void)
const override {
return true; }
208 virtual std::string metric_source_name(
void)
const override {
return name(); }
210 void verify_eval_not_started(
void)
const;
211 void verify_is_finalized(
void)
const;
212 void verify_reporting_enabled(
void)
const;
214 bool EvaluationHasStarted(
void)
const;
216 const date_time& prev_interval_timestamp(
void)
const;
217 const date_time& interval_timestamp(
void)
const;
218 void set_strategy_time(
const date_time&);
219 void interval_timestamp(
const date_time&);
220 void is_strategy_scheduler(
bool _b);
222 const date_time& bar_timestamp(
void)
const;
245 size_t id(
void)
const;
253 bool is_platform_driven(
void)
const;
261 bool is_live(
void)
const;
264 bool exception_on_backfill_orders(
void)
const;
366 const series_core& operator()(
size_t field_pos)
const;
374 const series_core& operator()(
const std::string& field_name)
const;
380 size_t field_count(
void)
const;
400 bool field_exists(
const std::string& field_name)
const;
409 size_t field_index(
const std::string& field_name)
const;
422 void verify_registered_with_strategy(
void)
const;
478 void negative_prices_ok(
bool neg_prices_ok);
484 bool negative_prices_ok(
void)
const;
491 double big_point(
void)
const;
509 void tick(
double min_tick,
double tick_value,
bool auto_round =
true);
515 double tick_size(
void)
const;
523 double tick_value(
void)
const;
534 double ticks(int64_t multiplier)
const;
561 void limit_fill_proviso(
double proviso);
567 double limit_fill_proviso(
void)
const;
578 void slippage(
double slip);
584 double slippage(
void)
const;
592 void commission(
double comm);
599 double commission(
void)
const;
615 bool costs_allocated_per_unit(
void)
const;
621 void SetInternalTradeLogDisabled(
void);
622 bool GetInternalTradeLogDisabled(
void)
const;
623 void SetAllocateSlippageAndCommissionPerUnit(
bool _bFlag);
866 order_ref buy_stop_limit_order(
quantity_t quantity,
double stop_price,
double price_limit);
886 order_ref sell_stop_limit_order(
quantity_t quantity,
double stop_price,
double limit_price);
939 void cancel_all_orders(
void);
960 void get_orders(std::vector<order_ref>& v,
bool active_only =
true)
const;
966 bool has_active_orders(
void)
const;
995 size_t order_count(
void)
const;
1002 size_t order_count_inclusive()
const;
1009 void submit_order(
order*);
1010 void init_order_properties(
order*);
1014 void reset_price(
identifier_t order_id,
double price,
double aux_price = (-1.0));
1022 const std::vector<transaction>& get_bar_transactions(
void)
const;
1043 POSITION::state position_state()
const;
1049 bool is_long(
void)
const;
1055 bool is_short(
void)
const;
1061 bool is_flat(
void)
const;
1089 size_t trade_leg_count(
void)
const;
1095 double trade_PL(
void)
const;
1102 size_t trade_bar_count(
void)
const;
1109 double trade_first_leg_entry_price(
void)
const;
1115 const date_time& trade_first_leg_entry_timestamp(
void)
const;
1131 double trade_most_favorable_price(
void)
const;
1134 double trade_point_change_since_entry(
void)
const;
1146 const transaction& get_most_recent_transaction(
void)
const;
1152 int64_t transact_count(
void);
1166 int64_t unit_count(
void);
1173 int64_t filled_order_count(
void);
1183 bool GetLastTradeWasOpen(
void)
const;
1184 double GetMaxAccountBalance(
double _start_balance)
const;
1185 double GetMinAccountBalance(
double _start_balance)
const;
1186 double _GetCumulativePL_DDN_Log(
void)
const;
1195 void allow_null_values(
bool flag);
1201 bool allow_null_values(
void)
const;
1203 const equity_metrics& get_equity_metrics(
void)
const;
1204 const order_manager& get_order_manager(
void)
const;
1206 order_log m_order_log;
1208 trade_log m_trade_log;
1209 drawdown_log m_drawdown_log;
1210 transaction_log m_transact_log;
1211 int m_report_fp_precision;
1214 mutable std::vector<order_ref> m_tmp_orders;
1230 const metrics& get_metrics(
void)
const;
1255 virtual void daily_cash_flow(
mem_table& mt)
const;
1256 void save_bar_report(
const os::path& dir);
1260 bool log_db_was_set(
void)
const;
1261 void write_reports(
const os::path&);
1262 void log(
log_type_t _eLogTypes,
bool _bOverwrite);
1263 void print_order_report(std::ostream&,
bool vertical,
bool with_borders);
1264 void print_bar_report(std::ostream&,
bool vertical,
bool with_borders);
1265 void print_transaction_report(std::ostream&,
bool vertical,
bool with_borders);
1266 void print_trade_report(std::ostream&,
bool vertical,
bool with_borders);
1267 void print_drawdown_report(std::ostream&,
bool vertical,
bool with_borders);
1269 void report_float_precision(
size_t _precision);
1270 void save_transaction_report(
const os::path& dir);
1271 void save_order_report(
const os::path& dir);
1272 void save_trade_report(
const os::path& dir);
1273 void save_drawdown_report(
const os::path& dir);
1274 void save_performance_report(
const os::path& path);
1277 metrics2 m_metrics2;
1278 int64_t transact_count_market(
void);
1279 int64_t transact_count_stop(
void);
1280 int64_t transact_count_limit(
void);
1281 void populate_metrics_object(metrics2&);
1283 double transact_price(
double defaultPrice = 0.0);
1286 int64_t transact_order_num(
void);
1287 bool transact_had_slippage(
void);
1290 bool transact_is_long(
void);
1291 bool transact_is_short(
void);
type
Order type.
Definition: TSAOrder.h:101
series< double > open
Built in series object corresponding to record field 'open'.
Definition: TSAInstrument.h:430
Utility class to manipulate file system paths. This class is intended to fulfil the requirements of t...
Definition: TSAOS.h:36
Class order is the library's internal order representation. Users are not intended to interact with t...
Definition: TSAOrder.h:49
Namespace for the 'Trading System API' library.
Definition: original1.TSA3Core.cpp:20
The value of the current drawdown.
Class for managing native timeseries database files. Extremely high speed data access.
Definition: TSADatabase.h:118
Base class for classes that can produce metrics.
Definition: TSAMetrics.h:44
perf_metric_type
Values that represent performance metric types.
Definition: TSATypeDef.h:216
series< double > price
Built in series object corresponding to record field 'price'.
Definition: TSAInstrument.h:450
strategy_state_type
Values that represent strategy state ts.
Definition: TSATypeDef.h:84
structure defining all the metric names. For example, you can pass metric::trade_count as metric_name...
Definition: TSATypeDef.h:297
series< double > last
Built in series object corresponding to record field 'last'.
Definition: TSAInstrument.h:448
Strategy performance metrics.
Definition: TSAMetrics.h:367
int64_t quantity_t
Definition: TSATypeDef.h:444
series< double > volume
Built in series object corresponding to record field 'volume'.
Definition: TSAInstrument.h:438
Parent class for 'in-stream adaptors'. in_stream object rely on adaptors for access to underlying dat...
Definition: TSAStreams.h:52
log_type_t
Log type enumeration. Multiple log types can be combined by using operator|.
Definition: TSATypeDef.h:424
variant objects can represent values of different types.
Definition: TSAVariant.h:140
Represents a reference to an internally managed order object. Working with class order directly is no...
Definition: TSAOrder.h:422
Represents a duration - the difference between two date_time values.
Definition: TSATime.h:945
cost_alloc_type
Transaction cost allocation enumeration.
Definition: TSATypeDef.h:418
series< double > close
Built in series object corresponding to record field 'close'.
Definition: TSAInstrument.h:436
_value_types_type
Data type enumeration used throughout the library. Intended to be used via type_t.
Definition: TSATypeDef.h:166
series< double > low
Built in series object corresponding to record field 'low'.
Definition: TSAInstrument.h:434
Parent class for many library classes.
Definition: TSATypeDef.h:462
Represents a transaction that occurred on an exchange or as part of a simulation when an order is fil...
Definition: TSATransaction.h:40
series< double > asksize
Built in series object corresponding to record field 'asksize'.
Definition: TSAInstrument.h:446
A date of the Gregorian calendar.
Definition: TSATime.h:119
series< double > high
Built in series object corresponding to record field 'high'.
Definition: TSAInstrument.h:432
series< double > value
Built in series object corresponding to record field 'value'.
Definition: TSAInstrument.h:452
trade_grouping
Trade aggregation types used by reporting functionality.
Definition: TSATypeDef.h:208
series< double > ask
Built in series object corresponding to record field 'ask'.
Definition: TSAInstrument.h:442
action
Order action.
Definition: TSAOrder.h:94
The strategy 'net profit' (after slippage + commission).
time_in_force
Time-in-force (TIF). By default all orders are placed as good-till-cancel (GTC) orders. See instrument::default_time_in_force(order::time_in_force).
Definition: TSAOrder.h:133
All trades.
Definition: TSATypeDef.h:211
series< double > bid
Built in series object corresponding to record field 'bid'.
Definition: TSAInstrument.h:440
static duration days(uint64_t)
Returns a duration equivalent to a given number of days.
Definition: TSATime.cpp:1402
Record stream class. Represents a standardised interface to all data sources. Instances rely on deleg...
Definition: TSAStreams.h:336
Class strategy represents a trading or investment strategy.
Definition: TSAStrategy.h:108
series< double > bidsize
Built in series object corresponding to record field 'bidsize'.
Definition: TSAInstrument.h:444
series< double > openint
Built in series object corresponding to record field 'openint'.
Definition: TSAInstrument.h:454
Class representing a gregorian-date and time-of-day combination. The time component has microsecond r...
Definition: TSATime.h:428
int64_t identifier_t
type for ID's
Definition: TSATypeDef.h:117
int64_t position_t
Definition: TSATypeDef.h:447
Class instrument represents a tradeable security such as a stock, option, futures contract...
Definition: TSAInstrument.h:64
Class mem_table represents a memory based table. mem_table objects can be used in strategies both for...
Definition: TSAMemTable.h:48