Redes neuronales, cómo dominarlas, por dónde empezar - página 5

 
meta-trader2007 >> :

Me refiero a un perseptrón lineal simple, como el utilizado por Reshetov. Rosenblatt creó su perseptrón como modelo del funcionamiento del cerebro), un modelo muy primitivo...

El simple perseptrón lineal utilizado por el Sr. Reshetov ha quedado obsoleto hace más de 40 años.

La verdadera historia de las redes neuronales comenzó con el perseptrón de Rosenblatt y su función de activación.

 
TheXpert >> :

El simple perseptrón lineal utilizado por el Sr. Reshetov ha quedado obsoleto hace más de 40 años.

La verdadera historia de las redes neuronales comenzó con el perseptrón de Rosenblatt y su función de activación.

Pero su perseptrón tampoco es perfecto. Y no es bueno para predecir la dirección del curso.

Entonces, en los perseptrones de dos capas de Rosenblatt (él fue el primero en crearlos), la primera capa oculta desempeñaba el papel de una función de activación.

 
meta-trader2007 >> :

Pero su perseptrón tampoco es perfecto. Y no sirve para predecir la dirección del rumbo.

Es decir, en los perseptrones de dos capas de Rosenblatt (él fue el primero en crearlos) la primera capa oculta desempeñaba el papel de una función de activación...

Estoy siguiendo el tema, pero estáis hablando de temas más elevados. Deberíamos al menos entender cómo hacer algo sencillo...


Aquí hay un algoritmo de un simple Asesor Experto:

Tomemos por ejemplo un algoritmo simple que da puntos de entrada con stop losses y take profits basados en el último fractal:

Si tenemos un fractal al alza, ponemos una orden Buy Stop para la ruptura del fractal, con un stop loss por debajo del precio mínimo entre las barras desde cero hasta la barra en la que se formó el fractal. El take profit es igual al stop loss.


Aquí está el código de este Asesor Experto:

extern double    Lot=0.1;
extern int       Slippage=3; // Проскальзывание
extern int       Magic=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 int i;
 
// Фрактал вверх 
 int iUpFr;   // Номер бара на котором образовался последний фрактал вверх
 double UpFr; // Значение последнего фрактала вверх 

for ( i=3; i<Bars; i++){
UpFr=iFractals(NULL,0,MODE_UPPER, i);
  if ( UpFr>0){
  iUpFr= i;
  //Print ("UpFr = ", UpFr, ", ", " iUpFr = ", iUpFr);
  break;
  }
}   
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkUpFr; // Если false, то прорван, если true, то не прорван
if( UpFr>=High[iHighest(NULL,0,MODE_HIGH, iUpFr,0)]){ OkUpFr=true;}

double SellSl=High[iHighest(NULL,0,MODE_HIGH, iUpFr+1,0)]; // Минимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вверх


// Фрактал вниз
 int iDnFr;   // Номер бара на котором образовался последний фрактал вниз
 double DnFr; // Значение последнего фрактала вниз
 
for ( i=3; i<Bars; i++){
DnFr=iFractals(NULL,0,MODE_LOWER, i);
  if ( DnFr>0){
  iDnFr= i;
  //Print ("DnFr = ", DnFr, ", ", " iDnFr = ", iDnFr);
  break;
  }
} 
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkDnFr; // Если false, то прорван, если true, то не прорван
if( DnFr<=Low[iLowest(NULL,0,MODE_LOW, iDnFr,0)]){ OkDnFr=true;}

double BuySl=Low[iLowest(NULL,0,MODE_LOW, iDnFr+1,0)]; // Максимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вниз
 
 // Параметры ордеров
  double Tick=MarketInfo(Symbol(),MODE_TICKSIZE);
  double spread=MarketInfo(Symbol(),MODE_SPREAD)* Tick;

  double B;
  double Bsl;
  double S;
  double Ssl;    
  double Btp; 
  double Stp; 
  B=NormalizeDouble( UpFr+1* Tick+ spread,Digits);      // Цена для покупки
  Bsl=NormalizeDouble( BuySl-1* Tick,Digits);          // Стоп лосс для ордера на покупку
  Btp=NormalizeDouble( B+( B- Bsl),Digits);             // Тейк профит для ордера на покупку
  S=NormalizeDouble( DnFr-1* Tick,Digits);             // Цена для продажи
  Ssl=NormalizeDouble( SellSl+ spread+1* Tick,Digits);  // Стоп лосс для ордера на продажу
  Stp=NormalizeDouble( S-( Ssl- S),Digits);             // Тейк профит для ордера на продажу
  
bool Buy; // если Buy==true, значит появились условия для Buy stop
bool Sell;// если Sell==true, значит появились условия для Sell stop

if( OkUpFr==true){ Buy=true;}
if( OkDnFr==true){ Sell=true;}
 
// Проверка открытых ордеров и выставленых ордеров
int total = OrdersTotal(); // Общее кол-во открытых и отложеных ордеров.
int Ticket = OrderTicket( ); // Возвращает номер тикета для текущего выбранного ордера. 
bool PendingOrderBuy=false;  
bool PendingOrderSell=false;   
bool MarketOrderBuy=false;
bool MarketOrderSell=false;
if( total>0){  
  for( i=0; i<= total; i++){
     if (OrderSelect( i, SELECT_BY_POS)==true){
        if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic){
         double OpenPrice=NormalizeDouble(OrderOpenPrice(),Digits);
         double StopLoss=NormalizeDouble(OrderStopLoss(),Digits);
         double TakeProfit=NormalizeDouble(OrderTakeProfit(),Digits);
         Ticket = OrderTicket( );
           if (OrderType( )==OP_BUY){
           MarketOrderBuy = true;
           }
           if (OrderType( )==OP_SELL){
           MarketOrderSell = true;
           }
           if (OrderType( )==OP_BUYSTOP){
           PendingOrderBuy = true;
           if( OpenPrice!= B) {OrderDelete( Ticket,CLR_NONE);} 
           if( StopLoss!= Bsl){OrderDelete( Ticket,CLR_NONE);}       
           }
           if (OrderType( )==OP_SELLSTOP){
           PendingOrderSell = true;
           if( OpenPrice!= S) {OrderDelete( Ticket,CLR_NONE);} 
           if( StopLoss!= Ssl){OrderDelete( Ticket,CLR_NONE);}    
           }  
        }
     }
  }
} 
// Выставление отложеных ордеров
if( Buy==true && PendingOrderBuy==false && MarketOrderBuy==false){
         Ticket=OrderSend (Symbol(),OP_BUYSTOP, Lot, B, Slippage, Bsl, Btp,NULL, Magic,0,CLR_NONE);
         if( Ticket<0)
         {
         Print("OrderSend failed with error #",GetLastError());
         return(0);
         }
}
if( Sell==true && PendingOrderSell==false && MarketOrderSell==false){
         Ticket=OrderSend (Symbol(),OP_SELLSTOP, Lot, S, Slippage, Ssl, Stp,NULL, Magic,0,CLR_NONE);
         if( Ticket<0)
         {
         Print("OrderSend failed with error #",GetLastError());
         return(0);
         }
}     
//----
   return(0);
  }

En este algoritmo, se pueden seleccionar varios puntos de anclaje, en base a los cuales se medirá el modelo fractal:


Parámetros que pueden utilizarse como pesos:

Para comprar:
iUpFr
iUpFr-iSellSl
UpFr-SellSl
(UpFr-SellSl)/(iUpFr-iSellSl)
(UpFr-SellSl)/(iUpFr)

Para vender:
iDnFr
iDnFr-iBuySl
BuySl-DnFr
(BuySl-DnFr)/(iDnFr-iBuySl)
(BuySl-DnFr)/(iDnFr)


¿He entendido bien que el siguiente paso de la creación de la red neuronal será la introducción de variables que se compararán con estas propiedades?

¿Y la comparación tendrá lugar durante la optimización?

Si me equivoco, ¿qué otros pasos prácticos debo dar para atornillar este EA, una simple red neuronal?



 

Las matemáticas de las redes neuronales no son tan complicadas. La elección de los parámetros de entrada es mucho más importante para el éxito de la predicción de la red. La cuestión es: ¿qué indicadores y sus parámetros describen plenamente el estado actual del mercado y su historia? Conocer sólo unos pocos precios pasados de una moneda no es suficiente para predecir el precio futuro, independientemente del número de capas que haya en la red. Por eso hay que elegir o bien muchos precios pasados o bien indicadores de diferentes periodos. La gran mayoría utiliza indicadores, ya que permiten describir de forma más eficiente la posición del último precio a los precios pasados. Tal vez deberíamos cambiar la discusión a la selección de los parámetros de entrada. Me parece que la relación mutua de los valores de los últimos muves de diferentes períodos puede ser una buena entrada para la red. ¿Quién tiene una opinión diferente? ¿Se pueden mezclar diferentes tipos de indicadores, por ejemplo, MACD, RSI, AC, Stoch, etc., en la entrada de la misma red?

 
gpwr >> :

¿Se pueden mezclar diferentes tipos de indicadores, por ejemplo, MACD, RSI, AC, Stoch, etc., en la entrada de la misma red?

Creo que se puede, siempre que el conjunto de indicadores dé buenas entradas al mercado. Después de esto tenemos otra pregunta difícil: ¿qué debemos proporcionar a la salida neta durante el entrenamiento? ¿Qué queremos? ¿Reconocer un patrón? ¿Predecir el color de la siguiente vela? ¿O tal vez no uno sino varios? ¿O tal vez queremos predecir la magnitud del movimiento? )))

Me gustaría encontrar las respuestas a estas preguntas.

Tal vez los profesionales me digan, ¿con qué entrenan sus redes? :))

 

Estimados miembros del foro, el tema de este hilo es Redes Neuronales, ¿cómo dominarlas, por dónde empezar?

Acerquémonos al tema....

 

Chicos, no se trata de las redes neuronales, sino de la forma en que se aplican......

 
Andrey4-min писал(а) >>

Estimados miembros del foro, el tema de este hilo es Redes Neuronales, ¿cómo dominarlas y por dónde empezar?

Acerquémonos al tema....

He aquí una breve descripción de las redes de avance, que a veces cito cuando surge un tema similar. Así pues, vamos a crear una simple red de avance.

Paso 1: Elegir los datos de entrada. Por ejemplo,

x1 = WPR Per1

x2 = WPR Per2

x3 = WPR Per3

Paso 2: Seleccionar el número de neuronas en la capa oculta, por ejemplo dos neuronas, y1 e y2. Seleccione el número de neuronas en la capa de salida, por ejemplo dos neuronas, z1 y z2. Así, hemos creado una red 3-2-2. z1 y z2 son nuestras salidas.

Paso 3: Establecer la lógica de la decisión. Por ejemplo z1>=u compra, z1<=-u venta, z2<=-v cierre compra, z2>=v cierre venta, donde |u|<=1 y |v|<=1.

Paso 4: Describir las neuronas ocultas y1=F(x1,x2,x3) e y2=F(x1,x2,x3):

y1 = F(a0+a1*x1+a2*x2+a3*x3)

y2 = F(b0+b1*x1+b2*x2+b3*x3)

donde F() es una función no lineal. Por ejemplo, F(x)=tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x)). Prefiero una función más sencilla para evitar errores en el cálculo de exp():

F(x) = -1 si x<=-1, x si -1<x<1, 1 si x>=1.

Paso 5: Describir las neuronas de salida z1=F(y1,y2) y z2=F(y1,y2):

z1 = F(c0+c1*y1+c2*y2)

z2 = F(d0+d1*y1+d2*y2)

donde F() es la misma función de activación de la neurona.

Así, la red ha sido creada y descrita. Dar los periodos Per1, Per2 y Per3 para Williamps-Percent-Range (WPR) y optimizar a través del bateador de metadatos a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, d0, d1, d2, -1<=u<=+1, -1<=v<=+1. También puede optimizar Per1, Per2 y Per3. Puedes jugar con diferentes entradas. Por ejemplo, en lugar de WPR pruebe con el MACD u otro indicador. Se puede limitar a una neurona de salida para las posiciones de apertura: z(y1,y2)>=u comprar, z(y1,y2)<=-u vender. Y cerrar por stoploss, trailing stop o takeprofit.

También puede crear una red más compleja en la que cada decisión comercial esté asociada a una neurona de salida correspondiente. Por ejemplo, con los mismos datos de entrada y neuronas ocultas creamos 4 neuronas de salida

z1(y1,y2)>u1 - open long

z2(y1,y2)>u2 - cortocircuito abierto

z3(y1,y2)>u3 - cerrar largo

z4(y1,y2)>u4 - cerrar en corto

En este caso, el número de coeficientes optimizados aumenta considerablemente. Normalmente u1=u2=u3=u4=0,9.

Puedes aumentar el número de capas ocultas y de neuronas en ellas si tienes un ordenador potente.

 
Andrey4-min писал(а) >>

Estimados miembros del foro, el tema de este hilo es Redes Neuronales, ¿cómo dominarlas y por dónde empezar?

Acerquémonos al tema....

No te molestes en programar tú mismo las redes neuronales, hay programas ya hechos. El único programa que tiene un libro en ruso - Statistica Neural Networks, y este libro da la impresión de que está realmente escrito por expertos en redes neuronales, y tiene una introducción bastante decente y una visión general de las técnicas de redes neuronales y los tipos de redes neuronales existentes. El programa permite exportar las redes entrenadas como una dll que puede ser utilizada en los Asesores Expertos de MT (aunque no lo he probado, lo siento si me equivoco). Los programas especializados de comerciantes con no redes no son tan fáciles de acoplar a la MT, y si es posible, son torcidos o muy caros. Hay terminales de corredores que exportan los datos a metaficheros, no es tan fácil implementar un software especializado para trabajar con redes que no crecen. ¡Eh! Por qué los desarrolladores de MT no proporcionan la posibilidad de exportar los datos para poder utilizar cualquier otro programa de análisis financiero sin cambios innecesarios.

 

Para empezar, en mi opinión, el mejor programa es NeuroShell -2, hay una línea de ayuda rusa y ejemplos en ruso. Además, las redes neuronales de NS 2 pueden adjuntarse fácilmente a asesores expertos e indicadores en MT4.

Puede consultar aquí: http://www.fxreal.ru/forums/forums.php?forum=3

Razón de la queja: