/// <summary> /// Returns the Simple Custom Sorting Value for the Generator /// </summary> /// <param name="cga">CustomGeneratorAnalysis Data</param> /// <param name="value">Simple Custom Sorting Value</param> /// <param name="displayName">Simple Custom Sorting Option Display Name</param> public static void GetSimpleCustomSortingValue(ref CustomGeneratorAnalytics cga, out float value, out string displayName) { // Set the initial output values displayName = cga.SimpleSortOption; value = 0; // Perform simple custom sorting calculations switch (cga.SimpleSortOption) { case "System Quality Number": value = Calc.SystemQualityNumber(ref cga.Positions); break; } }
/// <summary> /// Returns the Simple Custom Sorting Value for the Generator /// </summary> /// <param name="cga">CustomGeneratorAnalysis Data</param> /// <param name="value">Simple Custom Sorting Value</param> /// <param name="displayName">Simple Custom Sorting Option Display Name</param> public static void GetSimpleCustomSortingValue(ref CustomGeneratorAnalytics cga, out float value, out string displayName) { // Set the initial output values displayName = cga.SimpleSortOption; value = 0; // Perform simple custom sorting calculations switch (cga.SimpleSortOption) { case "System Quality Number": value = Calc.SystemQualityNumber(ref cga.Positions); break; } }
/// <summary> /// Returns the Advanced Custom Sorting Value for the Generator /// </summary> /// <param name="cga">CustomGeneratorAnalysis Data</param> /// <param name="value">Simple Custom Sorting Value</param> /// <param name="displayName">Advanced Custom Sorting Option Display Name</param> public static void GetAdvancedCustomSortingValue(ref CustomGeneratorAnalytics cga, out float value, out string displayName) { // Set the initial output values displayName = cga.AdvancedSortOption; value = 0; // Build the comparison curve var curve = new List <double>(); switch (cga.AdvancedSortOptionCompareTo) { case "Balance": foreach (Position pos in cga.Positions) { if (pos.Transaction != Transaction.Transfer) { curve.Add(pos.Balance); } } break; case "Balance (with Transfers)": foreach (Position pos in cga.Positions) { curve.Add(pos.Balance); } break; case "Equity": foreach (Position pos in cga.Positions) { if (pos.Transaction != Transaction.Transfer) { curve.Add(pos.Equity); } } break; case "Equity (with Transfers)": foreach (Position pos in cga.Positions) { curve.Add(pos.Equity); } break; } // Perform advanced custom sorting calculations const double epsilon = 0.000001; switch (cga.AdvancedSortOption) { case "Correlation": value = (float)Calc.Correlation(curve); if (Math.Abs(value - 1) < epsilon) { value = 0; } break; } }
/// <summary> /// Returns the Advanced Custom Sorting Value for the Generator /// </summary> /// <param name="cga">CustomGeneratorAnalysis Data</param> /// <param name="value">Simple Custom Sorting Value</param> /// <param name="displayName">Advanced Custom Sorting Option Display Name</param> public static void GetAdvancedCustomSortingValue(ref CustomGeneratorAnalytics cga, out float value, out string displayName) { // Set the initial output values displayName = cga.AdvancedSortOption; value = 0; // Build the comparison curve var curve = new List<double>(); switch (cga.AdvancedSortOptionCompareTo) { case "Balance": foreach (Position pos in cga.Positions) if (pos.Transaction != Transaction.Transfer) curve.Add(pos.Balance); break; case "Balance (with Transfers)": foreach (Position pos in cga.Positions) curve.Add(pos.Balance); break; case "Equity": foreach (Position pos in cga.Positions) if (pos.Transaction != Transaction.Transfer) curve.Add(pos.Equity); break; case "Equity (with Transfers)": foreach (Position pos in cga.Positions) curve.Add(pos.Equity); break; } // Perform advanced custom sorting calculations const double epsilon = 0.000001; switch (cga.AdvancedSortOption) { case "Correlation": value = (float) Calc.Correlation(curve); if (Math.Abs(value - 1) < epsilon) value = 0; break; } }