Использование предоставленных извне данных индикатора для квантстрата

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

Я проработал несколько примеров тестирования на истории с помощью Quantstrat, и для них общим является то, что они используют индикаторы, которые рассчитываются с помощью R-функций на основе данных о ценах.

Однако мне нужно использовать пару индикаторов, которые были рассчитаны извне, и которые я имею в качестве достоверной / ложной информации вместе с ценовыми данными. Итак, у меня есть ряд дополнительных столбцов в CSV, который содержит данные OHLC, и значения этих столбцов в большинстве случаев ложны, но в некоторых строках это правда. Я хочу сгенерировать сигналы, которые, например, используют два из этих столбцов и говорят "если оба истинны, разместите стоп-покупку на максимуме последнего дня со стоп-лоссом на минимуме последнего дня и рассчитайте размер позиции так, чтобы максимальный убыток - это фиксированная сумма денег, основанная на высокой-низкой разнице.

Есть еще много правил, которые нужно применять, тогда, когда закрывать позицию с прибылью, когда регулировать стоп-лосс или когда отменять не инициированный стоп-ордер на покупку, и мне также приходится иметь дело с ситуациями, когда открытие следующих дней уже выше цена остановки покупки, но это уже другая история. Кроме того, я должен подумать о том, как протестировать стратегию на конец дня, имея только данные на конец дня (на следующих днях свеча может быть выше как стоп-ордера, так и стоп-ордера, а также то, что произошло бы неоднозначно)

Для начала я хотел бы знать, возможно ли включить такие данные внешнего индикатора в качестве источников для стратегии Quantstrat

Это поможет мне, если вы скажете "да" или "нет" и, возможно, укажете мне соответствующую документацию. Спасибо за совет!

Редактировать:

Я фактически создал файл CSV со столбцами OHLC и просто добавил еще один столбец с единицами и нулями, как в этом очень упрощенном примере:

Date,Open,High,Low,Close,SRot
2016-02-01,28,31,20,20,0
2016-01-29,34,35,30,31,1
2016-01-28,22,30,21,28,0
2016-01-27,18,23,17,20,0
2016-01-26,30,32,20,25,0
2016-01-25,30,35,25,32,1

Я получил это в объекте xts и выполнил настройку стратегии quantstrat, которую мне удалось запустить с короткими ордерами стоп-лимит после тех дней, когда последний столбец равен 1.

add.rule(strategy.st,name = "ruleSignal",
arguments=list(sigcol="srotxsignal",
               sigval=TRUE,
               ordertype="stoplimit",
               orderside="short",
               replace=FALSE,
               prefer="Low",
               orderqty=10,
               tradeSize=tradeSize),
type="enter",path.dep=TRUE,label="normalEntryShort")

Получив первый сигнал уже 25 января на первой свече с минимумом 25, я ожидаю, что система сработает лимитный ордер на продажу с ограничением цены 25. Это также то, что, похоже, показывает книга заказов. Однако система фактически продает на уровне 30 на следующий день, что является ценой открытия. Для второго сигнала во второй последний день ордер исполняется, но никогда не исполняется. Это может быть правильно, так как открытие уже начинается ниже уровня ограничения стопа, однако цена в этот последний день поднимается до 31, поэтому ордер должен был сработать.

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

out<-applyStrategy(strategy=strategy.st,portfolios=portfolio.st)
[1] "2016-01-26 00:00:00 adidas 10 @ 30"

 getOrderBook(portfolio.st)
 $dshort
 $dshort$adidas
       Order.Qty Order.Price Order.Type  Order.Side Order.Threshold Order.Status Order.StatusTime      Prefer
2016-01-25 "10"      "25"        "stoplimit" "short"    NA              "closed"     "2016-01-26 00:00:00" "Low" 
2016-01-29 "10"      "30"        "stoplimit" "short"    NA              "open"       NA                    "Low" 

1 ответ

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

Другие вопросы по тегам