当我使用时,enable.rule我无法覆盖规则的内部enabled=FALSE.
例如:
## Stop Loss Rule
stratstocky <- add.rule(stratstocky,
name = "ruleSignal",
arguments = list(sigcol = "sdH",
sigval = TRUE,
replace = FALSE,
orderside = "long",
ordertype = "stoptrailing",
tmult = TRUE,
threshold = quote(stopLossPercent),
orderqty = "all",
orderset = "ocolong"),
type = "chain",
parent = "getLong",
label = "StopTrailingLong",
enabled = FALSE
)
Run Code Online (Sandbox Code Playgroud)
当我在applyStrategy之前放置此代码时:
enable.rule(stratstocky, type="chain", "StopTrail", enable=TRUE)
Run Code Online (Sandbox Code Playgroud)
规则不会启用或激活.激活规则的唯一方法是改变它的内部启用TRUE.我尝试过精确的拼写,但它对我不起作用.
这不是一个大问题,因为我可以参数化规则的内部启用并以这种方式控制它,但更喜欢使用现有代码来运行我的系统.
对enable.rule问题的任何见解?
您的示例不可重现,但我可以通过一些假设重现您的问题.
看起来你正在混淆store=TRUE和store=FALSE
您的add.rule呼叫似乎在假设store=FALSE,然后您将stratstocky对象传递给enable.rule.
何时store=FALSE,enable.rule将返回策略对象.我相信在你的用例中,你可能想要:
stratstocky <- enable.rule(stratstocky, type="chain", "StopTrail", enable=TRUE)
使用现在启用的规则更新对象.
要创建可重现的示例,请尝试
demo('macross',ask=FALSE)
这将运行演示,并创建一些对象.就像我认为的那样,macross演示使用store=FALSE.
现在:
stratMACROSS <- enable.rule(stratMACROSS,type='exit',label='ruleSignal.rule',enable=FALSE)
将禁用退出规则,和
stratMACROSS <- enable.rule(stratMACROSS,type='exit',label='ruleSignal.rule')
将再次启用它.