Changeset 9744 for branches/HeuristicLab.Problems.DataAnalysis.Trading/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineProfitCalculator.cs
- Timestamp:
- 07/24/13 12:51:02 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.DataAnalysis.Trading/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineProfitCalculator.cs
r9743 r9744 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Linq; 24 25 using HeuristicLab.Common; 25 26 … … 28 29 29 30 private int p; 30 private double transactionCost;31 private readonly double transactionCost; 31 32 private int c; 32 33 private double sum; … … 63 64 } else if (p == 0 && signal.IsAlmost(1)) { 64 65 p = 1; 66 iterationReturn = -transactionCost; 65 67 } else if (p == 0 && signal.IsAlmost(-1)) { 66 68 p = -1; 69 iterationReturn = -transactionCost; 67 70 } else if (p == 1 && signal.IsAlmost(1)) { 68 71 iterationReturn = actualReturn; … … 89 92 90 93 public static double Calculate(IEnumerable<double> returns, IEnumerable<double> signals, double transactionCost, out OnlineCalculatorError errorState) { 94 errorState = OnlineCalculatorError.None; 95 return GetProfits(returns, signals, transactionCost).Sum(); 96 } 97 98 public static IEnumerable<double> GetProfits(IEnumerable<double> returns, IEnumerable<double> signals, double transactionCost) { 99 var calc = new OnlineProfitCalculator(transactionCost); 100 91 101 IEnumerator<double> returnsEnumerator = returns.GetEnumerator(); 92 102 IEnumerator<double> signalsEnumerator = signals.GetEnumerator(); 93 OnlineProfitCalculator calculator = new OnlineProfitCalculator(transactionCost);94 103 95 104 // always move forward both enumerators (do not use short-circuit evaluation!) … … 97 106 double signal = signalsEnumerator.Current; 98 107 double @return = returnsEnumerator.Current; 99 calculator.Add(@return, signal); 108 109 double prevTotalProfit = calc.Profit; 110 calc.Add(@return, signal); 111 double curTotalProfit = calc.Profit; 112 113 yield return curTotalProfit - prevTotalProfit; 100 114 } 101 115 … … 103 117 if (returnsEnumerator.MoveNext() || signalsEnumerator.MoveNext()) { 104 118 throw new ArgumentException("Number of elements in first and second enumeration doesn't match."); 105 } else {106 errorState = calculator.ErrorState;107 return calculator.Profit;108 119 } 109 120 }
Note: See TracChangeset
for help on using the changeset viewer.