Автор: Николай Камынин
Для тех, кто самостоятельно решил попробовать свои силы в написании торгового робота
на 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
Теперь у Вас есть функции для управления датой и временем.
Успехов в программировании.