Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
TradeTransactions - библиотека для MetaTrader 5
- Просмотров:
- 3143
- Рейтинг:
- Опубликован:
- 2018.09.06 10:34
- Обновлен:
- 2018.12.17 23:44
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Асинхронные торговые приказы обладают огромным преимуществом - высокая скорость при массовой отправке. Однако, распространению таких приказов мешает некоторое неудобство - данные о результате приказа возможно увидеть только в OnTradeTransaction.
Такое обстоятельство заставляет обывателя строить событийную модель своей ТС, если хочется асинхронности. А это далеко не всегда бывает просто сделать (советники), а иногда - даже невозможно (скрипты).
Данная библиотека решает эту проблему. Она в любой момент открывает доступ ко всем транзакциям в торговом терминале (полные данные соответствующих OnTradeTransaction) с момента запуска программы.
Это позволяет очень легко наделить свои программы асинхронностью.
Примеры
С библиотекой идет такой пример, по комментариям в котором можно понять принцип работы:
// Распечатка всех транзакций без OnTradeTransaction #include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Доступ к данным OnTradeTransaction в любом месте программы TRADETRANSACTIONS Transactions; // Торговые транзакции const bool Init = EventSetMillisecondTimer(100); void OnTimer() { static uint Total = 0; const uint NewTotal = Transactions.Total(); // Сколько всего сохранено транзакций for (uint i = Total; i < NewTotal; i++) // Бежим по новым транзакциям { MqlTradeTransaction Trans; MqlTradeRequest Request; MqlTradeResult Result; // Получаем все данные по соответствующей транзакции и распечатываем их. Print(TimeToString(Transactions[i].Get(Trans, Request, Result)) + "\n" + ToString(Trans) + ToString(Request) + ToString(Result)); } Total = NewTotal; }
Запустите этот советник и попробуйте руками совершать торговые приказы. Советник будет распечатывать все подробности, будто в нем есть OnTradeTransaction. Но его там нет!
Практических сценариев использования такого функционала может быть много. Например, торговля корзиной символов. Когда внутри кода нужно, например, открыть быстро несколько позиций. И если они открылись - сделать еще дополнительные торговые операции, не выходя из On-функции.
Поскольку очень частой необходимостью является ожидание результата массовой отправки асинхронных приказов, в библиотеку встроена соответствующая возможность, которую быстро оценить возможно по такому примеру
// Пример массовых асинхронных торговых приказов с ожиданием результата. #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #include <fxsaber\TradeTransactions\TradeTransactions.mqh> // Доступ к данным OnTradeTransaction в любом месте программы TRADETRANSACTIONS Transactions; // Торговые транзакции // Максимально быстро открывает Amount-позиций. Возврат, когда позиции открыты. bool OpenPositions( const int Amount = 10 ) { uint RequestID[]; for (int i = ArrayResize(RequestID, Amount) - 1; i >= 0; i--) { const string Symb = SymbolName(i, true); RequestID[i] = OrderSendAsync(Symb, OP_BUY, 1, SymbolInfoDouble(Symb, SYMBOL_ASK), 100, 0, 0); // Отправили асинхронный приказ } return(Transactions.Waiting(RequestID)); // Дождались ответа от сервера на все асинхронные приказы } // Максимально быстро все закрывает. Возврат, когда действие подтверждено. bool CloseAll() { uint RequestID[]; for (int i = ArrayResize(RequestID, OrdersTotal()) - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS)) // Отправили асинхронный приказ RequestID[i] = (OrderType() <= OP_SELL) ? OrderCloseAsync(OrderTicket(), OrderLots(), OrderClosePrice(), 100) : OrderDeleteAsync(OrderTicket()); return(Transactions.Waiting(RequestID)); // Дождались ответа от сервера на все асинхронные приказы } void OnStart() { if (OpenPositions()) Print(CloseAll()); }
Да, это скрипт, но работа с транзакциями и в нем возможна через библиотеку. Запуск покажет, как можно быстро открыть и закрыть множество торговых позиций/ордеров.
Особенности
- Для работы код Indicators\fxsaber\TradeTransactions.mq5 должен быть откомпилирован.
- Используется библиотека TypeToBytes.
- В исходниках библиотеки присутствует (ResourceData.mqh) универсальный класс, позволяющий удобно сохранять/читать данные в/из Ресурсах.
Индикатор, реализующий пробойную систему с использованием облака индикатора XHullTrend_Digit
XCCI_Candle_Vol_Zer_AlertsИндикатор XCCI_Candle_Vol_Zer с возможностью подавать алерты, отправлять почтовые и Push-сообщения при возникновении торговых сигналов
Данная библиотека и класс iCanvas упростит написание программ с применением Canvas.
Aroon_HornИндикатор Aroon Horn