Questions des débutants MQL5 MT5 MetaTrader 5 - page 1126

 
ma question est la suivante : si mon EA est sur le graphique des poundbucks et que je veux qu'il voit une ligne horizontale du graphique des eurobucks, cela ne fonctionne pas ?
 
Aleksandr Egorov:
Ma question est la suivante : si mon EA est sur le graphique GBP et que je veux qu'il voit une ligne horizontale du graphique EUR, cela ne fonctionne pas ?

Notez le premier paramètre de la fonction

string  ObjectName( 
   long  chart_id,           // идентификатор графика 
   int   pos,                // номер в списке объектов 
   int   sub_window=-1,      // номер окна 
   int   type=-1             // тип объекта 
   );

Il est présent dans toutes les fonctions de travail avec des objets graphiques.

En utilisant l'identifiant correct, vous pouvez facilement obtenir les propriétés de l'objet à partir de n'importe quel graphique.

Документация по MQL5: Графические объекты / ObjectName
Документация по MQL5: Графические объекты / ObjectName
  • www.mql5.com
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду...
 
Bien long est m5 etc 0 graphique actuel, et String Sumbol comment ?
 
Aleksandr Egorov:
le long est le m5 et tg 0 graphique actuel, mais la chaîne sumbol comment ? j'ai besoin sur la livre de la carte de l'euro peut-être quelque chose que je ne comprends pas

Non, pas de délais - vous avez besoin d'un ID de graphique :ChartID

Une des options : exécuter un script sur le graphique avec la ligne, qui imprimeChartID, puis vous pouvez accéder à la propriété de la ligne depuis un autre graphique. Par exemple, s'il s'agit d'une ligne horizontale, alors parObjectGetDouble

 
Vladimir Karputov:

Non, pas de délais - vous avez besoin d'un ID graphique :ChartID

Une des options : sur le graphique avec la ligne, exécutez le script qui imprimeChartID, puis vous pouvez accéder à la propriété de la ligne depuis un autre graphique. Par exemple, si c'est une ligne horizontale, alors par ObjectGetDoubl merci

merci

 
Aleksandr Egorov:

merci

Il existe une autre option : il suffit de connaître le nom de l'objet graphique et le type (vous avez besoin du nom pour rechercher dans tous les graphiques, et du type pour trouver exactement le bon objet) ...

 
Aleksandr Egorov:

merci

Variante n°2 : définissez le nom, le type d'objet et la fenêtre dans laquelle le rechercher ("0" - dans la fenêtre principale). La recherche est effectuée dans OnInit et si l'objet est trouvé, nous enregistrons l'identifiant du graphique dans la variable m_obj_chart_id.

//+------------------------------------------------------------------+
//|                                    Object from another chart.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input string      InpObjName     = "Object Name";  // Object: Name
input ENUM_OBJECT InpObjType     = OBJ_HLINE;      // Object: Type
input int         InpObjSubWindow= 0;              // Object: Window Index
//---
long     m_obj_chart_id=-1;   // Object ChartID
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

//--- variables for chart ID
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   Print("ChartFirst =",ChartSymbol(prevChart)," ID =",prevChart);
   while(i<limit)// We have certainly not more than 100 open charts
     {
      currChart=ChartNext(prevChart); // Get the new chart ID by using the previous chart ID
      if(currChart<0)
         break;          // Have reached the end of the chart list
      int total=ObjectsTotal(currChart,InpObjSubWindow,InpObjType);
      for(int j=0; j<total; j++)
         if(ObjectName(currChart,j,InpObjSubWindow,InpObjType)==InpObjName)
           {
            m_obj_chart_id=currChart;
            break;
           }
      prevChart=currChart;// let's save the current chart ID for the ChartNext()
      i++;// Do not forget to increase the counter
     }
//---
   if(m_obj_chart_id==-1)
      return(INIT_FAILED);
   else
      Print("Object Name ",InpObjName," found on chart ",m_obj_chart_id);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
Dossiers :
 
Si je place des ordres de marché(TRADE_ACTION_DEAL) avec des niveaux de Stop Loss et de Take Profit spécifiés, mais que le courtier interdit de placer des ordres avec SL ou TP, l'ordre sera-t-il annulé ou placé avec SL et TP nuls ?
 
Vladimir Karputov:

Variante #2 : spécifiez le nom, le type d'objet et dans quelle fenêtre le rechercher ("0" - dans la fenêtre principale). La recherche est effectuée dans OnInit et si l'objet est trouvé, nous enregistrons l'identifiant du graphique dans la variable m_obj_chart_id.

Merci encore plus

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégie

FAQ des débutants MQL5 MT5 MetaTrader 5

Vladimir Karputov, 2019.08.31 08:16


Et votre erreur est dans la formation du prix de départ :

//--- start work
   double start_price_ask=m_symbol.Ask()-ExtUpGap;
   double start_price_bid=m_symbol.Bid()+ExtDownGap;

Je recommande de définir le prix de départ séparément pour les ordres Stop et séparément pour les ordres Limit en attente.

Bonjour Vladimir !

Veuillez m'aider à modifier le prix de départ du script ci-dessous :

//--- start work


   double start_price_ask=0.0;
   double start_price_bid=0.0;
   if(InpPending==stop)
     {
      start_price_ask=m_symbol.Ask()+ExtUpGap;
      start_price_bid=m_symbol.Bid()-ExtDownGap;
     }
   else
      if(InpPending==limit)
        {
         start_price_ask=m_symbol.Ask()-ExtUpGap;
         start_price_bid=m_symbol.Bid()+ExtDownGap;
        }

Le script doit placer des ordres en attente non pas sur la base de l'Ask et du Bid, mais sur la base du haut et du bas de la barre précédente (chandelier).

Sincèrement, Vladimir.