Comment apprendre à créer des objets graphiques ? MQL4. - page 2

 
barabashkakvn:
Si vous connaissez l'heure et les dates de vos points, il vous suffit d'appelerbool TrendCreate()

Merci pour le conseil. Il s'est avéré que c'était plus facile que ça.

Je l'ai fait de cette façon :

#property strict
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[41],1.0656,Time[65],1.0494))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return;
     }
   
  }
//+------------------------------------------------------------------+

P.S. Une chose que je n'arrive pas à comprendre, c'est pourquoi les chiffres de l'exemple sont choisis comme ça :

InpDate1=35;        
InpPrice1=60;        
InpDate2=65;        
InpPrice2=40; 

À partir de là, la ligne de tendance se situe quelque part au milieu de la fourchette.

 
Maintenant, le prochain problème à résoudre est de savoir comment continuer la ligne vers la droite et obtenir la valeur de la ligne dans l'EA ?
 
forexman77:

...

A partir de là, la ligne de tendance est placée quelque part au milieu de la fourchette.

Il s'agit donc d'un simple script dont la tâche principale est de démontrer comment créer et travailler avec l'objet OBJ_TREND. Les chiffres ont été repris pour plus de clarté.
 
forexman77:
Maintenant, le prochain problème à résoudre est de savoir comment continuer la ligne vers la droite et obtenir la valeur de la ligne dans l'EA ?

Le code du script a tout ce qu'il faut :

//+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам                     |
//+------------------------------------------------------------------+
bool TrendCreate(const long            chart_ID=0,        // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влево
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
.
.
.
 
barabashkakvn:

Le code du script a tout ce qu'il faut :

1. lorsque le testeur appelle les métiers sont ouverts. Si je fais une optimisation, il y a des zéros partout. Quand je lance un programme d'optimisation, les offres sont là. Que faire ?

Comment faire pour qu'une ligne soit sauvegardée si une transaction a eu lieu (sur chaque transaction), et sinon, elle est supprimée ?

  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
  ObjectDelete(chart_ID,name);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return(0);
     }
    ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
    ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
    ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
    ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

   if (IPMIN!=0){ double uroven= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);}
   
}
Print("uroven=",uroven);
if (Time[0] > b && Close[1] < uroven){Opn_B=true;}
 
Vous devez contrôler vous-même les échanges. Mais pour que chaque transaction ait sa propre ligne, vous devez donner à chaque ligne un nom unique lorsque vous la créez.
 
barabashkakvn:
Vous devez contrôler vous-même les échanges. Mais pour que chaque transaction ait sa propre ligne, vous devez donner à chaque ligne un nom unique lorsque vous la créez.
Comment ? Pouvez-vous donner un exemple ?
 
forexman77:
Comment ? Je peux vous donner un exemple ?
Aidez ceux qui ont des exemples, s'il vous plaît.
 

Objets graphiques pendant les tests

Pendant les tests de visualisation, le conseiller expert interagit avec le graphique réel. En test normal, sans visualisation, le Conseiller Expert fonctionne avec un graphique "virtuel" qui n'est pas rendu ; dans ce cas, certaines subtilités sont possibles. Les objets graphiques ne sont pas pris en charge lorsque le testeur est en mode optimisation.

Deux jours d'étude, et il s'avère qu'il est impossible d'effectuer une optimisation.

Je me demande si je peux créer un indicateur. Pourrai-je obtenir la valeur de la ligne dans mon conseiller expert grâce à lui ?

Qui doit dire quoi ? Peut-être, qui a déjà étudié cette question ?

 
forexman77:

...

Je me demande si je pourrais faire un indicateur ? Est-ce que je pourrai obtenir la valeur de la ligne dans l'EA par ce biais ?

...

Si l'indicateur crée des objets graphiques et obtient ensuite leurs paramètres, non.

Mais il est toujours plus facile de tout résoudre grâce à l'utilisation d'un indicateur. Les calculs sont effectués dans l'indicateur et leurs résultats sont affichés dans les tampons de l'indicateur.

Il existe une autre alternative. Créer des variables globales avec des paramètres de la ligne au lieu des lignes, mais alors la fonction GetValueByShift() ne fonctionnera pas, vous devez écrire son analogue.