@ -43,8 +43,13 @@ mod utils;
/// ### Returns
///
/// The list of [`Payout`]s for the given price, quantity and leverage.
pub fn calculate ( price : Price , quantity : Usd , leverage : Leverage ) -> Result < Vec < Payout > > {
let payouts = calculate_payout_parameters ( price , quantity , leverage ) ?
pub fn calculate (
price : Price ,
quantity : Usd ,
leverage : Leverage ,
n_payouts : usize ,
) -> Result < Vec < Payout > > {
let payouts = calculate_payout_parameters ( price , quantity , leverage , n_payouts ) ?
. into_iter ( )
. map ( PayoutParameter ::into_payouts )
. flatten_ok ( )
@ -54,7 +59,6 @@ pub fn calculate(price: Price, quantity: Usd, leverage: Leverage) -> Result<Vec<
}
const CONTRACT_VALUE : f64 = 1. ;
const N_PAYOUTS : usize = 200 ;
const SHORT_LEVERAGE : usize = 1 ;
/// Internal calculate function for the payout curve.
@ -65,6 +69,7 @@ fn calculate_payout_parameters(
price : Price ,
quantity : Usd ,
long_leverage : Leverage ,
n_payouts : usize ,
) -> Result < Vec < PayoutParameter > > {
let initial_rate = price
. try_into_f64 ( )
@ -83,7 +88,7 @@ fn calculate_payout_parameters(
) ? ;
let payout_parameters = payout_curve
. generate_payout_scheme ( N_PAYOUTS ) ?
. generate_payout_scheme ( n_payouts ) ?
. rows ( )
. into_iter ( )
. map ( | row | {
@ -509,6 +514,7 @@ mod tests {
Price ::new ( dec ! ( 54000.00 ) ) . unwrap ( ) ,
Usd ::new ( dec ! ( 3500.00 ) ) ,
Leverage ::new ( 5 ) . unwrap ( ) ,
200 ,
)
. unwrap ( ) ;
@ -725,6 +731,7 @@ mod tests {
Price ::new ( dec ! ( 54000.00 ) ) . unwrap ( ) ,
Usd ::new ( dec ! ( 3500.00 ) ) ,
Leverage ::new ( 5 ) . unwrap ( ) ,
200 ,
)
. unwrap ( ) ;