- Ошибка 130 в OrderSend
- [ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда.
- Помогите с OP_SELL
Вот что дает справка по твоей ошибке
4107 | Неправильный параметр цены для торговой функции |
OrderSend(Symbol(), OP_SELLLIMIT, 1,NormalizeDouble((Bid-250*Point),0), 3, NormalizeDouble((Bid-250*Point)+100*(Bid-250*Point),0),NormalizeDouble((Bid-250*Point)-30*(Bid-250*Point),0), "", 0, 0, Red);
//Ошибки выделил подчеркнутым курсивом.
1. Если тебе нужно установить отложенный ордер на продажу ниже текущей цены, то вместо OP_SELLLIMIT нужно указать OP_SELLSTOP.
2. У тебя NormalizeDouble() округляет цены до 0 цифр после запятой, это не совсем верно. Лучше округля до Digits цифр после хапятой.
Например,
NormalizeDouble((Bid-250*Point),Digits);
OrderSend(Symbol(), OP_SELLLIMIT, 1,NormalizeDouble((Bid-250*Point),0), 3, NormalizeDouble((Bid-250*Point)+100*(Bid-250*Point),0),NormalizeDouble((Bid-250*Point)-30*(Bid-250*Point),0), "", 0, 0, Red); --так 4107 OrderSend(Symbol(), OP_SELLLIMIT, 1(Bid-250*Point), 3,(Bid-250*Point)+100*Point,(Bid-250*Point)-30*Point, "", 0, 0, Red); -так 130 Уже и так и этак и с нормал и без. Задача простая при открытии покупки открывается отложенный ордер на продажу ниже на 250 пунктов. Как правильно а то тестер error да error
Хм...
Я написал бы так:
OrderSend(Symbol(),OP_SELLSTOP,Lot,Bid-250*Point,3,Ask-250*Point+100*Point,Ask-250*Point-30*Point,0,Red);
Кстати во втором варианте у тебя отсутствует обьем сделки:
OrderSend(Symbol(), OP_SELLLIMIT, 1(Bid-250*Point), 3,(Bid-250*Point)+100*Point,(Bid-250*Point)-30*Point, "", 0, 0, Red);
4108 | Неверный номер тикета |
Ну блин не пишите так:
OrderSend(Symbol(), OP_SELLSTOP, 1,NormalizeDouble((Bid-250*Point),Digits), 3, NormalizeDouble(((Bid-250*Point)+100*Point),Digits),NormalizeDouble(((Bid-250*Point)-30*Point),Digits), "", 0, 0, Red) Такой вариант заработал-- зато если покупка выходит по профиту он должен закрываться а он теперь error 4108 Код ниже: while (OrdersTotal()>0) { if (OrderType()==OP_SELL) break; // выделим первую позицию или ордер в списке if (!OrderSelect(0, SELECT_BY_POS)) break; if ((OrderType()==OP_BUY) &&(OrderType()==OP_SELLSTOP)) price = MarketInfo(OrderSymbol(), MODE_BID); else price = MarketInfo(OrderSymbol(), MODE_ASK); if (!OrderClose(OrderTicket(), OrderLots(), price, 3)) { Print("Ошибка ", GetLastError()," при закрытии позиции ", OrderTicket()); Sleep(10000); RefreshRates(); break; }
Тут когда пишите можно вставлять код !
Нажми где написано: "обычный текст", там есть вариант: "код".
Когда хотите вставить код тыкайте туда!
Мда. Да у тебя тут ошибок...
1. if ((OrderType()==OP_BUY) &&(OrderType()==OP_SELLSTOP))
ордер не может быть одновременно двух типов Buy и BuyStop
тут скорее всего нужно || (ИЛИ)
if ((OrderType()==OP_BUY) || (OrderType()==OP_SELLSTOP))
2. Перед закрытием лучше бы проверят тип ордера. А то при попытке закрыть отложки выдаст ошибку:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования