public static Option <Money> StopLossAmount(Option <Money> entryPrice, Option <Money> stopLossPrice, Option <int> lots) =>
 from e in entryPrice
 from sl in stopLossPrice
 from l in lots
 select PositionCalculatorExtensions.StopLossAmount(e, sl, l.Lots());
 public static Option <decimal> RiskReward(Option <Money> entryPrice, Option <Money> stopLossPrice,
                                           Option <Money> targetPrice) =>
 flatten(from e in entryPrice
         from sl in stopLossPrice
         from t in targetPrice
         select PositionCalculatorExtensions.RiskReward(e, sl, t));
 public static Option <int> Shares(Option <Money> entryPrice, Option <Money> stopLossPrice, Option <Money> accountRisk) =>
 from shares in flatten(from e in entryPrice
                        from sl in stopLossPrice
                        from ar in accountRisk
                        select PositionCalculatorExtensions.Shares(e, sl, ar))
 select shares.Shares;
 public static bool IsValidEntryPriceStopLossPrice(Option <Money> entryPrice, Option <Money> stopLossPrice) =>
 (from e in entryPrice
  from sl in stopLossPrice
  let isEntryPriceGreaterThanZero = IsGreaterThanZero(e)
                                    let isStopLossPriceGreaterThanZero = IsGreaterThanZero(sl)
                                                                         let isEntryPriceGreaterThanStopLoss = PositionCalculatorExtensions.IsValidStopLossPrice(e, sl)
                                                                                                               select
                                                                                                               isEntryPriceGreaterThanZero&&
                                                                                                               isStopLossPriceGreaterThanZero &&
                                                                                                               isEntryPriceGreaterThanStopLoss)
 .IfNone(() => false);
 public static bool IsValidTargetPrice(Option <Money> entryPrice, Option <Money> targetPrice) =>
 (from e in entryPrice
  from sl in targetPrice
  select PositionCalculatorExtensions.IsValidTargetPrice(e, sl))
 .IfNone(() => false);
 public static Option <Tick> TargetTick(Option <Money> entryPrice, Option <Money> targetPrice) =>
 from e in entryPrice
 from t in targetPrice
 select PositionCalculatorExtensions.TargetTick(e, t);
 public static Option <Money> EntryAmount(Option <Money> entryPrice, Option <int> lots) =>
 from e in entryPrice
 from l in lots
 select PositionCalculatorExtensions.EntryAmount(e, l.Lots());
 public static Option <Money> CalculateAccountRisk(Option <Money> capital, Option <Percent> risk) =>
 from c in capital
 from r in risk
 select PositionCalculatorExtensions.AccountRisk(c, r);
 public static Option <Percent> TargetPercentage(Option <Money> entryPice, Option <Money> targetPrice) =>
 flatten(from e in entryPice
         from t in targetPrice
         select PositionCalculatorExtensions.TargetPercentage(e, t));
 TargetAmount(Option <Money> entryPrice, Option <Money> targetPrice, Option <int> lots) =>
 from e in entryPrice
 from t in targetPrice
 from l in lots
 select PositionCalculatorExtensions.TargetAmount(e, t, l.Lots());
 public static Option <Tick> StopLossTick(Option <Money> entryPrice, Option <Money> stopLossPrice) =>
 from e in entryPrice
 from sl in stopLossPrice
 select PositionCalculatorExtensions.StopLossTick(e, sl);
 public static Option <Percent> StopLossPercentage(Option <Money> entryPice, Option <Money> stopLossPrice) =>
 flatten(from e in entryPice
         from sl in stopLossPrice
         select PositionCalculatorExtensions.StopLossPercentage(e, sl));