Exemplo n.º 1
0
        public double GetTotalEquity(
            ITradingDataProvider provider,
            DateTime period,
            EquityEvaluationMethod method)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }

            double totalEquity = CurrentCapital;

            // cash is the core equity
            if (method == EquityEvaluationMethod.CoreEquity)
            {
                // do nothing
            }
            else
            {
                foreach (var kvp in _activePositions)
                {
                    string code = kvp.Key;

                    Bar bar;

                    if (!provider.GetLastEffectiveBar(code, period, out bar))
                    {
                        throw new InvalidOperationException(
                                  string.Format("Can't get data from data provider for code {0}, time {1}", code, period));
                    }

                    if (method == EquityEvaluationMethod.TotalEquity)
                    {
                        int volume = kvp.Value.Sum(e => e.Volume);
                        totalEquity += volume * bar.ClosePrice;
                    }
                    else if (method == EquityEvaluationMethod.ReducedTotalEquity)
                    {
                        foreach (var position in kvp.Value)
                        {
                            totalEquity += position.Volume * Math.Min(bar.ClosePrice, position.StopLossPrice);
                        }
                    }
                }
            }

            return(totalEquity);
        }
 public double GetCurrentEquity(DateTime period, EquityEvaluationMethod method)
 {
     return(_equityManager.GetTotalEquity(_provider, period, method));
 }
Exemplo n.º 3
0
        public double GetTotalEquity(
            ITradingDataProvider provider,
            DateTime period,
            EquityEvaluationMethod method)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }


            if (method == EquityEvaluationMethod.InitialEquity)
            {
                return(InitialCapital);
            }

            double equity = CurrentCapital;

            // cash is the core equity
            if (method == EquityEvaluationMethod.CoreEquity)
            {
                return(equity);
            }

            foreach (var kvp in _activePositions)
            {
                var code = kvp.Key;

                Bar bar;

                var index = provider.GetIndexOfTradingObject(code);
                if (index < 0)
                {
                    throw new InvalidOperationException(string.Format("Can't get index for code {0}", code));
                }

                if (!provider.GetLastEffectiveBar(index, period, out bar))
                {
                    throw new InvalidOperationException(
                              string.Format("Can't get data from data provider for code {0}, time {1}", code, period));
                }

                if (method == EquityEvaluationMethod.TotalEquity ||
                    method == EquityEvaluationMethod.LossControlTotalEquity ||
                    method == EquityEvaluationMethod.LossControlInitialEquity)
                {
                    var volume = kvp.Value.Sum(e => e.Volume);
                    equity += volume * bar.ClosePrice;
                }
                else if (method == EquityEvaluationMethod.ReducedTotalEquity ||
                         method == EquityEvaluationMethod.LossControlReducedTotalEquity)
                {
                    equity += kvp.Value.Sum(position => position.Volume * Math.Min(bar.ClosePrice, position.StopLossPrice));
                }
            }

            if (method == EquityEvaluationMethod.TotalEquity ||
                method == EquityEvaluationMethod.ReducedTotalEquity)
            {
                return(equity);
            }
            else if (method == EquityEvaluationMethod.LossControlInitialEquity)
            {
                return(equity > InitialCapital
                    ? InitialCapital
                    : 2 * equity - InitialCapital);
            }
            else if (method == EquityEvaluationMethod.LossControlTotalEquity)
            {
                return(equity > InitialCapital
                    ? equity
                    : 2 * equity - InitialCapital);
            }
            else if (method == EquityEvaluationMethod.LossControlReducedTotalEquity)
            {
                return(equity > InitialCapital
                    ? equity
                    : 2 * equity - InitialCapital);
            }
            else
            {
                throw new NotImplementedException();
            }
        }