Filtrando i dati per Esteso Ore di Trading in C#

0

Domanda

Io sono sempre dati da stock fornitore che include i dati di un Esteso Orario di Negoziazione. I dati aggregati 1 minuto di punti di dati che ho convertire da JSON per List<Aggregate> dove aggregato contiene in Alto, in Basso, Aprire, Chiudere, e l'Ora di inizio dell'aggregato 1-min finestra. La mia query comprendere più giorni di negoziazione - potrebbero essere centinaia, e potrebbe essere migliaia. E il mio calcolo di indicatori deve escludere che dopo le ore di dati. Così ho una lista di centinaia di elementi dell'oggetto:

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

e anche il DateTime FromDate e DateTime ToDate che si estende per centinaia di giorni. Ora, un modo sicuro per filtro after-hours di dati è quello di confrontare il UnixTimestamp di ogni elemento per il commercio normale finestra di tempo 9:30 AM PST - 16:00 PM PST. Che richiedono la conversione di ogni UnixTimestamp per DateTime. Questo è un sacco di paragone... Intuitivamente, è meglio convertire FromDate e ToDate per UnixTimestamp e elementi di filtraggio con Linq.

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

Tuttavia, non posso mettere il mio dito sul codice esatto... scorrono le date? Come?

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

Migliore risposta

0

Sono riuscito a sbarazzarsi di Aggregazione oggetto e sostituirlo con un Preventivo di oggetti che provengono da un'altra libreria con il tempo espresso come C# Data Ora e risolvere il problema in modo rettilineo come segue, in modo efficace filtraggio out Dopo l'orario di punti di dati:

        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

In altre lingue

Questa pagina è in altre lingue

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