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

Основная причина данного явления заключается   в глобальной ошибке алгоритма построения робота.

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

Так обрабатывать графики надо не по моменту наступления определенного времени, например , через секунду, минуту, 30 минут (так называемая регулярная или синхронная обработка).

Обрабатывать графики надо по наступлению события.

Это событие называется ЗАКРЫТИЕ СВЕЧИ.

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

Тогда и параметры свечи всегда будут верными и индикаторы будут корректными.

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

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

Tags: , ,

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

Решил написать данную заметку, так как неоднократно встречаю неправильное понимание данного вида изображения истории сделок.

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

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

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

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

Для того, чтобы сделать отсчеты на графике равномерными по времени вводится постоянный временной интервал графика , например 60 минут.

Но в этом случае на интервале 60 минут будет произвольное множество сделок.
Поэтому для наглядного отображения поведения цены сделок во времени и

одновременно для сжатия этого множества , его представляют всего  четырьмя значениями:

OPEN, HIGH, LOW, CLOSE.

OPEN — цена самой первой сделки на интервале,

CLOSE — цена самой последней сделки на интервале,

High и Low — соответственно максимум и минимум на интервале.
Думаю теперь Вам понятно,

что лишь завершив интервал,

Вы получите свечу .

Таким образом, если Вы для принятия решения используете свечи на временном интервале,

то сформированная свеча возникает в момент завершения интервала, т.е. в момент закрытия свечи.

Один из известных методов торговли сводится к определению максимума и минимума на определенном интервале.

Далее если цена пробивает максимум , то Вы покупаете, если пробивает минимум — то Вы продаете.

Но обратимся к определению свечи.

High и Low свечи являются максимумом и минимумом на интервале формирования свечи.

Следовательно , если Вы торгуете на пробой поддержки и сопротивления в виде максимума и минимума на интервале 60 минут,

то надо лишь установить на графике этот интервал и торговать по пробою High и Low последней закрытой свечи.

Аналогично для торговли на дневных данных.

Успехов.

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

Так как я считаю, что в любом произведении важен не язык, на котором его пишут, а сценарий , алгоритм, сюжет, который реализуют, то поговорим сначала о методах и алгоритмах.

Я разделяю торговых роботов на два класса.

К первому классу отношу роботов, в которых решение принимается на основе совершенных сделок.

Как правило , история таких сделок  представляется в виде свечей.

Хочу заметить, что свечи – это своеобразный фильтр.

И как всякий фильтр они упрощают, искажают первичную информацию,

но именно это и помогает выделить интересующие нас признаки.

В таких роботах на 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

Привожу без редакции, из работающего робота ,что не нужно — удалите
Успехов

Tags: , ,