Держать портфели более месяца / квартала / года в кванцтрате
В качестве варианта предыдущего вопроса я хотел бы знать, как реализовать период удержания с использованием пакета quantstrat, который предотвращает обновление портфеля между периодами нескольких акций, несмотря на сигналы (в данном случае превышение пороговых значений).
Я попытался два метода, оба не удалось:
добавлен столбец в данных об акциях, указывающий кварталы / семестры / годы с 1, используемый с add.rule с name="ruleSignal",
использовал add.rule с type="rebalance" и аргументом relaybance_on="четверти".
Вот код в quantstrat:
Asda как
## Signal 1: rank inferior to N
stratjt=add.signal(strategy=stratjt, name="sigThreshold",
arguments=list(threshold=N, column="Rank",
relationship="lte",cross=FALSE),
label="Lower.dcl.thres")
## Signal 2: rank superior to N
stratjt <- add.signal(strategy=stratjt, name="sigThreshold",
arguments=list(threshold=N, column="Rank",
relationship="gt", cross=FALSE),
label="Higher.dcl.thres")
# Rule 1: First attempt to add rebalance rule based on extra signal column
#stratjt <- add.rule(strategy=stratjt, name='ruleSignal',
# arguments = list(sigcol="Rebalance_on", sigval=TRUE,
# orderqty=1, ordertype='market',
# orderside='long', pricemethod='market',
# replace=FALSE, osFUN=osMaxPos),
# type='enter', path.dep=TRUE)
# Rule 1: Second attempt to add rebalance rule using the "rebalance" rule type
stratjt <- add.rule(strategy=stratjt, name='ruleSignal',
arguments = list(rebalance_on="quarters"),
type='rebalance', path.dep=TRUE)
# Rule 2: Enter rule when below threshold
stratjt <- add.rule(strategy=stratjt, name='ruleSignal',
arguments = list(sigcol="Lower.dcl.thres", sigval=TRUE,
orderqty=max.size, ordertype='market',
orderside='long', pricemethod='market',
replace=FALSE, osFUN=osMaxPos),
type='enter', path.dep=TRUE)
# Rule 3: add exit rule when above threshold
stratjt <- add.rule(strategy = stratjt, name='ruleSignal',
arguments = list(sigcol="Higher.dcl.thres", sigval=TRUE,
orderqty='all', ordertype='market',
orderside='long', pricemethod='market',
replace=FALSE),
type='exit', path.dep=TRUE)
Примечание: я также использовал функцию applyStrategy.rebalance.
Вот часть вывода:
[1] "2000-04-30 00:00:00 Vivendi -1 @ 99.2256"
[1] "2002-11-30 00:00:00 Vivendi 1 @ 16.2966"
[1] "2003-02-28 00:00:00 Vivendi -1 @ 14.0564"
[1] "2003-11-30 00:00:00 Vivendi 1 @ 22.9647"
[1] "2004-01-31 00:00:00 Vivendi -1 @ 26.3656"
[1] "2004-02-29 00:00:00 Vivendi 1 @ 28.7848"
[1] "2004-03-31 00:00:00 Vivendi -1 @ 26.2421"
[1] "2006-05-31 00:00:00 Vivendi 1 @ 35.8552"
Как видите, торги по-прежнему происходят между кварталами, тогда как я хочу проводить торги только в новых кварталах или семестрах и т. Д. Любая помощь приветствуется.
Ура, Майк
1 ответ
Вам нужно изменить свой сигнал правил выхода. В данный момент он настроен на выход из сделки в соответствии с "Higher.dcl.thres", а не периодом времени.
Создайте еще один индикатор, который вернет вам ИСТИННОЕ значение по истечении указанного вами периода времени. Ваши периоды времени начинаются, когда вы получаете сигнал входа.
Используйте этот индикатор для создания другого сигнала выхода и используйте этот сигнал для вашего правила выхода. Я надеюсь это имеет смысл.