Discussion de l'article "Les fonctionnalités de ChatGPT d'OpenAI dans le cadre du développement MQL4 et MQL5" - page 2

 
Valeriy Yastremskiy #:
Ce serait bien) dans le cadre d'un partage d'expérience) la tâche est compliquée par le fait que µl ne connaît pas très bien les langages gpt. Il est parfois difficile d'obtenir un code sans erreur.
ChatGPT 3.5 écrit normalement en MQL4/5, ne vous faites pas d'idées. La valeur de l'article devrait être dans les invites et la démonstration du processus de développement avec ChatGPT, mais il n'y a rien de tel. Il n'y a que des codes générés prêts à l'emploi qui n'intéressent personne et qui sont gratuits. La valeur de l'article est nulle, l'auteur obtient un "D" et je me demande comment ce travail de mauvaise qualité a pu être publié.
 
Alexey Volchanskiy #:
ChatGPT 3.5 écrit normalement en MQL4/5, ne soyez pas si désinvolte. La valeur de l'article devrait être dans les invites et montrer le processus de développement en utilisant ChatGPT, mais il n'y a rien de tel. Il n'y a que des codes générés prêts à l'emploi qui n'intéressent personne et qui sont gratuits. La valeur de l'article est nulle, l'auteur obtient un "D" et je me demande comment ce travail bâclé a pu être publié .

Pour ceux qui sont dans le coup, laissez-moi vous répéter que le but de l'article n'est pas de vous donner des idées, mais d'instiller l'idée que vous devriez les produire vous-même. Vous ne vous rendez pas compte de ce qu'il adviendrait de l'article si je jetais tout ce que j'ai fait. Il y a des tonnes d'éléments inutiles qui ne feront qu'embrouiller les gens. Le matériel doit être simple et clair. Et vous ne passez pas un examen pour me donner un D. Soyez prudent.

 
Alexey Volchanskiy #:
ChatGPT 3.5 écrit normalement en MQL4/5, ne soyez pas si désinvolte. La valeur de l'article devrait être dans les invites et montrer le processus de développement en utilisant ChatGPT, mais il n'y a rien de tel. Il n'y a que des codes générés prêts à l'emploi qui n'intéressent personne et qui sont gratuits. La valeur de l'article est nulle, l'auteur reçoit un "D" et je me demande comment ce travail de hacker a pu être publié .

Je n'ai pas réussi à obtenir le code pour placer un ordre de marché. Si vous pouvez promettre. A chaque fois, j'ai renvoyé le ticket.

 
Valeriy Yastremskiy #:

Je n'ai pas réussi à obtenir le code pour placer un ordre de marché. Si vous le pouvez, promettez. Il a retourné le ticket à chaque fois.

Ecrivez une procédure en MQL5 pour ouvrir un ordre de marché. La fonction doit accepter les données d'entrée suivantes :


1) Lot

2) Take Profit en tant que module de la différence de prix entre les prix d'ouverture et de clôture

3) Stop Loss en tant que module de la différence de prix entre les prix d'ouverture et de clôture

4) Direction de l'ordre (bool bDirection) true - BUY ; false - SELL

5) Slippage en points (c'est l'écart maximum possible par rapport au prix d'ouverture en points)

6) Numéro d'ordre magique


En outre, si le Stop Loss ou le Take Profit est égal à zéro, l'ordre doit être ouvert sans le Stop Loss ou le Take Profit correspondant, selon qu'il est égal à zéro, ou sans Stop Loss ni Take Profit du tout s'ils sont tous deux égaux à zéro.


En outre, il convient de vérifier les lots minimum et maximum autorisés et, si le lot est en dehors de la fourchette autorisée, de le ramener au nombre disponible le plus proche (minimum ou maximum).


Fournissez des commentaires détaillés et essayez de raccourcir le code, et n'oubliez pas que les prix du stop loss et du take profit sont calculés différemment pour les ordres d'achat et de vente.


Vous ne pouvez utiliser aucune bibliothèque, mais uniquement les fonctionnalités du langage MQL5.

// Fonction permettant d'obtenir le volume corrigé
double CorrectedVolume(double volume)
{
   double minVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double maxVol = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   double VolStep = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   
   // Si le volume est inférieur au volume minimum, définir le volume minimum
   if(volume < minVol)
       return minVol;
   // Si le volume est supérieur au volume maximal, définir le volume maximal.
   else if(volume > maxVol)
       return maxVol;
   
   // Convertir le volume en un multiple du pas de volume
   return (double)((int)(volume / VolStep)) * VolStep; 
}

// Fonction de base du placement d'ordres
bool OpenOrder(double volume, double stoploss, double takeprofit, bool bDirection, int slip, int magic)
{
   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   // Déterminer le prix d'ouverture de l'ordre 
   double open_price = bDirection ? last_tick.ask : last_tick.bid;
   // Déterminer la valeur de l'élément 
   double point = SymbolInfoPoint(_Symbol);
   
   // Ajuster SL et TP en fonction de la direction
   double corrected_sl = bDirection ? open_price - stoploss * point : open_price + stoploss * point;
   double corrected_tp = bDirection ? open_price + takeprofit * point : open_price - takeprofit * point;
   
   // Si SL ou TP = 0, l'ordre est ouvert sans SL ni TP
   if (stoploss == 0) corrected_sl = 0; 
   if (takeprofit == 0) corrected_tp = 0;
   
   // Type de transaction utilisé
   ENUM_ORDER_TYPE order_type = bDirection ? ORDER_TYPE_BUY : ORDER_TYPE_SELL;
   
   // Structure pour remplir les paramètres de la demande
   MqlTradeRequest request;
   request.type = order_type;
   request.symbol = _Symbol;
   request.volume = CorrectedVolume(volume);
   request.price = open_price;
   request.sl = corrected_sl;
   request.tp = corrected_tp;
   request.deviation = slip;
   request.magic = magic;
   request.type_filling = ORDER_FILLING_FOK;
   request.type_time = ORDER_TIME_DAY;
   
   MqlTradeResult result;
   return OrderSend(request,result); // Envoi de l'ordre à la bourse
}

Cela n'a pas fonctionné tout de suite, j'ai dû rendre l'invite plus détaillée. Notez que cela n'a pris que 5 minutes. Et je n'ai pas cherché d'invites, j'ai juste écrit ce que je voulais et comment. L'invite n'est pas du tout une question....

 
Tout cela est inutile avec les compétences actuelles des TPG, car le "client" doit trouver des erreurs dans la source générée, c'est-à-dire qu'il doit connaître la bonne réponse ou en écrire la majeure partie. Les TPG actuels sont des bavards.
 
Stanislav Korotky #:
Tout cela est inutile avec les compétences actuelles des TPG, car le "client" doit trouver des erreurs dans la source générée, c'est-à-dire qu'il doit connaître la bonne réponse ou en écrire la majeure partie. Les TPG actuels sont des bavards.

J'ai essayé de l'expliquer dans l'article, mais cela ne semble pas très important pour les gens). Ils veulent me donner une invite et c'est tout et je suis dans le chocolat ))). Et le fait qu'il faille y penser, GPT est là ))))

 
Merci Eugène pour cet article ! J'ai également expérimenté CHATGPT et d'autres IA. Oui, elle produit parfois de bons textes, elle peut même écrire des poèmes dans n'importe quel style, mais en programmation elle fait beaucoup d'erreurs, on ne peut rien faire sans vérifier et éditer.
Je suis d'accord avec toi sur Promtov, même si tu donnes à l'IA la même demande, elle génère un texte ou un code différent. C'est pourquoi vous devez communiquer avec elle comme avec un enfant et lui expliquer en détail ce que vous voulez obtenir d'elle. La seule chose est que vous, en tant que programmeur avec de l'expérience et de l'expérience, plus une éducation mathématique, et donc avec le style de pensée approprié, pouvez formuler plus clairement et brièvement une tâche pour l'IA, comme un TdR. De nombreux traders ne sont pas en mesure de formuler des TdR élémentaires pour écrire un simple Expert Advisor. Lorsque j'ai commencé à écrire les premiers conseillers experts en MQL4, je me suis souvenu de la façon dont on nous enseignait à l'université, en Fortran, de dessiner d'abord un algorithme du futur programme et d'écrire ensuite le code en fonction de cet algorithme, ce qui m'a beaucoup aidé. De même, en tant que futurs ingénieurs concepteurs de systèmes radio-électroniques, on nous a appris à écrire TOR, ce qui s'est également avéré utile.
 
Evgeniy Ilin #:

Il vaut mieux penser au fait que le calcul de l'EMA de départ n'est pas égal aux suivants, parce que vous devez sauvegarder des barres jusqu'à ce que vous ayez le visage bleu, et vous devez trader ici et maintenant. En ce qui concerne les cycles, tout fonctionne par barres, je n'ai pas remarqué de ralentissements notables. Vous pouvez finaliser les calculs comme vous le souhaitez pour cet indicateur, mais est-ce que cela vous apportera beaucoup ) je sais juste que rien du tout ).

C'est la tâche de l'auteur de l'EMA - faire en sorte que tous ses calculs ultérieurs soient égaux aux précédents. Vous n'avez pas besoin d'économiser des barres jusqu'à ce que vous ayez le visage bleu, mais, comme je l'ai écrit plus haut, vous n'avez besoin que de 10 à 20 fois plus de barres que la période.

Les cycles sont très convaincants... Bien sûr, il n'y a absolument aucune différence entre un cycle de 10 barres et un cycle de 100 barres... Surtout si l'on considère l'existence d'algorithmes rapides pour calculer les moyennes.

 
Evgeniy Ilin #:

Je ne l'avais pas remarqué au début)

   MqlTick last_tick;
   SymbolInfoTick(_Symbol,last_tick);
   
   
   // Déterminer la valeur de l'élément 
   double point = SymbolInfoPoint(_Symbol); // видимо по аналогии придумано)))
   
   
 
Valeriy Yastremskiy #:

Je ne l'avais pas remarqué au début)

SymbolInfoDouble(_Symbol,SYMBOL_POINT) - c'est ainsi que cela devrait être. En général, vous avez compris... J'ai corrigé la plupart des erreurs. J'aurais tout vu s'il s'agissait du code de mon ts. Il y a des défauts... et si on ne sait pas ce qu'on fait, ça ne sert à rien. Vous êtes sur la bonne voie. Il a souvent tort. Ce n'est pas pour rien que j'ai écrit cet article. Je pourrais faire un super prompteur, il ne ferait pas d'erreur et donnerait tout parfaitement, mais ça ne servirait à rien parce que c'est de la frime. Dans les conditions réelles du terrain, nous posons des questions humaines simples qui, dans le meilleur des cas, peuvent être plus précises, mais comme le montre la pratique, cela ne réduit pas beaucoup le post-traitement.