[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 607

 
а вот еще вопрос ...функция SecondsAfterOpenLastPos().   если советник был отключен, будет ли эта функция возвращать значение последней ЗАКРЫТОЙ вчера сделки? (проверить не могу - рынок стоит)
 
rigonich:


Есть несколько вариантов решений таких задач. пожалуй, самый простой, перебираете в цикле все ордера, ищете, какой был закрыт последним, смотрите, по стопу или профиту закрылся ваш ордер, запоминаете его тикет, запускаете цикл по новой, если выбран ордер с запомненным вами тикетом, пропускаете его,  находите одер закрытый предпоследним...

P.S. и не MODE_TRADES ,а MODE_HISTORY. 


логика понятна....но для меня это пока в коде записать невозможно...СЛИШКОМ сложно...я вообще еще ни разу не работал с циклами перебора...они мне просто не были нужны... поэтому - темный лес :)))  и те циклы что я видел мне мало понятны...ясно что что-то перебирают...и все. 

 

можно какой-нибудь САМЫЙ ПРОСТОЙ пример...но с пояснениями, чтоб я понял что там и где в цикле происходит ? 

 
lottamer:

может быть можно переделать отсюда два варианта https://forum.mql4.com/ru/38949/page5#434244

 Функция TimeOpenLastPos().

Эта функция возвращает время открытия последней открытой позиций. 

А НУЖНО время открытия последней ЗАКРЫТОЙ позиции

 

или

 

Функция SecondsAfterOpenLastPos().

Эта функция возвращает количество секунд после открытия последней позиций.  

А НУЖНО в часах....а не в секундах.

этот вариант ближе все-таки 

Первый  вариант можно использовать с минимальными переделками(искать в истории и то что вам надо), А насчет второго непонятно, почему вы в него уперлись? подумайте, чего точно вы хотите от своего советника? Чтобы он открывал не больше одной сделки за день?
 
lottamer:
а вот еще вопрос ...функция SecondsAfterOpenLastPos().   если советник был отключен, будет ли эта функция возвращать значение последней ЗАКРЫТОЙ вчера сделки? (проверить не могу - рынок стоит)


Будет.

Точнее будет, но не закрытой, а открытой 

 
rigonich:


На практике это применяется во всех совах, работающих с ордерами. сначала нужно выбрать ордер, а потом с ним можно что либо сделать(просмотреть информацию по ордеру, отправить торговый приказ на сервер о его модификации или закрытии) В терминале есть два способа выбора ордеров, по тикету, то есть номеру ,присвоенному ордеру на сервере, который для конкретного ордера неизменен, или по порядковому номеру (индексу) под которым ордер хранится в терминале. Этот номер может изменяться на каждом тике, в зависимости от того какие и сколько ордеров открываются, устанавливаются, закрываются или удаляются.

Для работы с ордерами организуются циклы перебора ордеров. 


 Ну, например, у меня ордер лимитник на открытии Д1. ТП и СЛ могу не сработать несколько дней, если проверять на наличие ордера.. то он будет в наличии и новый мы не откроем. А значит это не годится. Таким образом, будут пропускаться потенциальные сделки.
 
hoz:

 Ну, например, у меня ордер лимитник на открытии Д1. ТП и СЛ могу не сработать несколько дней, если проверять на наличие ордера.. то он будет в наличии и новый мы не откроем. А значит это не годится. Таким образом, будут пропускаться потенциальные сделки.

Тогда проверяйте время открытия всех ордеров, и ищите,есть ли открытый сегодня.
 
rigonich:
Первый  вариант можно использовать с минимальными переделками(искать в истории и то что вам надо), А насчет второго непонятно, почему вы в него уперлись? подумайте, чего точно вы хотите от своего советника? Чтобы он открывал не больше одной сделки за день?

по совокупности условий - мне нужно ТОЧНО знать час открытия последней сделки  вчера(которая естественно уже закроется к следующему дню-но когда именно не изместно - может сразу, и может рано утром сегодняшнего дня) чтобы дать понять советнику, что вчерашняя сделка НЕ влияет на сегодняшнюю -потому так задумано мной. 

 

А вот сегодняшняя закрытая уже ДОЛЖНА влиять на сегодняшнюю же открытую.  

 

т.е. советник должен утром при включении отличить вчерашнюю сделку от сегодняшней. А сделать это можно только сравнением времени ОТКРЫТИЯ 

 
rigonich:


Будет.

Точнее будет, но не закрытой, а открытой 


а как получить время открытия последней вчера сделки ?
 
rigonich:


Будет.

Точнее будет, но не закрытой, а открытой 


блин точно...ведь там ясно написано 

(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 

 
rigonich:
Первый  вариант можно использовать с минимальными переделками(искать в истории и то что вам надо), А насчет второго непонятно, почему вы в него уперлись? подумайте, чего точно вы хотите от своего советника? Чтобы он открывал не больше одной сделки за день?


нашел вариант.

 

есть такая функция

Функция isTradeToDay().

Эта функция возвращает флаг торгов сегодня. Флаг поднят - True - сегодня открывались позиции. Флаг опущен - False - сегодня не открывалось ни одной позиции

 

только вот интересно - если сделка откроется в 23 часа, а закроется в 4 часа утра , эта функия что покажет в 7 часов утра? были сделки сегодня или нет?

Причина обращения: