Пропущена функция OrderSelect(ticket)
int ticket; for(int i=OrdersTotal()-1; i>=0; i--) { if(ticket=OrderGetTicket(i)>0 && OrderSelect(ticket)) { if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT) if(OrderGetDouble(ORDER_PRICE_OPEN)<Ask-Delta) {
И вот это вызывает некоторые сомнения:
request.price=(int)(Bid+Delta); // цена для открытия
OrderGetTicket() по индексу тоже выбирает ордер.
Используется OrderGetTicket();
Bid определено ранее...
dimeon:
Перепутаны обязательные поля запроса. Попробуйте так:
int ticket; for(int i=OrdersTotal()-1; i>=0; i--) { if(ticket=OrderGetTicket(i)>0) { if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_LIMIT) if(OrderGetDouble(ORDER_PRICE_OPEN)<Ask-Delta) { MqlTradeRequest request={0}; request.action=TRADE_ACTION_MODIFY; request.order=ticket; request.price=NormalizeDouble(Ask-Delta,_Digits); request.type_time=ORDER_TIME_DAY; MqlTradeResult result={0}; OrderSend(request,result); //--- выведем в лог ответ сервера Print(__FUNCTION__,":",result.retcode); } ... } } }

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
вот лог журнала
2013.01.15 19:44:29 Trades '1000557': failed modify order #1086247531815370752 buy 0.00 RTS-3.13 at market sl: 0.00000 tp: 0.00000 -> 157900.00000 (0.00000), sl: 0.00000 tp: 0.00000 [Invalid request]
При этом открыт ордер BuyLimit лотом 1,0 лотов. Похоже что я его не выбрал. Как это сделать ?