Добрый день всем. Пишу свой советник. По какой-то мне непонятной причине функция закрытия ордера корректно не функционирует так как мне нужно.
Посматрите пж-та где ошибка.
В коде допускается один ордер.
Ну и стиль у Вас... Не вижу где перед закрытием проверка на тип ордера OP_BUY или OP_SELL, хотя не зная логики эксперта сложно сказать нужна она или нет. Добавьте проверки типа if(OrderType()==OP_BUY) перед закрытием, может статься что Вы закрываетесь не по той цене.
ERR_INVALID_PRICE | 129 | Неправильная цена |
Походу и правда при закрытие попутаны Bid и Ask...
if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC_NUMBER) {
while(true) {
if(Oper == STATUS_BUY) {
ClosePrice = MarketInfo(OrderSymbol(), MODE_BID); ClosePrice = NormalizeDouble(ClosePrice, Digits);
result = OrderClose(OrderTicket(), OrderLots(), ClosePrice, 10, Red);
} else {
ClosePrice = MarketInfo(OrderSymbol(), MODE_ASK);
ClosePrice = NormalizeDouble(ClosePrice, Digits);
result = OrderClose(OrderTicket(), OrderLots(), ClosePrice, 10, Blue);
}
Вы тут не верно определяете тип открытой позиции.
есть ф-ия OrderType() она возвращает какого типа выбранная позиция
Вместо этого напишите
if(Oper == STATUS_BUY) {
if(OrderType() == OP_BUY) и все будет корректно.
Хотя вы и так сильно намудрили. я бы разнес такие действия как открытие закрытие в отдельные ф-ии. Один раз написали забыл как про это))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Посматрите пж-та где ошибка.
В коде допускается один ордер.