кумулятивная сумма переменной с условием - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблема с получением промежуточного итогового фактического объема запасов, оставшегося у меня. Когда индикатор показывает "Buy", он должен добавить 100, а когда индикатор показывает "Sell", он должен вычесть 100.

Проблема в том, что мой оставшийся объем акций должен добавляться только при следующем сигнале "Покупать" показывает, когда он опустился до 0 .... так как у меня нет акций для торговли.

indicator   buy_sell_volume    actual_stock_volume_left
Buy         100                  100
Buy         100                  200
Hold         0                   200
Hold         0                   200
Sell       -100                  100
Sell       -100                   0
Sell       -100                   0
Sell       -100                   0
Sell       -100                   0
Buy         100                  100
Buy         100                  200

1 Ответ

0 голосов
/ 06 ноября 2018

Поскольку вы уже закодировали поле buy_sell_volume (+ для покупки и - для продажи), вам не нужны никакие условные вычисления на основе поля indicator. Подойдут простые кумулятивные вычисления.

# initialize new column
df$stock_volume_left <- NA

# assuming you start with 0 stocks, assign 1st value to stocks left
df$stock_volume_left[1] <- max(df$buy_sell_volume[1], 0)

# calculate stocks left 
for(i in 2:nrow(df)) {
  df$stock_volume_left[i] <- max(df$stock_volume_left[i-1] + df$buy_sell_volume[i], 0)
}

   indicator buy_sell_volume stock_volume_left
1        Buy             100               100
2        Buy             100               200
3       Hold               0               200
4       Hold               0               200
5       Sell            -100               100
6       Sell            -100                 0
7       Sell            -100                 0
8       Sell            -100                 0
9       Sell            -100                 0
10       Buy             100               100
11       Buy             100               200
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...