Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1466

 
WindUP:
Merci, mais pourrions-nous avoir au moins un exemple objectif ? Une vue d'en haut, pour ainsi dire. Je suis complètement novice et je suis sur le sujet depuis deux jours :-)

voici probablement quelque chose de similaire

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

J'essaie d'apprendre moi aussi - je crois que j'avance.

Salut. Désolé, je vois dans la capture d'écran que vous avez réussi, mais je n'ai pas vu où dans ce code se trouve la fonction de copie des données de la bougie précédente [1] ?




Pouvez-vous m'indiquer des cours de programmation MQL5 pour les nuls, du plus simple au plus complexe, où et avec quoi il vaut mieux commencer, pour obtenir plus de résultats et moins de temps à perdre ? Je vous en serais reconnaissant :-)

 
WindUP:

Salut. Désolé, je vois dans la capture d'écran que vous avez réussi, mais ici je n'ai pas vu où dans ce code est la fonction de copier les données de la bougie précédente [1] ?




Comment puis-je vous dire que les cours de programmation MQL5 pour les nuls, du simple au complexe, où et avec quoi il vaut mieux commencer, pour obtenir plus de résultats et moins de temps à perdre ? Je vous en serais reconnaissant :-)

Imaginez qu'un ami vous aborde et vous demande de "vous apprendre à travailler sur l'internet". Est-il difficile d'imaginer ce qu'il faut enseigner ? Il est tout aussi difficile d'enseigner la programmation. Il y a une tâche - il y a une solution. Mais juste comme ça... vous pouvez apprendre n'importe quelle langue, les bases sont les mêmes pour toutes. La programmation ne consiste pas tant à écrire du code qu'à poser un problème, à écrire un algorithme pour le résoudre et seulement ensuite à écrire du code. Et l'étape finale, le débogage et la vérification du résultat.

Dans le code de SanAlrx, je ne comprends pas pourquoi nous devons faire un tel stock de données copiées si nous avons une tâche spécifique pour obtenir l'OHLC pour le premier chandelier seulement.

int copied=CopyRates(Symbol(),0,0,10,rates);

et pourquoi copier les valeurs de la bougie actuelle, qui vient d'être ouverte. Mais... c'est sa décision et ses cafards.

 
WindUP:

Salut. Désolé, je vois dans la capture d'écran que vous avez réussi, mais ici je n'ai pas vu où dans ce code est la fonction de copier les données de la bougie précédente [1] ?




Pouvez-vous m'indiquer des cours de programmation MQL5 pour les nuls, du plus simple au plus complexe, où et comment commencer au mieux, pour obtenir plus de résultats et moins de temps à perdre ? Je vous en serais reconnaissant :-)

Je suis moi-même un étudiant - par exemple, je regarde la documentationhttps://www.mql5.com/ru/docs/series/copyrates, il y a un exemple de script, je le sauvegarde sur mon PC et je commence à le lire et à travailler sur les détails à l'instinct.

et cette fonction - par intuition - est ce que j'ai trouvé.

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

C'est pour BUY "SL".

Pour vendre, ça devrait être comme ça

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Je viens de mettre un chiffre ici - il serait possible d'acheter jusqu'à 10 barres. Mais vous n'en avez pas besoin - vous avez besoin de 1 (un).

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

Salut. Désolé, je vois dans la capture d'écran que vous avez réussi, mais je n'ai pas vu où dans ce code il y a une fonction pour copier les données de la bougie précédente [1] ?




Pouvez-vous m'indiquer des cours de programmation MQL5 pour les nuls, du plus simple au plus complexe, où et comment commencer au mieux, pour obtenir plus de résultats et moins de temps à perdre ? Je vous en serais reconnaissant :-)

voici un bon exemple - je viens d'aller sur la page et voici un meilleur script pour vous expliquer comment cela fonctionne.https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Способы привязки объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SanAlex:

J'apprends moi-même - par exemple, je suis allé sur la documentationhttps://www.mql5.com/ru/docs/series/copyrates , il y a un script d'exemple, je le sauvegarde sur mon ordinateur et je commence à le lire et à l'explorer en tâtonnant pour trouver des détails.

et cette fonction - par intuition - est ce que j'ai trouvé.

C'est pour BUY "SL".

Pour vendre, ça devrait être comme ça

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Je viens de mettre un chiffre ici - il serait possible d'acheter jusqu'à 10 barres. Mais vous n'en avez pas besoin - il vous faut 1 (un).

Cela permet d'ouvrir et de définir le SL pour BUY et SELL.

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

Photo par

 

Bonjour.

Pouvez-vous me donner un indice, je suis dépassé.

Je prescris l'indicateur par iCustom et je suis confronté à un problème - l'indicateur a un menu texte avec un choix, il s'ouvre et il y a plusieurs éléments prescrits, enfin, je pense que c'est clair)

Comment puis-je l'ajouter dans le menu ?

extern int HIT = 0 ; ne fonctionne pas, cesse de s'afficher, ne laissant aucun paramètre affiché.

Peut-être qu'à travers ENUM , il y a de quoi choisir, ou peut-être autre chose ?

Merci d'avance.

Dossiers :
 
Сергей:

Bonjour.

Pouvez-vous me donner un indice, je suis dépassé.

Je prescris l'indicateur par iCustom et je suis confronté à un problème - l'indicateur a un menu texte avec un choix, il s'ouvre et il y a plusieurs éléments prescrits, enfin, je pense que c'est clair)

Comment puis-je l'ajouter dans le menu ?

extern int HIT = 0 ; ne fonctionne pas, cesse de s'afficher, ne laissant aucun paramètre affiché.

Peut-être qu'à travers ENUM , il y a de quoi choisir, ou peut-être autre chose ?

Merci d'avance.

Mettez une chaîne vide "" ou un espace "".

 

Je voulais donc le prescrire d'une manière ou d'une autre pour pouvoir changer les paramètres.

J'ai un article différent pour chaque paire et comment le sélectionner ?

Et sans ce menu n'est pas pertinent, et la capture d'écran n'est qu'un exemple d'un menu similaire.

 
Сергей:

Je voulais donc le prescrire d'une manière ou d'une autre pour pouvoir changer les paramètres.

J'ai un article différent pour chaque paire et comment le sélectionner ?

Et sans ce menu n'est pas pertinent, et la capture d'écran n'est qu'un exemple d'un menu similaire.

Désolé pour l'inattention. L'indicateur comporte une énumération. Et dans le Conseiller Expert, vous devez spécifier le nom de cette énumération comme type de variable dans les paramètres d'entrée.

Bien que, je ne l'ai pas essayé... et peut-être devrons-nous répéter cette énumération dans l'EA, ou simplement définir le type de variable ENUM_BASE_CORNER