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(...)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)