Как создавать собственные функции в MQL
Пока торговый робот небольшой, весь его код помещается в OnTick. Но как только появляются расчёт лота, фильтры и работа с позициями, функция становится громоздкой. На помощь приходят собственные функции: один раз пишете именованный блок, а затем вызываете его по имени в любом месте программы. В MQL5 объявление начинается с типа возвращаемого значения, затем идёт имя, а в скобках — параметры. Если функция ничего не возвращает, вместо типа пишут void.
Вот пример функции, которая считает объём позиции под заданный риск:
// =============================================================================================== //
// = Функция рассчитывает размер лота по риску и расстоянию до Stop Loss = //
// =============================================================================================== //
double CalcLot(double riskPercent, double slPoints)
{
double riskMoney = AccountInfoDouble(ACCOUNT_BALANCE) * riskPercent / 100.0;
double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double tickValue = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
double tickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
// === Стоимость одного пункта при объёме в один лот ===
double pointValue = tickValue * (point / tickSize);
double lot = riskMoney / (slPoints * pointValue);
// === Приводим объём к шагу и границам брокера ===
double step = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP);
lot = MathRound(lot / step) * step;
lot = MathMax(SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN), lot);
lot = MathMin(SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX), lot);
return lot;
}
Вызов теперь выглядит коротко: double lot = CalcLot(1.0, 300);. Функции делают код читаемым и позволяют править логику в одном месте, а не по всему проекту. Подписывайтесь на канал, чтобы не пропускать новые уроки по MQL5 — материалы выходят регулярно. Больше учебных материалов также на https://max.ru/channel_mqlmasters и в Телеграме: https://t.me/mqlmasters.
#MQL5 #функции #программирование #MetaTrader5 #MQLMaster