Global allocation - Issue to construct a payout function

Answered
146
5
created on 2021-01-26 00:35:59

Comments (5)

Yongcheng · 1 month ago

Hello Pierre,


Thanks for your question. myPayout_GMV is working well on my side though. Can you try to run restartSession() on your console if you're using alphienstudio or restart your kernel if youre using notebooks and try again?


Regarding the part about failing the testGlobalAllocationSubmission - I just ran it and it seems like its failing the part where we simulate missing data and test the payout. The payout should not be assigning weights to assets which are missing. The below code should help you recreate the issue.


# this assigns leading NAs to some assets to simulate missing data
portTest = portfolio.createMissingData(portAllocation)
head(portTest@features@pxs)
portTest = eval(portTest)
head(portTest@weightsMatrix)
head(portTest@returnsMatrix)


Also, please note that the portfolio object has to be recreated (code snippet below) before testing another payout.


# recreate object using this
portAllocation = portfolio(as.list(allocation[allocation$field=="bb live", "ticker"]))
# payout only added after above line is ran
portAllocation = payout(portAllocation, myPayout_EW)


Hope this answers your questions. Please feel free to clarify if anything is unclear.

Pierreclauss · 1 month ago

Thks Yongcheng! The first debug helps me (.rs.restartR() or restartSession()).

For the NA treatment, I have to improve the payout function.

Best,

Pierre.

Pierreclauss · 1 month ago

I need again your help - I do not see an answer in the submission topics of your library.

To tackle the NA issue, I tried to be inspired by the simple function equalWeight:

function (rets) 
{
    rets[is.na(rets)] = 0
    rets = rets * 0 + (1/ncol(rets))
    return(rets)
}
<environment: namespace:SinglePackageAl>

with an update on myPayout_EW with the following code for instance where the returns are not missing:

 returns <- matrix(0, nrow(bbLive), ncol(bbLive))

 for (j in 1:ncol(bbLive))

 {

  returns[, j] <- Delt(bbLive[, j], type = 'arithmetic')

  returns[is.na(returns[, j])] = 0

 }

But the slot portAllocation@returnsMatrix contains NA returns even after this treatment. Do you have a tutorial to help me to understand how to treat the NA stress you do on the portfolio?

Best regards,

Pierre.

Reiyun · 1 month ago

Hi Pierre,


If I can suggest an edit to the payout so that it do not assign weights to assets which have NA:


myPayout_EW = function(features){
 
  # Getting data from dataFeatures
  df = getTickersGlobalAllocationChallenge()
  bbLive = subset(features, tickers=df[df$field=="bb live", "ticker"], fields="bb_live")
  bbLive = bbLive@pxs
 
  # Find out which assets are tradeable
  tradeable = !is.na(bbLive)
  # Converting to numeric
  tradeable = tradeable*1
 
  # Construct xts
  signal = xts(tradeable, order.by = index(bbLive))
  # Convert to equally weighted
  signal = signal/rowSums(signal)
  colnames(signal) = df[df$field=="bb live", "ticker"]
 
  return(signal)
}


Hope this helps!

Pierreclauss · 1 month ago

Thanks a lot Reiyun - it helps me.

Best,

Pierre.