value method

  1. @override
MatexPositionSizeResult value()
override

Implementation

@override
MatexPositionSizeResult value() {
  if (result != null) {
    return result!;
  }

  if (isValid) {
    final accountSize = state.accountSize;
    final stopLossPips = computeStopLossPip(state.pipPrecision!);
    final amountAtRisk = computeAmountAtRisk();
    final riskRatio = computeRiskRatio(amountAtRisk, accountSize);
    final pipValue = computePipValue();
    final size = pipValue > Decimal.zero && stopLossPips > 0
        ? computePositionSize(amountAtRisk, pipValue.toDouble(), stopLossPips)
        : 0.0;

    return (result = MatexPositionSizeResult(
      amountAtRisk: amountAtRisk,
      pipValue: (pipValue * toDecimal(size)).toDouble(),
      positionSize: size,
      riskRatio: riskRatio,
      stopLossPips: stopLossPips,
    ));
  }

  return (result = kDefaultPositionSizeResult.clone());
}