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

Trade Classes from MT5 for MT4 - библиотека для MetaTrader 4

Просмотров:
1070
Рейтинг:
(9)
Опубликован:
2022.04.27 11:39
Обновлен:
2022.05.06 08:18
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

В процессе разработки программы копирования позиций между счетами понадобилось разрабатывать по сути одинаковый код для MT5 и MT4. Отличия были только в функциях совершения торговых операций. Поэтому были переписаны несколько классов из стандартной библиотеки MT5 под работу в MT4.

При использовании этой библиотеки в идеале можно будет скомпилировать программу из MT5 компилятором в MT4, чтобы она смогла работать в MT4.

Но есть два важных ограничения:

  • Программа не должна использовать никакие классы и библиотеки из MT5, которых нет в MT4. Например, если используется CHashMap, то придется либо от него отказываться, либо тоже переносить в MT4
  • Все торговые операции должна совершаться только через класс CTrade, все операции по получению рыночной информации - через классы CPositionInfo, COrderInfo, CSymbolInfo

В данной версии могут встретиться некоторые методы классов, которые не удалось обнаружить при тестировании, как нуждающиеся в исправлении.

Файл TradeLibraryMT5Example.mq4 - это пример простого советника, который компилируется и работает в MT5 и в MT4.

Для открытия отложенных ордеров используется такой код:

CTrade m_trade;

...

res = m_trade.OrderOpen(m_symbol, ORDER_TYPE_BUY_LIMIT, m_lot, lowPrice, lowPrice, 0, 0, ORDER_TIME_GTC, 0);
res = m_trade.OrderOpen(m_symbol, ORDER_TYPE_SELL_LIMIT, m_lot, highPrice, highPrice, 0, 0, ORDER_TIME_GTC, 0);

Функция расчета суммарной прибыли всех открытых рыночных позиций может быть реализована так:

//+------------------------------------------------------------------+
//| Calculate total profit for all market orders                     |
//+------------------------------------------------------------------+
double GetProfit() {
   int total = PositionsTotal();
   double profit = 0;

   CPositionInfo p;

   for(int i = total - 1; i >= 0; i--) {
      if(p.SelectByIndex(i)) {
         ulong magic = p.Magic();
         string symbol = p.Symbol();
         if(magic != m_magicN || symbol != m_symbol) {
            continue;
         }

         profit += p.Profit() + p.Commission() + p.Swap();
      }
   }

   return profit;
}

Функция закрытия всех открытых позиций и отложенных ордеров может быть реализована так:

//+------------------------------------------------------------------+
//| Attempt to close all pending and market orders                   |
//+------------------------------------------------------------------+
bool TryCloseAll() {
   bool res = true;
   
   int total;
   double profit = 0;
   ulong ticket;
   ulong magic;
   string symbol;
   
   total = OrdersTotal();

   COrderInfo o;

   for(int i = total - 1; i >= 0; i--) {
      if(o.SelectByIndex(i)) {
         magic = o.Magic();
         symbol = o.Symbol();
         if(magic != m_magicN || symbol != m_symbol) {
            continue;
         }
         ticket = o.Ticket();

         res &= m_trade.OrderDelete(o.Ticket());
      }
   }

   total = PositionsTotal();
   
   CPositionInfo p;

   for(int i = total - 1; i >= 0; i--) {
      if(p.SelectByIndex(i)) {
         magic = p.Magic();
         symbol = p.Symbol();
         if(magic != m_magicN || symbol != m_symbol) {
            continue;
         }
         ticket = p.Ticket();

         res &= m_trade.PositionClose(ticket);
      }
   }

   return res;
}


    cm Close MA cm Close MA

    Советник закрывает позиции на пересечении МА.

    cm ScreenShot cm ScreenShot

    Индикатор записывает скриншот экрана на каждой свече

    Expert History Export Expert History Export

    Добавляет возможность автоматического экспорта истории сделок после прогона эксперта в тестере стратегий.

    simple MA expert simple MA expert

    Самый простой советник Он открывает позиции на пересечении двух индикаторов МА В нем так же встроены функции установки SL и TP