Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «copiersenderfilter_5391011682577322107.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Краткий обзор
О программе
Данная библиотека на языке MQL предназначена для настройки поведения копировальщика торговых операций. Она применяется только тогда, когда в копировальщике включена внешняя фильтрация. Библиотека предоставляет точки расширения, через которые можно влиять на то, какие ордера будут переданы получателям и в каком виде они будут обработаны.
Основу составляет структура описания ордера, содержащая сведения о сделке: идентификатор, тип, символ, объём, цены, время открытия, уровни стоп-лосс и тейк-профит, а также финансовые показатели. На основе этой структуры реализованы функции фильтрации новых ордеров и изменения списка текущих ордеров.
Функция обработки нового ордера вызывается перед отправкой сообщения получателям и позволяет разрешить отправку, окончательно отклонить ордер или временно отложить его до наступления заданного условия. Функция изменения ордеров получает список открытых ордеров и может корректировать их параметры, исключать отдельные ордера или добавлять виртуальные, не существующие на счёте.
Дополнительно библиотека содержит служебные функции преобразования описания ордера в строку и обратно, необходимые для передачи данных между компонентами, поскольку язык не позволяет напрямую передавать структуры через границу библиотеки.
Структура данных, описывающая торговый ордер или позицию: содержит идентификатор, тип, символ, объём, цены открытия и закрытия, время открытия, уровни стоп-лосс и тейк-профит, финансовые показатели и служебные поля.
Вызывается перед отправкой нового ордера получателям. Позволяет разрешить отправку, окончательно отклонить ордер или временно отложить его до выполнения заданного условия.
Получает список текущих открытых ордеров и позволяет изменить их параметры, удалить отдельные ордера или добавить виртуальные ордера перед дальнейшей обработкой.
/* *************************************************************************************
Library which allows bespoke modifications to the copier's trading.
Only used if the UseExternalFilters setting is turned on in the copier.
************************************************************************************* */
#property library
#property strict
/* *************************************************************************************
Order definition used by the copier
************************************************************************************* */
#ifdef __MQL5__
#define TICKET long
#else
#define TICKET int
#endif
struct OrderDef {
TICKET ticket;
int type; // type of order/position, using the MT4 values: 0=buy, 1=sell, 2=buy-limit, 3=sell-limit, 4=buy-stop, 5=sell-stop. In MT5, can also be #100 and #101 for working buy and sell market orders
string symbol;
double lots;
double openprice;
double closeprice; // As in MT4&5: current/close price. Opposite side of spread for market orders; same side of spread for pending orders
datetime opentime;
double sl;
double tp;
double profit;
double swap;
double commission;
string comment;
int magic;
};
/* *************************************************************************************
Called when the sender EA is about to issue a new message to the receiver(s), for
the order identified by senderOrder. This function can return one of the following
values:
0 = Allow order to be sent to receivers
1 = Permanently suppress the order. Receivers will not know about and copy this trade.
2 = Temporarily suppress the order.
If this function returns 2, then the sender EA will keep calling it periodically until
it finally returns 0 or 1 (or until the order is closed). The purpose of return value #2
is to let this code implement a time-based or profit-based condition before
a trade is copied.
This function is called before applying restrictions such as IncludeSymbols and
IncludeOrderComments. If this function receives a notification and returns 0, the trade
is not necessarily copied.
(Note: trades can also be suppressed using FilterModifyOrders.)
************************************************************************************* */
int FilterNewOrder(string Channel, OrderDef& senderOrder)
{
return 0;
}
/* *************************************************************************************
Receives the list of orders currently open on the account, and can make *any* changes
to what the copier sees and subsequently processes. If the array is modified in any way
then the function must return true, or else it will have no effect.
For example, the function can do the following:
* Change the s/l, t/p, volume, or even symbol name on an order
* Remove an order from the array, preventing it being copied (temporarily or permanently).
Orders can also be suppressed by setting their symbol to "", or their ticket or volume to <= 0
* Add "virtual" orders which do not actually exist on the account. All such orders
need to be given unique ticket numbers.
************************************************************************************* */
bool FilterModifyOrders(string Channel, OrderDef& currentOrders[])
{
/*
for (int i = 0; i < ArraySize(currentOrders); i++) {
currentOrders[i].lots = 0.25;
if (currentOrders[i].symbol == "USDJPY") {
currentOrders[i].symbol = "EURJPY";
} else if (currentOrders[i].symbol == "USDCAD") {
currentOrders[i].symbol = ""; // ... one way of making the copier ignore an order
}
}
return true; // Tell the copier that the array has been modified
*/
return false;
}
/* ********
Показано первые 50% кода (символов: 6124)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.