mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-04-24 06:39:58 -07:00
computer: renames
This commit is contained in:
@@ -5246,10 +5246,10 @@ impl SeriesTree_Investing {
|
|||||||
|
|
||||||
/// Series tree node.
|
/// Series tree node.
|
||||||
pub struct SeriesTree_Investing_Period {
|
pub struct SeriesTree_Investing_Period {
|
||||||
pub stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3,
|
pub dca_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3,
|
||||||
pub cost_basis: SeriesTree_Investing_Period_CostBasis,
|
pub dca_cost_basis: SeriesTree_Investing_Period_DcaCostBasis,
|
||||||
pub return_: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2,
|
pub dca_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2,
|
||||||
pub cagr: _10y2y3y4y5y6y8yPattern,
|
pub dca_cagr: _10y2y3y4y5y6y8yPattern,
|
||||||
pub lump_sum_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3,
|
pub lump_sum_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3,
|
||||||
pub lump_sum_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2,
|
pub lump_sum_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2,
|
||||||
}
|
}
|
||||||
@@ -5257,10 +5257,10 @@ pub struct SeriesTree_Investing_Period {
|
|||||||
impl SeriesTree_Investing_Period {
|
impl SeriesTree_Investing_Period {
|
||||||
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3::new(client.clone(), "dca_stack".to_string()),
|
dca_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3::new(client.clone(), "dca_stack".to_string()),
|
||||||
cost_basis: SeriesTree_Investing_Period_CostBasis::new(client.clone(), format!("{base_path}_cost_basis")),
|
dca_cost_basis: SeriesTree_Investing_Period_DcaCostBasis::new(client.clone(), format!("{base_path}_dca_cost_basis")),
|
||||||
return_: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2::new(client.clone(), "dca_return".to_string()),
|
dca_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2::new(client.clone(), "dca_return".to_string()),
|
||||||
cagr: _10y2y3y4y5y6y8yPattern::new(client.clone(), "dca_cagr".to_string()),
|
dca_cagr: _10y2y3y4y5y6y8yPattern::new(client.clone(), "dca_cagr".to_string()),
|
||||||
lump_sum_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3::new(client.clone(), "lump_sum_stack".to_string()),
|
lump_sum_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3::new(client.clone(), "lump_sum_stack".to_string()),
|
||||||
lump_sum_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2::new(client.clone(), "lump_sum_return".to_string()),
|
lump_sum_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2::new(client.clone(), "lump_sum_return".to_string()),
|
||||||
}
|
}
|
||||||
@@ -5268,7 +5268,7 @@ impl SeriesTree_Investing_Period {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Series tree node.
|
/// Series tree node.
|
||||||
pub struct SeriesTree_Investing_Period_CostBasis {
|
pub struct SeriesTree_Investing_Period_DcaCostBasis {
|
||||||
pub _1w: CentsSatsUsdPattern,
|
pub _1w: CentsSatsUsdPattern,
|
||||||
pub _1m: CentsSatsUsdPattern,
|
pub _1m: CentsSatsUsdPattern,
|
||||||
pub _3m: CentsSatsUsdPattern,
|
pub _3m: CentsSatsUsdPattern,
|
||||||
@@ -5283,7 +5283,7 @@ pub struct SeriesTree_Investing_Period_CostBasis {
|
|||||||
pub _10y: CentsSatsUsdPattern,
|
pub _10y: CentsSatsUsdPattern,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SeriesTree_Investing_Period_CostBasis {
|
impl SeriesTree_Investing_Period_DcaCostBasis {
|
||||||
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
_1w: CentsSatsUsdPattern::new(client.clone(), "dca_cost_basis_1w".to_string()),
|
_1w: CentsSatsUsdPattern::new(client.clone(), "dca_cost_basis_1w".to_string()),
|
||||||
@@ -5304,23 +5304,23 @@ impl SeriesTree_Investing_Period_CostBasis {
|
|||||||
|
|
||||||
/// Series tree node.
|
/// Series tree node.
|
||||||
pub struct SeriesTree_Investing_Class {
|
pub struct SeriesTree_Investing_Class {
|
||||||
pub stack: SeriesTree_Investing_Class_Stack,
|
pub dca_stack: SeriesTree_Investing_Class_DcaStack,
|
||||||
pub cost_basis: SeriesTree_Investing_Class_CostBasis,
|
pub dca_cost_basis: SeriesTree_Investing_Class_DcaCostBasis,
|
||||||
pub return_: SeriesTree_Investing_Class_Return,
|
pub dca_return: SeriesTree_Investing_Class_DcaReturn,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SeriesTree_Investing_Class {
|
impl SeriesTree_Investing_Class {
|
||||||
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
stack: SeriesTree_Investing_Class_Stack::new(client.clone(), format!("{base_path}_stack")),
|
dca_stack: SeriesTree_Investing_Class_DcaStack::new(client.clone(), format!("{base_path}_dca_stack")),
|
||||||
cost_basis: SeriesTree_Investing_Class_CostBasis::new(client.clone(), format!("{base_path}_cost_basis")),
|
dca_cost_basis: SeriesTree_Investing_Class_DcaCostBasis::new(client.clone(), format!("{base_path}_dca_cost_basis")),
|
||||||
return_: SeriesTree_Investing_Class_Return::new(client.clone(), format!("{base_path}_return")),
|
dca_return: SeriesTree_Investing_Class_DcaReturn::new(client.clone(), format!("{base_path}_dca_return")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Series tree node.
|
/// Series tree node.
|
||||||
pub struct SeriesTree_Investing_Class_Stack {
|
pub struct SeriesTree_Investing_Class_DcaStack {
|
||||||
pub from_2015: BtcCentsSatsUsdPattern3,
|
pub from_2015: BtcCentsSatsUsdPattern3,
|
||||||
pub from_2016: BtcCentsSatsUsdPattern3,
|
pub from_2016: BtcCentsSatsUsdPattern3,
|
||||||
pub from_2017: BtcCentsSatsUsdPattern3,
|
pub from_2017: BtcCentsSatsUsdPattern3,
|
||||||
@@ -5335,7 +5335,7 @@ pub struct SeriesTree_Investing_Class_Stack {
|
|||||||
pub from_2026: BtcCentsSatsUsdPattern3,
|
pub from_2026: BtcCentsSatsUsdPattern3,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SeriesTree_Investing_Class_Stack {
|
impl SeriesTree_Investing_Class_DcaStack {
|
||||||
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
from_2015: BtcCentsSatsUsdPattern3::new(client.clone(), "dca_stack_from_2015".to_string()),
|
from_2015: BtcCentsSatsUsdPattern3::new(client.clone(), "dca_stack_from_2015".to_string()),
|
||||||
@@ -5355,7 +5355,7 @@ impl SeriesTree_Investing_Class_Stack {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Series tree node.
|
/// Series tree node.
|
||||||
pub struct SeriesTree_Investing_Class_CostBasis {
|
pub struct SeriesTree_Investing_Class_DcaCostBasis {
|
||||||
pub from_2015: CentsSatsUsdPattern,
|
pub from_2015: CentsSatsUsdPattern,
|
||||||
pub from_2016: CentsSatsUsdPattern,
|
pub from_2016: CentsSatsUsdPattern,
|
||||||
pub from_2017: CentsSatsUsdPattern,
|
pub from_2017: CentsSatsUsdPattern,
|
||||||
@@ -5370,7 +5370,7 @@ pub struct SeriesTree_Investing_Class_CostBasis {
|
|||||||
pub from_2026: CentsSatsUsdPattern,
|
pub from_2026: CentsSatsUsdPattern,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SeriesTree_Investing_Class_CostBasis {
|
impl SeriesTree_Investing_Class_DcaCostBasis {
|
||||||
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
from_2015: CentsSatsUsdPattern::new(client.clone(), "dca_cost_basis_from_2015".to_string()),
|
from_2015: CentsSatsUsdPattern::new(client.clone(), "dca_cost_basis_from_2015".to_string()),
|
||||||
@@ -5390,7 +5390,7 @@ impl SeriesTree_Investing_Class_CostBasis {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Series tree node.
|
/// Series tree node.
|
||||||
pub struct SeriesTree_Investing_Class_Return {
|
pub struct SeriesTree_Investing_Class_DcaReturn {
|
||||||
pub from_2015: BpsPercentRatioPattern,
|
pub from_2015: BpsPercentRatioPattern,
|
||||||
pub from_2016: BpsPercentRatioPattern,
|
pub from_2016: BpsPercentRatioPattern,
|
||||||
pub from_2017: BpsPercentRatioPattern,
|
pub from_2017: BpsPercentRatioPattern,
|
||||||
@@ -5405,7 +5405,7 @@ pub struct SeriesTree_Investing_Class_Return {
|
|||||||
pub from_2026: BpsPercentRatioPattern,
|
pub from_2026: BpsPercentRatioPattern,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SeriesTree_Investing_Class_Return {
|
impl SeriesTree_Investing_Class_DcaReturn {
|
||||||
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
pub fn new(client: Arc<BrkClientBase>, base_path: String) -> Self {
|
||||||
Self {
|
Self {
|
||||||
from_2015: BpsPercentRatioPattern::new(client.clone(), "dca_return_from_2015".to_string()),
|
from_2015: BpsPercentRatioPattern::new(client.clone(), "dca_return_from_2015".to_string()),
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ impl Vecs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DCA by period - stack (rolling sum via _start vecs)
|
// DCA by period - stack (rolling sum via _start vecs)
|
||||||
for (stack, days) in self.period.stack.iter_mut_with_days() {
|
for (stack, days) in self.period.dca_stack.iter_mut_with_days() {
|
||||||
let window_starts = blocks.lookback.start_vec(days as usize);
|
let window_starts = blocks.lookback.start_vec(days as usize);
|
||||||
stack.sats.height.compute_rolling_sum(
|
stack.sats.height.compute_rolling_sum(
|
||||||
starting_indexes.height,
|
starting_indexes.height,
|
||||||
@@ -63,14 +63,16 @@ impl Vecs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DCA by period - stack cents (sats × price)
|
// DCA by period - stack cents (sats × price)
|
||||||
for stack in self.period.stack.iter_mut() {
|
for stack in self.period.dca_stack.iter_mut() {
|
||||||
stack.compute(prices, starting_indexes.height, exit)?;
|
stack.compute(prices, starting_indexes.height, exit)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DCA by period - average price (derived from stack)
|
// DCA by period - average price (derived from stack)
|
||||||
let starting_height = starting_indexes.height.to_usize();
|
let starting_height = starting_indexes.height.to_usize();
|
||||||
for (average_price, stack, days) in
|
for (average_price, stack, days) in self
|
||||||
self.period.cost_basis.zip_mut_with_days(&self.period.stack)
|
.period
|
||||||
|
.dca_cost_basis
|
||||||
|
.zip_mut_with_days(&self.period.dca_stack)
|
||||||
{
|
{
|
||||||
let days = days as usize;
|
let days = days as usize;
|
||||||
average_price.cents.height.compute_transform2(
|
average_price.cents.height.compute_transform2(
|
||||||
@@ -94,9 +96,9 @@ impl Vecs {
|
|||||||
// DCA by period - returns (compute from average price)
|
// DCA by period - returns (compute from average price)
|
||||||
for (returns, (average_price, _)) in self
|
for (returns, (average_price, _)) in self
|
||||||
.period
|
.period
|
||||||
.r#return
|
.dca_return
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.zip(self.period.cost_basis.iter_with_days())
|
.zip(self.period.dca_cost_basis.iter_with_days())
|
||||||
{
|
{
|
||||||
returns.compute_binary::<Cents, Cents, RatioDiffCentsBps32>(
|
returns.compute_binary::<Cents, Cents, RatioDiffCentsBps32>(
|
||||||
starting_indexes.height,
|
starting_indexes.height,
|
||||||
@@ -107,7 +109,11 @@ impl Vecs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DCA by period - CAGR (computed from returns at height level)
|
// DCA by period - CAGR (computed from returns at height level)
|
||||||
for (cagr, returns, days) in self.period.cagr.zip_mut_with_period(&self.period.r#return) {
|
for (cagr, returns, days) in self
|
||||||
|
.period
|
||||||
|
.dca_cagr
|
||||||
|
.zip_mut_with_period(&self.period.dca_return)
|
||||||
|
{
|
||||||
let years = days as f64 / 365.0;
|
let years = days as f64 / 365.0;
|
||||||
cagr.bps.height.compute_transform(
|
cagr.bps.height.compute_transform(
|
||||||
starting_indexes.height,
|
starting_indexes.height,
|
||||||
@@ -165,11 +171,15 @@ impl Vecs {
|
|||||||
|
|
||||||
// DCA by year class - stack (cumulative sum from class start date)
|
// DCA by year class - stack (cumulative sum from class start date)
|
||||||
let start_days = super::ByDcaClass::<()>::start_days();
|
let start_days = super::ByDcaClass::<()>::start_days();
|
||||||
for (stack, day1) in self.class.stack.iter_mut().zip(start_days) {
|
for (stack, day1) in self.class.dca_stack.iter_mut().zip(start_days) {
|
||||||
let mut last_di: Option<Day1> = None;
|
let mut last_di: Option<Day1> = None;
|
||||||
let cls_start = stack.sats.height.len().min(starting_height);
|
let cls_start = stack.sats.height.len().min(starting_height);
|
||||||
let mut prev_value = if cls_start > 0 {
|
let mut prev_value = if cls_start > 0 {
|
||||||
stack.sats.height.collect_one_at(cls_start - 1).unwrap_or_default()
|
stack
|
||||||
|
.sats
|
||||||
|
.height
|
||||||
|
.collect_one_at(cls_start - 1)
|
||||||
|
.unwrap_or_default()
|
||||||
} else {
|
} else {
|
||||||
Sats::ZERO
|
Sats::ZERO
|
||||||
};
|
};
|
||||||
@@ -216,7 +226,7 @@ impl Vecs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DCA by year class - stack cents (sats × price)
|
// DCA by year class - stack cents (sats × price)
|
||||||
for stack in self.class.stack.iter_mut() {
|
for stack in self.class.dca_stack.iter_mut() {
|
||||||
stack.compute(prices, starting_indexes.height, exit)?;
|
stack.compute(prices, starting_indexes.height, exit)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,9 +234,9 @@ impl Vecs {
|
|||||||
let start_days = super::ByDcaClass::<()>::start_days();
|
let start_days = super::ByDcaClass::<()>::start_days();
|
||||||
for ((average_price, stack), from) in self
|
for ((average_price, stack), from) in self
|
||||||
.class
|
.class
|
||||||
.cost_basis
|
.dca_cost_basis
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.zip(self.class.stack.iter())
|
.zip(self.class.dca_stack.iter())
|
||||||
.zip(start_days)
|
.zip(start_days)
|
||||||
{
|
{
|
||||||
let from_usize = from.to_usize();
|
let from_usize = from.to_usize();
|
||||||
@@ -250,9 +260,9 @@ impl Vecs {
|
|||||||
// DCA by year class - returns (compute from average price)
|
// DCA by year class - returns (compute from average price)
|
||||||
for (returns, average_price) in self
|
for (returns, average_price) in self
|
||||||
.class
|
.class
|
||||||
.r#return
|
.dca_return
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.zip(self.class.cost_basis.iter())
|
.zip(self.class.dca_cost_basis.iter())
|
||||||
{
|
{
|
||||||
returns.compute_binary::<Cents, Cents, RatioDiffCentsBps32>(
|
returns.compute_binary::<Cents, Cents, RatioDiffCentsBps32>(
|
||||||
starting_indexes.height,
|
starting_indexes.height,
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ use brk_error::Result;
|
|||||||
use brk_types::Version;
|
use brk_types::Version;
|
||||||
use vecdb::ImportableVec;
|
use vecdb::ImportableVec;
|
||||||
|
|
||||||
use super::{ByDcaCagr, ByDcaClass, ByDcaPeriod, Vecs};
|
|
||||||
use super::vecs::{ClassVecs, PeriodVecs};
|
use super::vecs::{ClassVecs, PeriodVecs};
|
||||||
|
use super::{ByDcaCagr, ByDcaClass, ByDcaPeriod, Vecs};
|
||||||
use crate::{
|
use crate::{
|
||||||
indexes,
|
indexes,
|
||||||
internal::{
|
internal::{
|
||||||
db_utils::{finalize_db, open_db},
|
|
||||||
AmountPerBlock, PercentPerBlock, Price,
|
AmountPerBlock, PercentPerBlock, Price,
|
||||||
|
db_utils::{finalize_db, open_db},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -66,17 +66,17 @@ impl Vecs {
|
|||||||
let this = Self {
|
let this = Self {
|
||||||
sats_per_day: ImportableVec::forced_import(&db, "dca_sats_per_day", version)?,
|
sats_per_day: ImportableVec::forced_import(&db, "dca_sats_per_day", version)?,
|
||||||
period: PeriodVecs {
|
period: PeriodVecs {
|
||||||
stack,
|
dca_stack: stack,
|
||||||
cost_basis,
|
dca_cost_basis: cost_basis,
|
||||||
r#return,
|
dca_return: r#return,
|
||||||
cagr,
|
dca_cagr: cagr,
|
||||||
lump_sum_stack,
|
lump_sum_stack,
|
||||||
lump_sum_return,
|
lump_sum_return,
|
||||||
},
|
},
|
||||||
class: ClassVecs {
|
class: ClassVecs {
|
||||||
stack: class_stack,
|
dca_stack: class_stack,
|
||||||
cost_basis: class_cost_basis,
|
dca_cost_basis: class_cost_basis,
|
||||||
r#return: class_return,
|
dca_return: class_return,
|
||||||
},
|
},
|
||||||
db,
|
db,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,19 +7,19 @@ use crate::internal::{AmountPerBlock, PerBlock, PercentPerBlock, Price};
|
|||||||
|
|
||||||
#[derive(Traversable)]
|
#[derive(Traversable)]
|
||||||
pub struct PeriodVecs<M: StorageMode = Rw> {
|
pub struct PeriodVecs<M: StorageMode = Rw> {
|
||||||
pub stack: ByDcaPeriod<AmountPerBlock<M>>,
|
pub dca_stack: ByDcaPeriod<AmountPerBlock<M>>,
|
||||||
pub cost_basis: ByDcaPeriod<Price<PerBlock<Cents, M>>>,
|
pub dca_cost_basis: ByDcaPeriod<Price<PerBlock<Cents, M>>>,
|
||||||
pub r#return: ByDcaPeriod<PercentPerBlock<BasisPointsSigned32, M>>,
|
pub dca_return: ByDcaPeriod<PercentPerBlock<BasisPointsSigned32, M>>,
|
||||||
pub cagr: ByDcaCagr<PercentPerBlock<BasisPointsSigned32, M>>,
|
pub dca_cagr: ByDcaCagr<PercentPerBlock<BasisPointsSigned32, M>>,
|
||||||
pub lump_sum_stack: ByDcaPeriod<AmountPerBlock<M>>,
|
pub lump_sum_stack: ByDcaPeriod<AmountPerBlock<M>>,
|
||||||
pub lump_sum_return: ByDcaPeriod<PercentPerBlock<BasisPointsSigned32, M>>,
|
pub lump_sum_return: ByDcaPeriod<PercentPerBlock<BasisPointsSigned32, M>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Traversable)]
|
#[derive(Traversable)]
|
||||||
pub struct ClassVecs<M: StorageMode = Rw> {
|
pub struct ClassVecs<M: StorageMode = Rw> {
|
||||||
pub stack: ByDcaClass<AmountPerBlock<M>>,
|
pub dca_stack: ByDcaClass<AmountPerBlock<M>>,
|
||||||
pub cost_basis: ByDcaClass<Price<PerBlock<Cents, M>>>,
|
pub dca_cost_basis: ByDcaClass<Price<PerBlock<Cents, M>>>,
|
||||||
pub r#return: ByDcaClass<PercentPerBlock<BasisPointsSigned32, M>>,
|
pub dca_return: ByDcaClass<PercentPerBlock<BasisPointsSigned32, M>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Traversable)]
|
#[derive(Traversable)]
|
||||||
|
|||||||
@@ -5046,16 +5046,16 @@ function createTransferPattern(client, acc) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} SeriesTree_Investing_Period
|
* @typedef {Object} SeriesTree_Investing_Period
|
||||||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern3} stack
|
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern3} dcaStack
|
||||||
* @property {SeriesTree_Investing_Period_CostBasis} costBasis
|
* @property {SeriesTree_Investing_Period_DcaCostBasis} dcaCostBasis
|
||||||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern2} return
|
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern2} dcaReturn
|
||||||
* @property {_10y2y3y4y5y6y8yPattern} cagr
|
* @property {_10y2y3y4y5y6y8yPattern} dcaCagr
|
||||||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern3} lumpSumStack
|
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern3} lumpSumStack
|
||||||
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern2} lumpSumReturn
|
* @property {_10y1m1w1y2y3m3y4y5y6m6y8yPattern2} lumpSumReturn
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} SeriesTree_Investing_Period_CostBasis
|
* @typedef {Object} SeriesTree_Investing_Period_DcaCostBasis
|
||||||
* @property {CentsSatsUsdPattern} _1w
|
* @property {CentsSatsUsdPattern} _1w
|
||||||
* @property {CentsSatsUsdPattern} _1m
|
* @property {CentsSatsUsdPattern} _1m
|
||||||
* @property {CentsSatsUsdPattern} _3m
|
* @property {CentsSatsUsdPattern} _3m
|
||||||
@@ -5072,13 +5072,13 @@ function createTransferPattern(client, acc) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} SeriesTree_Investing_Class
|
* @typedef {Object} SeriesTree_Investing_Class
|
||||||
* @property {SeriesTree_Investing_Class_Stack} stack
|
* @property {SeriesTree_Investing_Class_DcaStack} dcaStack
|
||||||
* @property {SeriesTree_Investing_Class_CostBasis} costBasis
|
* @property {SeriesTree_Investing_Class_DcaCostBasis} dcaCostBasis
|
||||||
* @property {SeriesTree_Investing_Class_Return} return
|
* @property {SeriesTree_Investing_Class_DcaReturn} dcaReturn
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} SeriesTree_Investing_Class_Stack
|
* @typedef {Object} SeriesTree_Investing_Class_DcaStack
|
||||||
* @property {BtcCentsSatsUsdPattern3} from2015
|
* @property {BtcCentsSatsUsdPattern3} from2015
|
||||||
* @property {BtcCentsSatsUsdPattern3} from2016
|
* @property {BtcCentsSatsUsdPattern3} from2016
|
||||||
* @property {BtcCentsSatsUsdPattern3} from2017
|
* @property {BtcCentsSatsUsdPattern3} from2017
|
||||||
@@ -5094,7 +5094,7 @@ function createTransferPattern(client, acc) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} SeriesTree_Investing_Class_CostBasis
|
* @typedef {Object} SeriesTree_Investing_Class_DcaCostBasis
|
||||||
* @property {CentsSatsUsdPattern} from2015
|
* @property {CentsSatsUsdPattern} from2015
|
||||||
* @property {CentsSatsUsdPattern} from2016
|
* @property {CentsSatsUsdPattern} from2016
|
||||||
* @property {CentsSatsUsdPattern} from2017
|
* @property {CentsSatsUsdPattern} from2017
|
||||||
@@ -5110,7 +5110,7 @@ function createTransferPattern(client, acc) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {Object} SeriesTree_Investing_Class_Return
|
* @typedef {Object} SeriesTree_Investing_Class_DcaReturn
|
||||||
* @property {BpsPercentRatioPattern} from2015
|
* @property {BpsPercentRatioPattern} from2015
|
||||||
* @property {BpsPercentRatioPattern} from2016
|
* @property {BpsPercentRatioPattern} from2016
|
||||||
* @property {BpsPercentRatioPattern} from2017
|
* @property {BpsPercentRatioPattern} from2017
|
||||||
@@ -8158,8 +8158,8 @@ class BrkClient extends BrkClientBase {
|
|||||||
investing: {
|
investing: {
|
||||||
satsPerDay: createSeriesPattern18(this, 'dca_sats_per_day'),
|
satsPerDay: createSeriesPattern18(this, 'dca_sats_per_day'),
|
||||||
period: {
|
period: {
|
||||||
stack: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(this, 'dca_stack'),
|
dcaStack: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(this, 'dca_stack'),
|
||||||
costBasis: {
|
dcaCostBasis: {
|
||||||
_1w: createCentsSatsUsdPattern(this, 'dca_cost_basis_1w'),
|
_1w: createCentsSatsUsdPattern(this, 'dca_cost_basis_1w'),
|
||||||
_1m: createCentsSatsUsdPattern(this, 'dca_cost_basis_1m'),
|
_1m: createCentsSatsUsdPattern(this, 'dca_cost_basis_1m'),
|
||||||
_3m: createCentsSatsUsdPattern(this, 'dca_cost_basis_3m'),
|
_3m: createCentsSatsUsdPattern(this, 'dca_cost_basis_3m'),
|
||||||
@@ -8173,13 +8173,13 @@ class BrkClient extends BrkClientBase {
|
|||||||
_8y: createCentsSatsUsdPattern(this, 'dca_cost_basis_8y'),
|
_8y: createCentsSatsUsdPattern(this, 'dca_cost_basis_8y'),
|
||||||
_10y: createCentsSatsUsdPattern(this, 'dca_cost_basis_10y'),
|
_10y: createCentsSatsUsdPattern(this, 'dca_cost_basis_10y'),
|
||||||
},
|
},
|
||||||
return: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern2(this, 'dca_return'),
|
dcaReturn: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern2(this, 'dca_return'),
|
||||||
cagr: create_10y2y3y4y5y6y8yPattern(this, 'dca_cagr'),
|
dcaCagr: create_10y2y3y4y5y6y8yPattern(this, 'dca_cagr'),
|
||||||
lumpSumStack: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(this, 'lump_sum_stack'),
|
lumpSumStack: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern3(this, 'lump_sum_stack'),
|
||||||
lumpSumReturn: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern2(this, 'lump_sum_return'),
|
lumpSumReturn: create_10y1m1w1y2y3m3y4y5y6m6y8yPattern2(this, 'lump_sum_return'),
|
||||||
},
|
},
|
||||||
class: {
|
class: {
|
||||||
stack: {
|
dcaStack: {
|
||||||
from2015: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2015'),
|
from2015: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2015'),
|
||||||
from2016: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2016'),
|
from2016: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2016'),
|
||||||
from2017: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2017'),
|
from2017: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2017'),
|
||||||
@@ -8193,7 +8193,7 @@ class BrkClient extends BrkClientBase {
|
|||||||
from2025: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2025'),
|
from2025: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2025'),
|
||||||
from2026: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2026'),
|
from2026: createBtcCentsSatsUsdPattern3(this, 'dca_stack_from_2026'),
|
||||||
},
|
},
|
||||||
costBasis: {
|
dcaCostBasis: {
|
||||||
from2015: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2015'),
|
from2015: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2015'),
|
||||||
from2016: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2016'),
|
from2016: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2016'),
|
||||||
from2017: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2017'),
|
from2017: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2017'),
|
||||||
@@ -8207,7 +8207,7 @@ class BrkClient extends BrkClientBase {
|
|||||||
from2025: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2025'),
|
from2025: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2025'),
|
||||||
from2026: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2026'),
|
from2026: createCentsSatsUsdPattern(this, 'dca_cost_basis_from_2026'),
|
||||||
},
|
},
|
||||||
return: {
|
dcaReturn: {
|
||||||
from2015: createBpsPercentRatioPattern(this, 'dca_return_from_2015'),
|
from2015: createBpsPercentRatioPattern(this, 'dca_return_from_2015'),
|
||||||
from2016: createBpsPercentRatioPattern(this, 'dca_return_from_2016'),
|
from2016: createBpsPercentRatioPattern(this, 'dca_return_from_2016'),
|
||||||
from2017: createBpsPercentRatioPattern(this, 'dca_return_from_2017'),
|
from2017: createBpsPercentRatioPattern(this, 'dca_return_from_2017'),
|
||||||
|
|||||||
@@ -4220,7 +4220,7 @@ class SeriesTree_Indicators:
|
|||||||
self.seller_exhaustion: SeriesPattern1[StoredF32] = SeriesPattern1(client, 'seller_exhaustion')
|
self.seller_exhaustion: SeriesPattern1[StoredF32] = SeriesPattern1(client, 'seller_exhaustion')
|
||||||
self.realized_envelope: SeriesTree_Indicators_RealizedEnvelope = SeriesTree_Indicators_RealizedEnvelope(client)
|
self.realized_envelope: SeriesTree_Indicators_RealizedEnvelope = SeriesTree_Indicators_RealizedEnvelope(client)
|
||||||
|
|
||||||
class SeriesTree_Investing_Period_CostBasis:
|
class SeriesTree_Investing_Period_DcaCostBasis:
|
||||||
"""Series tree node."""
|
"""Series tree node."""
|
||||||
|
|
||||||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||||||
@@ -4241,14 +4241,14 @@ class SeriesTree_Investing_Period:
|
|||||||
"""Series tree node."""
|
"""Series tree node."""
|
||||||
|
|
||||||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||||||
self.stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, 'dca_stack')
|
self.dca_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, 'dca_stack')
|
||||||
self.cost_basis: SeriesTree_Investing_Period_CostBasis = SeriesTree_Investing_Period_CostBasis(client)
|
self.dca_cost_basis: SeriesTree_Investing_Period_DcaCostBasis = SeriesTree_Investing_Period_DcaCostBasis(client)
|
||||||
self.return_: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'dca_return')
|
self.dca_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'dca_return')
|
||||||
self.cagr: _10y2y3y4y5y6y8yPattern = _10y2y3y4y5y6y8yPattern(client, 'dca_cagr')
|
self.dca_cagr: _10y2y3y4y5y6y8yPattern = _10y2y3y4y5y6y8yPattern(client, 'dca_cagr')
|
||||||
self.lump_sum_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, 'lump_sum_stack')
|
self.lump_sum_stack: _10y1m1w1y2y3m3y4y5y6m6y8yPattern3 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern3(client, 'lump_sum_stack')
|
||||||
self.lump_sum_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'lump_sum_return')
|
self.lump_sum_return: _10y1m1w1y2y3m3y4y5y6m6y8yPattern2 = _10y1m1w1y2y3m3y4y5y6m6y8yPattern2(client, 'lump_sum_return')
|
||||||
|
|
||||||
class SeriesTree_Investing_Class_Stack:
|
class SeriesTree_Investing_Class_DcaStack:
|
||||||
"""Series tree node."""
|
"""Series tree node."""
|
||||||
|
|
||||||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||||||
@@ -4265,7 +4265,7 @@ class SeriesTree_Investing_Class_Stack:
|
|||||||
self.from_2025: BtcCentsSatsUsdPattern3 = BtcCentsSatsUsdPattern3(client, 'dca_stack_from_2025')
|
self.from_2025: BtcCentsSatsUsdPattern3 = BtcCentsSatsUsdPattern3(client, 'dca_stack_from_2025')
|
||||||
self.from_2026: BtcCentsSatsUsdPattern3 = BtcCentsSatsUsdPattern3(client, 'dca_stack_from_2026')
|
self.from_2026: BtcCentsSatsUsdPattern3 = BtcCentsSatsUsdPattern3(client, 'dca_stack_from_2026')
|
||||||
|
|
||||||
class SeriesTree_Investing_Class_CostBasis:
|
class SeriesTree_Investing_Class_DcaCostBasis:
|
||||||
"""Series tree node."""
|
"""Series tree node."""
|
||||||
|
|
||||||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||||||
@@ -4282,7 +4282,7 @@ class SeriesTree_Investing_Class_CostBasis:
|
|||||||
self.from_2025: CentsSatsUsdPattern = CentsSatsUsdPattern(client, 'dca_cost_basis_from_2025')
|
self.from_2025: CentsSatsUsdPattern = CentsSatsUsdPattern(client, 'dca_cost_basis_from_2025')
|
||||||
self.from_2026: CentsSatsUsdPattern = CentsSatsUsdPattern(client, 'dca_cost_basis_from_2026')
|
self.from_2026: CentsSatsUsdPattern = CentsSatsUsdPattern(client, 'dca_cost_basis_from_2026')
|
||||||
|
|
||||||
class SeriesTree_Investing_Class_Return:
|
class SeriesTree_Investing_Class_DcaReturn:
|
||||||
"""Series tree node."""
|
"""Series tree node."""
|
||||||
|
|
||||||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||||||
@@ -4303,9 +4303,9 @@ class SeriesTree_Investing_Class:
|
|||||||
"""Series tree node."""
|
"""Series tree node."""
|
||||||
|
|
||||||
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
def __init__(self, client: BrkClientBase, base_path: str = ''):
|
||||||
self.stack: SeriesTree_Investing_Class_Stack = SeriesTree_Investing_Class_Stack(client)
|
self.dca_stack: SeriesTree_Investing_Class_DcaStack = SeriesTree_Investing_Class_DcaStack(client)
|
||||||
self.cost_basis: SeriesTree_Investing_Class_CostBasis = SeriesTree_Investing_Class_CostBasis(client)
|
self.dca_cost_basis: SeriesTree_Investing_Class_DcaCostBasis = SeriesTree_Investing_Class_DcaCostBasis(client)
|
||||||
self.return_: SeriesTree_Investing_Class_Return = SeriesTree_Investing_Class_Return(client)
|
self.dca_return: SeriesTree_Investing_Class_DcaReturn = SeriesTree_Investing_Class_DcaReturn(client)
|
||||||
|
|
||||||
class SeriesTree_Investing:
|
class SeriesTree_Investing:
|
||||||
"""Series tree node."""
|
"""Series tree node."""
|
||||||
|
|||||||
@@ -44,13 +44,13 @@ def test_fetch_typed_series():
|
|||||||
c = client.series.prices.split.close.usd.by.day1().tail(10).fetch()
|
c = client.series.prices.split.close.usd.by.day1().tail(10).fetch()
|
||||||
print(c)
|
print(c)
|
||||||
d = (
|
d = (
|
||||||
client.series.market.dca.period.lump_sum_stack._10y.usd.by.day1()
|
client.series.investing.period.lump_sum_stack._10y.usd.by.day1()
|
||||||
.tail(10)
|
.tail(10)
|
||||||
.fetch()
|
.fetch()
|
||||||
)
|
)
|
||||||
print(d)
|
print(d)
|
||||||
e = (
|
e = (
|
||||||
client.series.market.dca.class_.cost_basis.from_2017.usd.by.day1()
|
client.series.investing.class_.dca_cost_basis.from_2017.usd.by.day1()
|
||||||
.tail(10)
|
.tail(10)
|
||||||
.fetch()
|
.fetch()
|
||||||
)
|
)
|
||||||
|
|||||||
2
packages/brk_client/uv.lock
generated
2
packages/brk_client/uv.lock
generated
@@ -50,7 +50,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "brk-client"
|
name = "brk-client"
|
||||||
version = "0.1.9"
|
version = "0.2.2"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
|
|
||||||
[package.dev-dependencies]
|
[package.dev-dependencies]
|
||||||
|
|||||||
@@ -79,9 +79,9 @@ function buildYearEntry(investing, year, i) {
|
|||||||
return {
|
return {
|
||||||
name: `${year}`,
|
name: `${year}`,
|
||||||
color: colors.at(i, ALL_YEARS.length),
|
color: colors.at(i, ALL_YEARS.length),
|
||||||
costBasis: investing.class.costBasis[key],
|
costBasis: investing.class.dcaCostBasis[key],
|
||||||
returns: investing.class.return[key],
|
returns: investing.class.dcaReturn[key],
|
||||||
stack: investing.class.stack[key],
|
stack: investing.class.dcaStack[key],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,7 +231,10 @@ function createSingleEntryTree(item, returnsBottom) {
|
|||||||
* @param {BaseEntryItem & { titlePrefix?: string }} item
|
* @param {BaseEntryItem & { titlePrefix?: string }} item
|
||||||
*/
|
*/
|
||||||
function createShortSingleEntry(item) {
|
function createShortSingleEntry(item) {
|
||||||
return createSingleEntryTree(item, percentRatioBaseline({ pattern: item.returns, name: "Return" }));
|
return createSingleEntryTree(
|
||||||
|
item,
|
||||||
|
percentRatioBaseline({ pattern: item.returns, name: "Return" }),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -239,7 +242,15 @@ function createShortSingleEntry(item) {
|
|||||||
* @param {LongEntryItem & { titlePrefix?: string }} item
|
* @param {LongEntryItem & { titlePrefix?: string }} item
|
||||||
*/
|
*/
|
||||||
function createLongSingleEntry(item) {
|
function createLongSingleEntry(item) {
|
||||||
const { name, titlePrefix = name, color, costBasis, returns, cagr, stack } = item;
|
const {
|
||||||
|
name,
|
||||||
|
titlePrefix = name,
|
||||||
|
color,
|
||||||
|
costBasis,
|
||||||
|
returns,
|
||||||
|
cagr,
|
||||||
|
stack,
|
||||||
|
} = item;
|
||||||
const top = [price({ series: costBasis, name: "Cost Basis", color })];
|
const top = [price({ series: costBasis, name: "Cost Basis", color })];
|
||||||
return {
|
return {
|
||||||
name,
|
name,
|
||||||
@@ -278,7 +289,7 @@ export function createDcaVsLumpSumSection({ investing, lookback, returns }) {
|
|||||||
/** @param {AllPeriodKey} key */
|
/** @param {AllPeriodKey} key */
|
||||||
const topPane = (key) => [
|
const topPane = (key) => [
|
||||||
price({
|
price({
|
||||||
series: investing.period.costBasis[key],
|
series: investing.period.dcaCostBasis[key],
|
||||||
name: "DCA",
|
name: "DCA",
|
||||||
color: colors.profit,
|
color: colors.profit,
|
||||||
}),
|
}),
|
||||||
@@ -299,7 +310,7 @@ export function createDcaVsLumpSumSection({ investing, lookback, returns }) {
|
|||||||
top: topPane(key),
|
top: topPane(key),
|
||||||
bottom: [
|
bottom: [
|
||||||
...percentRatioBaseline({
|
...percentRatioBaseline({
|
||||||
pattern: investing.period.return[key],
|
pattern: investing.period.dcaReturn[key],
|
||||||
name: "DCA",
|
name: "DCA",
|
||||||
}),
|
}),
|
||||||
...percentRatioBaseline({
|
...percentRatioBaseline({
|
||||||
@@ -317,7 +328,7 @@ export function createDcaVsLumpSumSection({ investing, lookback, returns }) {
|
|||||||
top: topPane(key),
|
top: topPane(key),
|
||||||
bottom: [
|
bottom: [
|
||||||
...percentRatioBaseline({
|
...percentRatioBaseline({
|
||||||
pattern: investing.period.cagr[key],
|
pattern: investing.period.dcaCagr[key],
|
||||||
name: "DCA",
|
name: "DCA",
|
||||||
}),
|
}),
|
||||||
...percentRatioBaseline({
|
...percentRatioBaseline({
|
||||||
@@ -335,7 +346,7 @@ export function createDcaVsLumpSumSection({ investing, lookback, returns }) {
|
|||||||
top: topPane(key),
|
top: topPane(key),
|
||||||
bottom: [
|
bottom: [
|
||||||
...satsBtcUsd({
|
...satsBtcUsd({
|
||||||
pattern: investing.period.stack[key],
|
pattern: investing.period.dcaStack[key],
|
||||||
name: "DCA",
|
name: "DCA",
|
||||||
color: colors.profit,
|
color: colors.profit,
|
||||||
}),
|
}),
|
||||||
@@ -409,20 +420,20 @@ function createPeriodSection({ investing, lookback, returns }) {
|
|||||||
const buildBaseEntry = (key, i) => ({
|
const buildBaseEntry = (key, i) => ({
|
||||||
name: periodName(key),
|
name: periodName(key),
|
||||||
color: colors.at(i, allPeriods.length),
|
color: colors.at(i, allPeriods.length),
|
||||||
costBasis: isLumpSum ? lookback[key] : investing.period.costBasis[key],
|
costBasis: isLumpSum ? lookback[key] : investing.period.dcaCostBasis[key],
|
||||||
returns: isLumpSum
|
returns: isLumpSum
|
||||||
? investing.period.lumpSumReturn[key]
|
? investing.period.lumpSumReturn[key]
|
||||||
: investing.period.return[key],
|
: investing.period.dcaReturn[key],
|
||||||
stack: isLumpSum
|
stack: isLumpSum
|
||||||
? investing.period.lumpSumStack[key]
|
? investing.period.lumpSumStack[key]
|
||||||
: investing.period.stack[key],
|
: investing.period.dcaStack[key],
|
||||||
});
|
});
|
||||||
|
|
||||||
/** @param {LongPeriodKey} key @param {number} i @returns {LongEntryItem} */
|
/** @param {LongPeriodKey} key @param {number} i @returns {LongEntryItem} */
|
||||||
const buildLongEntry = (key, i) =>
|
const buildLongEntry = (key, i) =>
|
||||||
withCagr(
|
withCagr(
|
||||||
buildBaseEntry(key, i),
|
buildBaseEntry(key, i),
|
||||||
isLumpSum ? returns.cagr[key] : investing.period.cagr[key],
|
isLumpSum ? returns.cagr[key] : investing.period.dcaCagr[key],
|
||||||
);
|
);
|
||||||
|
|
||||||
/** @param {BaseEntryItem} entry */
|
/** @param {BaseEntryItem} entry */
|
||||||
|
|||||||
@@ -411,10 +411,6 @@ export function revenueRollingBtcSatsUsd({ coinbase, subsidy, fee }) {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Build percentile USD mappings from a ratio pattern
|
|
||||||
* @param {AnyRatioPattern} ratio
|
|
||||||
*/
|
|
||||||
/** @param {AnyRatioPattern} ratio */
|
/** @param {AnyRatioPattern} ratio */
|
||||||
export function percentileUsdMap(ratio) {
|
export function percentileUsdMap(ratio) {
|
||||||
return percentileBandsWith(ratio.percentiles, (e) => e.price);
|
return percentileBandsWith(ratio.percentiles, (e) => e.price);
|
||||||
|
|||||||
Reference in New Issue
Block a user