Пишем на QPILE. Урок 1: Функции времени

11 ноября, 2010

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

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

на 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

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

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

Торговый робот, которого я создаю

7 ноября, 2010

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

Разработка робота, по крайней мере такого, как я его понимаю, сложная, трудоемкая и, следовательно, дорогая задача.
Чем менее подготовлен пользователь к  применению робота, тем больше функций  должен делать робот.
Практически робот в моем понимании должен реализовать алгоритм работы на рынке профессионального трейдера.
Так как потенциальный пользователь, либо сам не знает чего хочет, за исключением того , что хочет денег, либо хочет чтобы реализовали  конкретно им придуманный алгоритм.
Сравнительно  просто  разработать робота  по готовому техническому заданию клиента.
Как говориться «За Ваши деньги — любые причуды».
Сейчас в интернете можно найти множество предложений  Игрушечных роботов.

Я называю их игрушечными, так как в действительности это всего лишь программы расчета сигналов по
пересечению графика цены или индикатора с заданным уровнем — генераторы торговых сигналов.
Такие «роботы»  дешевые и удовлетворительно генерируют торговые сигналы на истории.

Обычно это программы торговли на растущем рынке, когда лучшее правило «Купил и держи».

Для меня, торговый робот —  это достаточно сложная система контроля ошибочных
ситуаций, отслеживание зависших заявок, перезагрузка системы при сбоях
обновление информации при восстановлении соединения, возможность быстро перестраивать систему на торговлю различными инструментами, ведение журналов торговли и архивов истории биржевых сделок.
Т.е. я создаю  автомат, который должен делать все вместо пользователя.
В этом случае, встраиваемый алгоритм генерации торговых сигналов, это примерно 10% от всего торгового робота.
Большинство роботов, которые продаются в интернете  — это 99% — программы генерации торговых  сигналов на основе пересечений уровня цены и индикаторов с определенными порогами и отсылка заявок в торговую систему.
Такой генератор напоминает  некоторым образом мясорубку. На выходе что-то перемолотое.
Если попался кусок дерева то опилки, а если запихнули мясо- то фарш.
Практически у каждого трейдера есть придуманный им алгоритм.

Обычно этот алгоритм некоторым образом подогнанный  на истории.
Из своего опыта знаю, что большинство таких алгоритмов могут работать лишь с участием человека,

иначе они  успешно сливают Ваш  депозит.

Кроме того, робот должен не только сам торговать, но и следить за торговыми операциями человека и выполнять вспомогательные  действия.

Вот некоторые задачи, которые должен решать робот:

1.   Запускать торговый терминал перед началом торговой сессии и после аварийных ситуаций

2.  Автоматически докачивать историю торгуемых инструментов

3.   В период торговли , если Вы  закрыли позицию,  убрать все стопы, поставленные для данной позиции

4.  Если Вы поставили позицию  и не поставили стопы, то поставить стоп для данной позиции

5.  Следить за стопами  передвигать их по мере изменения цены инструмента.

6.  Обеспечивать исполнение стопов при резком движении рынка

7.  Прогнозировать возможные цели движения инструментов

8.  Во время торговой сессии мониторить рынок и искать движение инструментов

9.  Генерировать торговые сигналы

10.  Вести журналы торговых сделок в разрезе по торгуемым инструментам

11.  Проводить анализ совершенных  сделок и самостоятельно совершенствовать генератор торговых сигналов (  метод обучения с учителем и метод  самообучения )