Exemplo n.º 1
0
        public static IEnumerable <double> GetProfits(IEnumerable <double> returns, IEnumerable <double> signals, double transactionCost)
        {
            var calc = new OnlineProfitCalculator(transactionCost);

            IEnumerator <double> returnsEnumerator = returns.GetEnumerator();
            IEnumerator <double> signalsEnumerator = signals.GetEnumerator();

            // always move forward both enumerators (do not use short-circuit evaluation!)
            while (returnsEnumerator.MoveNext() & signalsEnumerator.MoveNext())
            {
                double signal  = signalsEnumerator.Current;
                double @return = returnsEnumerator.Current;

                double prevTotalProfit = calc.Profit;
                calc.Add(@return, signal);
                double curTotalProfit = calc.Profit;

                yield return(curTotalProfit - prevTotalProfit);
            }

            // check if both enumerators are at the end to make sure both enumerations have the same length
            if (returnsEnumerator.MoveNext() || signalsEnumerator.MoveNext())
            {
                throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
            }
        }
Exemplo n.º 2
0
        protected void CalculateTradingResults()
        {
            double[]             trainingSignals = TrainingSignals.ToArray(); // cache values
            IEnumerable <double> trainingReturns = ProblemData.Dataset.GetDoubleValues(ProblemData.PriceChangeVariable, ProblemData.TrainingIndices);

            double[]             testSignals = TestSignals.ToArray(); // cache values
            IEnumerable <double> testReturns = ProblemData.Dataset.GetDoubleValues(ProblemData.PriceChangeVariable, ProblemData.TestIndices);

            OnlineCalculatorError errorState;
            double trainingSharpeRatio = OnlineSharpeRatioCalculator.Calculate(trainingReturns, trainingSignals, ProblemData.TransactionCosts, out errorState);

            TrainingSharpeRatio = errorState == OnlineCalculatorError.None ? trainingSharpeRatio : double.NaN;
            double testSharpeRatio = OnlineSharpeRatioCalculator.Calculate(testReturns, testSignals, ProblemData.TransactionCosts, out errorState);

            TestSharpeRatio = errorState == OnlineCalculatorError.None ? testSharpeRatio : double.NaN;

            double trainingProfit = OnlineProfitCalculator.Calculate(trainingReturns, trainingSignals, ProblemData.TransactionCosts, out errorState);

            TrainingProfit = errorState == OnlineCalculatorError.None ? trainingProfit : double.NaN;
            double testProfit = OnlineProfitCalculator.Calculate(testReturns, testSignals, ProblemData.TransactionCosts, out errorState);

            TestProfit = errorState == OnlineCalculatorError.None ? testProfit : double.NaN;
        }
    public static IEnumerable<double> GetProfits(IEnumerable<double> returns, IEnumerable<double> signals, double transactionCost) {
      var calc = new OnlineProfitCalculator(transactionCost);

      IEnumerator<double> returnsEnumerator = returns.GetEnumerator();
      IEnumerator<double> signalsEnumerator = signals.GetEnumerator();

      // always move forward both enumerators (do not use short-circuit evaluation!)
      while (returnsEnumerator.MoveNext() & signalsEnumerator.MoveNext()) {
        double signal = signalsEnumerator.Current;
        double @return = returnsEnumerator.Current;

        double prevTotalProfit = calc.Profit;
        calc.Add(@return, signal);
        double curTotalProfit = calc.Profit;

        yield return curTotalProfit - prevTotalProfit;
      }

      // check if both enumerators are at the end to make sure both enumerations have the same length
      if (returnsEnumerator.MoveNext() || signalsEnumerator.MoveNext()) {
        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
      }
    }
 public OnlineSharpeRatioCalculator(double transactionCost)
 {
     this.meanAndVarianceCalculator = new OnlineMeanAndVarianceCalculator();
     this.profitCalculator          = new OnlineProfitCalculator(transactionCost);
     Reset();
 }
 public OnlineSharpeRatioCalculator(double transactionCost) {
   this.meanAndVarianceCalculator = new OnlineMeanAndVarianceCalculator();
   this.profitCalculator = new OnlineProfitCalculator(transactionCost);
   Reset();
 }