int start() { //---- double SLots=0,Lots=MarketInfo(Symbol(),MODE_MINLOT); double Price=0; double TotalLots=0; double Seredina=0; for (int i=0;i<OrdersTotal();i++)//подсчет овщего объема всех сделок на БАЙ, количества минимальных лотов { if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true&& OrderSymbol()==Symbol()&&OrderType()<=1) { SLots=SLots+OrderLots(); Price=Price+OrderOpenPrice()*(OrderLots()/Lots); TotalLots=TotalLots+(OrderLots()/Lots); } } Seredina=NormalizeDouble(Price/(TotalLots),Digits);//тейк профит по средней цене ObjectCreateTrend("Sredina",OBJ_HLINE,0,Time[0],Seredina,0,0,Lime,0);//рисует красную лиию //---- return(0); }
и Ваша функция не правильная, и моя тоже...
И ещё куча целая по запросу "безубыток" тоже не правильные...
Парни а зачем так сложно?
int ProfitPoint(int ticket) { if(OrderSelect(ticket,SELECT_BY_TICKET)) return(OrderProfit()/(OrderLots()); else return(EMPTY_VALUE); }
узнаём вот так сколько пунктов профита имеет каждый ордер (причём профит выдаёться даже если он отрицательный,
главное чтоб результат не был равен пустому значению EMPTY_VALUE),
затем сумируем все профиты в пунктах по всем ордерам,
полученный результат прибавляем к биду и вуаля вот он уровень безубытка.
зы ах да чуть не забыл нужно ещё отследить какова совокупная позиция ну куда больший обьём открыт на бай или на сел и уровень от текущей цены откладывать в сторону большего обьёма .
и Ваша функция не правильная, и моя тоже...
И ещё куча целая по запросу "безубыток" тоже не правильные...
а смысл такой функции ?
если есть ордера только по одному инструменту, то да можно что-то посчитать, а есть нет, то посчитать нереально..
да вроде и считать-то особо нечего.. получаем суммарный лот (лоты баев прибавляем, селов - отнимаем), исходя из стоимости пункта и суммарного лота
получаем абсолютное значение изменения депозита при изменении цены на 1 пункт (Ц), далее вычисляем суммарную профитность (П) ордеров с учетом свопов и комиссий.. далее делим П на Ц и получаем количество пунктов - расстояние уровня безубытка от текущей цены..соответственно, если значение больше нуля, то из текущей цены вычитаем полученные пункт, меньше - прибавляем..
примерно так..
Почему? Объясните.
Потому что когда много разных открытых ордеров при Ask/Bid равной той что выдаёт одна из функций эквити не равно балансу...
Парни а зачем так сложно?
узнаём вот так сколько пунктов профита имеет каждый ордер (причём профит выдаёться даже если он отрицательный,
главное чтоб результат не был равен пустому значению EMPTY_VALUE),
затем сумируем все профиты в пунктах по всем ордерам,
полученный результат прибавляем к биду и вуаля вот он уровень безубытка.
и Ваша функция не правильная, и моя тоже...
И ещё куча целая по запросу "безубыток" тоже не правильные...
всегда возвращала значение без убытка для системы однотипных ордеров, проверено на практике, конечно без учета свопа.
Однотипных да, не спорю...

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Буду благодарен если найдёте ошибки.