Jake’s Portfolio Daily Report - V3

Published

December 21, 2024

What to do Today

Today’s Buys

Token Prediction Date Decision Model On
BNB 2024-12-21 buy TRUE
NEAR 2024-12-21 buy TRUE
TON 2024-12-21 buy TRUE
  • A buy decision means the token price is predicted to rise by 10% or more in the next 30 days

Today’s Sells

Token Prediction Date Decision Model On
ADA 2024-12-21 sell TRUE
AVAX 2024-12-21 sell TRUE
BCH 2024-12-21 sell TRUE
BTC 2024-12-21 sell TRUE
CRO 2024-12-21 sell TRUE
DOGE 2024-12-21 sell TRUE
DOT 2024-12-21 sell TRUE
ETC 2024-12-21 sell TRUE
ETH 2024-12-21 sell TRUE
ICP 2024-12-21 sell TRUE
LINK 2024-12-21 sell TRUE
LTC 2024-12-21 sell TRUE
PEPE 2024-12-21 sell TRUE
SHIB 2024-12-21 sell TRUE
SOL 2024-12-21 sell TRUE
UNI 2024-12-21 sell TRUE
XRP 2024-12-21 sell TRUE
  • A sell decision means the token price is predicted to decline by 10% or more in the next 30 days

Today’s Holds

Token Prediction Date Decision model_on_buy model_on_sell
  • A hold decision means the token is predicted to stay within 10% of the current price in the next 30 days

Portfolio Performance

Current Portfolio Summary

invested available buys sells
$1,719.12 $1,227.31 631 187
token bought_amount sold_amount bought_dollars reinv_dollars sold_dollars price own_amount dollars_diff own_value plus_minus perc_diff
ADA 106.5200000 106.5200000 5.048662 32.451276 42.19044 0.9506151 0.0000000 37.1417796 0.0000000 37.1417796 7.3567570
AVAX 4.8901000 5.3229000 36.897880 75.569579 147.68944 39.7816680 -0.4328000 110.7915575 -17.2175059 93.5740516 2.5360279
BCH 0.5369127 0.2752108 88.271413 113.059447 95.37186 449.0209012 0.2617019 7.1004450 117.5096320 124.6100770 1.4116697
BNB 0.0671300 0.0669900 27.500000 10.000000 39.84000 677.8485768 0.0001400 12.3400001 0.0948988 12.4348989 0.4521781
BTC 0.0119764 0.0121402 197.409061 545.053616 775.84444 97691.4343169 -0.0001637 578.4353762 -15.9940416 562.4413346 2.8491161
CRO 1063.1000000 1063.1000000 89.475299 9.025132 90.04075 0.1634985 0.0000000 0.5654529 0.0000000 0.5654529 0.0063197
DOGE 719.2900000 732.9900000 61.844461 21.635342 89.27405 0.3174023 -13.7000000 27.4295894 -4.3484116 23.0811778 0.3732133
DOT 29.3700000 29.3700000 82.558994 49.941108 133.94995 7.2935419 0.0000000 51.3909567 0.0000000 51.3909567 0.6224756
ETC 8.3752910 8.3752910 30.003739 137.987977 155.44540 27.4076637 0.0000000 125.4416620 0.0000000 125.4416620 4.1808677
ETH 0.0079860 0.0079860 12.492566 7.499574 20.27182 3468.6589201 0.0000000 7.7792576 0.0000000 7.7792576 0.6227109
ICP 10.7470000 10.7470000 67.593360 19.906642 97.75999 10.5324181 0.0000000 30.1666276 0.0000000 30.1666276 0.4462957
LINK 12.1471000 12.1471000 135.978862 17.502696 151.32457 23.3428381 0.0000000 15.3457110 0.0000000 15.3457110 0.1128537
LTC 1.9636289 1.9636289 30.002412 101.545158 145.57053 101.3270791 0.0000000 115.5681219 0.0000000 115.5681219 3.8519611
NEAR 68.3000000 68.3000000 278.970031 38.120016 368.08993 5.3461098 0.0000000 89.1199027 0.0000000 89.1199027 0.3194605
PEPE 29366000.0000000 29366000.0000000 194.518462 73.945821 294.71571 0.0000177 0.0000000 100.1972482 0.0000000 100.1972482 0.5151041
SHIB 17756093.0000000 17972446.0000000 58.000103 279.384701 312.08620 0.0000225 -216353.0000000 254.0861003 -4.8712739 249.2148265 4.2967997
SOL 0.7738000 0.7738000 92.778506 15.076757 113.19272 194.1219845 0.0000000 20.4142135 -0.0000002 20.4142133 0.2200317
TON 102.1410000 16.6440000 139.910814 474.440058 98.25586 5.4440633 85.4970000 -41.6549577 465.4510802 423.7961225 3.0290448
UNI 14.0573000 14.0573000 57.498313 47.502013 91.84991 13.6944462 0.0000000 34.3516018 0.0000000 34.3516018 0.5974367
XRP 64.6800000 64.4800000 32.367103 5.132921 39.32829 2.2739969 0.2000000 6.9611837 0.4547994 7.4159831 0.2291210

plot_dat <- invested_dat %>% 
    right_join(tibble(date = seq(as_date(min(invested_dat$date)), 
                                 Sys.Date(), 
                                 by = "days")), 
               by = "date") %>% 
    group_by(date) %>% 
    summarise(invested = sum(ind_invest),
              invested = ifelse(is.na(invested), 0, invested),
              reinvested = sum(reinvested),
              reinvested = ifelse(is.na(reinvested), 0, reinvested),
              returned = sum(total_paid[action == "sell"], na.rm = TRUE),
              returned = ifelse(is.na(returned), 0, returned),
              cash_available = min(total_available, na.rm = TRUE)) %>% 
    mutate(cash_available = ifelse(is.infinite(cash_available), 
                                      NA, 
                                      cash_available)) %>% 
    fill(cash_available, .direction = "down") %>% 
    mutate(total_invested = cumsum(invested)) %>% 
    left_join(
        all_dat %>% 
            inner_join(
                invested_dat %>% 
                    group_by(date, token) %>% 
                    summarise(amount_owned = ifelse(action == "buy", amount, amount * -1)) %>% 
                    ungroup() %>% 
                    group_by(token) %>% 
                    arrange(date) %>% 
                    mutate(total_owned = cumsum(amount_owned)) %>% 
                    right_join(tibble(date = rep(seq(as_date(min(invested_dat$date)), 
                                                     Sys.Date(), 
                                                     by = "days"), 
                                                 length(unique(invested_dat$token))),
                                      token = rep(unique(invested_dat$token), 
                                                  each = length(seq(as_date(min(invested_dat$date)), 
                                                                    Sys.Date(), 
                                                                    by = "days")))), 
                       by = c("date", "token")),
                by = c("token", "date")) %>% 
            select(token, date, price, total_owned) %>% 
            mutate(total_owned = ifelse(total_owned < 0, 0, total_owned),
                   value = price * total_owned) %>% 
            arrange(token, date) %>% 
            group_by(token) %>% 
            fill(total_owned, .direction = "down") %>% 
            filter(!is.na(total_owned)) %>% 
            mutate(value = price * total_owned) %>% 
            ungroup() %>% 
            group_by(date) %>% 
            summarise(port_value = sum(value)),
        by = "date"
    ) %>% 
    mutate(cash_available = ifelse(is.infinite(cash_available), 0, cash_available)) %>% 
    fill(cash_available, .direction = "down") %>% 
    mutate(total_value = cash_available + port_value,
           up_down = (total_value - total_invested) / total_invested) 
Warning: There were 100 warnings in `summarise()`.
The first warning was:
ℹ In argument: `cash_available = min(total_available, na.rm = TRUE)`.
ℹ In group 4: `date = 2024-06-03`.
Caused by warning in `min()`:
! no non-missing arguments to min; returning Inf
ℹ Run `dplyr::last_dplyr_warnings()` to see the 99 remaining warnings.
Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
dplyr 1.1.0.
ℹ Please use `reframe()` instead.
ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
  always returns an ungrouped data frame and adjust accordingly.
`summarise()` has grouped output by 'date', 'token'. You can override using the
`.groups` argument.
plot_dat %>% 
        left_join(btc %>% select(date, btc_up_down), by = "date") %>% 
        left_join(eth %>% select(date, eth_up_down), by = "date") %>% 
        # left_join(spy %>% select(Date, spy_up_down), by = c("date" = "Date")) %>% 
        # left_join(qqq %>% select(Date, qqq_up_down), by = c("date" = "Date")) %>% 
        # fill(spy_up_down, .direction = "down") %>% 
        # fill(qqq_up_down, .direction = "down") %>% 
        select(date, 
               up_down, 
               btc_up_down, 
               eth_up_down, 
               # spy_up_down, 
               # qqq_up_down
               )%>% 
                pivot_longer(!date, names_to = "names", values_to = "values") %>% 
                mutate(names = case_when(names == "up_down" ~ "RLE Analytics",
                                         names == "btc_up_down" ~ "BTC",
                                         names == "eth_up_down" ~ "ETH",
                                         names == "spy_up_down" ~ "SPY",
                                         names == "qqq_up_down" ~ "QQQ"),
                       names = factor(names, levels = c("RLE Analytics",
                                                        "BTC",
                                                        "ETH",
                                                        "SPY",
                                                        "QQQ"))) %>%
        ggplot(aes(x = date, y = values, group = names, color = names)) +
            geom_line() + 
            scale_y_continuous(labels = percent_format()) + 
            ggtitle("Portfolio Performance") + 
            geom_vline(aes(xintercept = min(tracker$date[tracker$algo_version == "v1"]))) + 
            geom_text(aes(x = min(tracker$date[tracker$algo_version == "v1"]) + days(2), 
                          y = 0, 
                          label = "v1")) + 
            geom_vline(aes(xintercept = min(tracker$date[tracker$algo_version == "v2"]))) + 
            geom_text(aes(x = min(tracker$date[tracker$algo_version == "v2"]) + days(2), 
                          y = 0, 
                          label = "v2")) + 
            geom_vline(aes(xintercept = min(tracker$date[tracker$algo_version == "v3"]))) + 
            geom_text(aes(x = min(tracker$date[tracker$algo_version == "v3"]) + days(2), 
                          y = 0, 
                          label = "v3")) + 
            geom_vline(aes(xintercept = min(tracker$date[tracker$algo_version == "v4"]))) + 
            geom_text(aes(x = min(tracker$date[tracker$algo_version == "v4"]) + days(2), 
                          y = 0, 
                          label = "v4")) + 
            theme(panel.background = element_blank(),
                  panel.grid.major = element_line(color = "light gray"),
                  axis.ticks = element_blank(), 
                  axis.title = element_blank(), 
                  plot.background = element_rect(fill = NA, color = "black"), 
                  legend.position = "top",
                  legend.key = element_blank(),
                  legend.title = element_blank())

plot_dat %>% 
    filter(date >= "2024-09-01")
# A tibble: 112 × 9
   date       invested reinvested returned cash_available total_invested
   <date>        <dbl>      <dbl>    <dbl>          <dbl>          <dbl>
 1 2024-09-01     26.8       3.16     1.52            0            1193.
 2 2024-09-02     18.5       1.52     7.59            0            1212.
 3 2024-09-03     12.4       7.59    26.7             0            1224.
 4 2024-09-04      0         9.85    28.2            16.8          1224.
 5 2024-09-05      0        10.0     26.6            35.0          1224.
 6 2024-09-06      0        15.0     24.1            46.6          1224.
 7 2024-09-07      0         0        0              46.6          1224.
 8 2024-09-08      0         0        0              46.6          1224.
 9 2024-09-09      0         5.00    25.7            65.6          1224.
10 2024-09-10      0         5.00    49.6            86.3          1224.
# ℹ 102 more rows
# ℹ 3 more variables: port_value <dbl>, total_value <dbl>, up_down <dbl>