Ситуация такая! Мой эксп использует скальпинг! открывает ордера через step. Хочу воспользоваться данной функцией для закрытия всех ордеров в профит n. Подскажите как реализовать это?
- Есть ли команды доступа к истории счета?
- В чем выдает профит функция OrderProfit?
- OrderProfit()
Falmera:
Ситуация такая! Мой эксп использует скальпинг! открывает ордера через step. Хочу воспользоваться данной функцией для закрытия всех ордеров в профит n. Подскажите как реализовать это?
Ситуация такая! Мой эксп использует скальпинг! открывает ордера через step. Хочу воспользоваться данной функцией для закрытия всех ордеров в профит n. Подскажите как реализовать это?
Циклом проходите по всем рыночным ордерам накапливая общий профит по каждому, при достижении заданного уровня n - закрываете все.
У меня подобная конструкция реализована следующим образом:
Замечания: по стратегии одновременно в рынке только один ордер, закрытие по достижению общего лосса. Думаю, труда переделать не составит...
extern int MaxLoss = 90; // Максимально допустимая просадка в процентах от баланса int start() // -----------------------СТАРТ ЭКСПЕРТА--------------- { // ------------------------------------------------Ищем наш ордер--------------------------------- int orderType; for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) { if (!OrderSelect(orderIndex, SELECT_BY_POS)) { continue; } if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) { continue; } orderType = OrderType(); if ((orderType != OP_BUY) && (orderType != OP_SELL)) { continue; } ticket = OrderTicket( ); // Номер ордера orderLots = OrderLots(); // Lots orderProfit = OrderProfit() + OrderSwap(); // Profit Price = OrderOpenPrice(); // Цена открытия рыночного ордера SL = OrderStopLoss(); // Значение StopLoss ордера TP = OrderTakeProfit(); // Значение TakeProfit ордера if (ticket>0) // Если позиция открылась { while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбран { Sleep(100); } double OpenPrice=OrderOpenPrice(); } // Проверка на предельную просадку double loss = - ((orderProfit * 100.0) / AccountBalance()); if (loss > MaxLoss) { Print ("MaxLoss"); CloseAllOrders(MagicNumber); IsExpertFailed = true; return (0); } } }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь