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

 
es posible calcular todo para una lectura de datos - lo principal es el deseo
komposter:

Sí, en esta forma la tarea es paralela - cada vez que cambia el SeekDate, se puede 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 a todos.

Si ejecutamos este algoritmo en múltiples EAs, estamos limitados por la velocidad de lectura del disco + en partes + desde diferentes posiciones, y es probable que la velocidad sea insuficiente.

 
ALXIMIKS:
Puede calcular todo en una sola lectura de datos - si lo desea, lo principal es

La lectura desde el disco es una operación bastante costosa - la ejecución de este algoritmo en varios Asesores Expertos estará limitada por la velocidad de lectura desde el disco + en partes + desde diferentes posiciones y es poco probable que se alcance la velocidad.

¿Quién ha dicho que la computación distribuida deba realizarse en una sola estación de trabajo? No existen tales restricciones)) El disco RAM ayudará, como se ha dicho anteriormente.
 
elugovoy:
¿Quién ha dicho quelos cálculos distribuidos deban hacerse en una sola estación de trabajo? No hay tales restricciones)) El disco RAM también es una gran ayuda, como se dijo anteriormente.

¿Qué tal si pensamos un poco y cambiamos el algoritmo?

1. cómo descargar varias secuencias de una sola vez y cómo saber dónde empiezan y dónde terminan

2. Cómo calcular los coeficientes de todos los tratos en una secuencia y en qué estructura de datos almacenar la respuesta

3. cómo hacer una fusión de dos respuestas del punto anterior en una nueva respuesta algo más completa

4. Cómo dividir la respuesta final del punto 3 en los intervalos requeridos (estamos hablandodel SeekingDate = Trade closing time + 1)

Podemos obtener un algoritmo ligeramente diferente mediante el cual seleccionar en cuántas partes adicionales dividir el intervaloSeekingDate

podemos obtener errores diferentes en comparación con el algoritmo inicial del autor.

 
papaklass:

La capacidad de dígitos de un número, está determinada por la unicidad del código de entrada, no por la capacidad de dígitos del sistema. Claramente, debe ser un múltiplo de 1 byte.

64 bits me parece demasiado. :)

Si hay 1.000.000 de registros, 16 bits no serían suficientes para un código de registro único (máximo 65536 registros). Esa es una.

Mira la arquitectura de los procesadores Intel (Itanium), AMD (no he dicho sistema operativo) de 32 y 64 bits. 32/64 es la resolución del bus de direcciones, pero al mismo tiempo se leen 32/64 bits (4/8 bytes) de la memoria en un ciclo de máquina, incluso cuando se accede a un byte de memoria.

Por lo tanto, no hay ninguna diferencia en términos de rendimiento si lee 2 bytes u 8 bytes de la memoria.

En principio, se podría escribir un servicio de Windows para este tipo de manejo de archivos.

Pero sigo inclinándome por el uso de DBMS.

 
ALXIMIKS:

¿Qué tal si pensamos un poco y cambiamos el algoritmo?

1. cómo descargar varias secuencias de una sola vez y cómo saber dónde empiezan y dónde terminan

2. Cómo calcular los coeficientes de todos los tratos en una secuencia y en qué estructura de datos almacenar la respuesta

3. cómo hacer una fusión de dos respuestas del punto anterior en una nueva respuesta algo más completa

4. Cómo dividir la respuesta final del punto 3 en los intervalos requeridos (estamos hablandodel SeekDate = Trade Close Time + 1)

Podemos obtener un algoritmo ligeramente diferente mediante el cual seleccionar en cuántas partes adicionales dividir el intervaloSeekingDate

podemos obtener errores diferentes en comparación con el algoritmo inicial del autor.

Para los 4 puntos, el procesamiento de datos en el lado del DBMS.

Sobre el algoritmo "ligeramente diferente", no está muy claro a qué te refieres. Pero. Para calcular de alguna manera el error de este algoritmo "ligeramente diferente" en comparación con el del "autor", es necesario que ambos algoritmos estén implementados. Y el hilo se creó precisamente por el problema técnico de implementar el algoritmo del "autor".

Teniendo en cuenta este hecho, ¿qué metodología vas a utilizar para calcular el error del que hablas?

 
ALXIMIKS:
se puede calcular todo en una sola lectura - lo principal es el deseo.

La lectura desde el disco es una operación bastante costosa - la ejecución de este algoritmo en varios Asesores Expertos estará limitada por la velocidad de lectura desde el disco + en partes + desde diferentes posiciones y es poco probable que esta idea dé alguna velocidad.

Digamos que el HDD es el dispositivo más lento, es un hecho. Sin embargo, no estamos hablando de ejecutar múltiples EAs utilizando todos estos cálculos. Tal y como yo lo veo, la aplicación más probable es la generación de señales. Digamos servidor en la nube en amazon con el rendimiento necesario + MT4 + este desarrollo = proveedor de señales.

 
elugovoy:

Para los 4 puntos, el tratamiento de los datos está en el lado del SGBD.

Sobre el algoritmo "ligeramente diferente", no estoy seguro de lo que quieres decir. Pero. Para calcular de alguna manera el error de este algoritmo "ligeramente diferente" en comparación con el algoritmo del "autor", hay que implementar ambos algoritmos. Y el hilo se creó precisamente por el problema técnico de implementar el algoritmo del "autor".

Teniendo en cuenta este hecho, ¿qué metodología vas a utilizar para calcular el error del que hablas?

Si entiendo la metodología del autor, el rango será recortado por un coeficiente máximo elegido del rango dado, en mi sugerencia - para dividir cada tal rango en N subrangos, donde en la convergencia sólo puede caber un valor del coeficiente. Así, en N = 5, el rango puede dividirse en proporciones de 0,2 0,4 0,6 0,8 1. Y cualquier valor de 0 a 1 se corta en el rango del autor. Así, un error de rango de 0,2 es el máximo en N = 5.

Y todo en torno a la correcta interpretación de los mensajes del autor, porque todavía no hay claridad total.

 
ALXIMIKS:

Por lo que entendí de la versión del autor (por si algo está mal de nuevo, ya que no hay una explicación clara y completa de lo que se necesita exactamente), el rango será cortado por el coeficiente máximo seleccionado de este rango; en la versión que sugerí, cada rango de este tipo debe ser dividido en N subrangos donde sólo un valor de coeficiente puede caber en la fusión. Así, en N = 5, el rango puede dividirse en proporciones de 0,2 0,4 0,6 0,8 1. Y cualquier valor de 0 a 1 se corta en el rango del autor. Así, un error de rango de 0,2 es el máximo en N = 5.

Y todo en torno a la correcta interpretación de los mensajes del autor, porque todavía no hay claridad total.

Sí, aparentemente el proyecto fue ordenado por el Ministerio de Finanzas, no hay suficiente información específica. Sin embargo, todo el mundo puede encontrar algo interesante para sí mismo en el debate. Veo esto como un aspecto positivo de la discusión.

Sobre la discretización de los rangos, su idea es clara. Y si N=100, 1000... (puramente matemático es posible) entonces esta división causará una reacción en términos de rendimiento y uso de recursos del sistema. Hay física y matemáticas )

 
Candid:

Tenemos un fragmento de un 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 en la selección.

Por lo tanto, ¡habría que recorrer varios millones de ofertas de otras secuencias! Eso es exactamente lo que quiero decir.

ALXIMIKS:

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

No hay problema hasta ahora, los datos son una cantidad fija.

TheXpert:
Por cierto, si conoces el punto de partida de cada secuencia, puedes buscar las fechas correctas con una búsqueda binaria, ya que las operaciones están ordenadas por tiempo.

+1, gracias por la idea.

elugovoy:

1. Basado en lo anterior"Que el criterio sea el beneficio medio de las últimas 20 operaciones de la secuencia.", esto debe entenderse como un criterio, la expectativa de beneficio en movimiento. ¿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 es una tabla poblada con los ID de las secuencias y los valores de las ganancias medias.

1а. Cuáles son los otros criterios - no importa. Lo importante es que el cálculo se realice mediante una serie de operaciones de la longitud especificada.

1б. ¿Cómo se puede descartar una secuencia sólo porque tiene un valor de criterio malo en el momento de cerrar la operación N? ¿Y si después se convierte en uno mejor?
Sólo se pueden eliminar aquellas secuencias que han fracasado por completo y cuyo criterio no ha mostrado ningún beneficio. Y no debería haber muchos.

elugovoy:

4. Tal y como yo lo veo, si se trata de una selección de estrategias, esta operación no debería realizarse con demasiada frecuencia (digamos, en cada barra o inmediatamente antes de la apertura de la 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, con la apertura del mercado y con la cabeza despejada (el lunes), el operador confirmará la elección (o antes, antes de la apertura del mercado... alerta por correo electrónico, etc.).

Es una cuestión de ideología. Ahora no se trata de él ;)

ALXIMIKS:

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

¿Por qué se necesitauna matriz de valor de criterio yuna matriz de posiciones de puntero de archivo? (un Criterio y la última transacción no han pensado en almacenar?)

La matriz del valor del criterio es para poder clasificar y seleccionar algunas de las mejores secuencias (para el futuro).

Posiciones del índice del archivo - para seguir buscando en cada secuencia desde el lugar correcto (¿cómo si no?).

ALXIMIKS:

¿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 transacción" hastala SeekingDate ?

¿y necesitas encajar en ese intervalo X oficios para calcular el criterio de cada secuencia?

1. Sí, de 0 a la SeekingDate primero

2. No. La SeekedDate se desplaza, y procesamos la secuencia (añadimos operaciones a la matriz) en el intervalo "PreviousTreatedTrade - SeekDate".

Renat:

Estos son resultados extraños.

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

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

Sin marcos de disco, se tarda mucho más en montar los proyectos.

Estoy empezando a acomplejarme.

Probablemente tenga que hacer un script de prueba y adjuntar un archivo para que lo compruebes en una tarea similar.

Tengo un disco duro normal - wdc wd1002FAEX-00Y9A0, a juzgar por las especificaciones, la velocidad máxima es de 126 MB/s:

A juzgar por la crítica, eso es lo que se puede exprimir. ¿Quizás estoy haciendo algo mal?

Echemos un vistazo al guión...

ALXIMIKS:
A eso me refiero: hay que leer los archivos grandes en trozos grandes, de lo contrario los pequeños pueden tardar hasta 10 veces más.

¿Cómo se lee un trozo grande?

papaklass:

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

¿Cómo codificar la información completa de la transacción sin perder información?

 
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.

Me olvidé de escribir sobre la memoria.

DDR3, 1333 MHz:

Softperfect RAM Disk 3.4.5, aunque lo hice en NTFS (¿alguna diferencia?)

Y otro detalle - el disco RAM es de 12000 MB, y sólo hay 1-2 GB de memoria libre (para trabajar).