"New Neural" es un proyecto de motor de red neuronal de código abierto para la plataforma MetaTrader 5. - página 46
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
me viene a la mente de inmediato un chiste sobre la barba
Dudo de los "ceros" en el momento del nacimiento, además creo que los errores-defectos están presentes todo el tiempoLo he rediseñado para que cuando se cree un objeto mediante un constructor con parámetros, se inicialice una nueva secuencia al final de la misma.
Funcionará un poco más lento, pero la secuencia será única todo el tiempo.
Al crear un objeto con el constructor estándar, hay que llamar a Srand() y la secuencia será la misma, girando en círculo.
Propongo considerar una biblia de órdenes virtuales (emula la apertura/cierre en el mercado. los comandos son casi los mismos que para las órdenes reales).
Le será útil cuando necesite ejecutar un modelo con datos históricos (fuera del probador de estrategias).
¿Qué has olvidado? ¿Qué podemos mejorar, añadir, cambiar, modificar? - La biblioteca es muy básica.
Hasta ahora sólo se han implementado las operaciones de tipo buy-0 y sell-1.
Conferencia 1 aquí https://www.mql5.com/ru/forum/4956/page23
Conferencia 2 aquí https://www.mql5.com/ru/forum/4956/page34
Conferencia 3 aquí https://www.mql5.com/ru/forum/4956/page36
Conferencia 4. Aplicación de la organización de la corteza visual a la transformación de series temporales
Así que nuestra tarea consiste en construir una red neuronal de clasificación de patrones de precios según el principio del cerebro. Esta red puede dividirse en dos módulos: el de transformación de la información de entrada (precios) y el de clasificación, que puede construirse según cualquier principio conocido (por ejemplo, Support Vector Machine):
En mi conferencia anterior describí el modelo HMAX de la corteza visual como un ejemplo de transformación biológica de la información. El gran inconveniente de este modelo es que los valores de los pesos (campos receptivos) no se entrenan en él, sino que simplemente se toman de las mediciones biológicas de las neuronas del cerebro. Por ejemplo, los campos receptivos de las neuronas simples en V1 (S1) se miden como se muestra en el vídeo aquí https://www.youtube.com/watch?v=Cw5PKV9Rj3o(los chasquidos que se oyen son pulsos de las neuronas). En nuestro caso de citas de series temporales, los "campos receptivos" de las neuronas que transforman la información son desconocidos de antemano. Así que tendremos que encontrarlos nosotros mismos. Por ejemplo, la primera capa de transformación de precios (capa S1) puede construirse de la siguiente manera, por analogía con la capa S1 de la corteza visual:
En este ejemplo, nuestra capa S1 tiene 6 subcapas, numeradas del 0 al 5. Las neuronas (círculos) de una misma subcapa tienen los mismos pesos de entrada (campos receptivos), mostrados convencionalmente en los rectángulos de la izquierda. Cada subcapa de neuronas tiene su propio campo receptivo. Sabemos de antemano que si hay una subcapa con campo receptivo w_0,k donde k=0...5 (dirección "arriba"), entonces debe haber una subcapa con campo receptivo -w_0,k (dirección "abajo"). Dejemos que las capas con campo positivo se numeren con números pares (0, 2, 4) y sus homólogas negativas con números difusos (1, 3, 5). Además, sabemos que las subcapas S1 deben tener campos receptivos de diferentes tamaños. Dejemos que el tamaño del campo aumente de la subcapa 0 (y su contraparte negativa 1) a la subcapa 4 (y su contraparte negativa 5). Las entradas de todas las neuronas de la misma columna se alimentan con los mismos precios (por ejemplo, las neuronas de la primera columna se alimentan con los precios x_0...x_5). Las entradas de las neuronas de la siguiente columna se alimentan con precios desplazados en 1 bar (x_1...x_6), etc. Así, nuestra capa S1 está formada por neuronas con campos receptivos de diferentes direcciones (arriba, abajo), tamaños y posiciones temporales.
El aprendizaje de los pesos de entrada de las neuronas de la capa S1 se realiza sólo para una columna de neuronas de diferentes subcapas, y no importa cuál. A continuación, se copian todos los pesos para el resto de neuronas de cada subcapa. El aprendizaje se realiza sin un profesor alimentando diferentes patrones de precios en las entradas de la capa S1 y cambiando los pesos mediante alguna regla. Hay muchas reglas para el autoaprendizaje de los pesos de las neuronas, bien descritas aquí:
Miller, K. D., y MacKay, D. J. C. (1994). El papel de las restricciones en el aprendizaje hebbiano. Neural Computat., 6, 100-126.
La primera regla de autoaprendizaje neuronal fue postulada por Hebb en 1949(https://en.wikipedia.org/wiki/Hebbian_theory). Esta regla dice: "Si una neurona recibe la entrada de otra neurona, y ambas son muy activas, el peso entre las neuronas debe aumentar". Matemáticamente se escribe como sigue
dw_i = mu*x_i*y,
donde dw_i es el incremento del peso w_i, x_i es el valor en la entrada i-ésima, y es la salida de una neurona, mu es la tasa de aprendizaje. Utilizaremos la regla de Oja (https://en.wikipedia.org/wiki/Oja's_rule), que pertenece a la clase de reglas de aprendizaje competitivo :
dw_i = mu*y*(x_i - y*w_i/a),
donde dw_i es el peso incremental w_i, x_i es el precio en la entrada i-ésima, y es la salida de la neurona calculada como y = SUM(w_i*x_i, i=0..m-1), mu es la tasa de aprendizaje, a es un parámetro (la suma de cuadrados de los pesos SUM(w_i^2,i=0..m-1) tiende a a). La ventaja de esta regla es que encuentra automáticamente las ponderaciones como vectores propios principales de las cotizaciones de precios. En otras palabras, la regla de Ogi reproduce el enfoque de componentes principales (PCA). Esto coincide con la suposición biológica de que los campos receptivos de la capa S1 de la corteza visual representan los principales vectores propios de la información visual. El código C++ adjunto entrena automáticamente los pesos de 32 subcapas S1 con las cotizaciones EURUSD M5 como entrada, mu=1, a=1. Estas ponderaciones en función de la entrada se muestran a continuación
Los pesos de las dos primeras subcapas (0 y 1) se muestran en rojo. Sólo tienen dos valores distintos de cero: -0,707 y +0,707. Los pesos de las subcapas 2 y 3 se muestran en naranja. Tienen 4 valores distintos de cero. Etc.
Para utilizar el código adjunto, es necesario instalar las librerías Boost y CImg http://cimg.sourceforge.net/. No he llegado a las capas superiores (C1, S2, C2) y probablemente no lo haré en mucho tiempo. Los que lean mis secciones anteriores deberían entender cómo funcionan todas las capas de HMAX y completar el módulo de conversión de cotizaciones. En la próxima (última) conferencia hablaré de SparseNets.
Propongo considerar una biblia de órdenes virtuales (emula la apertura/cierre en el mercado. los comandos son casi los mismos que para las órdenes reales).
Le será útil cuando necesite ejecutar un modelo con datos históricos (fuera del probador de estrategias).
¿Qué has olvidado? ¿Qué podemos mejorar, añadir, cambiar, modificar? - La biblioteca es muy básica.
Hasta el momento sólo se han implementado las operaciones de compra-0 y venta-1.
Gracias por la biblioteca. ¿Puedo tener un tutorial rápido sobre cómo usarlo?
En realidad, no hay mucho que contar.
Antes de cada ejecución del historial, para borrar el historial de pedidos, llame a
y luego, de acuerdo con su estrategia de negociación, llame a los comandos necesarios:
La dispersión es fija, se establece durante la inicialización. Para un spread flotante, tendremos que añadir la funcionalidad adecuada. En mi opinión, no es necesario: basta con establecer la máxima dispersión posible para un instrumento y ya está.
Realmente no hay mucho que contar.
Antes de cada ejecución del historial, para borrar el historial de pedidos, es necesario llamar a los siguientes comandos:
y luego, según la estrategia de negociación, llamar a los comandos necesarios:
La dispersión es fija, se establece durante la inicialización. Para un spread flotante, tendremos que añadir la funcionalidad adecuada. Para mí no es necesario en el infierno - sólo establecer el máximo posible propagación de un instrumento y eso es todo.
Lo siento, pero parece que he calculado mal. Por el momento, no tengo prácticamente ninguna oportunidad de participar en el proyecto.
Aunque las ganas de participar son enormes, estoy desesperadamente falto de tiempo y energía, lo cual es una pena.
Podré incorporarme después de los exámenes (a mediados de diciembre). Por cierto, uno de los cursos está directamente relacionado con las redes neuronales.
Por cierto. Hay dos funciones de destino. Para la regresión logística y la regresión simple.
La clasificación es un caso de regresión logística.
La función objetivo es para la regresión logística:
Y por simple:
aunque sus derivados son similares. Tal vez por eso la distinción suele ser silenciosa.
La primera se utiliza en la capa sigmoidal de salida en los problemas de clasificación.
El segundo se utiliza para la salida lineal en problemas de predicción.
Lo siento, pero parece que he calculado mal. Por el momento, no tengo prácticamente ninguna oportunidad de participar en el proyecto.
Aunque las ganas de participar son enormes, estoy desesperadamente falto de tiempo y energía, lo cual es una pena.
Podré incorporarme después de los exámenes (a mediados de diciembre). Por cierto, uno de los cursos está directamente relacionado con las redes neuronales.