Skip to contents

These constructors create deterministic, classed cost model objects for ledgr execution. Cost models are experiment-level objects: strategies do not receive cost state and cost models may not change fill side, quantity, instrument, or execution timestamp. Cost identity is stored as cost_plan_json plus cost_model_hash; see ledgr_identity_fields for how those fields relate to run and candidate identity.

Usage

ledgr_cost_spread_bps(bps)

ledgr_cost_fixed_fee(amount)

ledgr_cost_notional_bps_fee(bps)

ledgr_cost_zero()

ledgr_cost_chain(...)

Arguments

bps

Finite non-negative basis-point value.

amount

Finite non-negative fixed fee per fill.

...

Cost model objects to compose in order.

Value

A ledgr_cost_model object.

Examples

spread <- ledgr_cost_spread_bps(5)
fixed <- ledgr_cost_fixed_fee(1)
notional <- ledgr_cost_notional_bps_fee(2)
zero <- ledgr_cost_zero()

cost <- ledgr_cost_chain(spread, fixed, notional)
ledgr_cost_steps(cost)
#> [[1]]
#> [[1]]$position
#> [1] 1
#> 
#> [[1]]$type_id
#> [1] "spread_bps"
#> 
#> [[1]]$version
#> [1] 1
#> 
#> [[1]]$stage
#> [1] "price_transform"
#> 
#> [[1]]$args
#> [[1]]$args$bps
#> [1] 5
#> 
#> 
#> 
#> [[2]]
#> [[2]]$position
#> [1] 2
#> 
#> [[2]]$type_id
#> [1] "fixed_fee"
#> 
#> [[2]]$version
#> [1] 1
#> 
#> [[2]]$stage
#> [1] "fee_adder"
#> 
#> [[2]]$args
#> [[2]]$args$amount
#> [1] 1
#> 
#> 
#> 
#> [[3]]
#> [[3]]$position
#> [1] 3
#> 
#> [[3]]$type_id
#> [1] "notional_bps_fee"
#> 
#> [[3]]$version
#> [1] 1
#> 
#> [[3]]$stage
#> [1] "fee_adder"
#> 
#> [[3]]$args
#> [[3]]$args$bps
#> [1] 2
#> 
#> 
#> 
ledgr_cost_describe(cost)
#> [1] "ledgr cost model: 3 step(s), hash 29bb4f09f21c\n1. spread_bps [price_transform] bps=5\n2. fixed_fee [fee_adder] amount=1\n3. notional_bps_fee [fee_adder] bps=2"

bars <- data.frame(
  ts_utc = as.POSIXct("2020-01-01", tz = "UTC") + 86400 * 0:2,
  instrument_id = "AAA",
  open = c(100, 101, 102),
  high = c(100, 101, 102),
  low = c(100, 101, 102),
  close = c(100, 101, 102),
  volume = 1000
)
strategy <- function(ctx, params) ctx$flat()
# raises ledgr_cost_model_unspecified: cost_model is required.
try(ledgr_backtest(data = bars, strategy = strategy), silent = TRUE)
bt <- ledgr_backtest(data = bars, strategy = strategy, cost_model = zero)
close(bt)