"New Neural" es un proyecto de motor de red neuronal de código abierto para la plataforma MetaTrader 5. - página 46

 
maxfade:

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 tiempo
Por cierto, sí, el bebé nace al menos con un reflejo de agarre y deglución, y eso también es trabajo del cerebro. Así que no tiene un cerebro cero, sobre todo porque su aprendizaje comienza mucho antes de nacer. Se trata de una cuestión de evolución más que de aprender a cargar la balanza de un recién nacido.
 

Lo 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.

  uint st=GetTickCount();
  CRandm *rnd=new CRandm((uint)TimeLocal(),10000);// длинна последовательности
  for(int i=0;i<1000000;i++)// количество вызовов
    {
     rnd.Rand();
    } 
  delete rnd;   
  Print("time=",GetTickCount()-st);
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
Archivos adjuntos:
Randm.mqh  5 kb
 

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.

Archivos adjuntos:
C_Orders.mqh  15 kb
 

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.

Archivos adjuntos:
BrainPower.zip  907 kb
 

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. ¿Pueden darme unas breves instrucciones sobre cómo utilizarlo?
 
Graff:
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

void Initialise(int MaxPossibleCountOrd, double Spread, double Point_);

y luego, de acuerdo con su estrategia de negociación, llame a los comandos necesarios:

int    OrderOpen        (int Type, double Volume, int Time,double Price,double SL, double TP);
void   Possible_SL_or_TP(int Time, double PriceHigh,double PriceLow);
void   OrderClose       (int Ticket, int Time,double Price);
void   OrderCloseAll    (int Time, double   Price);
int    ProfitTradeCount ();
int    TotalPipsProfit  ();
int    LossSeriesCount  ();
int    ProfitSeriesCount();

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á.

 
joo:

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.

Gracias, lo probaré esta noche. El análogo para MT4https://www.mql5.com/ru/forum/124013 podría ser de ayuda.
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
  • www.mql5.com
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
 

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.

 
TheXpert:

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.

Estáis dispersos por los rincones camaradas. De ninguna manera.
Razón de la queja: