Les réseaux neuronaux, comment les maîtriser, par où commencer ? - page 5

 
meta-trader2007 >> :

Je veux dire un simple perseptron linéaire, comme celui utilisé par Reshetov. Rosenblatt a créé son perseptron comme modèle de fonctionnement du cerveau), un modèle très primitif...

Le perseptron linéaire simple utilisé par M. Reshetov a plus de 40 ans d'âge.

La véritable histoire des réseaux neuronaux a commencé avec le perseptron de Rosenblatt et sa fonction d'activation.

 
TheXpert >> :

Le perseptron linéaire simple utilisé par M. Reshetov a plus de 40 ans d'âge.

La véritable histoire des réseaux neuronaux a commencé avec le perseptron de Rosenblatt et sa fonction d'activation.

Mais son perseptron n'est pas parfait non plus. Et il n'est pas bon pour prédire la direction de la course.

Ainsi, dans les perseptrons à deux couches de Rosenblatt (il les a créés en premier), la première couche cachée jouait le rôle d'une fonction d'activation ?

 
meta-trader2007 >> :

Mais son perseptron n'est pas parfait non plus. Et elle ne permet pas de prédire la direction de la course.

C'est-à-dire que dans les perseptrons à deux couches de Rosenblatt (il les a créés en premier), la première couche cachée jouait le rôle d'une fonction d'activation ?

Je suis le sujet, mais vous parlez de choses plus importantes. Nous devrions au moins comprendre comment faire quelque chose de simple...


Voici l'algorithme d'un conseiller expert simple :

Prenons par exemple un algorithme simple qui donne des points d'entrée avec des stop loss et des take profits basés sur la dernière fractale :

Si nous avons une fractale à la hausse, nous plaçons un ordre d'achat stop pour une percée de la fractale, avec un stop loss inférieur au prix minimum parmi les barres de zéro à la barre sur laquelle la fractale a été formée. Le Take Profit est égal au Stop Loss.


Voici le code de cet Expert Advisor :

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);
  }

Dans cet algorithme, vous pouvez sélectionner plusieurs points d'ancrage, sur la base desquels le modèle fractal sera mesuré :


Paramètres, qui peuvent être utilisés comme poids :

Pour acheter :
iUpFr
iUpFr-iSellSl
UpFr-SellSl
(UpFr-SellSl)/(iUpFr-iSellSl)
(UpFr-SellSl)/(iUpFr)

Pour vendre :
iDnFr
iDnFr-iBuySl
BuySl-DnFr
(BuySl-DnFr)/(iDnFr-iBuySl)
(BuySl-DnFr)/(iDnFr)


Est-ce que je comprends bien que l'étape suivante de la création du réseau neuronal sera l'introduction de variables qui seront comparées à ces propriétés ?

Et la comparaison aura lieu pendant l'optimisation ?

Si je me trompe, quelles autres mesures pratiques dois-je prendre afin de boulonner sur cet EA, un simple réseau neuronal ?



 

Les mathématiques des réseaux neuronaux ne sont pas si compliquées. Le choix des paramètres d'entrée est beaucoup plus important pour le succès de la prédiction du réseau. La question qui se pose ici est la suivante : quels indicateurs et leurs paramètres décrivent pleinement l'état actuel du marché et son histoire ? Connaître seulement quelques prix passés d'une monnaie est loin d'être suffisant pour prédire le prix futur, quel que soit le nombre de couches du réseau. C'est pourquoi vous devez choisir soit un grand nombre de prix passés, soit des indicateurs de différentes périodes. La grande majorité utilise des indicateurs car ils permettent de décrire plus efficacement la position du dernier prix par rapport aux prix passés. Peut-être devrions-nous déplacer la discussion sur la sélection des paramètres d'entrée. Je pense que la corrélation des valeurs récentes des muves de différentes périodes peut être une bonne entrée pour le réseau. Qui a une opinion différente ? Peut-on mélanger différents types d'indicateurs, par exemple MACD, RSI, AC, Stoch, etc., sur l'entrée d'un même réseau ?

 
gpwr >> :

Peut-on mélanger différents types d'indicateurs, par exemple MACD, RSI, AC, Stoch, etc., sur l'entrée d'un même réseau ?

Je pense que c'est possible, tant que le jeu d'indicateurs donne de bonnes entrées sur le marché. Après cela, nous avons une autre question difficile : que devons-nous fournir à la sortie nette pendant la formation ? Que voulons-nous ? Pour reconnaître un modèle ? Prédire la couleur de la prochaine bougie ? Ou peut-être pas un mais plusieurs ? Ou peut-être voulons-nous prédire l'ampleur du mouvement ? )))

J'aimerais trouver les réponses à ces questions.

Les praticiens me diront peut-être : sur quoi tendent-ils leurs filets ? :))

 

Chers membres du forum, le sujet de ce fil de discussion est les réseaux neuronaux, comment les maîtriser, par où commencer ?

Rapprochons-nous du sujet....

 

Les gars, il ne s'agit pas des réseaux neuronaux, mais de la façon dont ils sont appliqués.......

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

Chers membres du forum, le sujet de ce fil de discussion est les réseaux neuronaux, comment les apprendre pour commencer ?

Rapprochons-nous du sujet.....

Voici une brève description des réseaux d'anticipation, que je cite parfois lorsqu'un sujet similaire se présente. Alors, créons un simple réseau de transmission.

Étape 1 : Choisir les données d'entrée. Par exemple,

x1 = WPR Per1

x2 = WPR Per2

x3 = WPR Per3

Étape 2 : Sélectionnez le nombre de neurones dans la couche cachée, par exemple deux neurones, y1 et y2. Sélectionnez le nombre de neurones dans la couche de sortie, par exemple deux neurones, z1 et z2. Ainsi, nous avons créé un réseau 3-2-2. z1 et z2 sont nos sorties.

Étape 3 : Définir la logique de décision. Par exemple, z1>=u à l'achat, z1<=-u à la vente, z2<=-v à l'achat, z2>=v à la vente, où |u|<=1 et |v|<=1.

Étape 4 : Décrire les neurones cachés y1=F(x1,x2,x3) et y2=F(x1,x2,x3) :

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

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

où F() est une fonction non linéaire. Par exemple, F(x)=tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x)). Je préfère une fonction plus simple pour éviter les erreurs lors du calcul de exp() :

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

Étape 5 : Décrire les neurones de sortie z1=F(y1,y2) et z2=F(y1,y2) :

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

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

où F() est la même fonction d'activation du neurone.

Ainsi, le réseau a été créé et décrit. Donner les périodes Per1, Per2 et Per3 pour Williamps-Percent-Range (WPR) et optimiser via la métadrae batter a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, d0, d1, d2, -1<=u<=+1, -1<=v<=+1. Vous pouvez également optimiser Per1, Per2 et Per3. Vous pouvez jouer avec différentes entrées. Par exemple, au lieu du WPR, essayez le MACD ou un autre indicateur. Vous pouvez le limiter à un neurone de sortie pour les positions d'ouverture : z(y1,y2)>=u acheter, z(y1,y2)<=-u vendre. Et fermer par stoploss, trailing stop ou takeprofit.

Vous pouvez également créer un réseau plus complexe où chaque décision commerciale est associée à un neurone de sortie correspondant. Par exemple, avec les mêmes données d'entrée et neurones cachés, nous créons 4 neurones de sortie

z1(y1,y2)>u1 - ouvert long

z2(y1,y2)>u2 - open short

z3(y1,y2)>u3 - fermer long

z4(y1,y2)>u4 - fermer le short

Dans ce cas, le nombre de coefficients optimisés augmente considérablement. Habituellement, u1=u2=u3=u4=0,9.

Vous pouvez augmenter le nombre de couches cachées et de neurones qu'elles contiennent si vous disposez d'un ordinateur puissant.

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

Chers membres du forum, le sujet de ce fil de discussion est les réseaux neuronaux, comment les maîtriser et par où commencer ?

Rapprochons-nous du sujet.....

Ne vous embêtez pas à programmer vous-même des réseaux neuronaux, il existe des programmes prêts à l'emploi. Le seul programme qui a un livre en russe - Statistica Neural Networks, et ce livre donne l'impression qu'il est écrit par des experts en réseaux neuronaux, et a une introduction et une vue d'ensemble assez décente des techniques de réseaux neuronaux et des types de réseaux neuronaux existants. Le programme permet d'exporter les réseaux formés sous la forme d'une dll qui peut être utilisée dans les Expert Advisors MT (je ne l'ai pas essayé moi-même, désolé si je me trompe). Les programmes spécialisés pour les négociants qui n'ont pas de réseau ne sont pas si faciles à rattacher à la MT, et si c'est possible, ils sont tordus ou très chers. Il existe des terminaux de courtiers qui exportent les données vers des méta-fichiers, il n'est pas si facile de mettre en place des logiciels spécialisés pour travailler avec des réseaux non croissants. Eh ! Pourquoi les développeurs de MT ne donnent-ils pas la possibilité d'exporter les données pour pouvoir utiliser d'autres programmes d'analyse financière sans modifications inutiles.

 

Pour commencer, à mon avis, le meilleur programme est NeuroShell -2, il y a une ligne d'assistance téléphonique russe et des exemples en russe. En outre, les réseaux neuronaux de NS 2 peuvent être facilement attachés aux conseillers experts et aux indicateurs dans MT4.

Vous pouvez lire ici : http://www.fxreal.ru/forums/forums.php?forum=3