示例#1
0
        public override T Clone <T>()
        {
            var result = (Offer)MemberwiseClone();

            result.Trades = new List <Trade>();
            result.Trades = Trades.Select(t => t.Clone()).ToList();

            return((T)((BaseMessage)result));
        }
示例#2
0
        public Offer Convert(decimal price)
        {
            var result = (Offer)MemberwiseClone();

            result.Trades = new List <Trade>();
            result.Trades = Trades.Select(t => t.Clone().Convert(price)).ToList();
            result.Price  = result.Price / price;

            return(result);
        }
示例#3
0
        public override void CloseMarketOrder(MarketOrder order, CloseReason closeReason)
        {
            if (_orders.Contains(order))
            {
                _orders.Remove(order);
            }

            var exitPrice = order.TradeType == TradeType.Buy ? order.Symbol.GetPrice(TradeType.Sell) :
                            order.Symbol.GetPrice(TradeType.Buy);

            var barsPeriod = order.Symbol.Bars.Time.Where(iBarTime => iBarTime >= order.OpenTime).Count();

            var tradingEvent = new TradingEvent(Server.CurrentTime, TradingEventType.MarketOrderClosed, order, string.Empty);

            _journal.Add(tradingEvent);

            Account.ChangeMargin(-order.MarginUsed, Server.CurrentTime, string.Empty, AccountChangeType.Trading);

            Account.ChangeBalance(order.NetProfit, Server.CurrentTime, string.Empty, AccountChangeType.Trading);

            var tradeData = Trades.Select(iTrade => iTrade.Order.NetProfit);

            var sharpeRatio  = SharpeRatioCalculator.GetSharpeRatio(tradeData);
            var sortinoRatio = SortinoRatioCalculator.GetSortinoRatio(tradeData);

            var equityMaxDrawDown  = MaxDrawdownCalculator.GetMaxDrawdown(Account.EquityChanges);
            var balanceMaxDrawDown = MaxDrawdownCalculator.GetMaxDrawdown(Account.BalanceChanges);

            var id = _trades.Count + 1;

            var tradeParameters = new TradeParameters
            {
                Id                 = id,
                Order              = order,
                ExitTime           = Server.CurrentTime,
                ExitPrice          = exitPrice,
                Balance            = Account.CurrentBalance,
                Equity             = Account.Equity,
                BalanceMaxDrawDown = balanceMaxDrawDown,
                EquityMaxDrawDown  = equityMaxDrawDown,
                BarsPeriod         = barsPeriod,
                CloseReason        = closeReason,
                SharpeRatio        = sharpeRatio,
                SortinoRatio       = sortinoRatio
            };

            var trade = new Trade(tradeParameters);

            _trades.Add(trade);
        }