/// <summary>
        /// Obtains an instance specifying the functions, reporting currency and additional parameters.
        /// <para>
        /// Most functions require a parameter to control their behavior, such as {@code RatesMarketDataLookup}.
        ///
        /// </para>
        /// </summary>
        /// <param name="functions">  the calculation functions </param>
        /// <param name="reportingCurrency">  the reporting currency </param>
        /// <param name="parameters">  the parameters that control the calculation, may be empty </param>
        /// <returns> the rules </returns>
        public static CalculationRules of(CalculationFunctions functions, Currency reportingCurrency, params CalculationParameter[] parameters)
        {
            CalculationParameters @params = CalculationParameters.of(parameters);

            return(new CalculationRules(functions, ReportingCurrency.of(reportingCurrency), @params));
        }
 /// <summary>
 /// Obtains an instance specifying the functions to use and some additional parameters.
 /// <para>
 /// The output will uses the "natural" <seealso cref="ReportingCurrency reporting currency"/>.
 /// Most functions require a parameter to control their behavior, such as {@code RatesMarketDataLookup}.
 ///
 /// </para>
 /// </summary>
 /// <param name="functions">  the calculation functions </param>
 /// <param name="parameters">  the parameters that control the calculation, may be empty </param>
 /// <returns> the rules </returns>
 public static CalculationRules of(CalculationFunctions functions, CalculationParameters parameters)
 {
     return(new CalculationRules(functions, ReportingCurrency.NATURAL, parameters));
 }