示例#1
0
        private async Task <bool> ExecuteLoadTickDataAsync(object parameter)
        {
            IsBusy     = true;
            StatusText = "Loading...";

            if (parameter != null)
            {
                _lastLoadedDuration = (DurationEnum)Enum.Parse(typeof(DurationEnum), parameter.ToString());
            }

            Duration = _lastLoadedDuration.ToString();
            var ticks = await _xtbWrapper.LoadData(Name, _lastLoadedDuration);

            Ticks.Clear();
            foreach (var tick in ticks)
            {
                Ticks.Add(tick);
            }

            UpdatePlot(_lastLoadedDuration);

            StatusText = "Ready";
            IsBusy     = false;
            IsLoaded   = true;

            return(true);
        }
示例#2
0
 public bool Equals(DurationEnum obj)
 {
     if ((object)obj == null)
     {
         return(false);
     }
     return(StringComparer.OrdinalIgnoreCase.Equals(this.Value, obj.Value));
 }
示例#3
0
 public StockData(string _id, float mPrice, float tPrice, float sPrice, DurationEnum _duration, string _reason)
 {
     stockID     = _id;
     marketPrice = mPrice;
     targetPrice = tPrice;
     stopPrice   = sPrice;
     duration    = _duration;
     reasonToBuy = _reason;
 }
示例#4
0
        private static void GetPeriodData(DurationEnum periodCode, out DateTime startDate, out DateTime endDate)
        {
            endDate   = DateTime.Now;
            startDate = endDate.Date.AddYears(-1);
            switch (periodCode)
            {
            case DurationEnum.Day1:
                startDate = endDate.Date;
                break;

            case DurationEnum.Week1:
                startDate = endDate.Date.AddDays(-7);

                break;
            }
        }
示例#5
0
        public async Task <List <TickData> > LoadData(string symbol, DurationEnum dataPeriod)
        {
            DateTime startDate, endDate;

            GetPeriodData(dataPeriod, out startDate, out endDate);

            var start      = startDate.ToUnixMilliseconds();
            var end        = endDate.ToUnixMilliseconds();
            var periodCode = MapToPeriodCode(dataPeriod);
            var range      = await _connector.GetCandles(periodCode, symbol, start, end);

            ThrowIfNotSuccessful(range);

            var tickData = range.Candles.Convert().ToList();

            return(tickData);
        }
示例#6
0
        public static Period FromStartDateAndDuration(DateTime startDate, DurationEnum durationEnum)
        {
            DateTime endDate;

            if (startDate == default)
            {
                throw new ArgumentNullException(nameof(startDate), "The startdate of the period cannot be empty");
            }

            switch (durationEnum)
            {
            case DurationEnum.Day:
                endDate = startDate.AddDays(1);
                break;

            case DurationEnum.Week:
                endDate = startDate.Add(TimeSpan.FromDays(7));
                break;

            case DurationEnum.Month:
                endDate = startDate.AddMonths(1);
                break;

            case DurationEnum.Trimester:
                endDate = startDate.AddMonths(3);
                break;

            case DurationEnum.Semester:
                endDate = startDate.AddMonths(6);
                break;

            case DurationEnum.Year:
                endDate = startDate.AddYears(1);
                break;

            default:
                throw new InvalidOperationException("Not implemented DurationEnum detected");
            }

            return(new Period(startDate, endDate.Subtract(TimeSpan.FromDays(1))));
        }
示例#7
0
        /// <summary>
        /// Calculate expired date time at <c>moment</c> at <c>duration</c>
        /// </summary>
        /// <param name="moment">From this moment the countdown</param>
        /// <param name="duration"><c>DurationEnum</c> value, used for calculating</param>
        /// <returns>Return calculated expire date time. Can be null</returns>
        public static DateTime?Calculate(DateTime moment, DurationEnum duration)
        {
            var calcFunc = _map[duration];

            return(calcFunc(moment));
        }
示例#8
0
 private static PeriodCode MapToPeriodCode(DurationEnum dataPeriod)
 {
     return(dataPeriod == DurationEnum.Day1
         ? PeriodCode.Minutes(5)
         : PeriodCode.Days(1));
 }
示例#9
0
        private void UpdatePlot(DurationEnum duration)
        {
            Plots.Clear();

            if (Ticks == null || !Ticks.Any())
            {
                return;
            }

            var candles = CreatePlot(Name, CreateCandleStickSeries(Name + " " + duration, Ticks));

            var dateValues = Ticks.ToDateValuePoints(x => x.Close).ToList();

            var ema          = MovingAverage.CalculateEma(Ticks, 22);
            var channels     = MovingAverage.CalculateEmaChannels(Ticks, 22, 60);
            var lowerChannel = channels.Select(x => new DateValue {
                Date = x.Date, Value = x.LowerValue
            }).ToList();
            var upperChannel = channels.Select(x => new DateValue {
                Date = x.Date, Value = x.UpperValue
            }).ToList();

            var plotChannels = CreatePlot("Channels",
                                          CreateLineSeries("Close Price", OxyColor.FromUInt32(0xCCF0A30A), dateValues),
                                          CreateLineSeries("EMA 22", OxyColor.FromUInt32(0xCCFA6800), ema),
                                          CreateLineSeries("Lower Channel", OxyColor.FromUInt32(0xCCA4C400), lowerChannel),
                                          CreateLineSeries("Upper Channel", OxyColor.FromUInt32(0xCC60A917), upperChannel));

            var plotMa = CreatePlot("Moving Average",
                                    CreateLineSeries("Close Price", OxyColor.FromUInt32(0xCCF0A30A), dateValues),
                                    CreateLineSeries("MA 10", OxyColor.FromUInt32(0xCCA4C400), BasicAnalysis.CalculateMovingAverage(Ticks, 10)),
                                    CreateLineSeries("MA 100", OxyColor.FromUInt32(0xCC60A917), BasicAnalysis.CalculateMovingAverage(Ticks, 100)));

            var plotMinMax = CreatePlot("Min max",
                                        CreateLineSeries("Close Price", OxyColor.FromUInt32(0xCCF0A30A), dateValues),
                                        CreateLineSeries("Max 50", OxyColor.FromUInt32(0xCCA4C400), BasicAnalysis.CalculateMax(Ticks, 50)),
                                        CreateLineSeries("Min 50", OxyColor.FromUInt32(0xCC60A917), BasicAnalysis.CalculateMin(Ticks, 50)));

            var returns = CreatePlot("Returns", "P4",
                                     CreateTwoColorLineSeries("Annualized Returns", OxyColor.FromUInt32(0xCC60A917), OxyColor.FromUInt32(0xCCFA6800), CalculateReturns(dateValues)));

            Plots.Add(new PlotViewModel(candles));
            Plots.Add(new PlotViewModel(plotChannels));
            Plots.Add(new PlotViewModel(plotMa));
            Plots.Add(new PlotViewModel(plotMinMax));
            Plots.Add(new PlotViewModel(returns));

            //analysisPlotModel.Series.Add(closePrices);

            //analysisPlotModel.Series.Add(CreateLineSeries("MA 10", OxyColor.FromUInt32(0xCCA4C400), BasicAnalysis.CalculateMovingAverage(Ticks, 10)));
            //analysisPlotModel.Series.Add(CreateLineSeries("MA 100", OxyColor.FromUInt32(0xCC60A917), BasicAnalysis.CalculateMovingAverage(Ticks, 100)));

            //analysisPlotModel.Series.Add(CreateLineSeries("Max 10", OxyColor.FromUInt32(0xCC911A0E), BasicAnalysis.CalculateMax(Ticks, 10)));
            //analysisPlotModel.Series.Add(CreateLineSeries("Max 100", OxyColor.FromUInt32(0xCC1569CE), BasicAnalysis.CalculateMax(Ticks, 100)));

            //if (dateValues.Count > 30)
            //{
            //    var anno1 = new TextAnnotation();
            //    anno1.Text = "sdkjfhsdjkfhsd";
            //    anno1.TextPosition = DateTimeAxis.CreateDataPoint(dateValues[10].Date, dateValues[10].Value);
            //    analysisPlotModel.Annotations.Add(anno1);

            //    var anno2 = new ArrowAnnotation();
            //    anno2.Text = "bla blas bla";
            //    anno2.EndPoint = DateTimeAxis.CreateDataPoint(dateValues[30].Date, dateValues[30].Value);
            //    anno2.ArrowDirection = new ScreenVector(50, anno2.EndPoint.Y * 0.3);
            //    analysisPlotModel.Annotations.Add(anno2);
            //}

            //Plots.Add(new PlotViewModel(analysisPlotModel));

            var clenow = new SimpleClenow(Ticks);
        }