¡Necesito ayuda! No puedo resolver el problema, me encuentro con limitaciones de hardware - página 16

 
komposter:¿Cómo calcular el criterio de los últimos X tratos de la secuencia, teniendo tal archivo?


Tenemos un fragmento del archivo en nuestra memoria, lo recorremos y formamos una muestra de la longitud necesaria para calcular el criterio, seleccionando sólo los tratos, que pertenecen a la misma secuencia. A continuación, calculamos el criterio sobre esta muestra. Por cierto, hay posibilidades de utilizar la recursión al seleccionar, por idea.

¿O es que no he entendido la pregunta?

P.D. Por supuesto, tenemos que ir hacia atrás en el archivo al formar la muestra.

 
Candid:

Tenemos un fragmento del archivo en nuestra memoria, lo recorremos y formamos una muestra de la longitud necesaria para calcular el criterio, seleccionando sólo tratos, pertenecientes a la misma secuencia. A continuación, calculamos el criterio sobre esta muestra. Por cierto, hay posibilidades de utilizar la recursión al seleccionar, por idea.

¿O he entendido mal la pregunta?

P.D. Por supuesto, tenemos que ir hacia atrás en el archivo al formar la muestra.

el problema de la inserción de nuevos datos - resolverlo de alguna manera.

Para qué pasar y seleccionar muchas veces los calcetines blancos, si es más fácil ir a echar los blancos en una cesta y los negros en otra, y luego preguntar quién está y en qué cantidad.

 
komposter:

Se lee un trozo. El tamaño del trozo está determinado por el número de transacciones hasta la fecha de búsqueda que se encuentran en una secuencia determinada.

Por cierto, si se conoce el punto de partida de cada secuencia, se pueden buscar las fechas deseadas mediante una búsqueda binaria, ya que las operaciones están ordenadas por tiempo.
 
ALXIMIKS:

el problema de la inserción de nuevos datos - resolverlo de alguna manera.

por qué pasar muchas veces y elegir calcetines blancos cuando es más fácil ir y echar el blanco en una cesta el negro en otra y luego preguntar quién está y en qué cantidad.

Demasiados datos también son malos :)

El problema es que aquí no se seleccionan los blancos y los negros, sino los que son más blancos localmente. Así que calcular el grado global de negrura no salva. Por cierto, empecé en este hilo sólo con una sugerencia de cálculo continuo del criterio.

P.S. Por cierto, nadie impide procesar algunos archivos juntos - simplemente el caché para cada uno tendrá que hacer menos. Pero parece que tiene reserva en el tamaño de la caché.

Es decir, los nuevos datos pueden acumularse simplemente en otro archivo.

P.P.S. Por cierto, dividir el archivo en varios archivos más pequeños facilitará el problema de la clasificación.

 
komposter:

1. Si el Criterio fuera estático... ¿Y si sus parámetros cambian?

2. Sí, entonces habrá un intercambio. Pero el recálculo sólo será necesario para los datos más recientes, no es necesario agitar todo el historial.

3. Esta es una herramienta...

4. Exactamente.

1. De lo que dije arriba"Que el criterio sea el beneficio medio de las últimas 20 operaciones de la secuencia."Esto debe entenderse como un criterio, moviendo la expectativa de beneficio. ¿Qué otras hay?

En la base de datos, genere una tabla con el identificador de la secuencia y las medias móviles correspondientes. Las secuencias que no se ajustan a las condiciones deben ser eliminadas inmediatamente. Esto debería hacerse mediante un procedimiento en modo concurrente a nivel del SGBD, a petición del robot, con el estado del proceso mostrado en el robot.

Digamos, FilterAvgProfit (pProfitValue, pTrades, pDeviation),

donde pProfitValue es el beneficio objetivo, pTrades es el número de operaciones para el beneficio medio móvil, pDeviation es la desviación permitida de pProfitValue.

El resultado - tabla rellena con los ID de las secuencias y los valores medios de los beneficios.

Del mismo modo, puede escribir procedimientos almacenados para cada uno de los criterios.

2. Si se descarta una parte de los datos (utilizar "datos frescos" en lugar de 1millón) se obtendrá una ganancia de rendimiento.

3. No estaba muy claro en la declaración. Ahora sí.

4. Entiendo que si estamos ante una selección de estrategias, esta operación no debería realizarse con demasiada frecuencia (digamos, en cada barra o inmediatamente antes de abrir una orden). Este enfoque es razonable si la estrategia actual muestra N operaciones perdedoras seguidas - entonces podemos elegir otra y tardará en "tomar una decisión", no hay nada que evitar. O bien, realizar dicha selección una vez a la semana (los fines de semana, cuando el mercado está cerrado), y, o confirmar la estrategia actualmente elegida, o pasar a otra. Es posible hacer una lista de estrategias óptimas recomendadas para un operador, en unas condiciones determinadas. Luego, cuando el mercado abra y con la cabeza despejada (el lunes), el operador confirmará la elección (o antes, antes de la apertura del mercado... la alerta por correo electrónico, etc.).

En algún lugar como este.

 

Память выделяется однократно для массива структур последовательностей.

La estructura de la secuencia incluye: Nº, Array de estructuras de todos los tratos de la secuencia [X], Valor del criterio, Posición del índice del archivo.

El siguiente paso consiste en rellenar únicamente los elementos de la estructura (incluidas las matrices de ofertas). Los tratos en la matriz están desplazados, por lo que siempre hay sólo X tratos de cada secuencia en la memoria.

Se asigna memoria para un array de estructuras y se obtiene:

matrizno,

una matriz de estructuras de todos los tratos de la secuencia [X],

una matriz de Valor de Criterio,

una matriz de posiciones de puntero de archivo.

¿Por qué se necesita la matriz devalores del criterio y lamatriz de posiciones del índice del archivo? (¿Has pensado en guardar un Criterio y el último oficio?)

¿Lo he entendido bien?

Primera pasada - búsqueda en el intervalo de 0 a SeekDate

entonces encuentra el mejor criterio yFindDate = hora de cierre de la operación + 1

buscar ahora en el intervalo desde la"hora de cierre de la operación" hasta laSeekingDate ?

¿y es necesario tener X operaciones en ese intervalo para calcular el criterio de cada secuencia?

 
komposter:

Compartir los resultados de mi investigación.

Archivo binario de caché de 7529 MB de lectura:

  • Desde el disco duro: en 212,3 segundos (35,46 MB/seg)
  • Desde el disco RAM: en 88,1 segundos (85,46 MB/seg)
Es difícil decir que la diferencia sea cósmica, aunque tengo el disco duro más común (aunque, la memoria tampoco es rápida).

Conclusión: aproximadamente 2,5 veces más de velocidad en un archivo grande leído desde un disco RAM.

Resultados extraños.

Esto es de nuestro sistema de servidor de trabajo bajo carga:

  • con SSD: 200 Mb por segundo, NTFS
  • con RAM: 2000-2500 Mb por segundo, FAT32, Softperfect RAM Disk 3.4.5

Sin los discos RAM, se tarda mucho más en construir los proyectos.

 
Renat:

Resultados extraños.

Esto es de nuestro sistema de servidor de producción bajo carga:

  • con SSD: 200 Mb por segundo, NTFS
  • con RAM: 2000-2500 Mb por segundo, FAT32, Softperfect RAM Disk 3.4.5

Sin los discos RAM, se tarda mucho más en construir los proyectos.

Esto es lo que decía: los archivos grandes deben leerse en trozos grandes, de lo contrario los pequeños pueden tardar hasta 10 o más veces más.
 
papaklass:

En mi opinión, la solución al problema está en la codificación de los datos brutos.

Si no se puede leer los datos en bruto varias veces, hay que convertirlos a un formato aceptable para las lecturas múltiples.

Una opción posible es convertir cada registro en un número de 16 bits. A cada campo del registro original se le debe asignar un número específico de bits en el número. Por ejemplo:

La cifra más significativa del número:

- "0" significa un resultado negativo de la transacción;

- "1" denota un resultado positivo de una transacción.

la cifra inferior del número:

- "0" indica una operación de COMPRA;

- "1" significa una operación de VENTA.

y así sucesivamente.

Así, en lugar de leer repetidamente un archivo fuente con muchos campos, el trabajo se reduce a leer repetidamente un solo campo numérico, lo que debería suponer un aumento significativo de la velocidad.

En general, el archivo fuente puede generarse inmediatamente en un formato codificado, aunque la información que contiene aparecerá de forma no visual.

Pero no en "16 bits" sino en 64 bits, Andrew tiene un procesador x64, por lo que la unidad mínima de volumen al acceder a la memoria es de 64 bits. Aunque lea un byte de la memoria, el procesador seguirá leyendo 8 bytes (dos palabras dobles).

 
komposter:

Sí, en esta forma la tarea es paralela - cada vez que cambiael SeekDate, sepuede ejecutar una búsqueda simultánea del mejor Criterio en diferentes partes del conjunto de secuencias. Por ejemplo, los dividimos en 20 partes y damos la tarea a 20 Asesores Expertos. Y deben leer el archivo, encontrar el acuerdo y devolver sólo la mejor secuencia (№№, Criterio y posición del archivo).

¡Muchas gracias!

Ahí tienes, otra cosa ))

Razón de la queja: