BBSTRADER 2.4.0
Loading...
Searching...
No Matches
metatrader.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
8#include <pybind11/chrono.h>
9#include <pybind11/numpy.h>
10#include <pybind11/pybind11.h>
11
12#include <cstdint>
13#include <functional>
14#include <optional>
15#include <string>
16#include <tuple>
17#include <vector>
18
19#include "bbstrader/objects.hpp"
20
21namespace py = pybind11;
22
24namespace MT5 {
25
27using str = const std::string;
28
30using VersionInfo = std::tuple<int32_t, int32_t, std::string>;
31
33using LastErrorResult = std::tuple<int32_t, std::string>;
34
36using DealsData = std::optional<std::vector<TradeDeal>>;
37
39using SymbolsData = std::optional<std::vector<SymbolInfo>>;
40
42using BookData = std::optional<std::vector<BookInfo>>;
43
45using OrdersData = std::optional<std::vector<TradeOrder>>;
46
48using PositionsData = std::optional<std::vector<TradePosition>>;
49
51using RateInfoType = std::optional<py::array_t<RateInfo>>;
52
54using TickInfoType = std::optional<py::array_t<TickInfo>>;
55
57using DateTime = std::chrono::system_clock::time_point;
58
59// Function Type Definitions (Callbacks/Handlers)
60
62using InitializeAuto = std::function<bool()>;
63
65using InitializeWithPath = std::function<bool(str&)>;
66
68using InitializeFull = std::function<bool(str&, uint64_t, str&, str&, uint32_t, bool)>;
69
71using Login = std::function<bool(uint64_t, str&, str&, uint32_t)>;
72
74using Shutdown = std::function<void()>;
75
77using GetVersion = std::function<std::optional<VersionInfo>()>;
78
80using GetLastError = std::function<std::optional<LastErrorResult>()>;
81
83using GetTerminalInfo = std::function<std::optional<TerminalInfo>()>;
84
86using GetAccountInfo = std::function<std::optional<AccountInfo>()>;
87
89using GetSymbolInfo = std::function<std::optional<SymbolInfo>(str&)>;
90
92using GetTickInfo = std::function<std::optional<TickInfo>(str&)>;
93
95using GetTotalSymbols = std::function<std::optional<int32_t>()>;
96
98using GetSymbolsAll = std::function<SymbolsData()>;
99
101using SelectSymbol = std::function<bool(str&, bool)>;
102
104using GetSymbolsByGroup = std::function<SymbolsData(str&)>;
105
107using SubscribeBook = std::function<bool(str&)>;
108
110using UnsubscribeBook = std::function<bool(str&)>;
111
113using GetBookInfo = std::function<BookData(str&)>;
114
115// Rates & Ticks Handlers
116
118using GetRatesByDate = std::function<RateInfoType(str&, int32_t, int64_t, int32_t)>;
119
121using GetRatesByPos = std::function<RateInfoType(str&, int32_t, int32_t, int32_t)>;
122
124using GetRatesByRange = std::function<RateInfoType(str&, int32_t, int64_t, int64_t)>;
125
127using GetTicksByDate = std::function<TickInfoType(str&, int64_t, int32_t, int32_t)>;
128
130using GetTicksByRange = std::function<TickInfoType(str&, int64_t, int64_t, int32_t)>;
131
135
137using GetOrdersAll = std::function<OrdersData()>;
138
140using GetOrdersBySymbol = std::function<OrdersData(str&)>;
141
143using GetOrdersByGroup = std::function<OrdersData(str&)>;
144
146using GetOrderByTicket = std::function<std::optional<TradeOrder>(uint64_t)>;
147
149using GetTotalOrders = std::function<std::optional<int32_t>()>;
151
155
157using GetPositionsAll = std::function<PositionsData()>;
158
160using GetPositionsBySymbol = std::function<PositionsData(str&)>;
161
163using GetPositionsByGroup = std::function<PositionsData(str&)>;
164
166using GetPositionByTicket = std::function<std::optional<TradePosition>(uint64_t)>;
167
169using GetTotalPositions = std::function<std::optional<int32_t>()>;
170
172
173// Trading Handlers
174
176using CalculateMargin = std::function<std::optional<double>(int32_t, str&, double, double)>;
177
179using CalculateProfit = std::function<std::optional<double>(int32_t, str&, double, double, double)>;
180
182using CheckOrder = std::function<std::optional<OrderCheckResult>(const TradeRequest&)>;
183
185using SendOrder = std::function<std::optional<OrderSentResult>(const TradeRequest&)>;
186
187// History Handlers
188
192
194using GetHistoryOrdersByRange = std::function<OrdersData(int64_t, int64_t)>;
195
197using GetHistoryOrdersByGroup = std::function<OrdersData(int64_t, int64_t, str&)>;
198
200using GetHistoryOrderByTicket = std::function<std::optional<TradeOrder>(uint64_t)>;
201
203using GetHistoryOrdersByPosId = std::function<OrdersData(uint64_t)>;
204
206using GetHistoryOrdersTotal = std::function<std::optional<int32_t>(int64_t, int64_t)>;
207
209using GetHistoryDealsByRange = std::function<DealsData(int64_t, int64_t)>;
210
212using GetHistoryDealsByGroup = std::function<DealsData(int64_t, int64_t, str&)>;
213
215using GetHistoryDealsByTicket = std::function<DealsData(uint64_t)>;
216
218using GetHistoryDealsByPosId = std::function<DealsData(uint64_t)>;
219
221using GetHistoryDealsTotal = std::function<std::optional<int32_t>(int64_t, int64_t)>;
223
229 public:
232 struct Handlers {
233 // System
243
244 // Symbols
250
251 // Market Depth
255
256 // Rates & Ticks
263
264 // Active Orders
270
271 // Active Positions
277
278 // Trading
283
284 // History Orders
290
291 // History Deals
297 };
298
301 MetaTraderClient(const MetaTraderClient&) = delete;
302 MetaTraderClient& operator=(const MetaTraderClient&) = delete;
303
305 virtual ~MetaTraderClient() = default;
306
309 explicit MetaTraderClient(Handlers handlers) : this_handlers(std::move(handlers)) {}
310
311 // System Methods
312
315 [[nodiscard]] virtual auto initialize() -> bool {
316 return this_handlers.init_auto ? this_handlers.init_auto() : false;
317 }
318
322 [[nodiscard]] virtual auto initialize(str& path) -> bool {
323 return this_handlers.init_path ? this_handlers.init_path(path) : false;
324 }
325
334 [[nodiscard]] virtual auto initialize(
335 str& path, uint64_t account, str& pw, str& srv, uint32_t timeout, bool portable
336 ) -> bool {
337 return this_handlers.init_full
338 ? this_handlers.init_full(path, account, pw, srv, timeout, portable)
339 : false;
340 }
341
348 [[nodiscard]] virtual auto login(uint64_t account, str& pw, str& srv, uint32_t timeout) -> bool {
349 return this_handlers.login ? this_handlers.login(account, pw, srv, timeout) : false;
350 }
351
353 virtual auto shutdown() noexcept -> void {
354 if (this_handlers.shutdown)
355 this_handlers.shutdown();
356 }
357
360 [[nodiscard]] virtual auto version() -> std::optional<VersionInfo> {
361 return this_handlers.get_version ? this_handlers.get_version() : std::nullopt;
362 }
363
367 [[nodiscard]] virtual auto last_error() -> std::optional<LastErrorResult> {
368 return this_handlers.get_last_error ? this_handlers.get_last_error()
369 : std::make_tuple(-1, std::string("fail"));
370 }
371
374 [[nodiscard]] virtual auto terminal_info() -> std::optional<TerminalInfo> {
375 return this_handlers.get_terminal_info ? this_handlers.get_terminal_info() : std::nullopt;
376 }
377
380 [[nodiscard]] virtual auto account_info() -> std::optional<AccountInfo> {
381 return this_handlers.get_account_info ? this_handlers.get_account_info() : std::nullopt;
382 }
383
384 // Symbol Methods
385
388 [[nodiscard]] virtual auto symbols_total() -> std::optional<int32_t> {
389 return this_handlers.get_total_symbols ? this_handlers.get_total_symbols() : std::nullopt;
390 }
391
394 [[nodiscard]] virtual auto symbols_get() -> SymbolsData {
395 return this_handlers.get_symbols_all ? this_handlers.get_symbols_all() : std::nullopt;
396 }
397
401 [[nodiscard]] virtual auto symbols_get(str& group) -> SymbolsData {
402 return this_handlers.get_symbols_by_group ? this_handlers.get_symbols_by_group(group)
403 : std::nullopt;
404 }
405
409 [[nodiscard]] virtual auto symbol_info(str& symbol) -> std::optional<SymbolInfo> {
410 return this_handlers.get_symbol_info ? this_handlers.get_symbol_info(symbol) : std::nullopt;
411 }
412
417 [[nodiscard]] virtual auto symbol_select(str& symbol, bool enable) -> bool {
418 return this_handlers.select_symbol ? this_handlers.select_symbol(symbol, enable) : false;
419 }
420
424 [[nodiscard]] virtual auto symbol_info_tick(str& symbol) -> std::optional<TickInfo> {
425 return this_handlers.get_tick_info ? this_handlers.get_tick_info(symbol) : std::nullopt;
426 }
427
428 // Market Depth Methods
429
433 [[nodiscard]] virtual auto market_book_add(str& symbol) -> bool {
434 return this_handlers.subscribe_book ? this_handlers.subscribe_book(symbol) : false;
435 }
436
440 [[nodiscard]] virtual auto market_book_release(str& symbol) -> bool {
441 return this_handlers.unsubscribe_book ? this_handlers.unsubscribe_book(symbol) : false;
442 }
443
447 [[nodiscard]] virtual auto market_book_get(str& symbol) -> BookData {
448 return this_handlers.get_book_info ? this_handlers.get_book_info(symbol) : std::nullopt;
449 }
450
451 // Market Data (Copy Rates/Ticks) Methods
452
459 [[nodiscard]] virtual auto copy_rates_from(str& s, int32_t t, DateTime from, int32_t count) -> RateInfoType {
460 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
461 return copy_rates_from(s, t, from_ts, count);
462 }
463
470 [[nodiscard]] virtual auto copy_rates_from(str& s, int32_t t, int64_t from, int32_t count) -> RateInfoType {
471 return this_handlers.get_rates_by_date ? this_handlers.get_rates_by_date(s, t, from, count)
472 : py::array_t<RateInfo>();
473 }
474
481 [[nodiscard]] virtual auto copy_rates_from_pos(str& s, int32_t t, int32_t start, int32_t count)
482 -> RateInfoType {
483 return this_handlers.get_rates_by_pos ? this_handlers.get_rates_by_pos(s, t, start, count)
484 : py::array_t<RateInfo>();
485 }
486
493 [[nodiscard]] virtual auto copy_rates_range(str& s, int32_t t, DateTime from, DateTime to) -> RateInfoType {
494 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
495 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
496 return copy_rates_range(s, t, from_ts, to_ts);
497 }
498
505 [[nodiscard]] virtual auto copy_rates_range(str& s, int32_t t, int64_t from, int64_t to) -> RateInfoType {
506 return this_handlers.get_rates_by_range ? this_handlers.get_rates_by_range(s, t, from, to)
507 : py::array_t<RateInfo>();
508 }
509
516 [[nodiscard]] virtual auto copy_ticks_from(str& s, DateTime from, int32_t count, int32_t flags)
517 -> TickInfoType {
518 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
519 return copy_ticks_from(s, from_ts, count, flags);
520 }
521
528 [[nodiscard]] virtual auto copy_ticks_from(str& s, int64_t from, int32_t count, int32_t flags)
529 -> TickInfoType {
530 return this_handlers.get_ticks_by_date
531 ? this_handlers.get_ticks_by_date(s, from, count, flags)
532 : py::array_t<TickInfo>();
533 }
534
541 [[nodiscard]] virtual auto copy_ticks_range(str& s, DateTime from, DateTime to, int32_t flags)
542 -> TickInfoType {
543 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
544 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
545 return copy_ticks_range(s, from_ts, to_ts, flags);
546 }
547
554 [[nodiscard]] virtual auto copy_ticks_range(str& s, int64_t from, int64_t to, int32_t flags) -> TickInfoType {
555 return this_handlers.get_ticks_by_range
556 ? this_handlers.get_ticks_by_range(s, from, to, flags)
557 : py::array_t<TickInfo>();
558 }
559
560 // Active Order Methods
561
564 [[nodiscard]] virtual auto orders_get() -> OrdersData {
565 return this_handlers.get_orders_all ? this_handlers.get_orders_all() : std::nullopt;
566 }
567
571 [[nodiscard]] virtual auto orders_get(str& symbol) -> OrdersData {
572 return this_handlers.get_orders_by_symbol ? this_handlers.get_orders_by_symbol(symbol)
573 : std::nullopt;
574 }
575
579 [[nodiscard]] virtual auto orders_get_by_group(str& group) -> OrdersData {
580 return this_handlers.get_orders_by_group ? this_handlers.get_orders_by_group(group)
581 : std::nullopt;
582 }
583
587 [[nodiscard]] virtual auto order_get_by_ticket(uint64_t ticket) -> std::optional<TradeOrder> {
588 return this_handlers.get_order_by_ticket ? this_handlers.get_order_by_ticket(ticket)
589 : std::nullopt;
590 }
591
594 [[nodiscard]] virtual auto orders_total() -> std::optional<int32_t> {
595 return this_handlers.get_total_orders ? this_handlers.get_total_orders() : std::nullopt;
596 }
597
598 // Active Position Methods
599
602 [[nodiscard]] virtual auto positions_get() -> PositionsData {
603 return this_handlers.get_positions_all ? this_handlers.get_positions_all() : std::nullopt;
604 }
605
609 [[nodiscard]] virtual auto positions_get(str& symbol) -> PositionsData {
610 return this_handlers.get_positions_symbol ? this_handlers.get_positions_symbol(symbol)
611 : std::nullopt;
612 }
613
617 [[nodiscard]] virtual auto positions_get_by_group(str& group) -> PositionsData {
618 return this_handlers.get_positions_group ? this_handlers.get_positions_group(group)
619 : std::nullopt;
620 }
621
625 [[nodiscard]] virtual auto position_get_by_ticket(uint64_t ticket) -> std::optional<TradePosition> {
626 return this_handlers.get_position_ticket ? this_handlers.get_position_ticket(ticket)
627 : std::nullopt;
628 }
629
632 [[nodiscard]] virtual auto positions_total() -> std::optional<int32_t> {
633 return this_handlers.get_total_positions ? this_handlers.get_total_positions() : std::nullopt;
634 }
635
636 // Trading Methods
637
641 [[nodiscard]] virtual auto order_check(const py::dict& dict) -> std::optional<OrderCheckResult> {
642 return order_check(dict.cast<TradeRequest>());
643 }
644
648 [[nodiscard]] virtual auto order_check(const TradeRequest& req) -> std::optional<OrderCheckResult> {
649 return this_handlers.check_order ? this_handlers.check_order(req) : std::nullopt;
650 }
651
655 [[nodiscard]] virtual auto order_send(const py::dict& dict) -> std::optional<OrderSentResult> {
656 return order_send(dict.cast<TradeRequest>());
657 }
658
662 [[nodiscard]] virtual auto order_send(const TradeRequest& req) -> std::optional<OrderSentResult> {
663 return this_handlers.send_order ? this_handlers.send_order(req) : std::nullopt;
664 }
665
672 [[nodiscard]] virtual auto order_calc_margin(int32_t action, str& sym, double vol, double prc)
673 -> std::optional<double> {
674 return this_handlers.calc_margin ? this_handlers.calc_margin(action, sym, vol, prc)
675 : std::nullopt;
676 }
677
685 [[nodiscard]] virtual auto order_calc_profit(int32_t action, str& sym, double vol, double open, double close)
686 -> std::optional<double> {
687 return this_handlers.calc_profit ? this_handlers.calc_profit(action, sym, vol, open, close)
688 : std::nullopt;
689 }
690
691 // History Order Methods
692
698 [[nodiscard]] virtual auto history_orders_get(int64_t from, int64_t to, str& group) -> OrdersData {
699 return this_handlers.get_hist_orders_group
700 ? this_handlers.get_hist_orders_group(from, to, group)
701 : std::nullopt;
702 }
703
709 [[nodiscard]] virtual auto history_orders_get(DateTime from, DateTime to, str& group) -> OrdersData {
710 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
711 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
712 return history_orders_get(from_ts, to_ts, group);
713 }
714
719 [[nodiscard]] virtual auto history_orders_get(int64_t from, int64_t to) -> OrdersData {
720 return this_handlers.get_hist_orders_range ? this_handlers.get_hist_orders_range(from, to)
721 : std::nullopt;
722 }
723
728 [[nodiscard]] virtual auto history_orders_get(DateTime from, DateTime to) -> OrdersData {
729 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
730 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
731 return history_orders_get(from_ts, to_ts);
732 }
733
737 [[nodiscard]] virtual auto history_orders_get(uint64_t ticket) -> std::optional<TradeOrder> {
738 return this_handlers.get_hist_order_ticket ? this_handlers.get_hist_order_ticket(ticket)
739 : std::nullopt;
740 }
741
745 [[nodiscard]] virtual auto history_orders_get_by_pos(uint64_t pos_id) -> OrdersData {
746 return this_handlers.get_hist_orders_pos ? this_handlers.get_hist_orders_pos(pos_id)
747 : std::nullopt;
748 }
749
754 [[nodiscard]] virtual auto history_orders_total(int64_t from, int64_t to) -> std::optional<int32_t> {
755 return this_handlers.get_hist_orders_total ? this_handlers.get_hist_orders_total(from, to)
756 : std::nullopt;
757 }
758
763 [[nodiscard]] virtual auto history_orders_total(DateTime from, DateTime to) -> std::optional<int32_t> {
764 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
765 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
766 return history_orders_total(from_ts, to_ts);
767 }
768
769 // History Deal Methods
770
776 [[nodiscard]] virtual auto history_deals_get(int64_t from, int64_t to, str& group) -> DealsData {
777 return this_handlers.get_hist_deals_group
778 ? this_handlers.get_hist_deals_group(from, to, group)
779 : std::nullopt;
780 }
781
786 [[nodiscard]] virtual auto history_deals_get(int64_t from, int64_t to) -> DealsData {
787 return this_handlers.get_hist_deals_range ? this_handlers.get_hist_deals_range(from, to)
788 : std::nullopt;
789 }
790
796 [[nodiscard]] virtual auto history_deals_get(DateTime from, DateTime to, str& group) -> DealsData {
797 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
798 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
799 return history_deals_get(from_ts, to_ts, group);
800 }
801
806 [[nodiscard]] virtual auto history_deals_get(DateTime from, DateTime to) -> DealsData {
807 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
808 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
809 return history_deals_get(from_ts, to_ts);
810 }
811
815 [[nodiscard]] virtual auto history_deals_get(uint64_t ticket) -> DealsData {
816 return this_handlers.get_hist_deals_ticket ? this_handlers.get_hist_deals_ticket(ticket)
817 : std::nullopt;
818 }
819
823 [[nodiscard]] virtual auto history_deals_get_by_pos(uint64_t pos_id) -> DealsData {
824 return this_handlers.get_hist_deals_pos ? this_handlers.get_hist_deals_pos(pos_id)
825 : std::nullopt;
826 }
827
832 [[nodiscard]] virtual auto history_deals_total(int64_t from, int64_t to) -> std::optional<int32_t> {
833 return this_handlers.get_hist_deals_total ? this_handlers.get_hist_deals_total(from, to)
834 : std::nullopt;
835 }
836
841 [[nodiscard]] virtual auto history_deals_total(DateTime from, DateTime to) -> std::optional<int32_t> {
842 auto from_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(from));
843 auto to_ts = static_cast<int64_t>(std::chrono::system_clock::to_time_t(to));
844 return history_deals_total(from_ts, to_ts);
845 }
846
847 private:
848 Handlers this_handlers;
849};
850
851} // namespace MT5
A client class that abstracts MetaTrader 5 functionality using injected handlers.
Definition metatrader.hpp:228
virtual auto copy_ticks_range(str &s, int64_t from, int64_t to, int32_t flags) -> TickInfoType
Copies ticks within a specific timestamp range.
Definition metatrader.hpp:554
virtual auto market_book_add(str &symbol) -> bool
Subscribes to the Market Book (Depth of Market) for a symbol.
Definition metatrader.hpp:433
virtual auto copy_ticks_range(str &s, DateTime from, DateTime to, int32_t flags) -> TickInfoType
Copies ticks within a specific DateTime range.
Definition metatrader.hpp:541
virtual auto history_orders_get(DateTime from, DateTime to) -> OrdersData
Gets historical orders within a DateTime range.
Definition metatrader.hpp:728
virtual auto orders_total() -> std::optional< int32_t >
Gets total number of active orders.
Definition metatrader.hpp:594
virtual auto history_deals_get(int64_t from, int64_t to) -> DealsData
Gets historical deals within a timestamp range.
Definition metatrader.hpp:786
virtual auto copy_rates_from(str &s, int32_t t, int64_t from, int32_t count) -> RateInfoType
Copies rates starting at a specific timestamp.
Definition metatrader.hpp:470
virtual auto history_deals_total(DateTime from, DateTime to) -> std::optional< int32_t >
Gets the count of historical deals in a DateTime range.
Definition metatrader.hpp:841
MetaTraderClient(Handlers handlers)
Constructor with handlers.
Definition metatrader.hpp:309
virtual auto history_deals_get(uint64_t ticket) -> DealsData
Gets a historical deal by its ticket.
Definition metatrader.hpp:815
MetaTraderClient()=delete
Default constructor.
virtual auto history_deals_get(int64_t from, int64_t to, str &group) -> DealsData
Gets historical deals within a timestamp range.
Definition metatrader.hpp:776
virtual auto positions_get_by_group(str &group) -> PositionsData
Gets open positions for a specific group.
Definition metatrader.hpp:617
virtual auto symbols_get() -> SymbolsData
Gets all available symbols.
Definition metatrader.hpp:394
virtual auto positions_get(str &symbol) -> PositionsData
Gets open positions for a specific symbol.
Definition metatrader.hpp:609
virtual auto initialize(str &path) -> bool
Initializes the MT5 terminal at a specific path.
Definition metatrader.hpp:322
virtual auto positions_get() -> PositionsData
Gets all open positions.
Definition metatrader.hpp:602
virtual auto market_book_release(str &symbol) -> bool
Unsubscribes from the Market Book for a symbol.
Definition metatrader.hpp:440
virtual auto market_book_get(str &symbol) -> BookData
Gets the current Market Book state.
Definition metatrader.hpp:447
virtual auto order_check(const TradeRequest &req) -> std::optional< OrderCheckResult >
Checks if a trade request is valid.
Definition metatrader.hpp:648
virtual auto orders_get_by_group(str &group) -> OrdersData
Gets active orders for a specific symbol group.
Definition metatrader.hpp:579
virtual auto symbols_get(str &group) -> SymbolsData
Gets symbols for a specific group (e.g., "EUR*").
Definition metatrader.hpp:401
virtual auto account_info() -> std::optional< AccountInfo >
Gets current account information.
Definition metatrader.hpp:380
virtual auto copy_ticks_from(str &s, int64_t from, int32_t count, int32_t flags) -> TickInfoType
Copies ticks starting from a specific timestamp.
Definition metatrader.hpp:528
virtual auto history_deals_total(int64_t from, int64_t to) -> std::optional< int32_t >
Gets the count of historical deals in a timestamp range.
Definition metatrader.hpp:832
virtual auto order_calc_margin(int32_t action, str &sym, double vol, double prc) -> std::optional< double >
Calculates the margin required for an order.
Definition metatrader.hpp:672
virtual auto copy_rates_range(str &s, int32_t t, DateTime from, DateTime to) -> RateInfoType
Copies rates within a specific DateTime range.
Definition metatrader.hpp:493
virtual auto history_orders_get_by_pos(uint64_t pos_id) -> OrdersData
Gets historical orders associated with a position ID.
Definition metatrader.hpp:745
virtual auto order_check(const py::dict &dict) -> std::optional< OrderCheckResult >
Checks if a trade request is valid (Python dict overload).
Definition metatrader.hpp:641
virtual auto last_error() -> std::optional< LastErrorResult >
Gets the last error occurred.
Definition metatrader.hpp:367
virtual auto order_send(const TradeRequest &req) -> std::optional< OrderSentResult >
Sends a trade request to the server.
Definition metatrader.hpp:662
virtual auto order_send(const py::dict &dict) -> std::optional< OrderSentResult >
Sends a trade request to the server (Python dict overload).
Definition metatrader.hpp:655
virtual auto copy_rates_from_pos(str &s, int32_t t, int32_t start, int32_t count) -> RateInfoType
Copies rates relative to the current position (index).
Definition metatrader.hpp:481
virtual auto history_deals_get(DateTime from, DateTime to) -> DealsData
Gets historical deals within a DateTime range.
Definition metatrader.hpp:806
virtual auto position_get_by_ticket(uint64_t ticket) -> std::optional< TradePosition >
Gets a specific position by its ticket.
Definition metatrader.hpp:625
virtual auto history_orders_total(int64_t from, int64_t to) -> std::optional< int32_t >
Gets the count of historical orders in a timestamp range.
Definition metatrader.hpp:754
virtual auto history_orders_get(uint64_t ticket) -> std::optional< TradeOrder >
Gets a historical order by its ticket.
Definition metatrader.hpp:737
virtual auto symbol_info(str &symbol) -> std::optional< SymbolInfo >
Gets information for a specific symbol.
Definition metatrader.hpp:409
virtual auto positions_total() -> std::optional< int32_t >
Gets total number of open positions.
Definition metatrader.hpp:632
virtual ~MetaTraderClient()=default
Virtual destructor.
virtual auto history_orders_get(DateTime from, DateTime to, str &group) -> OrdersData
Gets historical orders within a DateTime range.
Definition metatrader.hpp:709
virtual auto copy_rates_range(str &s, int32_t t, int64_t from, int64_t to) -> RateInfoType
Copies rates within a specific timestamp range.
Definition metatrader.hpp:505
virtual auto copy_rates_from(str &s, int32_t t, DateTime from, int32_t count) -> RateInfoType
Copies rates from the MT5 terminal starting at a specific DateTime.
Definition metatrader.hpp:459
virtual auto symbol_info_tick(str &symbol) -> std::optional< TickInfo >
Gets the current tick info for a symbol.
Definition metatrader.hpp:424
virtual auto orders_get() -> OrdersData
Gets all active orders.
Definition metatrader.hpp:564
virtual auto history_orders_get(int64_t from, int64_t to, str &group) -> OrdersData
Gets historical orders within a timestamp range.
Definition metatrader.hpp:698
virtual auto terminal_info() -> std::optional< TerminalInfo >
Gets terminal status and settings.
Definition metatrader.hpp:374
virtual auto version() -> std::optional< VersionInfo >
Gets the MT5 version information.
Definition metatrader.hpp:360
virtual auto history_orders_total(DateTime from, DateTime to) -> std::optional< int32_t >
Gets the count of historical orders in a DateTime range.
Definition metatrader.hpp:763
virtual auto copy_ticks_from(str &s, DateTime from, int32_t count, int32_t flags) -> TickInfoType
Copies ticks starting from a specific DateTime.
Definition metatrader.hpp:516
virtual auto symbol_select(str &symbol, bool enable) -> bool
Selects or deselects a symbol in the Market Watch window.
Definition metatrader.hpp:417
virtual auto initialize() -> bool
Initializes the MT5 terminal automatically.
Definition metatrader.hpp:315
virtual auto orders_get(str &symbol) -> OrdersData
Gets active orders for a specific symbol.
Definition metatrader.hpp:571
virtual auto login(uint64_t account, str &pw, str &srv, uint32_t timeout) -> bool
Connects to a trading account.
Definition metatrader.hpp:348
virtual auto order_get_by_ticket(uint64_t ticket) -> std::optional< TradeOrder >
Gets a specific order by its ticket number.
Definition metatrader.hpp:587
virtual auto history_deals_get_by_pos(uint64_t pos_id) -> DealsData
Gets historical deals associated with a position ID.
Definition metatrader.hpp:823
virtual auto history_deals_get(DateTime from, DateTime to, str &group) -> DealsData
Gets historical deals within a DateTime range.
Definition metatrader.hpp:796
virtual auto initialize(str &path, uint64_t account, str &pw, str &srv, uint32_t timeout, bool portable) -> bool
Initializes the MT5 terminal with full configuration.
Definition metatrader.hpp:334
virtual auto history_orders_get(int64_t from, int64_t to) -> OrdersData
Gets historical orders within a timestamp range.
Definition metatrader.hpp:719
virtual auto order_calc_profit(int32_t action, str &sym, double vol, double open, double close) -> std::optional< double >
Calculates the potential profit for an order.
Definition metatrader.hpp:685
virtual auto shutdown() noexcept -> void
Shuts down the MT5 connection/terminal.
Definition metatrader.hpp:353
virtual auto symbols_total() -> std::optional< int32_t >
Gets the total number of available symbols.
Definition metatrader.hpp:388
std::function< OrdersData(int64_t, int64_t)> GetHistoryOrdersByRange
Callback to retrieve historical orders within a specific time range.
Definition metatrader.hpp:194
std::function< std::optional< int32_t >(int64_t, int64_t)> GetHistoryOrdersTotal
Callback to retrieve the total count of historical orders within a time range.
Definition metatrader.hpp:206
std::function< std::optional< int32_t >(int64_t, int64_t)> GetHistoryDealsTotal
Callback to retrieve the total count of historical deals within a time range.
Definition metatrader.hpp:221
std::function< DealsData(int64_t, int64_t)> GetHistoryDealsByRange
Callback to retrieve historical deals (executions) within a time range.
Definition metatrader.hpp:209
std::function< DealsData(int64_t, int64_t, str &)> GetHistoryDealsByGroup
Callback to retrieve historical deals (executions) within a time range buy asset.
Definition metatrader.hpp:212
std::function< OrdersData(int64_t, int64_t, str &)> GetHistoryOrdersByGroup
Callback to retrieve historical orders within a specific time range and filter.
Definition metatrader.hpp:197
std::function< DealsData(uint64_t)> GetHistoryDealsByPosId
Callback to retrieve historical deals associated with a specific Position ID.
Definition metatrader.hpp:218
std::function< OrdersData(uint64_t)> GetHistoryOrdersByPosId
Callback to retrieve all historical orders associated with a specific Position ID.
Definition metatrader.hpp:203
std::function< std::optional< TradeOrder >(uint64_t)> GetHistoryOrderByTicket
Callback to retrieve a specific historical order by its ticket ID.
Definition metatrader.hpp:200
std::function< DealsData(uint64_t)> GetHistoryDealsByTicket
Callback to retrieve historical deals associated with a specific Order Ticket.
Definition metatrader.hpp:215
std::function< std::optional< int32_t >()> GetTotalOrders
Callback to retrieve the total count of active orders.
Definition metatrader.hpp:149
std::function< std::optional< TradeOrder >(uint64_t)> GetOrderByTicket
Callback to retrieve a specific order by its unique ticket ID.
Definition metatrader.hpp:146
std::function< OrdersData(str &)> GetOrdersBySymbol
Callback to retrieve trade orders filtered by symbol.
Definition metatrader.hpp:140
std::function< OrdersData(str &)> GetOrdersByGroup
Callback to retrieve trade orders filtered by a specific group.
Definition metatrader.hpp:143
std::function< OrdersData()> GetOrdersAll
Callback to retrieve all current trade orders.
Definition metatrader.hpp:137
std::function< std::optional< int32_t >()> GetTotalPositions
Callback to retrieve the total count of active positions.
Definition metatrader.hpp:169
std::function< PositionsData()> GetPositionsAll
Callback to retrieve all active trade positions.
Definition metatrader.hpp:157
std::function< PositionsData(str &)> GetPositionsBySymbol
Callback to retrieve active positions filtered by symbol.
Definition metatrader.hpp:160
std::function< std::optional< TradePosition >(uint64_t)> GetPositionByTicket
Callback to retrieve a specific position by its unique ticket ID.
Definition metatrader.hpp:166
std::function< PositionsData(str &)> GetPositionsByGroup
Callback to retrieve active positions filtered by group.
Definition metatrader.hpp:163
Namespace containing MetaTrader 5 (MT5) client definitions and wrapper classes.
Definition metatrader.hpp:24
std::function< bool(str &, uint64_t, str &, str &, uint32_t, bool)> InitializeFull
Callback to initialize the MT5 terminal with full configuration options.
Definition metatrader.hpp:68
std::tuple< int32_t, std::string > LastErrorResult
Tuple representing the last error: <error code, error description>.
Definition metatrader.hpp:33
std::chrono::system_clock::time_point DateTime
System clock time point for date/time operations.
Definition metatrader.hpp:57
std::function< bool()> InitializeAuto
Callback to initialize the MT5 terminal automatically.
Definition metatrader.hpp:62
std::function< RateInfoType(str &, int32_t, int32_t, int32_t)> GetRatesByPos
Callback to get rates starting from a specific index position.
Definition metatrader.hpp:121
std::function< std::optional< OrderCheckResult >(const TradeRequest &)> CheckOrder
Callback to check an order request before sending.
Definition metatrader.hpp:182
std::function< std::optional< AccountInfo >()> GetAccountInfo
Callback to retrieve account information.
Definition metatrader.hpp:86
std::function< bool(uint64_t, str &, str &, uint32_t)> Login
Callback to login to an account.
Definition metatrader.hpp:71
std::function< BookData(str &)> GetBookInfo
Callback to get the current Market Book state for a symbol.
Definition metatrader.hpp:113
std::function< std::optional< VersionInfo >()> GetVersion
Callback to retrieve the terminal version.
Definition metatrader.hpp:77
std::function< std::optional< SymbolInfo >(str &)> GetSymbolInfo
Callback to retrieve information for a specific symbol.
Definition metatrader.hpp:89
std::function< SymbolsData()> GetSymbolsAll
Callback to retrieve all available symbols.
Definition metatrader.hpp:98
std::function< std::optional< TerminalInfo >()> GetTerminalInfo
Callback to retrieve static terminal information.
Definition metatrader.hpp:83
std::function< bool(str &)> InitializeWithPath
Callback to initialize the MT5 terminal with a specific path.
Definition metatrader.hpp:65
std::function< bool(str &)> UnsubscribeBook
Callback to unsubscribe from the Market Book for a symbol.
Definition metatrader.hpp:110
std::optional< py::array_t< TickInfo > > TickInfoType
Optional Numpy array of TickInfo structures.
Definition metatrader.hpp:54
std::function< std::optional< double >(int32_t, str &, double, double, double)> CalculateProfit
Callback to calculate profit.
Definition metatrader.hpp:179
std::optional< py::array_t< RateInfo > > RateInfoType
Optional Numpy array of RateInfo structures (OHLCV data).
Definition metatrader.hpp:51
std::function< std::optional< TickInfo >(str &)> GetTickInfo
Callback to retrieve the last tick for a specific symbol.
Definition metatrader.hpp:92
std::function< bool(str &, bool)> SelectSymbol
Callback to select or deselect a symbol in Market Watch.
Definition metatrader.hpp:101
std::optional< std::vector< TradePosition > > PositionsData
Optional vector of TradePosition objects.
Definition metatrader.hpp:48
std::function< SymbolsData(str &)> GetSymbolsByGroup
Callback to retrieve symbols belonging to a specific group.
Definition metatrader.hpp:104
std::function< void()> Shutdown
Callback to shut down the initialized terminal.
Definition metatrader.hpp:74
std::function< std::optional< LastErrorResult >()> GetLastError
Callback to retrieve the last error code and description.
Definition metatrader.hpp:80
std::function< RateInfoType(str &, int32_t, int64_t, int32_t)> GetRatesByDate
Callback to get rates starting from a specific date.
Definition metatrader.hpp:118
std::optional< std::vector< SymbolInfo > > SymbolsData
Optional vector of SymbolInfo objects.
Definition metatrader.hpp:39
std::function< TickInfoType(str &, int64_t, int32_t, int32_t)> GetTicksByDate
Callback to get ticks starting from a specific date.
Definition metatrader.hpp:127
std::function< RateInfoType(str &, int32_t, int64_t, int64_t)> GetRatesByRange
Callback to get rates within a time range.
Definition metatrader.hpp:124
std::optional< std::vector< TradeOrder > > OrdersData
Optional vector of TradeOrder objects.
Definition metatrader.hpp:45
std::function< TickInfoType(str &, int64_t, int64_t, int32_t)> GetTicksByRange
Callback to get ticks within a time range.
Definition metatrader.hpp:130
std::function< std::optional< double >(int32_t, str &, double, double)> CalculateMargin
Callback to calculate margin.
Definition metatrader.hpp:176
std::optional< std::vector< BookInfo > > BookData
Optional vector of BookInfo (Market Depth) objects.
Definition metatrader.hpp:42
std::function< std::optional< OrderSentResult >(const TradeRequest &)> SendOrder
Callback to send an order to the market.
Definition metatrader.hpp:185
const std::string str
Alias for const std::string to simplify function signatures.
Definition metatrader.hpp:27
std::optional< std::vector< TradeDeal > > DealsData
Optional vector of TradeDeal objects.
Definition metatrader.hpp:36
std::function< std::optional< int32_t >()> GetTotalSymbols
Callback to get the total count of available symbols.
Definition metatrader.hpp:95
std::tuple< int32_t, int32_t, std::string > VersionInfo
Tuple representing version info: <major version, minor version, build date string>.
Definition metatrader.hpp:30
std::function< bool(str &)> SubscribeBook
Callback to subscribe to the Market Book (Depth of Market) for a symbol.
Definition metatrader.hpp:107
Declares the public API for the Metatrader5 objects in bbstrader library. This is the primary file th...
Container for all function callbacks required by the client.
Definition metatrader.hpp:232
GetHistoryDealsByGroup get_hist_deals_group
Get history deals by group handler.
Definition metatrader.hpp:293
InitializeFull init_full
Full-parameter initialization handler.
Definition metatrader.hpp:236
GetSymbolsAll get_symbols_all
Get all symbols handler.
Definition metatrader.hpp:246
GetRatesByRange get_rates_by_range
Get rates by range handler.
Definition metatrader.hpp:259
InitializeAuto init_auto
Auto-initialization handler.
Definition metatrader.hpp:234
GetPositionsAll get_positions_all
Get all positions handler.
Definition metatrader.hpp:272
GetSymbolsByGroup get_symbols_by_group
Get symbols by group handler.
Definition metatrader.hpp:249
GetHistoryOrderByTicket get_hist_order_ticket
Get history order by ticket handler.
Definition metatrader.hpp:287
GetSymbolInfo get_symbol_info
Get symbol details handler.
Definition metatrader.hpp:247
SubscribeBook subscribe_book
Subscribe to DOM handler.
Definition metatrader.hpp:252
UnsubscribeBook unsubscribe_book
Unsubscribe from DOM handler.
Definition metatrader.hpp:253
GetPositionsBySymbol get_positions_symbol
Get positions by symbol handler.
Definition metatrader.hpp:273
Login login
Account login handler.
Definition metatrader.hpp:237
CheckOrder check_order
Order check handler.
Definition metatrader.hpp:279
GetLastError get_last_error
Error retrieval handler.
Definition metatrader.hpp:240
GetHistoryDealsByTicket get_hist_deals_ticket
Get history deal by ticket handler.
Definition metatrader.hpp:294
GetHistoryOrdersByGroup get_hist_orders_group
Get history orders by group handler.
Definition metatrader.hpp:286
SendOrder send_order
Order send handler.
Definition metatrader.hpp:280
GetPositionsByGroup get_positions_group
Get positions by group handler.
Definition metatrader.hpp:274
GetRatesByDate get_rates_by_date
Get rates by date handler.
Definition metatrader.hpp:257
GetTotalOrders get_total_orders
Get total active orders handler.
Definition metatrader.hpp:269
GetOrdersByGroup get_orders_by_group
Get orders by group handler.
Definition metatrader.hpp:267
GetBookInfo get_book_info
Get DOM info handler.
Definition metatrader.hpp:254
GetAccountInfo get_account_info
Account info handler.
Definition metatrader.hpp:242
GetOrderByTicket get_order_by_ticket
Get order by ticket handler.
Definition metatrader.hpp:268
InitializeWithPath init_path
Path-based initialization handler.
Definition metatrader.hpp:235
GetTickInfo get_tick_info
Get current tick info handler.
Definition metatrader.hpp:262
GetTicksByDate get_ticks_by_date
Get ticks by date handler.
Definition metatrader.hpp:260
GetOrdersBySymbol get_orders_by_symbol
Get orders by symbol handler.
Definition metatrader.hpp:266
GetOrdersAll get_orders_all
Get all active orders handler.
Definition metatrader.hpp:265
CalculateProfit calc_profit
Profit calculation handler.
Definition metatrader.hpp:282
GetTerminalInfo get_terminal_info
Terminal info handler.
Definition metatrader.hpp:241
GetVersion get_version
Version retrieval handler.
Definition metatrader.hpp:239
GetHistoryDealsTotal get_hist_deals_total
Get history deals count handler.
Definition metatrader.hpp:296
GetRatesByPos get_rates_by_pos
Get rates by position handler.
Definition metatrader.hpp:258
GetTotalSymbols get_total_symbols
Symbol count handler.
Definition metatrader.hpp:245
GetPositionByTicket get_position_ticket
Get position by ticket handler.
Definition metatrader.hpp:275
GetTotalPositions get_total_positions
Get total positions handler.
Definition metatrader.hpp:276
Shutdown shutdown
Shutdown handler.
Definition metatrader.hpp:238
GetHistoryOrdersByRange get_hist_orders_range
Get history orders by range handler.
Definition metatrader.hpp:285
GetHistoryOrdersByPosId get_hist_orders_pos
Get history orders by position ID handler.
Definition metatrader.hpp:288
GetHistoryOrdersTotal get_hist_orders_total
Get history orders count handler.
Definition metatrader.hpp:289
SelectSymbol select_symbol
Symbol selection handler.
Definition metatrader.hpp:248
GetHistoryDealsByRange get_hist_deals_range
Get history deals by range handler.
Definition metatrader.hpp:292
GetHistoryDealsByPosId get_hist_deals_pos
Get history deals by position ID handler.
Definition metatrader.hpp:295
CalculateMargin calc_margin
Margin calculation handler.
Definition metatrader.hpp:281
GetTicksByRange get_ticks_by_range
Get ticks by range handler.
Definition metatrader.hpp:261
Structure to send trade requests to the server.
Definition objects.hpp:515