1. Comprendre les Perceptrons
Pour ceux qui se demandent ce qu'est un Perceptron, je vous conseille de jeter un œil à cet article de Dr. Mark Humphrys sur les réseaux neuronaux à couche unique.
J'appelle la logique du Perceptron comme étant l'Intelligence Artificielle.
2. L'Algorithme
2.1. Entrées
Les w1, w2, w3 et w4 sont des poids définis par votre optimisation.
input int x1 = 0;//poids1 input int x2 = 0;//poids2 input int x3 = 0;//poids3 input int x4 = 0;//poids4
2.2. Perceptron
Pour créer un EA simple, le seuil est fixé à zéro. Ainsi, la sortie n'est pas modifiée : "active" 1, "inactive" 0.

double w1 = x1 - 100;double w2 = x2 - 100; double w3 = x3 - 100; double w4 = x4 - 100; //Perceptron avant une bougie 2017/03/18
double a11 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,1))/100-0.5)*2;
double a21 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,1))/100-0.5)*2; double a31 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,1))/100-0.5)*2; double a41 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,1))/100-0.5)*2; double Current_Percptron = (w1 * a11 + w2 * a21 + w3 * a31 + w4 * a41); //Perceptron avant deux bougies 2017/03/18
double a12 = ((iRSI(Symbol(), 0, 12,PRICE_MEDIAN,2))/100-0.5)*2;
double a22 = ((iRSI(Symbol(), 0, 36,PRICE_MEDIAN,2))/100-0.5)*2; double a32 = ((iRSI(Symbol(), 0, 108,PRICE_MEDIAN,2))/100-0.5)*2; double a42 = ((iRSI(Symbol(), 0, 324,PRICE_MEDIAN,2))/100-0.5)*2; double Pre_Percptron = (w1 * a12 + w2 * a22 + w3 * a32 + w4 * a42);
J'utilise l'RSI dans cet EA, mais je pense que d'autres oscillateurs comme le RCI ou le W%R peuvent également faire l'affaire.
2.3. Ouverture et Fermeture des Ordres
Quand le Perceptron précédent est inférieur à 0 et que le Perceptron actuel est supérieur à 0, si une position courte est ouverte, elle est fermée.
Ensuite, l'EA envoie un ordre long.
if(Pre_Percptron < 0 && Current_Percptron > 0) //signal long { //Si une position courte est ouverte, envoyer l'ordre de fermeture if(pos < 0) { ret = OrderClose(Ticket, OrderLots(), OrderClosePrice(), 0); if(ret) pos = 0; //Si la fermeture de l'ordre réussit, le statut de la position est à Zéro } //Si aucune position n'est ouverte, envoyer l'ordre long if(pos == 0) Ticket = OrderSend( _Symbol, // symbole OP_BUY, // opération Lots, // volume Ask, // prix 0, // glissement 0, // stop loss 0, // take profit Trade_Comment, // commentaire MagicNumber,// numéro magique 0, // expiration de l'ordre en attente Green // couleur ); }
Inversement, lorsque le Perceptron actuel est inférieur à 0 et que le Perceptron précédent est supérieur à 0, si une position longue est ouverte, elle est fermée.
Et l'EA envoie un ordre court.
3. Optimisation
Chargez "Slime_Mold_RSI_template.set", et choisissez "prix d'ouverture uniquement" pour le modèle.


4. Commentaire et Numéro Magique
J'ai défini le numéro magique en fonction de la durée utilisée pour l'optimisation, cet EA utilise le numéro magique dans le commentaire.
string Trade_Comment = IntegerToString(MagicNumber,5,' ') + "Jours-Optimisation";

Commentaire 0