Добрый день, нужно выбрать последнюю открытую позицию - пишу код:
временами выбирает, временами нет. через
та же ерунда. открытые позиции есть, т.к. перед этим идет проверка
почему так? как сделать, чтоб выбор был не изберательным, запоминать позицию в динамический массив не могу, т.к. у меня происходит PositionCloseBy с разными объемами
Номер тикета или положение в списке не есть гарантия очередности. Нужно проверять время открытия позиции:
//+------------------------------------------------------------------+ //| Calculate all positions | //+------------------------------------------------------------------+ void CalculateAllPositions(datetime &time_last_buy,datetime &time_last_sell) { time_last_buy=0; time_last_sell=0; for(int i=PositionsTotal()-1; i>=0; i--) if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==InpMagic) { if(m_position.PositionType()==POSITION_TYPE_BUY) { if(m_position.Time()>time_last_buy) // the last position of "BUY" is found { time_last_buy=m_position.Time(); } continue; } else if(m_position.PositionType()==POSITION_TYPE_SELL) { if(m_position.Time()>time_last_sell) // the last position of "SELL" is found { time_last_sell=m_position.Time(); } continue; } } }
В переменные time_last_buy и time_last_sell запишутся последняя позиция BUY и SELL соответственно. Поиск производится по символу заданному в m_symbol и только с уникальным идентификатором InpMagic.
Добавлено: m_symbol - объект класса CSymbolInfo
Номер тикета или положение в списке не есть гарантия очередности. Нужно проверять время открытия позиции:
В переменные time_last_buy и time_last_sell запишутся последняя позиция BUY и SELL соответственно. Поиск производится по символу заданному в m_symbol и только с уникальным идентификатором InpMagic.
Добавлено: m_symbol - объект класса CSymbolInfo
Спасибо, но что по поводу изберательности выбора позиции для работы с ней?
ulong getLastTicket() { datetime time = 0; ulong ticket = 0; for (int i = 0; i < (PositionsTotal() - 1); i++) { if (time < pos.Time()) { time = pos.Time(); ticket = pos.Ticket(); } }Print(ticket); return ticket; }
открытая позиция есть всегда, но иногда возвращает 0
Спасибо, но что по поводу изберательности выбора позиции для работы с ней?
открытая позиция есть всегда, но иногда возвращает 0
Нет выбора позиции по индексу. Отсюда и избирательность. Дали же выше пример.
Спасибо, но что по поводу изберательности выбора позиции для работы с ней?
открытая позиция есть всегда, но иногда возвращает 0
Никогда не обходите список позиций ОТ нуля. Обходите ВСЕГДА К нулю.
for(int i=PositionsTotal()-1; i>=0; i--)
Также алгоритм работы со списком ОБЯЗАТЕЛЬНО включает в себя ВЫБОР позиции по индексу в списке.
if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
Никогда не обходите список позиций ОТ нуля. Обходите ВСЕГДА К нулю.
Также алгоритм работы со списком ОБЯЗАТЕЛЬНО включает в себя ВЫБОР позиции по индексу в с
Никогда не обходите список позиций ОТ нуля. Обходите ВСЕГДА К нулю.
Также алгоритм работы со списком ОБЯЗАТЕЛЬНО включает в себя ВЫБОР позиции по индексу в списке.
Спасибо, перебор к нулю - это "правило хорошего тона" или обусловлено чем-то?
Спасибо, перебор к нулю - это "правило хорошего тона" или обусловлено чем-то?
ОТкройте пять позиций (чтобы их различить лотами 0.01, 0.02, 0.03, 0.04 и 0.05).
Затем испытайте в цикле закрытие: если закрывать ОТ нуля и если закрывать К нулю. Только практика позволит запомнить принципы работы, советы, как правило, не откладываются на подкорке.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день, нужно выбрать последнюю открытую позицию - пишу код:
временами выбирает, временами нет. через
та же ерунда. открытые позиции есть, т.к. перед этим идет проверка
почему так? как сделать, чтоб выбор был не изберательным, запоминать позицию в динамический массив не могу, т.к. у меня происходит PositionCloseBy с разными объемами