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

 
Kira27:

J'ai essayé tout ce que vous avez suggéré, j'ai tourné et retourné, mais il peint toujours les lignes en une seule couleur dans MT5. Et dans MT4 il peint les lignes normalement, et sans aucun retard.

Je suppose que je n'ai pas tout essayé.

Alexey Viktorov :

Il est très probable qu'après avoir renommé un objet, il ne soit toujours pas disponible pour y faire référence. Vous pouvez essayer de mettre ChartRedraw après le renommage. Si cela n'aide pas, nous devrons construire la séquence d'une autre manière.

ps ; Une autre option : d'abord repeindre avec le nom sparam et ensuite le renommer.

Pour une raison quelconque, l'événement CHARTEVENT_OBJECT_CREATE est compté immédiatement après que le rat a touché la carte, et non après la fin de la création de l'objet. Et les prix des différentes extrémités de la mèche s'avèrent être les mêmes. Vous devez donc repeindre après la création de l'objet.

Et une dernière remarque : peignez-vous des niveaux ou la ligne principale de la mèche ?

Voici trois variantes :

Un.

bool endCreate;
string newName;
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  if(endCreate)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
    endCreate = false;
   }
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    endCreate = true;
   }
 }/******************************************************************/

Deuxièmement.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {

 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  string newName;  
  if(id == CHARTEVENT_OBJECT_CREATE)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
   }
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   }
 }/******************************************************************/

Trois.

/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/***********************OnChartEvent function************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    ulong timeCreate = ObjectGetInteger(0, sparam, OBJPROP_CREATETIME); //  получим время создания объекта
    string newName = "Fibo "+string(timeCreate); //  сформируем новое имя объекта
    ObjectSetString(0, sparam, OBJPROP_NAME, newName);  //  переименуем объект
    double   Level_0= ObjectGetDouble(0, newName, OBJPROP_PRICE, 0);
    double   Level_1= ObjectGetDouble(0, newName, OBJPROP_PRICE, 1);
    if(Level_0 > Level_1)
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrDeepSkyBlue);
    else
      ObjectSetInteger(0, newName, OBJPROP_LEVELCOLOR, 1, clrYellow);
   ChartRedraw(); 
  }
 }/******************************************************************/


 
SanAlex:

comment organiser un algorithme dans un indicateur pour prendre des points et les transférer dans un autre tampon.

- Pour dessiner les lignes de tendance. (comme sur la photo)

-----------------------------------------

J'ai tout essayé avec mon intuition, ils sont dessinés mais dans des endroits étranges.

-----------------------------------------------------------------------------------------------------

J'ai joint l'indicateur, il fonctionne, mais je ne peux pas ajuster ces lignes.

Je ne peux pas le faire. Peut-être que quelqu'un peut me diriger vers les articles sur les points de liaison de la ligne de tendance.

-- Je ne peux pas les dessiner, on ne sait pas à quels endroits.

EURUSDH4

---------------------------------------------------------

quelque chose comme ça, peut-être ?

//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
//--- количество видимых баров в окне графика
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- размер массива price
   int accuracy=1000;
//--- массивы для хранения значений дат и цен, которые будут использованы
//--- для установки и изменения координат точек привязки линии
   datetime date[];
   double   price[];
//--- выделение памяти
   ArrayResize(date,bars);
   ArrayResize(price,accuracy);
//--- заполним массив дат
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("Не удалось скопировать значения времени! Код ошибки = ",GetLastError());
      return;
     }
//--- заполним массив цен
//--- найдем максимальное и минимальное значение графика
   double max_price=ChartGetDouble(0,CHART_PRICE_MAX);
   double min_price=ChartGetDouble(0,CHART_PRICE_MIN);
//--- определим шаг изменения цены и заполним массив
   double step=(max_price-min_price)/accuracy;
   for(int i=0;i<accuracy;i++)
      price[i]=min_price+i*step;
//--- определим точки для рисования линии
   int d1=InpDate1*(bars-1)/100;
   int d2=InpDate2*(bars-1)/100;
   int p1=InpPrice1*(accuracy-1)/100;
   int p2=InpPrice2*(accuracy-1)/100;
//--- создадим линию тренда
   if(!TrendCreate(0,InpName,0,date[d1],price[p1],date[d2],price[p2],InpColor,InpStyle,
      InpWidth,InpBack,InpSelection,InpRayLeft,InpRayRight,InpHidden,InpZOrder))
     {
      return;
     }



-------------------

Suis-je sur la bonne voie ?

Dossiers :
2.mq5  82 kb
 
SanAlex:

Peut-être que quelqu'un peut me diriger vers des articles sur les points de tendance.

-- Tout ce que je peux faire maintenant, c'est les dessiner, mais je ne sais pas exactement à quels endroits.

---------------------------------------------------------

quelque chose comme ça, peut-être ?

-------------------

Suis-je sur la bonne voie ?

Les lignes de tendance sont tracées en 2 points, ce sont soit les données de prix, soit les données d'un autre indicateur, l'exemple du dessin par les fractales, que vous connaissez d'ailleurs déjà).

https://www.mql5.com/ru/code/29210

Line through two fractals
Line through two fractals
  • www.mql5.com
cm BASKET Советник управляющий счетом. Показывает какие пары инструментов сейчас торгуются на данном счете. Показывает прибыль полученную по каждой паре за определенное время. Помогает переключаться между множества открытых окон... Virtual Trailing Stop 2
 
VVT:

Leslignes de tendance sont tracées à 2 points, il s'agit soit de données de prix, soit de données provenant d'un autre indicateur, un exemple de dessin par fractales, qui vous est d'ailleurs familier).

https://www.mql5.com/ru/code/29210

Je voulais le faire avec un seul indicateur, mais ça n'a pas marché.

- J'ai dû le faire avec deux indicateurs.

C'est ce que j'ai fait.

GBPUSDM30 GOTOV

---------------------------

J'ai oublié de dire merci ! - Merci ! !!

 
SanAlex:

Je voulais le faire dans un Indicateur, mais ça n'a pas marché, mais je l'ai fait dans celui-ci, que vous avez suggéré.

- donc j'ai dû le faire avec deux indicateurs.

C'est comme ça que ça marche.

---------------------------

J'ai oublié de dire merci ! - Merci ! !!

En les combinant, vous pouvez créer de nombreux objets différents dans un seul indicateur.)

 
Alexey Viktorov:

Apparemment, je n'ai pas tout essayé.

Pour une raison quelconque, l'événement CHARTEVENT_OBJECT_CREATE compte immédiatement après que le rat a touché le graphique, et non après la fin de la création de l'objet. Et les prix des différentes extrémités de la mèche s'avèrent être les mêmes. Nous devons donc repeindre après la création de l'objet.


Comment l'avez-vous déterminé ? Logiquement ?

Et une autre remarque : peignez-vous les niveaux ou la ligne principale de la fibre ?


J'ai essayé de repeindre les lignes de tendance dans différentes variantes)))).

Voici trois variantes :

Un.

Deuxièmement.

Le troisième.


Merci beaucoup pour ces exemples !!! Je vais peut-être apprendre à penser logiquement, en me basant sur vos exemples)))).

Depuis combien de temps êtes-vous dans le commerce ? Je le fais depuis 12 ans maintenant ;)))

 
Kira27:

Merci beaucoup pour les options ! !! Je vais utiliser vos exemples et apprendre à penser logiquement)))).

Je veux dire, depuis combien de temps faites-vous du commerce ? Je le fais depuis 12 ans maintenant).

Je ne suis pas toujours aussi "gentil". Je ne suis pas toujours aussi "gentil", seulement pendant les attaques... Il n'y a donc pas grand-chose à apprendre de mes exemples. Je suis dans le commerce depuis presque aussi longtemps.

 
Alexey Viktorov:

Je ne suis pas toujours aussi "gentil". Seulement pendant les attaques... Donc il n'y a pas grand chose à apprendre de mes exemples. Je suis à peu près le même dans le commerce.

Je ne sais pas, j'apprends mieux les méthodes et techniques de programmation par des exemples. J'aimerais que MQL5 ait un tel tutoriel comme MQL4 où le robot est expliqué étape par étape en utilisant les fichiers inclus.

 
Alexey Viktorov:

Je suis dans le commerce depuis presque aussi longtemps.

Donc vous connaissez déjà l'essence des fluctuations du marché ? Il me semble que j'ai déjà appris)))) j'ai juste besoin de le demander, parce que je peux travailler avec pendant un certain temps, et ensuite je craque et crée un désordre)))))) Mais maintenant je comprends n'importe quel actif)))) j'aime particulièrement le S&P, il est technique et dynamique))

 
VVT:

Eh bien, en les combinant, vous pouvez créer de nombreux objets différents dans un seul indicateur).

Je voulais le faire de cette façon. J'ai essayé de le faire pendant une semaine, mais ça ne marchait pas.

- Cela semble être mieux dans le second indicateur - vous ne pouvez pas voir au-delà des points et des lignes eux-mêmes, il n'y a que les points et les niveaux qui sont utilisés pour déterminer les entrées sur le marché.

----------------

ces deux indicateurs ne font qu'un (c'est mon brouillon - je n'ai pas changé les noms des 4 indicateurs dans celui-ci)