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

 
konam1:
Bonjour à tous. Suivi des valeurs du parabolique à l'ouverture de chaque bougie horaire.
Lorsque je l'exécute dans l'historique, l'iSAR de la barre zéro coïncide avec le point sur le graphique, sauf lorsque le parabolique change de position de haut en bas et vice versa.
si (newbarall!=(iTime(Symbol(),60,0))
{
newbarall=iTime(Symbol(),60,0) ;
Imprimer (iTime(Symbol(),60,0)) ;
Print ("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits) ;
} ;
D'où les questions suivantes :
Pourquoi la barre parabolique zéro est-elle comptée incorrectement à ces moments précis ?
Et, en fait, comment l'éviter, car lorsque la barre s'ouvre, le point apparaît et est statique sans recalcul pendant la formation de la bougie.
Veuillez m'aider). Merci !

Si vous observez le point parabolique sur la bougie zéro, il n'est pas statique après tout - il change de position, et pas seulement lorsque vous changez de position vers le haut et vers le bas, mais en général - parfois il se déplace légèrement à une position (sans aller vers le haut et vers le bas)

 

Bonjour, pouvez-vous me dire pourquoi les lignes horizontales ne sont pas supprimées ?

   if(SellInvertedHammer == true)
   {
      //if ((Open1 < Close1 && delta_minus < 0) || (Open1 >= Close1 && delta_plus > 0))
      {
         if(!ObjectCreate(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJ_ARROW_DOWN,0,TimeCurrent(),High[1] + 70*Point))
               {
               Print("Не удалось создать метку вниз");
               }
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_COLOR,clrRed);//--- установка цвета
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_WIDTH,1);//--- установка толщины линии
               ObjectSetInteger(ChartID(),"Arrow_Down_InvertedHammer"+IntegerToString(InvertedHammerCandle),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
               InvertedHammerCandle ++;
         Print ("Перевернутый молот");
         Print ("Дельта+ = " + IntegerToString (delta_plus));
         Print ("Дельта- = " + IntegerToString (delta_minus));
         Print ("Объем = " + IntegerToString (volume));
         Print ("Кумулитивная дельта = " + IntegerToString (cum_delta));
         
         if(!ObjectCreate(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),UpLine_InvertedHammer))
         {
         Print("Не удалось создать верхнюю линию");
         }
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrBlueViolet);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         
         if(!ObjectCreate(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJ_HLINE,0,TimeCurrent(),DownLine_InvertedHammer))
         {
         Print("Не удалось создать нижнюю линию");
         }
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_COLOR,clrSlateBlue);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         lineInvertedHammerCandle ++;
                         
      }

   }
   if(ma2 > UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 > UpLine_InvertedHammer && ma1 > DownLine_InvertedHammer)
               {
                  UpLine_InvertedHammer = 0;
                  DownLine_InvertedHammer = 0;
               }
      
   if (ma2 < UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 < UpLine_InvertedHammer && ma1 < DownLine_InvertedHammer)
         {
            
             if(!ObjectCreate(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJ_ARROW_SELL,0,TimeCurrent(),Low[1] + 50*Point))
                {
                Print("Не удалось создать метку вниз");
                }
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_COLOR,clrRed);//--- установка цвета
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_STYLE,STYLE_SOLID);//--- установка стиля линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_WIDTH,1);//--- установка толщины линии
                ObjectSetInteger(ChartID(),"Arrow_Sell_InvertedHammer"+IntegerToString(InvertedHammerCandleSell),OBJPROP_BACK,false);//--- отображение на переднем (false) или заднем (true) плане
                InvertedHammerCandleSell ++;
                Print("Точка входа SELL по разворотной свече 'Перевернутый молот'");
                UpLine_InvertedHammer = 0;
                DownLine_InvertedHammer = 0;
                
                int upline;
                int downline;
                upline = ObjectFind(ChartID(),"UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                downline = ObjectFind(ChartID(),"DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                if(upline > -1 && downline > -1)
                  {
                   ObjectDelete("UpLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   ObjectDelete("DownLine_InvertedHammer"+IntegerToString(lineInvertedHammerCandle));
                   Print("Линии удалены");
                  }
                  Print("Не удалось удалить верхнюю и нижнюю линии");
                
          }

Cela fait partie de l'ensemble du code. Je vais poster le code entier si nécessaire


Merci.

 

- Je veux apprendre à écrire un EA dans MT4 ou MT5, j'ai besoin d'un rédacteur d'EA expérimenté qui peut expliquer toutes les nuances du code dans la pratique et m'aider à écrire le code. Je n'ai pas besoin d'aide pour écrire un EA prêt à l'emploi, j'ai une certaine expérience du trading et des idées pour tout vérifier dans le test et comprendre comment utiliser dans les conditions, j'ai besoin d'apprendre comment écrire différentes conditions.

 
Artyom Trishkin:

Si vous observez le point de la parabole sur la bougie zéro, il n'est finalement pas statique - il change de position, et pas seulement lorsque vous changez de position vers le haut ou vers le bas, mais en général - parfois il se déplace un peu à une position (sans transition vers le haut ou vers le bas).


Néanmoins, l'histoire correspond parfaitement, à l'exception des moments de "transition". Je me contente même d'une erreur de 1 à 2 points, alors qu'à la "transition", elle pourrait être de 20 pips ou plus.

La question est la même, comment l'éviter. Merci

 
konam1:

Néanmoins, l'histoire correspond parfaitement, à l'exception des moments de "transition". Je me contente même d'une erreur de 1 à 2 points, alors qu'à la "transition", elle pourrait être de 20 pips ou plus.

La question est la même, comment l'éviter. Merci.

Qu'est-ce que cette construction de toute façon ?

if(newbarall!=(iTime(Symbol(),60,0)))
  {
   newbarall=iTime(Symbol(),60,0);  
   Print(iTime(Symbol(),60,0));
   Print("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits));
  };

Que donne-t-il?

Pourquoi imprimez-vous l'heure de cette façon ?

Et pourquoi imprimez-vous la valeur de la parabole de cette façon?

 
Artyom Trishkin:

Quel genre de design est-ce, d'ailleurs ?

Quel est l'avantage d'une telle conception?

Pourquoi imprimez-vous l'heure de cette façon ?

Pourquoi imprimer la valeur de la parabole de cette façon?


-Cette construction permet de remplir la condition lorsqu'une nouvelle bougie horaire apparaît : si l'heure de la bougie horaire ne correspond pas à la valeur de la variable newbarall, alors nous écrivons une nouvelle heure dans la variable et remplissons la condition.

L'heure d'ouverture de la bougie d'une heure est imprimée.

- La valeur de la parabole est arrondie à 4 décimales pour être identique à ce qui est indiqué sur le graphique.

 
konam1:

-Ce modèle donne une condition lorsqu'une nouvelle bougie d'une heure apparaît : si l'heure de la bougie d'une heure ne correspond pas à la valeur de la variable newbarall, alors écrivez une nouvelle heure dans la variable et remplissez la condition.

L'heure d'ouverture de la bougie d'une heure est imprimée.

- La valeur parabolique est arrondie à 4 décimales pour être identique à ce qui est indiqué sur le graphique.

1. Non, ce n'est pas le cas

2. Que ce soit comme ça

3. Êtes-vous sûr d'imprimer un nombre réel avec cette fonction ?

4) Pourquoi avez-vous besoin de ; après la parenthèse fermante ?

 
Artyom Trishkin:

1. Non, ce n'est pas le cas

2. Qu'il en soit ainsi

3. Êtes-vous sûr d'imprimer un nombre réel avec cette fonction ?

4) Pourquoi avez-vous besoin de ; après la parenthèse fermante ?


1. néanmoins, l'algorithme ne fonctionne que sur l'ouverture d'une bougie, quelle est l'erreur dans une telle construction ?

3. les chiffres imprimés sont 1.1820, par exemple, donc je suis sûr.

4. une partie du code est donnée.

 
konam1:

1. néanmoins, l'algorithme ne fonctionne que sur l'ouverture d'une bougie, quelle est l'erreur dans une telle conception ?

3. les nombres 1.1820 sont imprimés par exemple, donc bien sûr.

4. une partie du code est donnée.

1. Eh bien, peut-être que je l'ai manqué - il est cinq heures et demie du matin...

3. doubleToString()

4. Mais vous avez une condition et un opérateur composé:

if(condition) { }

Je ne vois pas d'autre façon de l'interpréter. Pourquoi avez-vous besoin de " ;" après l'opérateur ?

 
konam1:
D'où les questions suivantes :
Pourquoi la barre parabolique zéro est-elle comptée incorrectement à ces moments précis ?
Et, en fait, comment l'éviter, car lorsque la barre s'ouvre, le point apparaît et reste statique sans recalcul pendant la formation de la bougie.
Veuillez m'aider). Merci !

L'affirmation "le point apparaît et est statique sans recalcul pendant la formation d'une bougie" n'est pas correcte, si le prix casse le parabolique, le point est redessiné.
Vous devez recalculer le parabolique à chaque tick, car le breakout peut se produire à tout moment, pas seulement à l'ouverture de la barre.