"New Neural" est un projet de moteur de réseau neuronal Open Source pour la plateforme MetaTrader 5. - page 46

 
maxfade:

une blague sur les barbus me vient immédiatement à l'esprit

Je doute de l'existence de "zéros" au moment de la naissance, en outre je pense que les erreurs-déflections sont présentes tout le temps.
Au fait, oui, le bébé naît avec au moins un réflexe de préhension et de déglutition, et c'est aussi un travail cérébral. Il n'a donc pas un cerveau zéro, d'autant que son apprentissage commence bien avant sa naissance. C'est une question d'évolution plutôt que d'apprendre à charger les balances d'un nouveau-né.
 

Je l'ai modifié de sorte que lorsqu'un objet est créé via un constructeur avec des paramètres, une nouvelle séquence sera initialisée à la fin de la séquence.

Cela fonctionnera un peu plus lentement, mais la séquence sera toujours unique.

Lors de la création par le constructeur standard, vous devez appeler Srand() et la séquence sera la même, tournant en rond.

  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
Dossiers :
Randm.mqh  5 kb
 

Je propose de considérer un ordre virtuel bible (émule l'ouverture/fermeture sur le marché. les commandes sont presque les mêmes que pour les ordres réels).

Il vous sera utile lorsque vous aurez besoin d'exécuter un modèle sur des données historiques (en dehors du testeur de stratégie).

Qu'avez-vous oublié ? Que pouvons-nous améliorer, ajouter, changer, modifier ? - La bibliothèque est très sommaire.

Seules les opérations de type achat-0 et vente-1 ont été implémentées jusqu'à présent.

Dossiers :
C_Orders.mqh  15 kb
 

Lecture 1 ici https://www.mql5.com/ru/forum/4956/page23

Lecture 2 ici https://www.mql5.com/ru/forum/4956/page34

Lecture 3 ici https://www.mql5.com/ru/forum/4956/page36

Lecture 4. Application de l'organisation du cortex visuel à la transformation des séries temporelles

Notre tâche consiste donc à construire un réseau neuronal de classification pour les modèles de prix selon le principe du cerveau. Ce réseau peut être divisé en deux modules : le module de transformation des entrées (prix) et le module de classification qui peut être construit selon n'importe quel principe connu (par exemple, la machine à vecteurs de support) :

Dans mon précédent exposé, j'ai décrit le modèle HMAX du cortex visuel comme un exemple de transformation biologique de l'information. Le gros inconvénient de ce modèle est que les valeurs des poids (champs réceptifs) n'y sont pas entraînées, mais simplement tirées des mesures biologiques des neurones du cerveau. Par exemple, les champs réceptifs des neurones simples de V1 (S1) sont mesurés comme le montre la vidéo ici https://www.youtube.com/watch?v=Cw5PKV9Rj3o(les clics que vous entendez sont les impulsions des neurones). Dans notre cas de citations de séries temporelles, les "champs réceptifs" des neurones qui transforment l'information sont inconnus à l'avance. Nous devrons donc les trouver nous-mêmes. Par exemple, la première couche de transformation des prix (couche S1) peut être construite comme suit, par analogie avec la couche S1 du cortex visuel :

Dans cet exemple, notre couche S1 comporte 6 sous-couches, numérotées de 0 à 5. Les neurones (cercles) d'une même sous-couche ont les mêmes poids d'entrée (champs réceptifs), représentés conventionnellement par les rectangles de gauche. Chaque sous-couche de neurones a son propre champ réceptif. Nous savons par avance que s'il existe une sous-couche avec un champ réceptif w_0,k où k=0...5 (direction "haut"), alors il doit exister une sous-couche avec un champ réceptif -w_0,k (direction "bas"). Que les couches avec champ positif soient numérotées avec des nombres pairs (0, 2, 4) et leurs homologues négatifs avec des nombres flous (1, 3, 5). En outre, nous savons que les sous-couches S1 doivent avoir des champs réceptifs de tailles différentes. Que la taille du champ augmente de la sous-couche 0 (et sa contrepartie négative 1) à la sous-couche 4 (et sa contrepartie négative 5). Toutes les entrées de tous les neurones d'une même colonne sont alimentées par les mêmes prix (par exemple, les neurones de la première colonne sont alimentés par les prix x_0...x_5). Les entrées des neurones de la colonne suivante sont alimentées par des prix décalés de 1 barre (x_1...x_6), etc. Ainsi, notre couche S1 est constituée de neurones dont les champs réceptifs ont des directions (haut, bas), des tailles et des positions temporelles différentes.

L'apprentissage des poids d'entrée des neurones de la couche S1 se fait uniquement pour une colonne de neurones provenant de différentes sous-couches, et peu importe laquelle. Ensuite, tous les poids sont copiés pour les neurones restants dans chaque sous-couche. L'apprentissage se fait sans professeur en introduisant différents modèles de prix dans les entrées de la couche S1 et en modifiant les poids selon une certaine règle. Il existe de nombreuses règles d'auto-apprentissage des poids des neurones, bien décrites ici :

Miller, K. D., et MacKay, D. J. C. (1994). The role of constraints in Hebbian learning ", Neural Computat, 6, 100-126.

La première règle d'auto-apprentissage neuronal a été postulée par Hebb en 1949(https://en.wikipedia.org/wiki/Hebbian_theory). Cette règle est la suivante : "Si un neurone reçoit une entrée d'un autre neurone, et que les deux sont très actifs, le poids entre les neurones doit être augmenté". Mathématiquement, il s'écrit comme suit

dw_i = mu*x_i*y,

où dw_i est le poids incrémental de w_i, x_i est la valeur de la i-ième entrée, y est la sortie d'un neurone, mu est le taux d'apprentissage. Nous utiliserons la règle d'Oja (https://en.wikipedia.org/wiki/Oja's_rule), qui appartient à la classe des règles d'apprentissage compétitif :

dw_i = mu*y*(x_i - y*w_i/a),

où dw_i est le poids incrémental w_i, x_i est le prix à la i-ième entrée, y est la sortie du neurone calculée comme y = SUM(w_i*x_i, i=0..m-1), mu est le taux d'apprentissage, a est un paramètre (la somme des carrés des poids SUM(w_i^2,i=0..m-1) tend vers a). L'avantage de cette règle est qu'elle trouve automatiquement les poids comme principaux vecteurs propres des relevés de prix. En d'autres termes, la règle d'Ogi reproduit l'approche en composantes principales (ACP). Cela coïncide avec l'hypothèse biologique selon laquelle les champs réceptifs de la couche S1 du cortex visuel représentent les principaux vecteurs propres de l'information visuelle. Le code C++ joint entraîne automatiquement les poids des 32 sous-couches S1 avec les cotations EURUSD M5 en entrée, mu=1, a=1. Ces poids en fonction de l'entrée sont indiqués ci-dessous

Les poids des deux premières sous-couches (0 et 1) sont indiqués en rouge. Ils n'ont que deux valeurs non nulles : -0,707 et +0,707. Les poids des sous-couches 2 et 3 sont indiqués en orange. Ils ont 4 valeurs non nulles. Etc.

Pour utiliser le code ci-joint, vous devez installer les bibliothèques Boost et CImg http://cimg.sourceforge.net/. Je n'ai pas encore abordé les couches supérieures (C1, S2, C2) et je ne le ferai probablement pas avant longtemps. Ceux qui ont lu mes sections précédentes devraient comprendre le fonctionnement de toutes les couches HMAX et compléter le module de conversion de devis. Dans le prochain (dernier) cours, je parlerai des SparseNets.

Dossiers :
BrainPower.zip  907 kb
 
joo:

Je propose de considérer un ordre virtuel bible (émule l'ouverture/fermeture sur le marché. les commandes sont presque les mêmes que pour les ordres réels).

Il vous sera utile lorsque vous aurez besoin d'exécuter un modèle sur des données historiques (en dehors du testeur de stratégie).

Qu'avez-vous oublié ? Que pouvons-nous améliorer, ajouter, changer, modifier ? - La bibliothèque est très sommaire.

Seules les opérations d'achat-0 et de vente-1 ont été mises en œuvre jusqu'à présent.

Merci pour la bibliothèque. Puis-je obtenir une brève instruction sur la façon de l'utiliser ?
 
Graff:
Merci pour la bibliothèque. Puis-je avoir un rapide tutoriel sur la façon de l'utiliser ?

En fait, il n'y a pas grand-chose à dire.

Avant chaque exécution de l'historique, afin d'effacer l'historique des commandes, appelez

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

et ensuite, en fonction de votre stratégie de trading, appelez les commandes nécessaires :

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

L'écart est fixe, il est défini lors de l'initialisation. Pour un spread flottant, nous devrons ajouter la fonctionnalité appropriée. À mon avis, ce n'est pas nécessaire - il suffit de définir l'écart maximal possible pour un instrument et c'est tout.

 
joo:

Il n'y a pas grand-chose à dire.

Avant chaque exécution de l'historique, pour effacer l'historique des commandes, nous devons appeler les commandes suivantes :

et ensuite, en fonction de la stratégie de trading, appeler les commandes nécessaires :

L'écart est fixe, il est défini lors de l'initialisation. Pour un spread flottant, nous devrons ajouter la fonctionnalité appropriée. Pour moi, ce n'est pas nécessaire dans l'enfer - il suffit de définir l'écart maximal possible pour un instrument et c'est tout.

Merci, je vais essayer ce soir. L'analogue pour MT4https://www.mql5.com/ru/forum/124013 pourrait vous être utile.
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
  • www.mql5.com
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
 

Je suis désolé, mais il semble que j'ai mal calculé. Pour l'instant, je n'ai pratiquement aucune possibilité de m'impliquer dans le projet.

Bien que l'envie de participer soit énorme, je manque cruellement de temps et d'énergie, ce qui est dommage.

Je pourrai m'inscrire après les examens (mi-décembre). D'ailleurs, l'un des cours est directement lié aux réseaux neuronaux.

 

Au fait. Il existe deux fonctions cibles. Pour la régression logistique et la régression simple.

La classification est un cas de régression logistique.

La fonction cible est pour la régression logistique :

Et pour la régression ordinaire :

bien que leurs dérivés soient similaires. C'est peut-être pour cela que la distinction est généralement silencieuse.

La première est utilisée à la couche sigmoïde de sortie dans les problèmes de classification.

La seconde est utilisée pour la sortie linéaire dans les problèmes de prédiction.

 
LeXpert:

Je suis désolé, mais il semble que j'ai mal calculé. Pour l'instant, je n'ai pratiquement aucune possibilité de m'impliquer dans le projet.

Bien que l'envie de participer soit énorme, je manque cruellement de temps et d'énergie, ce qui est dommage.

Je pourrai m'inscrire après les examens (mi-décembre). D'ailleurs, l'un des cours est directement lié aux réseaux neuronaux.

Vous êtes dispersés dans les coins, camarades. Pas du tout.