Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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;
            });
        }