internal void Trade(List <Price> prices) { Buy(prices); Sell(prices); // 총매수액 등을 구한다. BuySum = Trades.Sum(x => x.BuyValue); SellSum = Trades.Sum(x => x.SellValue); Rate = BuySum.GetRate(SellSum); }
private async void OnCompleted() { Budget.Profit = Trades.Sum(t => t.Profit); foreach (var trade in Trades) { Console.WriteLine($"{Trades.IndexOf(trade)}\t{trade.Status}\t{trade.Profit}"); } Console.WriteLine($"Profit: {Budget.Profit}"); Console.WriteLine($"Available: {Budget.Available}"); Console.WriteLine($"Invested: {Budget.Invested}"); Console.WriteLine($"Earned: {Budget.Earned}"); await _traderGrain.UpdateTrades(Trades); await _hubNotifier.UpdateTicker(Ticker); await _hubNotifier.UpdateTrader(await _traderGrain.GetTraderData()); _taskCompletionSource.SetResult(Budget); }
internal void Trade(List <Price> prices) { // 하루에 한 주씩 매수한다. Buy(prices); // 마지막 날의 가격으로 매수한 주식을 모두 매도한다. Price lastPrice = prices[prices.Count - 1]; foreach (var trade in Trades) { trade.SellValue = lastPrice.Value; trade.SellOn = lastPrice.Date; trade.Rate = trade.BuyValue.GetRate(trade.SellValue); } // 총매수액 등을 구한다. TotalSum = Trades.Sum(x => x.DailyInvest); BuySum = Trades.Sum(x => x.BuyValue); SellSum = Trades.Sum(x => x.SellValue); BuyAmount = Trades.Sum(x => x.BuyAmount); //Rate = Trades.Sum(x => 1 - x.BuyAmount); }
public StrategyWidgetViewModel(DemoWorkspaceViewModel host, String cacheId = null) : base(host, cacheId) { var pricesObservable = PriceService.All .Connect() .ObserveOn(AppScheduler.MainThread) .Do(changes => { changes.ForEach(change => { var pnl = 0.0; for (var i = 0; i < Trades.Count; i++) { if (Trades[i].Trade.Asset == change.Current.Asset.Name) { Trades[i].PnL = Trades[i].Trade.Price - change.Current.Value; } pnl += Trades[i].PnL; } StrategyPnL = pnl; }); }) .DisposeMany() .Subscribe(); Cleanup(pricesObservable); this.WhenAnyValue(vm => vm.Workspace) .Where(obj => null != obj) .Subscribe((obs) => { Strategy = obs.State.Strategy; }); this.WhenAnyValue(vm => vm.Strategy) .Where(obj => null != obj) .Subscribe((obs) => { Trades = new ReactiveList <TradeViewModel>(); var tradeObservable = _strategy.Trades .Connect() .Transform(trade => new TradeViewModel(trade)) .Bind(_trades) .DisposeMany() .Subscribe(); Cleanup(tradeObservable); }); _tradesCount = this.WhenAnyObservable(vm => vm.Trades.CountChanged) .ToProperty(this, vm => vm.TradesCount); this.WhenAnyObservable(vm => vm.Trades.CountChanged) .Select(change => Trades.Sum(trade => trade.Price + trade.PnL)) .Subscribe(chg => { MarketValue = chg; }); this.WhenAny(vm => vm.TradesCount, vm => vm.StrategyPnL, (trd, pnl) => String.Format("Strategy viewer - {0} Trades - PnL [{1}] ", TradesCount, StrategyPnL)) .Subscribe(header => { Header = header; }); }