Смотри, как бесплатно скачать роботов
Ищи нас в Telegram!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Библиотеки

TradeTransactions - библиотека для MetaTrader 5

Просмотров:
3064
Рейтинг:
(30)
Опубликован:
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_System XHullTrend_Digit_System

Индикатор, реализующий пробойную систему с использованием облака индикатора XHullTrend_Digit

XCCI_Candle_Vol_Zer_Alerts XCCI_Candle_Vol_Zer_Alerts

Индикатор XCCI_Candle_Vol_Zer с возможностью подавать алерты, отправлять почтовые и Push-сообщения при возникновении торговых сигналов

Easy Canvas Easy Canvas

Данная библиотека и класс iCanvas упростит написание программ с применением Canvas.

Aroon_Horn Aroon_Horn

Индикатор Aroon Horn