Author Archive

Автор: Николай Камынин

Для тех, кто самостоятельно решил попробовать свои силы в написании торгового робота

на QPILE для QUIK решил написать несколько уроков.

Начнем с программирования функций времени.

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

В любом из них приходится рассчитывать дату и время.

Вот функция  уменьшения даты на 1 (декремент даты)

FUNC DEC_D(DE) ‘декремент даты на 1
YEAR_=SUBSTR (DE, 0,4)           ‘1
MONTH_=SUBSTR (DE, 4,2)      ‘2
DAY_=SUBSTR (DE, 6,2)-1           ‘3
IF DAY_<1
DAY_=31
MONTH_=MONTH_-1
IF MONTH_<1
MONTH_=12
YEAR_=YEAR_-1
END IF
END IF
result=100*(100*YEAR_ +MONTH_) +DAY_
END FUNC

В качестве параметра функции передается  DE — дата в формате YYYYMMNN

В результате функция возвращает дату на один день меньше.

С целью ускорения вычислений в программе считается что все месяцы имеют 31 день.

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

Рассмотрим отдельные операторы

Оператор 1 выделяет из исходной даты цифры года

Оператор 2 выделяет из исходной даты цифры месяца

Оператор 3 выделяет из исходной даты цифры дня

Для этой цели используется встроенная в QPILE функция выделения подстроки SUBSTR.

Предлагаю в качестве тренировки самим разобраться в условных операторах вычисления нового числа и месяца

-Следующая  функция  увеличение  даты на 1 (инкремент даты)

‘~~~~~~~~~~~~~~~

FUNC INC_D(DE)  ‘ — инкремент даты на 1
YEAR_=SUBSTR (DE, 0,4)
MONTH_=SUBSTR (DE, 4,2)
DAY_=SUBSTR (DE, 6,2)+1
IF DAY_>31
DAY_=1
MONTH_=MONTH_+1
IF MONTH_>12
MONTH_=1
YEAR_=YEAR_+1
END IF
END IF
result=100*(100*YEAR_ +MONTH_) +DAY_
END FUNC

Функция незначительно отличается от предыдущей, поэтому предлагаю самостоятельно разобрать ее работу. В случае затруднений – пишите.

Следующие две функции  позволяют уменьшить либо увеличить время (TT) на заданное число минут (tik) . Исходное время (TT) задается в формате HHMMSS, в результате получаем измененное время.

‘~~~~~функция уменьшения времени~~~~~~~~~~

FUNC DEC_T(TT,tik)        ‘декремент время
HOUR=SUBSTR (TT, 0,2)
x1=FLOOR(tik/60) ‘целое число часов в интервале
x2=tik-60*x1
MIN= SUBSTR (TT, 2,2)-x2
HOUR=HOUR-x1 ‘часы
IF 0>MIN
MIN=MIN+60
HOUR=HOUR-1 ‘часы
IF 0>HOUR
HOUR=23
END IF
END IF
result=100*(100*HOUR+MIN) ‘формируем время
END FUNC

‘——функция увеличения времени—-

FUNC INC_T(TT,tik)          ‘инкремент время
HOUR=SUBSTR (TT, 0,2)
MIN= SUBSTR (TT, 2,2)+tik
IF MIN>59
MIN=MIN-60
HOUR=HOUR+1 ‘часы
IF HOUR>23
HOUR=0
END IF
END IF
result=100*(100*HOUR+MIN) ‘формируем время
END FUNC

Теперь у Вас есть функции для управления датой и временем.

Успехов в программировании.

Tags: , , ,