Пример #1
0
        public void AddTrades(IEnumerable <TradeViewModel> trades)
        {
            var tempTrades = Trades.ToList();

            foreach (var trade in trades)
            {
                var existingTrade = tempTrades.Where(t => t.Symbol == trade.Symbol && t.Time == trade.Time).FirstOrDefault();
                if (existingTrade == null)
                {
                    tempTrades.Add(trade);
                }
                else
                {
                    tempTrades.ReplaceInPlace(existingTrade, trade);
                }
            }
            Trades = new ObservableCollection <TradeViewModel>(tempTrades.OrderByDescending(trade => trade.Time));
            CalculateGainsPercentage();
        }
        public MainWindowViewModel(
            Func <string> getTradeCommentsFunc,
            Action <string> showMessageAction,
            Action <Cursor> setCursorAction,
            Func <IDisposable> suspendChartUpdatesAction,
            Action updateWindowAction)
        {
            DependencyContainer.ComposeParts(this);

            _directory = _dataDirectoryService.MainDirectoryWithApplicationName;
            if (!Directory.Exists(_directory))
            {
                Directory.CreateDirectory(_directory);
            }

            _candlesService = new CandlesService();

            /* // Create candles
             * Task.Run(() =>
             * {
             *  Log.Info("Creating candles");
             *  _candlesService.ConvertCandles(_brokerCandlesService, _fxcm, _marketsService.GetAllMarketDetails().Select(m => m.Name).ToList());
             *  Log.Info("Candles created");
             * });
             * return;*/

            TimeFrameItems = new List <Timeframe> {
                Timeframe.D1, Timeframe.H4, Timeframe.H2, Timeframe.H1, Timeframe.M1
            };

            LargeChartTimeframeOptions.Clear();
            LargeChartTimeframeOptions.Add(Timeframe.H4);
            LargeChartTimeframeOptions.Add(Timeframe.H2);

            // Setup available indicators
            AddAvailableIndicator(new ExponentialMovingAverage(8), Colors.DarkBlue, false, true);
            AddAvailableIndicator(new ExponentialMovingAverage(20), Colors.Blue, false, false);
            AddAvailableIndicator(new ExponentialMovingAverage(25), Colors.Blue, false, true);
            AddAvailableIndicator(new ExponentialMovingAverage(50), Colors.LightBlue, false, true);
            AddAvailableIndicator(new SimpleMovingAverage(50), Colors.Green, false, false);
            AddAvailableIndicator(new SimpleMovingAverage(200), Colors.LightGreen, false, false);
            AddAvailableIndicator(new AverageTrueRange(), Colors.Red, true, false);
            AddAvailableIndicator(new CommodityChannelIndex(), Colors.Red, true, false);
            AddAvailableIndicator(new T3CommodityChannelIndex(), Colors.Red, true, false);

            NewChartCommand        = new DelegateCommand(o => NewChartMarket(), o => !Running);
            NextCandleCommand      = new DelegateCommand(o => ProgressTime());
            ClearTradesCommand     = new DelegateCommand(o => ClearTrades());
            CloseTradeCommand      = new DelegateCommand(o => CloseTrade());
            DeleteTradeCommand     = new DelegateCommand(o => DeleteTrade());
            StartLongTradeCommand  = new DelegateCommand(o => StartTrade(TradeDirection.Long));
            StartShortTradeCommand = new DelegateCommand(o => StartTrade(TradeDirection.Short));

            _getTradeCommentsFunc      = getTradeCommentsFunc;
            _showMessageAction         = showMessageAction;
            _setCursorAction           = setCursorAction;
            _suspendChartUpdatesAction = suspendChartUpdatesAction;
            _updateWindowAction        = updateWindowAction;
            DependencyContainer.ComposeParts(this);
            _dispatcher = Dispatcher.CurrentDispatcher;

            _chartModeDisposable = ChartingService.ChartModeObservable.Subscribe(ChartModeChanged);

            TradeListDisplayOptions = TradeListDisplayOptionsFlag.ClosePrice
                                      | TradeListDisplayOptionsFlag.Comments
                                      | TradeListDisplayOptionsFlag.OrderPrice
                                      | TradeListDisplayOptionsFlag.Limit
                                      | TradeListDisplayOptionsFlag.OrderDate
                                      | TradeListDisplayOptionsFlag.ResultR
                                      | TradeListDisplayOptionsFlag.Status
                                      | TradeListDisplayOptionsFlag.Stop
                                      | TradeListDisplayOptionsFlag.Strategies;

            _markets = new List <string>();
            foreach (var m in _marketsService.GetAllMarketDetails().Select(m => m.Name))
            {
                if (File.Exists(_candlesService.GetCandlesPath(m, Timeframe.M5)) &&
                    File.Exists(_candlesService.GetCandlesPath(m, Timeframe.H2)) &&
                    File.Exists(_candlesService.GetCandlesPath(m, Timeframe.H4)) &&
                    File.Exists(_candlesService.GetCandlesPath(m, Timeframe.D1)))
                {
                    _markets.Add(m);
                }
            }

            IsTradeEnabled = false;

            var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "TraderSimulator");

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            _orderExpiryCandlesIndex = 0;

            ResultsViewModel = new TradesResultsViewModel(() => Trades.ToList())
            {
                ShowOptions = true, ShowSubOptions = false, AdvStrategyNaming = true
            };
            ResultsViewModel.ResultOptions.Remove("Timeframe");
            ResultsViewModel.ShowOptions = false;
            ResultsViewModel.ShowIncludeOpenClosedTradesOptions = false;

            LoadTrades();
            RemoveIncompleteTrades();
            NewChartMarket();

            _chartClickedDisposable = ChartingService.ChartClickObservable.Subscribe(ChartClicked);
        }