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); }
public bool Equals(DurationEnum obj) { if ((object)obj == null) { return(false); } return(StringComparer.OrdinalIgnoreCase.Equals(this.Value, obj.Value)); }
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; }
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; } }
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); }
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)))); }
/// <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)); }
private static PeriodCode MapToPeriodCode(DurationEnum dataPeriod) { return(dataPeriod == DurationEnum.Day1 ? PeriodCode.Minutes(5) : PeriodCode.Days(1)); }
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); }