"В случае, если программа пытается изменить положение стоп-приказа так, что он оказывается ближе к рынку, чем на минимально допустимую дистанцию, то такой торговый приказ будет отклонён клиентским терминалом, и исполнение функции OrderModify() закончится неудачей (ошибка 130). Поэтому в программе обязательно должен быть предусмотрен блок вычислений, учитывающий это ограничение."
Поиск в помощь.
сделайте так
double StopLvl=MarketInfo(Symbol(), MODE_STOPLEVEL)*Point; tp=NormalizeDouble(MathMax(dMABidMain+dSpreadCurr*e_dTakeProfitInSpreads, Bid+StopLvl), Digits)
Спасибо, попробую.
Но все равно не понимаю. Я смотрю на значение MODE_STOPLEVEL в логах и оно нулевое (NewStpLvl=0.00000). И значение выражения (dMABidMain+dSpreadCurr*e_dTakeProfitInSpreads) я тоже вывожу в лог (TakeProfit=1.26573) и видно, что оно больше Bid (Bid=1.26432).
Что, от момента вызова функции OrderSend до вызова dNewStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); значение StopLevel может измениться с ненулевого на нулевое?
Спасибо, попробую.
Но все равно не понимаю. Я смотрю на значение MODE_STOPLEVEL в логах и оно нулевое (NewStpLvl=0.00000). И значение выражения (dMABidMain+dSpreadCurr*e_dTakeProfitInSpreads) я тоже вывожу в лог (TakeProfit=1.26573) и видно, что оно больше Bid (Bid=1.26432).
Что, от момента вызова функции OrderSend до вызова dNewStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); значение StopLevel может измениться с ненулевого на нулевое?
Не верь глазам своим.
Спасибо, попробую.
Но все равно не понимаю. Я смотрю на значение MODE_STOPLEVEL в логах и оно нулевое (NewStpLvl=0.00000). И значение выражения (dMABidMain+dSpreadCurr*e_dTakeProfitInSpreads) я тоже вывожу в лог (TakeProfit=1.26573) и видно, что оно больше Bid (Bid=1.26432).
Что, от момента вызова функции OrderSend до вызова dNewStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); значение StopLevel может измениться с ненулевого на нулевое?
Я так понимаю у вас Broco или FXCM?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
Подскажите пожалуйста, где может быть ошибка у меня в коде.
Я пытаюсь открыть позицию, но получаю ошибку 130 - invalid stops.
Вот код:
iTicket = OrderSend(Symbol(), OP_BUY, e_dLotSize, NormalizeDouble(Ask, Digits), 10, 0.0,
NormalizeDouble(dMABidMain + dSpreadCurr * e_dTakeProfitInSpreads, Digits));
if (iTicket > 0)
{
Print(g_strInf, "Opened new BUY positions #", iTicket,
", Ask=", DoubleToStr(Ask, Digits),
", Bid=", DoubleToStr(Bid, Digits),
", OpenPrice=", DoubleToStr(Ask, Digits),
", TakeProfit=", DoubleToStr(dMABidMain + dSpreadCurr * e_dTakeProfitInSpreads, Digits),
", LotSize=", e_dLotSize
);
}
else
{
iErrorCode = GetLastError();
dNewStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
dNewFreezeLevel = MarketInfo(Symbol(), MODE_FREEZELEVEL);
Print(g_strErr, "Failed to open new BUY position",
", NewStpLvl=", DoubleToStr(dNewStopLevel, Digits),
", NewFrzLvl=", DoubleToStr(dNewFreezeLevel, Digits),
", Ask=", DoubleToStr(Ask, Digits),
", Bid=", DoubleToStr(Bid, Digits),
", OpenPrice=", DoubleToStr(Ask, Digits),
", TakeProfit=", DoubleToStr(dMABidMain + dSpreadCurr * e_dTakeProfitInSpreads, Digits),
", LotSize=", e_dLotSize,
", ErrCode=", iErrorCode, ", ", ErrorDescription(iErrorCode)
);
}
Вот логи:
ERR Failed to open new BUY position, NewStpLvl=0.00000, NewFrzLvl=0.00000, Ask=1.26506, Bid=1.26432, OpenPrice=1.26506, TakeProfit=1.26573, LotSize=0.1, ErrCode=130, invalid stops
Видно, что пытаюсь купить по цене Ask. TakeProfit поставлен вроде правильно. И все равно не срабатывает. Может, я где-нибудь Bid/Ask перепутал?
Грешил на StopLevel, но он нулевой. Может нельзя выставлять уровень Take Profit одновременно с открытием позиции?
Как узнать в чем проблема?
Можно предположить, что с момента получения тика цены Bid/Ask изменились, но ведь тогда ошибка должна быть уже другой, верно?
Или нельзя не указывать stop loss (ставить нулевым) при задании take profit?
Спасибо.