рекомендации

среда, 4 ноября 2020 г.

Тестирование торговых стратегий на исторических данных с помощью Quantstrat. Часть 4. Добавление сигналов.

Первая часть
Вторая часть
Третья часть

Сигналы представляют собой значения индикаторов, которые удовлетворяют нашим условиям входа в позицию. Например, в этой стратегии мы хотим получить сигнал на покупку, когда  nFast  больше или равно  nSlow . Мы также хотим получить другой сигнал, на продажу, когда  nFast  меньше, чем  nSlow . Мы назовем эти сигналы  long  и  short  соответственно. Код R:

# Добавление сигналов

# Сигнал на открытие длинной позиции

add.signal(strategy = strategy.st,

  name="sigCrossover",

  arguments = list(columns = c("nFast", "nSlow"),

  relationship = "gte"),

  label = "long")

# Сигнал на  закрытие длинной позиции

add.signal(strategy = strategy.st,

  name="sigCrossover",

  arguments = list(columns = c("nFast", "nSlow"),

  relationship = "lt"),

  label = "short"

 

Снова, мы передаем strategy.st в параметр  strategy.  Параметр name  принимает функцию, как это было в  add.indicator. 

Здесь мы используем некоторые встроенные функции  quantstrat, которые мы будем называть сигнальными. Это sigComparison, sigThreshold, sigAND, and sigCrossover. 

Аргументы для всех четырех функций очень похожи. Они включают столбцы (columns), пороговое значение (threshold) и/или отношение (relationship) между первым и вторым столбцом (или между первым столбцом и пороговым значением).

Отношения (аргумент relationship)  могут принимать следующие значения:

gt  - больше чем;

lt - меньше чем;

eq - равно;

gte - больше или равно;

lte - меньше или равно.

 

Функция sigComparison сравнивает два столбца и возвращает значение TRUE (оно же 1) до тех пор, пока заданное отношение, сравнивающее первый столбец со вторым, остается верным. Например, если вы зададите отношение SMA50 > SMA200, она будет возвращать 1 для каждой временной отметки, где 50-дневная SMA больше, чем 200-дневная SMA. Функция sigComparison лучше всего подходит для настройки фильтров (например, классика жанра Close > SMA200). Эта функция принимает два столбца и отношение, сравнивающее первый и второй столбцы.


Синтаксис:

 

sigComparison(label, data = mktdata, columns, relationship = c("gt","lt", "eq", "gte", "lte"), offset1 = 0, offset2 = 0)

 

Аргументы:

label - текстовая метка для применения к выводу;

data - данные для сравнения;

columns - именованные столбцы для сравнения;

relationship - одно из значений c("gt", "lt", "eq", "gte", "lte", "op") или другие разумные альтернативы;

offset1 - числовое смещение, добавляемое в первый столбец перед сравнением;

offset2 - числовое смещение, добавляемое во второй столбец перед сравнением.

 

Функция sigCrossover в целом идентична sigComparison, за исключением того, что возвращает TRUE только для той временной отметки (бара), когда значение отношения меняется с FALSE на TRUE. Например, используя приведенный выше пример, вы увидите TRUE только в тот день, когда SMA50 впервые пересек SMA200. SigCrossover полезна для настройки ордеров на покупку или продажу в следующих за трендом стратегиях.

Синтаксис:

 

sigCrossover(label, data = mktdata, columns, relationship = c("gt", "lt", "eq", "gte", "lte"), offset1 = 0, offset2 = 0)

 

Аргументы такие же, как и для sigComparison

 

Функция sigThreshold в основном используется для сравнения индикатора с фиксированным числом, она обычно имеет приложения для осцилляторов или, возможно, для скользящих статистических оценок.

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

Кроме того, функция sigThreshold() принимает кросс-аргумент, который указывает, будет ли она работать аналогично sigComparison (cross = FALSE) или sigCrossover (cross = TRUE) соответственно.

Синтаксис:

 

sigThreshold(label, data = mktdata, column, threshold = 0, relationship = c("gt", "lt", "eq", "gte", "lte"), cross = FALSE)

 

Функция sigTimestamp генерирует сигнал в заданную отметку времени или в определенное время каждый день, неделю, день недели и т. д.

Синтаксис:

 

sigTimestamp(label, data = mktdata, timestamp, on = "days")

 

Аргументы:

timestamp - либо объект на основе POSIXct, либо строка символов, обозначающая 24-часовое время (например, «09:00», «16:00»).

on - используется только если временная метка является символом.

 

Функция sigPeak предназначена для поиска локальных максимумов/минимумов. Эта функция проверяет, являются ли наблюдения столбца mktdata или индикатора с обеих сторон некоторой точки ниже (выше), создавая локальный пик (впадину).

Синтаксис:

 

sigPeak(label, data, column, direction = c("peak", "bottom"))

 

Функция sigFormula сигнала немного более сложная. Здесь в качестве аргумента передается логическое выражение, и сигнал генерируется, если оно истинно. Например, у нас есть два сигнала: longfilter и longthreshold, и мы хотим открыть позицию только в том случае, если они оба получают значение TRUE. Тогда мы должны передать функции аргумент formula = "longfilter & longthreshold"  Функция sigFormula обеспечивает огромную гибкость в комбинировании различных индикаторов и сигналов, которые мы уже добавили в нашу стратегию, для создания составных сигналов.

Синтаксис:

 

sigFormula(label, data = mktdata, formula, cross = FALSE)

 

Аргументы:

formula - логическое выражение, подобное тому, которое используется в операторе if, обычно ссылается на имена столбцов в mktdata.

cross - если аргумент равен TRUE, функция вернет TRUE только для первого наблюдения, соответствующего условию, заданному в формуле.


Комментариев нет:

Отправить комментарий