Filtrowanie danych dla zaawansowanych handlowych godzin w C#

0

Pytanie

Mam dane od dostawcy akcji, które obejmują dane za wydłużone godziny handlu. Dane stanowią zagregowane 1-minutowe punkty danych, które przekształcam z JSON List<Aggregate> gdzie urządzenie zawiera Maksimum, Minimum, Otwieranie, Zamykanie i Czas rozpoczęcia zagregowanym 1-minutowym okna. Moje wnioski obejmują kilka dni handlowych - mogą ich być setki, a może i tysiące. I moje obliczenia wskaźników powinien eliminować dane dotyczące okresu wolnego czasu. Tak więc, mam listę z setek elementów obiektu:

public class Aggregate
{
    public decimal Close { get; set; }
    public decimal UnixTimestamp { get; set; } // milliseconds
    ...
}

a także DateTime FromDate i DateTime ToDate który trwa setki dni. Teraz jeden pewny sposób, aby filtrować dane w godzinach pracy-porównaj UnixTimestamp każdego produktu w normalnych handlowe okno od 9:30 rano czasu wschodniego do 16:00 czasu wschodniego. To wymagałoby konwersji każdego UnixTimestamp Dla DateTime. To wielkie porównanie... Intuicyjnie, to lepiej przekonwertować FromDate i ToDate Dla UnixTimestamp i filtrować elementy za pomocą Linq.

long unixTimeMsecToDate = new DateTimeOffset(aggrParams.ToDate).ToUnixTimeMilliseconds();
long unixTimeMsecFromDate = new DateTimeOffset(aggrParams.FromDate).ToUnixTimeMilliseconds();

Jednak nie mogę podać dokładny kod... przegląda się stare chcesz w kółko? Jak?

c# filtering linq
2021-11-23 22:33:57
1

Najlepsza odpowiedź

0

Udało mi się pozbyć się obiektu Aggregate i zastąpić go obiektem Quote, który przyszedł z innej biblioteki z czasem, wyraźny jak Data C#, i rozwiązać problem bezpośredni sposób w następujący sposób, skutecznie filtrując punktu danych w godzinach:

        private void FilterExtendedTradingHours(List<Quote> quoteList, AggrParams aggrParams)
    {
        using (Log.VerboseCall())
        {
            if (aggrParams.Interval == "minute" || aggrParams.Interval == "hour")
            {
                Log.VerboseFormat("Initial {0} count: {1}", aggrParams.Interval, quoteList.Count);

                for(int i = quoteList.Count - 1; i >= 0; i--)
                {
                    if ( quoteList[i].Date.TimeOfDay > new TimeSpan(16,  0,  0) || quoteList[i].Date.TimeOfDay < new TimeSpan(9, 30, 0) )
                    {
                        quoteList.RemoveAt(i);
                    }
                }

                Log.VerboseFormat("Post-filtering {0} count: {1}", aggrParams.Interval, quoteList.Count);
            }
        }
    }
2021-12-01 00:26:22

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................