В терминале есть полно сделок, с разной лотностью
Нужно рассчитать уровень безубытка.
Как это сделать?
double cExpert::GetTargetPrice(double d_Target) { if (mi_ExpertOrdersTotal == 0) return(0); double d_TargetPrice; double d_TicValue = MarketInfo(Symbol(),MODE_TICKVALUE); int i_Spread = (int)MarketInfo(Symbol(),MODE_SPREAD); double d_BuySum = 0.0; double d_SellSum = 0.0; double d_BuyLots = 0.0; double d_SellLots = 0.0; for (int i = 0; i < mi_ExpertOrdersTotal; i++) { if (mia_OrderType[i] == OP_BUY) { d_BuySum += (mda_OrderOpenPrice[i] * mda_OrderLots[i] + i_Spread * Point * mda_OrderLots[i]); d_BuyLots += mda_OrderLots[i]; } if (mia_OrderType[i] == OP_SELL) { d_SellSum -= (mda_OrderOpenPrice[i] * mda_OrderLots[i] + i_Spread * Point * mda_OrderLots[i]); d_SellLots += mda_OrderLots[i]; } } if (d_BuyLots == d_SellLots) { return(-1); } d_TargetPrice = (d_Target*Point/d_TicValue + d_BuySum + d_SellSum)/(d_BuyLots - d_SellLots); d_TargetPrice = d_TargetPrice - i_Spread * Point; d_TargetPrice = NormalizeDouble(d_TargetPrice,Digits); return(d_TargetPrice); } //+------------------------------------------------------------------+
это так намек, из одной моей ЕА. сейчас нет времени, если не разберетесь, завтра можно поговорить.
это так намек, из одной моей ЕА. сейчас нет времени, если не разберетесь, завтра можно поговорить.
не разобрался)
не разобрался)
double cExpert::GetTargetPrice(double d_Target) { if (OrdersTotal() == 0) return(0); double d_TargetPrice; double d_TicValue = MarketInfo(Symbol(),MODE_TICKVALUE); int i_Spread = (int)MarketInfo(Symbol(),MODE_SPREAD); double d_BuySum = 0.0; double d_SellSum = 0.0; double d_BuyLots = 0.0; double d_SellLots = 0.0; for (int i = 0; i < OrdersTotal(); i++) { if (OrderSelect(i,SELECT_BY_POS)) { if (OrderType() == OP_BUY) { d_BuySum += (OrderOpenPrice() * OrderLots() + i_Spread * Point * OrderLots()); d_BuyLots += OrderLots(); } if (OrderType() == OP_SELL) { d_SellSum -= (OrderOpenPrice() * OrderLots() + i_Spread * Point * OrderLots()); d_SellLots += OrderLots(); } } } if (d_BuyLots == d_SellLots) { return(-1); } d_TargetPrice = (d_Target*Point/d_TicValue + d_BuySum + d_SellSum)/(d_BuyLots - d_SellLots); d_TargetPrice = d_TargetPrice - i_Spread * Point; d_TargetPrice = NormalizeDouble(d_TargetPrice,Digits); return(d_TargetPrice); } //+------------------------------------------------------------------+
а d_Target это что такое?
а d_Target это что такое?
Можете даже не смотреть, это в корне неверное решение.
Поищите на форуме, Я где-то выкладывал правильную функцию с правильным расчётом
Можете даже не смотреть, это в корне неверное решение.
Поищите на форуме, Я где-то выкладывал правильную функцию с правильным расчётом
по какому запросу искать?
по какому запросу искать?
Расчёт безубытка
по какому запросу искать?
Вот почему тот расчёт неверный
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Vitaly Muzichenko, 2017.03.21 23:22
Если позиции висят в рынке долго, то на них идут свопы, и они чаще всего отрицательные(среда=х*3). Плюс ко всему нужно учесть комиссии, если счёт ECN, потому как закрываем по тейк-профиту вроде как в плюс, а на самом деле - минус, не учли расходы.
На скрине первый попавшийся вариант, на 5 позиций - 4 дня свопа, и если планировали взять 10пп, то при простом расчёте возьмём только 6пп прибыли,и это без учёта комиссий(если есть), если учесть все расходы, то закроем просто в ноль, потому как одной цены открытия недостаточно для расчёта.
Поэтому и предложил рассчитывать уровень профита для всех от цены безубытка+добавка в N-пунктов
это как уравнение решать.
пока-что без свопов:
double x=0; double summ_lots=0; double summ_rasst=0; for (int i=OrdersTotal(); i>=1; i--) { if(OrderSelect(i-1,SELECT_BY_POS)==true && OrderMagicNumber()==magic) { if (OrderType()==OP_BUY) { summ_lots=summ_lots+OrderLots(); summ_rasst=summ_rasst-OrderLots()*OrderOpenPrice(); } if (OrderType()==OP_SELL) { summ_lots=summ_lots-OrderLots(); summ_rasst=summ_rasst+OrderLots()*OrderOpenPrice(); } } } summ_rasst=-summ_rasst; if (summ_lots!=0) x=summ_rasst/summ_lots; else x=-1; Alert(x);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В терминале есть полно сделок, с разной лотностью
Нужно рассчитать уровень безубытка.
Как это сделать?