OrderSelect(1,SELECT_BY_POS,MODE_TRADES);
счет начинается с 0.
Спасибо огромное! Помогло, два дня мучался.
код вставляется через SRC на панели инструментов.
зачем заморочки с:
int tiket=OrderTicket(); // Узнаем тикет ордера if (OrderType()==OP_BUY) // Если открытый ордер BUY OrderClose(tiket,1,Bid,2,Blue); // Закрываем BUY if (OrderType()==OP_SELL) // Если открытый ордер SELL OrderClose(tiket,1,Ask,2,Red); // Закрываем SELL
если можно одной сточкой сделать:
if (OrderType()<2) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),2,Red); // Закрываем SELL или buy
Я только начинаю осваивать азы, программирую как сам понимаю. Спасибо за совет, и за вставку кода
ALXIMIKS:
если можно одной сточкой сделать:
Это недокументированная возможность. И в обновленном языке может не работать
Vinin:
Это недокументированная возможность. И в обновленном языке может не работать
Это недокументированная возможность. И в обновленном языке может не работать
То есть в действительности OrderClosePrice() должен работать только для закрытых позиций? Или речь о чём-то другом?
evillive:
То есть в действительности OrderClosePrice() должен работать только для закрытых позиций? Или речь о чём-то другом?
То есть в действительности OrderClosePrice() должен работать только для закрытых позиций? Или речь о чём-то другом?
Об этом самом
Я раньше так и думал что OrderClosePrice() только для закрытых позиций, а оказывается что не только. И про OrderSelect() нигде не написано, что начинает отсчет с 0. Получается что документация как-то не корректно написана.
ivania:
Я раньше так и думал что OrderClosePrice() только для закрытых позиций, а оказывается что не только. И про OrderSelect() нигде не написано, что начинает отсчет с 0. Получается что документация как-то не корректно написана.
Вы о чём это? OrderSelect() нкаких отсчётов не делал и не будет.
evillive:
Вы о чём это? OrderSelect() нкаких отсчётов не делал и не будет.
Я не правильно выразился, отсчет ордеров в OrderSelect(). Если открыто два ордера, то первый выбирается OrderSelect(0,.....) а второй OrderSelect(1,.....)
Вы о чём это? OrderSelect() нкаких отсчётов не делал и не будет.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот код:
void close()
{
Print(" Открыто ордеров = ",OrdersTotal());
if (OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==false) // Если не получилось выбрать ордер..
{
int aa=GetLastError();
Print(" Ордер не выбран ошибка ",aa); // .. то сообщим об этом
return; // Выход по ошибке
}
int tiket=OrderTicket(); // Узнаем тикет ордера
if (OrderType()==OP_BUY) // Если открытый ордер BUY
OrderClose(tiket,1,Bid,2,Blue); // Закрываем BUY
if (OrderType()==OP_SELL) // Если открытый ордер SELL
OrderClose(tiket,1,Ask,2,Red); // Закрываем SELL
return; // Выход
}
Вот лог в тестере:
15:01:30 Торговля_в_тестере: loaded successfully
15:01:30 TestGenerator: current spread 2 used
15:01:30 TestGenerator: unmatched data error (volume limit 15 at 2014.01.17 22:55 exceeded)
15:01:30 Торговля_в_тестере test started
15:02:15 2014.01.17 00:23 Торговля_в_тестере EURUSD,M5: open #1 sell 1.00 EURUSD at 1.3617 ok
15:02:51 2014.01.17 01:08 Торговля_в_тестере EURUSD,M5: Открыто ордеров = 1
15:02:51 2014.01.17 01:08 Торговля_в_тестере EURUSD,M5: Ордер не выбран ошибка 0
Не могу понять почему ордер не выбирается и при этом ошибка 0. Думал если ошибка 0 может ордер все таки выбирается, исключил проверку выбора ордера, все равно не получается
Второй вариант кода:
void close()
{
Print(" Открыто ордеров = ",OrdersTotal());
OrderSelect(1,SELECT_BY_POS,MODE_TRADES); // Выбираем ордер
int tiket=OrderTicket(); // Узнаем тикет ордера
Print(" Тикет ордера = ",tiket);
if (OrderType()==OP_BUY) // Если открытый ордер BUY
OrderClose(tiket,1,Bid,2,Blue); // Закрываем BUY
if (OrderType()==OP_SELL) // Если открытый ордер SELL
OrderClose(tiket,1,Ask,2,Red); // Закрываем SELL
return; // Выход
}
Вот лог в тестере:
15:41:08 Торговля_в_тестере EURUSD,M5: loaded successfully
15:41:08 TestGenerator: current spread 2 used
15:41:08 TestGenerator: unmatched data error (volume limit 15 at 2014.01.17 22:55 exceeded)
15:41:08 Торговля_в_тестере test started
15:41:16 2014.01.17 00:06 Торговля_в_тестере EURUSD,M5: open #1 sell 1.00 EURUSD at 1.3617 ok
15:41:40 2014.01.17 01:01 Торговля_в_тестере EURUSD,M5: Открыто ордеров = 1
15:41:40 2014.01.17 01:01 Торговля_в_тестере EURUSD,M5: Тикет ордера = 0
15:41:40 2014.01.17 01:01 Торговля_в_тестере EURUSD,M5: invalid ticket for OrderClose function
15:41:40 2014.01.17 01:01 Торговля_в_тестере EURUSD,M5: OrderClose error 4051
Подскажи где ошибка?