нужен кусок кода...

 

Доброго времени суток!

Кто-нибудь может подсказать кусок кода, позволяющий совершать определенные действия, например, каждые 10 мин.

 

Если (поступил сигнал начать отсчёт очередной 10-ти минутки), то {

1. Посмотреть текущее время

2. Проверить, а ни прошло ли 10 минут (сравнить со стартовым, ранее запомненным).

3. Если прошло, то выполнить действие и снова запомнить, уже новое стартовое время.

}

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

 
drknn:

Если (поступил сигнал начать отсчёт очередной 10-ти минутки), то {

1. Посмотреть текущее время

2. Проверить, а ни прошло ли 10 минут (сравнить со стартовым, ранее запомненным).

3. Если прошло, то выполнить действие и снова запомнить, уже новое стартовое время.

}

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


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

Объявляем перемнную

datetime StartTime=0;

Можно в блоке инициализации добавочно прописать

StartTime=0;

Затем в старте советника пишем:

if(StartTime=0){
StartTime=TimeCurrent();// устанавливаем счётчик времени в стартовое состояние
// вычисляем, сколько секунд в 10 минутах
// 60 секунд - это одна минута, 60*10 = 600 секунд в 10 минутах
}
else{
if(TimeCurrent()-StartTime>=600){// Прошло 10 минут
StartTime=TimeCurrent();// устанавливаем снова счётчик времени в стартовое состояние, после чего:
// выполняем какие-то действия
}
}

 
Вам нужен GetTiickCount() к нему прибавляйте(вычитайте) свои 10 минут (10*60*100) . Можно время как таковое и не использовать.
 
благодарю за ответы ))
 
zhuki:
Вам нужен GetTiickCount() к нему прибавляйте(вычитайте) свои 10 минут (10*60*100) . Можно время как таковое и не использовать.

int GetTickCount( ) 
Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. 
Счетчик ограничен разрешающей способностью системного таймера. Так как время хранится как 
беззнаковое целое, то он переполняется каждые 49.7 дней. 

для автономных систем может возникнуть проблема - при переполнении может быть сбой в определении периодичности.

 
zhuki:
Но,выше приведённый кусок кода может выдавать неправильный отсчёт 1 раз в сутки. А через GetTickCount() один раз за 50 дней. При необходимости нужно ещё одну проверку организовать.

А вот это уже действительно интересно. Смоделируйте пожалуйста ошибку, которую может мой код выдать раз в сутки. Если не трудно. Ну, хотя бы словестно...
 
drknn:

А вот это уже действительно интересно. Смоделируйте пожалуйста ошибку, которую может мой код выдать раз в сутки. Если не трудно. Ну, хотя бы словестно...
Пошутил.Прошу прощения.
 
drknn:

А вот это уже действительно интересно. Смоделируйте пожалуйста ошибку, которую может мой код выдать раз в сутки. Если не трудно. Ну, хотя бы словестно...


Он может и больше чем раз в сутки ошибиться.

При переинициализации эксперта

 
StatBars:


Он может и больше чем раз в сутки ошибиться.

При переинициализации эксперта


При переинициализации счётчик обнулится (если туда его сунуть). Да и вряд ли трейдер будет выполнять ккие-то критиеские задачи каждые 10 минут.
Причина обращения: