目標: タイム スタンプを使用してストップ リミットを生成します (トレーリング ストップではありません)。コーディングの大部分は、ATR に基づいてポジション サイズを計算するための Ilya Kipnis の設計から盗用されています。コードへのリンクは以下のコメントにあるため、再現できます。
関数が望ましい効果を生み出すことはかなり確信していますが、order.price がどのような種類の情報を必要とするかはわかりません。これが数値ではなく関数であることを示す必要があるようです。
order.price を計算するために、チェーン オーダーで次の関数を実行しています。
stopATR <- function(atrMod="") {
atrString <- paste0("atr",atrMod)
atrCol <- grep(atrString, colnames(mktdata))
atrTimeStamp <- mktdata[timestamp, atrCol]
atrStop <- atrTimeStamp * pctATR*100
atrString <- paste0("EMA.currentPrice")
priceCol <- grep(atrString, colnames(mktdata))
currentPrice <- mktdata[timestamp, priceCol]
out <- currentPrice-atrStop
colnames(out) <- "atrStopLoss"
return(out)
}
#rules
add.rule(strategy.st, name="ruleSignal",
arguments=list(sigcol="buyTrigger", sigval=TRUE, ordertype="market",
orderside="long", replace=FALSE, prefer="Open",
osFUN=osDollarATR, tradeSize=tradeSize,
pctATR=pctATR, atrMod="X"),
type="enter", path.dep=TRUE,
label="newEntry")
add.rule(strategy.st, name="ruleSignal",
arguments=list(sigcol="buyTrigger", sigval=TRUE, ordertype="stoplimit",
orderside="long", replace=FALSE,
orderqty='all',
order.price=stopATR,
orderset="orders"),
type="chain",
parent="newEntry",
label="stopLossLong",
path.dep=TRUE)
エラーは次のとおりです。
Error in as.numeric(orderprice) :
cannot coerce type 'closure' to vector of type 'double'