2017-02-15 5 views
1

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

я попытался два метода, оба потерпел неудачу:

  • добавлен столбец в наличии данных, указывающий четверти/семестры/года с 1, используется с add.rule с именем = «ruleSignal»,

  • использовать add.rule type = "rebalance" и аргумент relabance_on = "quarters".

Вот код в 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" 

Как вы можете видеть, торги продолжают иметь место между четвертями, в то время как я хотел бы осуществить сделки только в новых кварталах или семестрах, и т.д. ... Любых Помогите оценить.

Приветствия, Майк

ответ

0

Вы должны изменить свой сигнал правила выхода. На данный момент он установлен для выхода из сделки в соответствии с «Higher.dcl.thres», а не с периодом времени.

Создайте еще один индикатор, который вернет вам TRUE после указанного вами периода времени. У вас есть время, когда вы получаете входной сигнал.

Используйте этот индикатор для создания другого сигнала выхода и используйте указанный сигнал для вашего правила выхода. Я надеюсь в этом есть смысл.