Filtrování dat pro Rozšířené Obchodní Hodiny v C#

0

Otázka

Dostávám data z akciových poskytovatele, který obsahuje data pro Rozšířené Obchodní Hodiny. Data jsou agregovány 1-minutu data, která jsem převod z JSON do List<Aggregate> kde agregát obsahuje Vysoké, Nízké, Otevřít, Zavřít, a Čas zahájení agregované 1-min okně. Mé dotazy zahrnovat více obchodních dnů - mohl by to být stovky a tisíce. A můj výpočet ukazatele je nutné vyloučit po-hodinách dat. Takže mám seznam stovky položek objektu:

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

a také DateTime FromDate a DateTime ToDate které trvá stovky dní. Nyní, jeden způsob, jak filtrovat po-hodinách dat je porovnat UnixTimestamp z každé položky na pravidelné obchodování časové okno 9:30 AM PST - 16:00 HODIN PST. To by vyžadovalo konverze každý UnixTimestamp k DateTime. To je hodně srovnání... Intuitivně, je lepší konverzi FromDate a ToDate k UnixTimestamp a filtrování položek s Linq.

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

Nicméně, nemohu si vzpomenout na přesný kód... Looping přes data? Jak na to?

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

Nejlepší odpověď

0

Podařilo se mi zbavit Agregátní objekt a nahradit ji Citovat objekt, který přišel z jiné knihovny s časem vyjádřil jako C#, Datum, Čas a vyřešit problém v přímé způsobem, takto, účinně filtrování Po-hodinách dat bodů:

        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

V jiných jazycích

Tato stránka je v jiných jazycích

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