Нужна помощь с закрытием ордеров! - страница 2

 
nord >>:

может сделать так:

if((TimeHour(TimeCurrent())*60 +TimeMinute(TimeCurrent()))*60 > iTime(NULL,240,0)+(3*60+55)*60)

iTime() возвращает значение в секундах?

По моему надо использовать функции Hour() и Minute()

"Функции TimeSeconds (), TimeMinute(), TimeHour(), TimeDay(), TimeMonth(), TimeYear(), TimeDayOfWeek () и TimeDayOfYear()
Это - группа подобных функций, возвращающих соответственно количество секунд, прошедших с начала минуты, минуту, час, день, месяц, год, день недели и день в году для указанного времени"


Ну вот опоздал с ответом, все уже написали

 
zxc >>:

Не уверен, но попробуйте так:


Осталось только решить как в пятницу вечером закрыться и всё ОК. :)

 

if(TimeCurrent() > iTime(NULL,240,0) + (3*60 +55)*60 ) OrderClose(....);

Так выполнится с любого таймфрейма. Но учтите, что опрос условия должен быть на каждом тике или поминутно.

 
Murman >>:

Осталось только решить как в пятницу вечером закрыться и всё ОК. :)

 

Добавить проверку дня недели:

if(((Hour()==3 || Hour()==7 || Hour()==11 || Hour()==15 || Hour()==19 || Hour()==23) && Minute()>=55)||(DayOfWeek()==5 && Hour()==22 && Minute()>=55))
  {
   OrderClose(....);
  }
 
nord >>:

По моему надо использовать функции Hour() и Minute()

В справке внимательно почитайте об этих функциях.

Minute() и TimeMinute(TimeCurrent()) вернут одно и тоже. Только в первом случае мы имеем данные с момента старта программы, а

во-втором последнего тика, т.е. более свежие. В принципе это мелочи. Но в некоторых случаях необходимо иметь самые последние даннные.



PS. Особенно если использовать Seconds (). :)
 
Murman >>:

В справке внимательно почитайте об этих функциях.

Minute() и TimeMinute(TimeCurrent()) вернут одно и тоже. Только в первом случае мы имеем данные с момента старта программы, а

во-втором последнего тика, т.е. более свежие. В принципе это мелочи. Но в некоторых случаях необходимо иметь самые последние даннные.



PS. Особенно если использовать Seconds (). :)

1. Конечно, использование TimeCurrent() предпочтительнее.

2. Программа стартует каждый тик. Согласен по поводу секунд, но для пяти минут это несущественно.

 
zxc >>:

1. Конечно, использование TimeCurrent() предпочтительнее.

2. Программа стартует каждый тик. Согласен по поводу секунд, но для пяти минут это несущественно.

В одном из топиков мне ответили так:

xrust >>:

по коду . смотрим что говорит сцылка :

int Hour( )

Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).
Замечание: при тестировании последнее известное время сервера моделируется.

это значит что во время исполнения блока старт() эти данные не обновляються, кончно для часов это особой роли не имеет, но вот задерка по минутам будет солидной

опять же обращаемся к сцылке :

и находим там вот это !

int TimeHour( datetime time)
Возвращает час для указанного времени.

Особо в подробности я вдаваться не стал, просто пишу как правильно.

 
Всем спасибо, теперь стало понятно
 
zxc >>:

Добавить проверку дня недели:

Не на всех серверах пятница заканчивается в 23:00. ;)

 
Murman >>:

В одном из топиков мне ответили так:

Особо в подробности я вдаваться не стал, просто пишу как правильно.

Правильно Вам ответили.

Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Это значит, что фунция start() запускает программу с каждым приходом нового тика. Дальше программа занимается вычислениями и после этого проинимает решение - открывать/неоткрывать ордер. Но если вычисления слишком продолжительные, то советник, пока он занимается вычислениями, может не заметить прихода еще одного или нескольких новых тиков.

Допустим, новый тик поступил в N минут 20 секунд, а вычисления (в процессе выполнения программы) до принятия решения открытия ордера заняли 4 секунды. И того у нас сейчас N минут 24 секунды.

Тогда функция Seconds( ) вернет значение 20 секунд (старт программы), а функция TimeCurrent() покажет время прихода последней котировки.

Если котировки (новые тики) за эти 4 секунды пока советник думал (время выполнения программы) не поступали - функция Seconds( ) и функция TimeCurrent() для нас равнозначны.

Если через 3 секунды (в N минут 23 секунды) поступил новый тик, а советник этот тик не заметил т.к. занимается расчетами, то в N минут 24 секунды, когда советник решит проверить условие открытия ордера от времени то - функция Seconds( ) вернет 20 секунд, а TimeCurrent() покажет время прихода последнего тика (N минут 23 секунды).

-------

Вывод:

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

Для скорострельных советников различий в использовании этих функций нет (кроме синтаксиса и чуть другой логики в коде советника).

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