Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 723
- Рейтинг:
- голосов: 7
- Опубликован:
- 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; }

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

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

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

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