Название:PozaCalc Нужен класс и индикатор, построеный на нём. Класс должен вычислять: 1. Размер общей позиции по инструменту с разбивкой на маджики по требованию 2. Расстояние до точки бузубыточности в пунктах 3. Расстояние до среднего тейк профита в пунктах 4. Расстояние до среднего стоп лосса в пунктах 5. Объем доходов/убытоков при срабатывании тейк профита 6. Объем доходов/убытоков при срабатывании стоп лосса 7. Рекомендуемый объем лота для вывода в безубыток позиции при закрытии по среднему тейк профиту 8. Размер убытка, если от текущей точки движение продолжется против совокупной позиции на 1000 пунктов 9. Информацию об убытке/доходе, если ордера будут закрыты сейчас 10. Общая точка безубыточности (алгоритм от программиста см. тут https://www.mql5.com/ru/forum/58229) В классе должна быть настройка "Учитывать отложенные ордера", если выбран учет вместе с отложенными ордерами, то вся калькуляция делается с учетом отложенных ордеров. Организация структуры запроса вычислений из класса обсуждается. Индикатор должен: 0. Использовать класс 1. Формировать таблицу с разбивкой по инструменту 2. Формировать таблицу с разбивкой по маджику, если это выбрано пользователем 3. Формировать таблицу только если по колонке "IF_TP" имеется отрицательное значение (с учетом п. 1 и 2) 4. Подсвечивать отдельным цветом отрицательные значения () 5. Выбирать метод расчета - с отложенными ордерами или без 6. Задавать значение для расчета "Loss_Point" 7. Размер шрифта 8. Если строк большк чем Х (заданное значение), то индикатор перелистывается через Y (время в секундах). 9. Возможна групировка таблицы не по символу, а по маджику. Образец таблицы: Chart Magic Lots BU_Point TP_Point SL_Point IF_TP IF_SL V_for_BU Loss_Point IF_Close EURUSD Итого: 1111 1112 1113 GBPUSD Итого: 1111 1112 1113 USDJPY Итого: 1111 1112 1113 Всего: ____________________________________________ Формируем таблицу из открытых ордеров OpenOrder_[n]_Magic // магическое число ордера с Magic OpenOrder_[n]_Sim // символ (валютная пара) на котором открыт ордер OpenOrder_[n]_Type // тип ордера - Buy/Sell OpenOrder_[n]_Lot // объем лота OpenOrder_[n]_PriceOpen // цена открытия ордера OpenOrder_[n]_PriceNow // текущая цена ордера OpenOrder_[n]_PriceTP // Тейк профит, установленный для ордера OpenOrder_[n]_PriceSL // стоп лосс, установленный для ордера Если выбран способ расчета с учетом отложенных ордеров, то таблица включает в себя отложенные ордера, которые будут открыты при движении позиции к тейк профиту (средний тейк профит). Остальные отложенные ордера далее в расчете не участвуют. OtlosOrder_[n]_Magic // магическое число ордера с Magic OtlosOrder_[n]_Sim // символ (валютная пара) на котором открыт ордер OtlosOrder_[n]_Type // тип ордера - Buy/Sell OtlosOrder_[n]_Lot // объем лота OtlosOrder_[n]_PriceOpen // цена открытия ордера OtlosOrder_[n]_PriceNow // текущая цена ордера OtlosOrder_[n]_PriceTP // Тейк профит, установленный для ордера OtlosOrder_[n]_PriceSL // стоп лосс, установленный для ордера Определяем какая позиция ведущая (покупка или продажа инструмента), для этого сумируем OpenOrder_[n]_Lot с разбивкой на OpenOrder_[n]_Type, какой из объемов будет больше, та позиция и ведущая. Определяем цену среднего тейк профит ведущей позиции: TP_SR=Сумм([OpenOrder_[n++]_PriceTP*OpenOrder_[n++]_Lot])/Сумм(OpenOrder_[n++]_Lot]) В зависимости от ведущей позиции: Для ордеров на покупку вычисляем TP_Point=TP_SR-OpenOrder_[1]_PriceNow Для ордеров на продажу вычисляем TP_Point=OpenOrder_[1]_PriceNow-TP_SR Определяем, попадают ли отложенные ордера типа ведущей позиции в диапазон, между текущей ценой и ценой среднего тейк профита, те что попадают участвуют в дальнейшем расчете, если данная опция включена. Определяем цену среднего стоп лосс ведущей позиции: SL_SR=Сумм([OpenOrder_[n++]_PriceSL*OpenOrder_[n++]_Lot])/Сумм(OpenOrder_[n++]_Lot]) В зависимости от ведущей позиции: Для ордеров на покупку вычисляем SL_Point=OpenOrder_[1]_PriceNow-SL_SR Для ордеров на продажу вычисляем SL_Point=SL_SR-OpenOrder_[1]_PriceNow Определяем цену безубытка ведущей позиции: BU=Сумм([OpenOrder_[n++]_PriceOpen*OpenOrder_[n++]_Lot])/Сумм(OpenOrder_[n++]_Lot]) В зависимости от ведущей позиции: Для ордеров на покупку вычисляем BU_Point=BU-OpenOrder_[1]_PriceNow Для ордеров на продажу вычисляем BU_Point=OpenOrder_[1]_PriceNow-BU Определяем доход при закрытии по тейк профиту: В зависимости от ведущей позиции: Для ордеров на покупку вычисляем IF_TP=[OpenOrder_[n++]_PriceTP-OpenOrder_[n++]_PriceOpen)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте" Для ордеров на продажу вычисляем IF_TP=[OpenOrder_[n++]_PriceOpen-OpenOrder_[n++]_PriceTP)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте" Определяем доход при закрытии по стоп лоссу: В зависимости от ведущей позиции: Для ордеров на покупку вычисляем IF_SL=[OpenOrder_[n++]_PriceOpen-OpenOrder_[n++]_PriceSL)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте" Для ордеров на продажу вычисляем IF_SL=[OpenOrder_[n++]_PriceSL-OpenOrder_[n++]_PriceOpen)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте" Определяем рекомендумемый дополнительный объем ордера для закрытия позиции в безубыток по среднему тейк профиту: В зависимости от ведущей позиции: Для ордеров на покупку вычисляем V_for_BU= [TP_SR-OpenOrder_[n++]_PriceOpen)*OpenOrder_[n++]_Lot]/TP_SR-OpenOrder_[n]_PriceNow Для ордеров на продажу вычисляем V_for_BU=[OpenOrder_[n++]_PriceOpen-TP_SR)*OpenOrder_[n++]_Lot]/OpenOrder_[n]_PriceNow-TP_SR Определяем какой будет убыток, через Х (1000) пунктов, если цена продолжит движение против ведущей позиции: Для ордеров на покупку вычисляем Loss_Point=[OpenOrder_[n++]_PriceNow-Х*Point-OpenOrder_[n++]_PriceOpen)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте" Для ордеров на продажу вычисляем Loss_Point=[OpenOrder_[n++]_PriceOpen-OpenOrder_[n++]_PriceNow+Х*Point)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте" Опредеделяем доход при закрытии по рынку: В зависимости от ведущей позиции: Для ордеров на покупку вычисляем IF_Close=[OpenOrder_[n++]_PriceNow-OpenOrder_[n++]_PriceOpen)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте" Для ордеров на продажу вычисляем IF_Close=[OpenOrder_[n++]_PriceOpen-OpenOrder_[n++]_PriceNow)*OpenOrder_[n++]_Lot]*"Стоимость 1 пункта в валюте депозита при 1 лоте"