Mon backtest est actuellement configuré de manière à ce qu'il investisse 25 % de mon capital actuel. Le problème que cela pose est que lorsque mon capital commence à augmenter, la stratégie commence à prendre d'énormes transactions.
Comment puis-je spécifier qu'il investit Equiuty*0.25 mais seulement jusqu'à une limite de 1000 contrats ?
Voici les parties pertinentes de mon code.
Merci pour toute aide. Cela me frustre depuis quelques semaines maintenant.
osInvestAll <- function (data, timestamp, orderqty, ordertype, orderside, equity, portfolio, symbol, ruletype, ..., orderprice, MaxPosn)
{
datePos <- format(timestamp,"%Y-%m-%d")
updatePortf(Portfolio=portfolio,Symbol=symbol,Dates=datePos)
updateAcct(portfolio,Dates=datePos)
updateEndEq(portfolio,Dates=datePos)
Posn <- getPosQty(portfolio,Symbol=symbol,Date=datePos)
equity <- getEndEq(portfolio,datePos)
ClosePrice <- getPrice(get(symbol))[datePos]
UnitSize <- as.numeric(trunc(0.25*equity/ClosePrice))
osMaxPos <-function(data, timestamp, orderqty, ordertype, orderside, portfolio, symbol, ruletype, ...)
addPosLimit(portfolio = portfolioname,symbol = symbollist,maxpos = 100, minpos = -100,timestamp = as.POSIXct(init.date))
if (Posn == 0) {
osInvestAll <- UnitSize } else
{osInvestAll <- 0
}
C'est ainsi que j'ai ma règle pour le moment, mais je reçois une erreur disant "unitsize non trouvé".
add.rule(strategyname,name='ruleSignal',
arguments = list(sigcol="longentry", sigval=TRUE,
replace=FALSE,
prefer='open',
orderside='long',
ordertype='market',
orderqty=unitsize,
orderset='ocolong',
osFUN = "osMaxPos",
maxSize='PosLimit'
),
type='enter',
label='LE'
)
Ma règle originale (quand elle fonctionnait mais prenait des positions énormes) avant d'essayer de la changer
add.rule(strategyname,name='ruleSignal',
arguments = list(sigcol="longentry", sigval=TRUE,
replace=FALSE,
prefer='open',
orderside='long',
ordertype='market',
orderqty=1,
orderset='ocolong',
osFUN = "osInvestAll",
maxSize='PosLimit'
),
type='enter',
label='LE'
)