Автор: Николай Камынин
Так как я считаю, что в любом произведении важен не язык, на котором его пишут, а сценарий , алгоритм, сюжет, который реализуют, то поговорим сначала о методах и алгоритмах.
Я разделяю торговых роботов на два класса.
К первому классу отношу роботов, в которых решение принимается на основе совершенных сделок.
Как правило , история таких сделок представляется в виде свечей.
Хочу заметить, что свечи – это своеобразный фильтр.
И как всякий фильтр они упрощают, искажают первичную информацию,
но именно это и помогает выделить интересующие нас признаки.
В таких роботах на QPILE одной из основных задач является чтение и разборка параметров свечей для дальнейших вычислений.
Все торговые роботы относятся к системам обработки сигналов реального времени.
Рассмотрим два основных алгоритма работы со свечами. Классификация моя.
Первый: АЛГОРИТМ ДИЛЕТАНТОВ
В большинстве случаев этот алгоритм реализуют любители –самоучки.
Суть его сводится к тому, что в каждый момент времени считывается с графика некоторое количество свечей, например 100, они распаковываются и по ним вычисляются максимум , минимум на интервале и т д.
На основе полученных параметров принимается решение.
В следующий момент опять читаются эти же 100 свечей и так до появления новой свечи.
С появлением новой свечи опять читается 100 свечей, из которых 99 старых.
Теперь давайте посчитаем, сколько бессмысленной работы Вы создаете процессору,
при реализации данного алгоритма.
Например, если время расчета портфеля 1 секунда, а интервал графика 1 минута,
то, как минимум, 59 раз Вы в пустую будете распаковывать 100 свечей.
Если же Вы будете читать нужные Вам 100 ( число взято для примера ) свечей
в момент закрытия новой свечи,
то объем вычислений сократится для нашего примера примерно в 50 раз.
На этом дилетанский метод обработки свечей исчерпан.
Второй: АЛГОРИТМ ПРОФИ
Основной принцип обработки сигналов в реальном масштабе времени —
НЕ ОБРАБАТЫВАТЬ ВТОРИЧНО, РАНЕЕ ПОЛУЧЕННЫЕ ДАННЫЕ.
Поэтому в таких системах считается плохим приемом использование циклов в прошлое.
Основное правило такое:
Получили новые данные и сделали с ними все,
что требуется, а не обращаетесь к ним многократно чтобы делать одно и тоже.
Поэтому задачу принятия решения по параметрам свечей разделяем на две подзадачи.
Первая подзадача состоит в том ,
чтобы в момент закрытия новой свечи прочитать данную свечу с графика,
распаковать ее параметры и сохранить их в файле, массиве или коллекции.
Вторая подзадача сводится к вычислению по параметрам 100 свечей требуемые параметры принятия решения.
При таком алгоритме решения задачи,
нам потребуется ВМЕСТО ЧТЕНИЯ с графика каждый раз СТА свечей,
ЧИТАТЬ всего лишь ОДНУ- новую.
В результате мы сокращаем объем вычислений в 100 – 5000 раз, по сравнению с первым методом.
Думаю, игра стоит свеч.
Успехов в изучении методов обработки сигналов.
~~~~~~~~~~~~~~~~
В завершение статьи привожу пример функции на QPILE для распаковки параметров новой свечи.
FUNC CANDLE_SET() ‘обработка принятой свечи и запись в конец файла
H1=H
L1=L
O1=O
C1=C
V1=V
T1=T
D1=D
H=APPLY_SCALE (0+Get_Value (CANDLE,»HIGH»),SCALE)
L=APPLY_SCALE (0+Get_Value (CANDLE,»LOW»),SCALE)
O=APPLY_SCALE (0+Get_Value (CANDLE,»OPEN»),SCALE)
C=APPLY_SCALE (0+Get_Value (CANDLE,»CLOSE»),SCALE)
V=APPLY_SCALE (0+Get_Value (CANDLE,»VOLUME»),0)
D=DF
IF TIME_+0=0
T=»000000″
ELSE
T=TIME_
FINE_OCHLD() ‘вычисление параметров дня
END IF
DTOCHLV=D & «,» & T & «,» & O &»,» & H &»,» & L &»,» & C &»,» & V ‘свеча в виде строки
WRNF(fileOHLCV,DTOCHLV) ‘запись в конец файлаD,T,O,H,L,C,V
INDICATOR() ‘чтение индикаторов
RS() ‘вычисление параметров R,TR,S,TS,DR,nDR,DS,nDS
robot() ‘принятие решения в момент появления новой свечи
END FUNC
Привожу без редакции, из работающего робота ,что не нужно — удалите
Успехов