El filtrado de los datos de muchas Horas de Negociación en C#

0

Pregunta

Yo soy la obtención de datos a partir de un stock de proveedores que incluye los datos de muchas Horas de Negociación. Los datos agregados de 1 minuto de puntos de datos que puedo convertir de JSON List<Aggregate> donde agregado contiene Altas, Bajas, Abrir, Cerrar, y la Hora del inicio de los agregados 1 min de la ventana. Mi consulta abarcar varios días de negociación - que podrían ser cientos y podrían ser miles. Y mi cálculo de los indicadores debe excluir después de horas de datos. Así que tengo una lista de cientos de elementos del objeto:

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

y también la DateTime FromDate y DateTime ToDate que se extiende por cientos de días. Ahora, una manera segura de filtrar los datos después del horario es comparar la UnixTimestamp de cada elemento para regular el comercio de la ventana de tiempo de 9:30 AM PST - 16:00 PM PST. Que requieren la conversión de cada UnixTimestamp a DateTime. Esto es un montón de comparación... Intuitivamente, es mejor convertir FromDate y ToDate a UnixTimestamp y el filtrado de los elementos con Linq.

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

Sin embargo, yo no puedo poner mi dedo en el código exacto... de Bucle a través de las fechas? Cómo?

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

Mejor respuesta

0

Me las arreglé para deshacerse de objeto Agregado y reemplazarlo por la Cotización de objetos que provienen de una biblioteca diferente con el tiempo se expresa como C# Fecha Hora y resolver el problema en un camino recto de la siguiente manera, efectivamente filtrado de salida Después de las horas de puntos de datos:

        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

En otros idiomas

Esta página está en otros idiomas

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