3 votes

Dimensionnement de la position

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'
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X