C cinsinden Uzun İşlem Saatleri için verileri filtreleme#

0

Soru

Verileri, Uzun İşlem Saatleri için verileri içeren bir hisse senedi sağlayıcısından alıyorum. Veriler, json'dan dönüştürdüğüm 1 dakikalık veri noktaları toplanır List<Aggregate> burada toplama Yüksek, Düşük, Aç, Kapat ve toplu 1 dakikalık pencerenin başlangıç zamanını içerir. Sorgularım birden fazla işlem gününü kapsıyor-yüzlerce olabilir ve binlerce olabilir. Ve göstergelerin hesaplanmasında mesai sonrası veriler hariç tutulmalıdır. Bu yüzden nesnenin yüzlerce öğesinin bir listesi var:

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

ve ayrıca DateTime FromDate ve DateTime ToDate yüzlerce güne yayılan. Şimdi, mesai sonrası verileri filtrelemenin kesin bir yolu, UnixTimestamp her öğenin normal işlem süresi penceresine 9: 30 AM PST-16: 00 PM PST. Bu, her birini dönüştürmeyi gerektirir UnixTimestamp -e doğru DateTime. Bu çok fazla karşılaştırma... Sezgisel olarak, dönüştürmek daha iyidir FromDate ve ToDate -e doğru UnixTimestamp ve öğeleri Lınq ile filtrelemek.

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

Ancak, parmağımı tam koda koyamıyorum... Tarihleri mi karıştırıyorsun? Nasıl?

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

En iyi cevabı

0

Toplama nesnesinden kurtulmayı ve C# Tarih Saati olarak ifade edilen zamanla farklı bir kitaplıktan gelen Alıntı nesnesiyle değiştirmeyi ve sorunu aşağıdaki gibi düz bir şekilde çözmeyi başardım, mesai sonrası veri noktalarını etkin bir şekilde filtreledim:

        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

Diğer dillerde

Bu sayfa diğer dillerde

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