Посмотрел на форуме несколько тем, связанных с расчетом объема открываемой позиции в лотах, однако полного решения этой задачи так и не нашел. Есть частные решения для конкретных валютных пар, конкретного брокера. Но универсальной формулы для расчета лотности ордера не нашел. Похоже ее не существует. Однако я все-таки попробую начать построение алгоритма расчета объема открываемой позиции в лотах, а там глядишь, и профи подтянутся, подкорректируют формулу...
Итак, необходимо вычислить (рассчитать) объем открываемой позиции в лотах, если известно следующее:- торгуемая валютная пара EURUSD;
- плановый убыток в деньгах, например, MONEY=100 USD;
- плановый убыток в пунктах, например, SL=50 п.
- цена тика (минимальное изменение цены инструмента в валюте депозита), TICK_VALUE =1 USD;
Тогда объем VOLUME открываемой позиции можно расчитать по формуле: VOLUME = MONEY/ (SL * TICK_VALUE);
Для EURUSD получим: VOLUME = 100$ / (50 * 1$) = 2 лота;
Пока все хорошо…
Итак, необходимо вычислить (рассчитать) объем открываемой позиции в лотах, если известно следующее:
- торгуемая валютная пара EURUSD;
Если формула должна быть действительно универсальной, то не "валютная пара", а "инструмент", который вовсе не обязательно будет именно валютной парой. Он может быть акцией, облигацией, фьючем, спредом,...
Иначе это очередное частное решение.
Если формула должна быть действительно универсальной, то не "валютная пара", а "инструмент", который вовсе не обязательно будет именно валютной парой. Он может быть акцией, облигацией, фьючем, спредом,... Иначе это очередное частное решение.
- торгуемый инструмент DE40;
- плановый убыток в деньгах, например, MONEY=100 USD;
- плановый убыток в пунктах, например, SL=1 000 п.
- цена тика (минимальное изменение цены инструмента в валюте депозита), TICK_VALUE =0.01 USD;
- курс EURUSD, RATE = 1.13560;
Тогда объем VOLUME открываемой позиции можно рассчитать по формуле: VOLUME = MONEY/ (SL * TICK_VALUE * RATE);
Подставив значения, получаем VOLUME = 100$ / (1000 * 0.01$ * 1.13560) = 8.80 лота;
Немного обобщив таким образом формулу, добавив в нее для индексов курс национальной валюты, получили тоже адекватный результат…
Если формула должна быть действительно универсальной, то не "валютная пара", а "инструмент", который вовсе не обязательно будет именно валютной парой. Он может быть акцией, облигацией, фьючем, спредом,...
Иначе это очередное частное решение.
Чтобы было общее, надо выкинуть в помойку TickValue TickSize,они только упрощают примерный рассчёт а вообще путают и мешают
и использовать курсы к депозиту и залогу (если валюта залога отличается).
при этом этих формул - полинтернета и в каждой книжке дважды приводятся.
Чтобы было общее, надо выкинуть в помойку TickValue TickSize,они только упрощают примерный рассчёт а вообще путают и мешают
и использовать курсы к депозиту и залогу (если валюта залога отличается).
при этом этих формул - полинтернета и в каждой книжке дважды приводятся.
В принципе, для получения прибыли/убытка за 1 лот (контракт) умножаем стоимость пункта (тика) на количестве тиков (разницу цен открытия-закрытия), т.к. tick_value должно быть уже в валюте депозита, но брокер может эту настройку напутать для какого-либо символа.
ЗЫ. Чтобы не заморачиваться формулами, есть функция OrderCalcProfit.
- www.mql5.com
Ну ты же понимаешь, что прошерстить "пол-интернета" это нереальная задача, а если у тебя под рукой есть пару полезных ссылок, сделай одолжение, пришли, пожалуйста. Мне ведь для дела, я не собираюсь Америку открывать....
не надо ничего шерстить - любой калькулятор риска или форекс или трейдера с пояснениями. В начале произвольной книжки по тематике также написано
торговый инструмент :=: базовый_актив/котировочная_валюта. В базе считается объём, в котировке его цена.
профит_в_котир_валюте = разница_цен * объём_сделки ; разница_цен в точности, с учётом bid,ask
профит_в_валюте_депо=профит_в_котир * курс_депо_к_котировочной_на_момент_закрытия_сделки ; тоже с учетом bid,ask
формулы естественные и донельзя простые, но в них легко накосячить в округлениях лотов и пунктов;
tickValue и tickSize нужны для учёта округлений (заодно спреда и колебаний валюты депо к usd, хотя не факт); подобное только в MQ и встречал, это для "упрощения". Навскидку - tickValue=курс_котир/депо*tickSize, tickSize - постоянный масштабный коэфф, учитывающий разные размеры пунктов и лотов, минимально-измеримая величина. Это чтобы можно было хранить предсрасчитанное значение и не обращаться лишний раз к базе котировок. Но для себя любимого лучше обратиться и использовать курсы как они есть, не экономя микросекунды
в общем случае, в точности, по заранее заданному TP посчитать профит_в_депо нельзя. Только примерно. Потому что будущий курс валюта_депозита/котирочная_инструмента неизвестен
Но как правило депо в долларах и торгуют xxx/usd или usd/xxx - там это упрощается и результат точный.
А когда депо в тугриках и торгуются кроссы - тот ССЗБ
В принципе, для получения прибыли/убытка за 1 лот (контракт) умножаем стоимость пункта (тика) на количестве тиков (разницу цен открытия-закрытия), т.к. tick_value должно быть уже в валюте депозита, но брокер может эту настройку напутать для какого-либо символа.
ЗЫ. Чтобы не заморачиваться формулами, есть функция OrderCalcProfit.
Действительно, функция OrderCalcProfit() снимает головную боль и решает все проблемы с универсальностью, поскольку она как-то учитывает внутри себя рыночное окружение.
Единственное что, эта функция решает только одну задачу - по заданному объему ордера вычисляет размер прибыли/убытка, а мне сейчас надо решить обратную задачу, по Profit/Loss, заданному в валюте и в пунктах - вычислить объем ордера, т.е. в MQL5 не хватает обратной функции типа OrderCalcVolume(). Придется написать такую функцию как надстройку на базе OrderCalcProfit().
Спасибо огромное, Станислав, за наводку!
К сожалению, небольшая засада, ошибка 4014.
| RR_FUNCTION_NOT_ALLOWED | 4014 | Системная функция не разрешена для вызова |
получается так, что системная функция OrderCalcProfit не разрешена для вызова внутри индикатора.
Так что, чтобы получить все плюсы от использования этой функция придется переделать индикатор в советник.
Ну это не беда, все равно планировалось добавить туда торговые функции...
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Во время торговли любым инструментом существуют две прямо противоположные задачи.
Задача №1. По заданному объему открываемой позиции в лотах и размеру SL в пунктах вычислить размер убытка в валюте депозита, чаще всего это USD.
Задача №2. По заданному убытку в валюте депозита (USD) и размеру SL в пунктах вычислить объем открываемой позиции в лотах.
Достаточно решить одну задачу, вторая решается обратными расчетами. Для определенности попробуем найти решение Задачи №1. Какие данные нам для этого понадобятся?
Параметры, которые поставляет брокер:
CONTRACT - размер контракта в единицах базовой валюты
TICK_SIZE - размер тика, минимальный шаг изменения цены инструмента
TICK_VOLUME - цена тика, минимальное изменение цены инструмента в валюте депозита
Параметры, которыми управляет трейдер:
VOLUME - объем открываемой позиции в лотах
OPEN – цена открытия
CLOSE – цена закрытия
В таблице Excel находятся две формулы.
Одна формула предназначена для промежуточного расчета кол-ва пунктов, которая прошла цена от открытия позиции до ее закрытия. Эта формула для ячейки L3 выглядит так: =ЕСЛИ(D3>0;K3-H3;H3-K3)/F3
Вторая формула предназначена для окончательно расчета прибыли/убытков и находится в ячейке M3 первой строки таблицы: =ОКРУГЛ(L3*G3*ABS(D3)*E3*P3;2)
Обе формулы следует протянуть (продублировать) ниже во всех строчках таблицы Excel.
Как видно из приведенной таблицы формула вначале давала правильные расчеты, т.е. они совпадали с фактическими значениями П/У в терминале MT5. Активами здесь выступали разные инструменты: валютные пары, криптовалюты и индексы.
Но далее что-то пошло не так, расчеты П/У для других активов не совпали с фактическими значениями П/У в терминале MT5. Очевидно, что чего-то не хватает, чтобы приведенная выше формула была универсальной…
Прошу подсказать, что не учтено здесь, чтобы формула стала универсальной для расчета П/У ордера для всех инструментов? Ну или наоборот, для расчета объема открываемой позиции по заданному П/У?