Discussion de l'article "Développer un Expert Advisor de trading à partir de zéro"

 

Un nouvel article Développer un Expert Advisor de trading à partir de zéro a été publié :

Dans cet article, nous verrons comment développer un robot de trading avec un minimum de programmation. Bien sûr, MetaTrader 5 offre un haut niveau de contrôle sur les positions de trading. Cependant, utiliser uniquement la capacité manuelle pour passer des ordres peut être assez difficile et risqué pour les utilisateurs moins expérimentés.

L'Expert Advisor présenté dans cet article peut être amélioré de diverses manières pour travailler avec des ensembles de paramètres, mais cela nécessiterait plus de code qui le rendra plus indépendant de MetaTrader 5.

Le grand succès de cet EA est qu'il utilise MetaTrader 5 lui-même pour effectuer des actions qui ne sont pas dans son code, et donc il est extrêmement stable et fiable.





Auteur : Daniel Jose

 

Bonjour,

Très bien, mais je n'ai pas compris une chose. Lorsque je place l'ordre dans WIN et WDO l'EA ouvre 6 ordres avec le nombre de contrats que j'ai inséré dans "leverage". Donc même si je veux fonctionner avec 1 contrat, je ne peux pas, il en ouvre 6.

Est-ce un concept qui est passé inaperçu pour moi ? Je suis un débutant, donc je pars de cette prémisse.

Merci beaucoup pour ce partage.

 
Si je comprends bien, il faut avoir des connaissances en "Algo Trading" pour travailler avec lui...
 
Très bien !
 
joecafrois #:
Je comprends que vous devez avoir des connaissances en Algo Trading pour travailler avec lui...

Vous n'avez pas besoin d'avoir des connaissances en AlgoTrading ... mais il doit être activé chaque fois que vous allez utiliser un EA (Expert Advisor), sinon l'EA voit son fonctionnement limité.

 
Feresther nombre de contrats que j'ai inséré dans "leverage". Donc même si je veux négocier avec 1 contrat, je ne peux pas, il en ouvre 6.

Est-ce un concept qui est passé inaperçu pour moi ? Je suis un débutant, donc je pars de cette prémisse.

Merci beaucoup pour ce partage.

Il se peut que le système envoie plus d'une commande lorsque vous cliquez sur la souris, les raisons peuvent être multiples, mais merci de l'avoir signalé 😁👍, pour résoudre ce malheur, il faut ajouter un test supplémentaire sur le clic de la souris, les points à modifier ou à ajouter sont marqués en VERT ..... faites attention à le taper tel quel, sinon vous risquez de ne pas envoyer la commande, ou elle risque de ne pas être acceptée par le serveur ... mais l'ajout de ce test supplémentaire devrait résoudre votre problème. La logique est la suivante : lorsque la souris est cliquée, la variable STATIC sera définie, et elle ne sera réinitialisée permettant d'envoyer un nouvel ordre que lorsque la souris n'est plus pressée.

inline void MoveTo(int X, int Y, uint Key)
{
        static double d_block = 0; 
        int w = 0;
        datetime dt;
        bool bEClick, bKeyBuy, bKeySell;
        double take = 0, stop = 0, price;
        bEClick  = (Key & 0x01) == 0x01;                //Clique esquerdo
        bKeyBuy  = (Key & 0x04) == 0x04;                //SHIFT Pressionada
        bKeySell = (Key & 0x08) == 0x08;                //CTRL Pressionada
        ChartXYToTimePrice(Infos.Id, X, Y, w, dt, price);
        ObjectMove(Infos.Id, Infos.szHLinePrice, 0, 0, price = (bKeyBuy != bKeySell ? AdjustPrice(price) : 0));
        ObjectMove(Infos.Id, Infos.szHLineTake, 0, 0, take = price + (Infos.TakeProfit * (bKeyBuy ? 1 : -1)));
        ObjectMove(Infos.Id, Infos.szHLineStop, 0, 0, stop = price + (Infos.StopLoss * (bKeyBuy ? -1 : 1)));
        if ((bEClick) && (bKeyBuy != bKeySell) && (d_block == 0)) CreateOrderPendent(bKeyBuy, Infos.Volume, (d_block = price), take, stop, Infos.IsDayTrade); else d_block = 0;
        ObjectSetInteger(Infos.Id, Infos.szHLinePrice, OBJPROP_COLOR, (bKeyBuy != bKeySell ? Infos.cPrice : clrNONE));
        ObjectSetInteger(Infos.Id, Infos.szHLineTake, OBJPROP_COLOR, (take > 0 ? Infos.cTake : clrNONE));
        ObjectSetInteger(Infos.Id, Infos.szHLineStop, OBJPROP_COLOR, (stop > 0 ? Infos.cStop : clrNONE));
};
Raison: