r - Quantstrat:如何在 add.rule 上应用 allowMagicalThinking?
问题描述
我知道这个问题已经在这里和这里被问过,但allowMagicalThinking=TRUE
仅适用于一个规则时不起作用。
我想申请allowMagicalThinking
在“高”信号的同一天退出时执行的信号。仅在退出规则上。
library(quantstrat)
# read indicators data
AA <- read.zoo(header = TRUE, as.is = TRUE,
index.column = 1, format = "%m/%d/%y", text = "
Date Open High Low Close Volume Adj.Close enterLong exitLong
1 12/21/15 201.41 201.88 200.09 201.67 99094300 197.43 0 0
2 12/22/15 202.72 203.85 201.55 203.50 111026200 199.22 0 0
3 12/23/15 204.69 206.07 204.58 206.02 110987200 201.69 0 0
4 12/24/15 205.72 206.33 205.42 205.68 48539600 201.36 0 0
5 12/28/15 204.86 205.26 203.94 205.21 65899900 200.90 0 0
6 12/29/15 206.51 207.79 206.47 207.40 92640700 203.04 0 0
7 12/30/15 207.11 207.21 205.76 205.93 63317700 201.60 0 0
8 12/31/15 205.13 205.89 203.87 203.87 102929500 199.58 0 0
9 1/4/16 200.49 201.03 198.59 201.02 222353500 196.79 1 0
10 1/5/16 201.40 201.90 200.05 201.36 110845800 197.13 0 0
11 1/6/16 198.34 200.06 197.60 198.82 152112600 194.64 0 0
12 1/7/16 195.33 197.44 193.59 194.05 213436100 189.97 0 1
13 1/8/16 195.19 195.85 191.58 191.92 209817200 187.89 0 0
14 1/11/16 193.01 193.41 189.82 192.11 187941300 188.07 0 0
15 1/12/16 193.82 194.55 191.14 193.66 172330500 189.59 0 0
")
AA <- as.xts(AA)
# Set the timezone to UTC
Sys.setenv(TZ = "UTC")
# Set the currency to USD
currency("USD")
stock("AA", currency = "USD")
# Define your trade size and initial equity
tradesize <- 100000
initeq <- 100000
# Define the names of your strategy, portfolio and account
strategy.st <- "firststrat"
portfolio.st <- "firststrat"
account.st <- "firststrat"
# Remove the existing strategy if it exists
rm.strat(strategy.st)
# initialize the portfolio
initPortf(portfolio.st, symbols = "AA")
# initialize the account
initAcct(account.st, portfolios = portfolio.st, initEq = initeq)
# initialize the orders
initOrders(portfolio.st)
# set position limits
addPosLimit(portfolio.st, "AA", start(AA), 100)
# store the strategy
strategy(strategy.st, store = TRUE)
add.signal(strategy.st, name = "sigThreshold",
arguments = list(column = "enterLong",
threshold = 1,
relationship = "eq",
cross = FALSE),
label = "thresholdentry")
add.signal(strategy.st, name = "sigThreshold",
arguments = list(column = "exitLong",
threshold = 1,
relationship = "eq",
cross = FALSE),
label = "thresholdexit")
# add Rules
add.rule(strategy.st, name = "ruleSignal",
arguments = list(sigcol = "thresholdentry",
sigval = TRUE,
ordertype = "market",
orderside = "long",
orderqty = 100,
replace = FALSE,
prefer = "Open",
osFUN = osMaxPos,
tradeSize = tradesize,
maxSize = tradesize),
type = "enter")
add.rule(strategy.st, name = "ruleSignal",
arguments = list(sigcol = "thresholdexit",
sigval = TRUE,
orderqty = "all",
ordertype = "market",
orderside = "long",
replace = FALSE,
prefer = "High",
allowMagicalThinking = TRUE),
type = "exit")
applyStrategy(strategy.st, portfolio.st)
# actual result
# [1] "2016-01-05 00:00:00 AA 100 @ 201.4"
# [1] "2016-01-08 00:00:00 AA -100 @ 195.85"
预期的结果是
2016-01-05 AA 100 # enter one day after the signal (default)
2016-01-07 AA -100 # exit the same day of the signal on the "High" (with allowMagicalThinking=TRUE)
如果allowMagicalThinking = TRUE
应用于策略,结果是:
applyStrategy(strategy.st, portfolio.st, allowMagicalThinking = TRUE)
[1] "2016-01-04 00:00:00 AA 100 @ 200.49"
[1] "2016-01-07 00:00:00 AA -100 @ 195.33"
解决方案
推荐阅读
- python - 如何解释聚类结果?
- cmake - CPack 禁用 add_subdirectory() 下不同项目的组件
- c - 你如何在 C 中编写 hexdump -C 函数?
- c++ - noexcept 不被衰减移除
- node.js - 节点js ECONNRESET events.js:72 throw er
- ios - 以编程方式将活动用户信息设置为 Fabric 分析报告
- database - Postgresql 数据库的文件存储系统
- html - Sublime 文本自动完成错误(HTML 标签)
- javascript - 如何创建 JavaScript 正则表达式以验证带扩展名的国际电话号码
- c - C 来自 struct tm 的变量消失