我想在quantstrat / blotter中测试一个交易出口,在那里我引用了最新的吸墨纸输入交易的价格(在一个循环内)。我想补充一条规则,即如果最近的交易自成立以来已经下跌了5%,那么退出交易作为一种止损。
if( !is.na(X) )#if the indicator X has begun (it is NA at start of time series)
{
if(Posn == 0) {#No position test to go long
if(X < 20){
#enter long position
addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
TxnPrice=ClosePrice,TxnQty=UnitSize,TxnFees=0)}
}else {#Have a position so check exit
这是我想引用TxnPrice的地方:
if ( (X > 35) || (ClosePrice < (0.95 * TxnPrice)){
#exit position
addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
TxnPrice = ClosePrice,TxnQty = -Posn,TxnFees=0)}
}
}
ClosePrice在哪里
ClosePrice <- as.numeric(Cl(T[i,]))
问题是TxnPrice不作为全局环境中的对象存在。我确定我错过了一些非常简单的参考资料。任何帮助非常感谢。
答案 0 :(得分:0)
似乎最简单的方法是在全球环境中创建一个变量来跟踪最后的交易价格:
# initialize value so ClosePrice < (0.95 * lastTxnPrice) == FALSE
# until the first lastTxnPrice <- ClosePrice is run
lastTxnPrice <- -Inf
#if the indicator X has begun (it is NA at start of time series)
if(!is.na(X)) {
if(Posn == 0) {
#No position test to go long
if(X < 20) {
#enter long position
addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
TxnPrice=ClosePrice,TxnQty=UnitSize,TxnFees=0)
lastTxnPrice <- ClosePrice
}
} else {
#Have a position so check exit
if((X > 35) || ClosePrice < (0.95 * lastTxnPrice)) {
#exit position
addTxn(a.strategy,Symbol='T',TxnDate=CurrentDate,
TxnPrice = ClosePrice,TxnQty = -Posn,TxnFees=0)
}
}
}