Открыл 2 позиции - №4790253 и №4790255, запустил такой код:
Print( "OrderSelect( 4790253, SELECT_BY_TICKET ) = ", OrderSelect( 4790253, SELECT_BY_TICKET ) ); Print( "OrderSelect( 4790253, SELECT_BY_TICKET, MODE_TRADES ) = ", OrderSelect( 4790253, SELECT_BY_TICKET, MODE_TRADES ) ); Print( "OrderSelect( 4790254, SELECT_BY_TICKET ) = ", OrderSelect( 4790254, SELECT_BY_TICKET ) ); Print( "OrderSelect( 4790254, SELECT_BY_TICKET, MODE_TRADES ) = ", OrderSelect( 4790254, SELECT_BY_TICKET, MODE_TRADES ) ); Print( "OrderSelect( 4790255, SELECT_BY_TICKET ) = ", OrderSelect( 4790255, SELECT_BY_TICKET ) ); Print( "OrderSelect( 4790255, SELECT_BY_TICKET, MODE_TRADES ) = ", OrderSelect( 4790255, SELECT_BY_TICKET, MODE_TRADES ) );Получил в журнале:
00:48:38 __________ EURUSD,H1: OrderSelect( 4790253, SELECT_BY_TICKET ) = 1
00:48:38 __________ EURUSD,H1: OrderSelect( 4790253, SELECT_BY_TICKET, MODE_TRADES ) = 1
00:48:38 __________ EURUSD,H1: OrderSelect( 4790254, SELECT_BY_TICKET ) = 0
00:48:38 __________ EURUSD,H1: OrderSelect( 4790254, SELECT_BY_TICKET, MODE_TRADES ) = 0
00:48:38 __________ EURUSD,H1: OrderSelect( 4790255, SELECT_BY_TICKET ) = 1
00:48:38 __________ EURUSD,H1: OrderSelect( 4790255, SELECT_BY_TICKET, MODE_TRADES ) = 1
00:48:38 __________ EURUSD,H1: removed
Ситуация следующая:
OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES);
ticket отсутствует, а функция продолжает возвращать true.
Тикет присутствует. В истории сделок.
В документации, кстати, все есть.
bool OrderSelect( | int index, int select, int pool=MODE_TRADES) |
index | - | Позиция ордера или номер ордера в зависимости от второго параметра. |
select | - | Флаг способа выбора. Mожет быть одним из следующих величин: SELECT_BY_POS - в параметре index передается порядковый номер позиции в списке, SELECT_BY_TICKET - в параметре index передается номер тикета. |
pool | - | Источник данных для выбора. Используется, когда параметр select равен SELECT_BY_POS. Mожет быть одной из следующих величин: MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров, MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров. |
Тикет присутствует. В истории сделок.
Кстати, мой предыдущий пост это иллюстрирует ;)
Ситуация следующая:
OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES);
ticket отсутствует, а функция продолжает возвращать true.
Весь эксперт в прикреплённом файле.
Имею похожую проблему. Пытаюсь закрыть несколько ордеров. В цикле для первого ордера с номером позиции "0" все нормально, а второй ордер с номером позиции "1" не закрывает. По тексту кода. OrderSelect дает false, но ошибки нет. Если убрать return в анализе ошибки, то выясняется, что Ticket = Lot = 0 и Close не работает. Прошу помочь.
for(i = 0; i < Total; i++)
{
RefreshRates();
if(Errors() == false)
return(-1);
Print("Close: OrderSelect_b");
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false)
{
err = GetLastError();
Print("Error-oшибка=", err, "-", ErrorDescription(err));
return(-1);
}
Print("Close: OrderSelect-f");
Tip = OrderType();
Ticket = OrderTicket();
Lot = OrderLots();
if (Tip == OP_BUY)
Price_Cls = Bid; // Для ордеров Buy
if (Tip == OP_SELL)
Price_Cls = Ask; // Для ордеров Sell
if(ExtDebug)
Print("Close: Закрываем ордер c Ticket=", Ticket,
", Lot=", Lot,
", Price=", Price_Cls,
", Slip=", slip,
", freez=", freez,
", Total=", Total,
", i=", i);
OrderClose(Ticket, Lot, Price_Cls, slip, Red);//Закрыть ордер !:)
Errors();
18:00:58 2008.10.27 04:47 1F_MA_ZZ EURUSD,M1: Close: OrderSelect-f
18:00:58 2008.10.27 04:47 1F_MA_ZZ EURUSD,M1: Close: Закрываем ордер c Ticket=6, Lot=0.7, Price=1.259, Slip=0, freez=0, Total=2, i=0
18:00:58 2008.10.27 04:47 1F_MA_ZZ EURUSD,M1: close #6 sell 0.70 EURUSD at 1.2626 sl: 1.2626 at price 1.2590
18:00:58 2008.10.27 04:47 1F_MA_ZZ EURUSD,M1: Close: Закрыли ордер c Ticket=6, Lot=0.7, Price=1.259, Slip=0, freez=0, Total=2, i=0
18:00:58 2008.10.27 04:47 1F_MA_ZZ EURUSD,M1: Close: OrderSelect_b
18:00:58 2008.10.27 04:47 1F_MA_ZZ EURUSD,M1: Error-oшибка=0-no error
Имею похожую проблему. Пытаюсь закрыть несколько ордеров. В цикле для первого ордера с номером позиции "0" все нормально, а второй ордер с номером позиции "1" не закрывает.
Потому как после закрытия позиции с номером "0", позиция с номером "1" становится позицией с номером "0")
Исправьте for(i = 0; i < Total; i++) на for(i = Total-1; i >= 0; i--)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES);
ticket отсутствует, а функция продолжает возвращать true.
Весь эксперт в прикреплённом файле.