error 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); --так 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
 

Вот что дает справка по твоей ошибке


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);

 
topor123 >>:
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);

 

 
Спасибо --заработало.
 
topor123 >>:
Спасибо --заработало.

Что именно заработало ? :-),если не секрет.

 
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; }
 

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. Перед закрытием лучше бы проверят тип ордера. А то при попытке закрыть отложки выдаст ошибку:

 
Мда ошибочек у меня..
Причина обращения: