Дак, вроде бы, видел в ветке И.Кима такую функцию -
Функция GetAmountLotFromOpenPos(). Стр.16
Данная функция возвращает сумму лотов открытых позиций. Более точный отбор учитываемых позиций задаётся внешними параметрами:
sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru/ | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает сумму лотов открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ( "" - любой символ, | //| NULL - текущий символ) | //| op - торговая операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) { double l=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { l+=OrderLots(); } } } } } } return(l); }
Если бы...
*
Простые вычисленя не проблема! и уже решены.
Однако возникает погрешность ввиду того что влияет цена инструмента для таких расчётов.
Именно поэтому выше, как основа, принята фомула расчёта а не значения возвращаемые готовой функцией
MarketInfo(Symbols(),MODE_MARGINREQUIRED);
*
Насколько велика погрешность сложно судить...
Посмотреть что и как можно использовав этот индикатор.
Желательно что-бы позы были как можно дальше по цене от текущей.
(и не важно в какую сторону...)
*
Общий смысл расчёта таков:
- вычисляется маржа каждой позы по отдельности
а затем уже с учётом особенностей корректируются перекрытые из них.
MarketInfo(Symbols(),MODE_MARGINHEDGED);
*
Как вариант обьяснения, мы все видим общую сумму маржи в терминале.
Так вот из этой общей надо вычленить "свою" по инструментам...
Мне, почему-то казалось, что это очень просто.
Из Вашего примера
int by=1+2=3;
int sl=2+1+1=4;
if(sl>by) marga=(sl-by)*маржа на чистую сделку+by*маржа на перекрытую сделку;
else marga=(by-sl)*маржа на чистую сделку+sl*маржа на перекрытую сделку;
ЛЮди, помогите пожалуйста. Я понеимаю, что на странице написано уже все, но не получается. КАК ПОСЧИТАТЬ СУММУ ОТКРЫТЫХ ЛОТОВ???
Так, выше функция, рабочая.
Скрипт, пробуем.
#property strict //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Alert(GetAmountLotFromOpenPos()); } //+------------------------------------------------------------------+ /* Данная функция возвращает сумму лотов открытых позиций. Более точный отбор учитываемых позиций задаётся внешними параметрами: sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент. op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию. mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор. */ //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru/ | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает сумму лотов открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ( "" - любой символ, | //| NULL - текущий символ) | //| op - торговая операция ( -1 - любая позиция) | //| mn - MagicNumber ( -1 - любой магик) | //+----------------------------------------------------------------------------+ double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) { double l=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { l+=OrderLots(); } } } } } } return(l); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как?
*
Требует пояснения того что ищу.
К примеру имеем 5 открытых позиций по одому инструменту:
1 лот бай
2 лота селл
2 лота бай
1 лот селл
1 лот селл
*
т.е. из всего имеем 1 лот селл практически,
3х3 перекрытые, (1+2=2+1), или = 3 лота перекрытых.
вот их то и требуется вычислить средствами мкл.
*
Понадобилось для корректного и точного расчёта маржи занятой сумарной позицией
с учётом цен открытия каждого ордера в ней а так-же особенностей хеджированой маржи...
*
Рассчитать по каждой позиции (только для пар: валюта/валюта_депо) не сложно.