Filtrarea datelor pentru Ore de Tranzactionare Extins în C#

0

Problema

Eu sunt obtinerea de date dintr-un stoc furnizor, care include date Extinsă de Tranzacționare. Datele sunt agregate la 1 minut de puncte de date care nu converti la JSON pentru a List<Aggregate> în cazul în care conține agregate High, Low, Deschide, Închide, și Momentul de început al agregate 1-min fereastră. Întrebările mele cuprind mai multe zile de tranzacționare - ar putea fi de sute și poate mii. Și-mi calcul de indicatori trebuie să excludă după ore de date. Deci, am o listă de sute de articole de obiect:

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

și, de asemenea, DateTime FromDate și DateTime ToDate care se întinde pe sute de zile. Acum, un mod sigur de a filtra după ore de date este de a compara UnixTimestamp de fiecare element la tranzacționare regulate fereastra de timp 9:30 PST - 16:00 PM PST. Care ar avea nevoie de conversie de fiecare UnixTimestamp pentru a DateTime. Aceasta este o mulțime de comparație... Intuitiv, este mai bine de conversie FromDate și ToDate pentru a UnixTimestamp și elemente de filtrare cu Linq.

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

Cu toate acestea, eu nu pot pune degetul exact pe cod... Looping prin datele? Cum?

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

Cel mai bun răspuns

0

Am reusit sa scap de obiect Agregat și înlocuiți-l cu Citat obiect care vin dintr-o altă bibliotecă cu timpul exprimat în C# Data, Ora și rezolva problema într-un mod direct, după cum urmează, în mod eficient de filtrare După-ore de puncte de date:

        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

În alte limbi

Această pagină este în alte limbi

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