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

 
voron_026:

BonjourAleksey Vyazmikin Je me suis récemment mis à la programmation. J'entre lentement dans le vif du sujet.

J'ai essayé de le faire de cette façon :

Le premier rectangle est dessiné, les autres ne le sont pas. J'essaie toujours de trouver comment le faire. Merci pour ces conseils. Qu'entendez-vous par "style atypique" ?


Êtes-vous sûr qu'un seul objet est dessiné et non plusieurs aux mêmes coordonnées ?

Vous avez des constantes de points.

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);

Définissez-les soit dans une fonction, soit directement dans le code lors de la création d'un objet...

A propos de la typicité - votre fonction de calcul est tordue et une telle expression si( !...) peu de débutants l'utilisent selon mes observations.

 

Bonjour !


Pouvez-vous me conseiller ?

Comment calculer la position d'un indicateur (I-1), par rapport à un autre indicateur (I-2) construit sur celui-ci (I-1).


Par exemple :

La position du RSI par rapport à Bollinger.

Je pensais que vous pouviez substituer les données au lieu de calculer les prix.

 RSI = iRSI(Symbol(), TimeFrame, 14, PRICE_CLOSE, 1);
 BB  = iBands(Symbol(), TimeFrame, 34, 1, 0, RSI, MODE_UPPER, 1);
Mais cela me donne une erreur.
 
Ras al Ghul:

Bonjour !


Pouvez-vous me conseiller ?

Comment calculer la position d'un indicateur (I-1), par rapport à un autre indicateur (I-2) construit sur celui-ci (I-1).


Par exemple :

La position du RSI par rapport à Bollinger.

Je pensais qu'il était possible de substituer les données au lieu du prix de calcul.

mais il y a une erreur.

Il n'est même pas clair comment vous avez construit bb sur RSI, c'est-à-dire l'image est claire comment fait...


double  iBands( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          applied_price,    // тип цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );

votre type de prix n'est pas correct - vous devez le faire avec

double  iBandsOnArray( 
   double       array[],          // массив 
   int          total,            // количество элементов 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );
 
Aleksey Vyazmikin:

A propos de la typicité - votre fonction de calcul est tordue et une telle expression if( !...) est utilisée par très peu de débutants selon mes observations.


Je vois ce que vous voulez dire. Je suis peut-être en train de développer mon propre style. J'aime utiliser l'opérateur if( !...) dans ce format. Et j'ai obtenu la fonction de calcul de quelqu'un d'autre, mais j'aime cette logique.

 
Aleksey Vyazmikin:

On ne sait même pas comment vous avez construit le RSI bb, c'est-à-dire que l'image est claire comme de l'eau de roche...


Votre type de prix n'est pas correct - vous devez le faire par l'intermédiaire de la Commission européenne.

Merci pour votre réponse !

Il est devenu clair où mes pensées sont dirigées.


L'image est destinée à l'illustration avec les outils MT4 standard (selon l'indicateur précédent/premier).


Je ne connais les tableaux qu'à partir de Java... Je suis familier avec les tableaux en Java.

Comment le créer et que dois-je y mettre ?

F1 dans MetaEditor et l'Assistant MQLQL ne m'ont pas apporté de clarté...

 
voron_026:

Je comprends votre point de vue. Je suis peut-être en train de développer mon propre style. J'aime utiliser l'opérateur if( !...) dans ce format. J'ai obtenu la fonction de calcul de quelqu'un d'autre, mais j'ai aimé sa logique.


Je peux voir que vous êtes un penseur profond - bonne chance !

 
Ras al Ghul:

Merci pour votre réponse !

Il est devenu clair où diriger mes pensées.


L'image est destinée à l'illustration avec les outils MT4 standard (selon l'indicateur précédent/premier).


Je ne connais les tableaux qu'à partir de Java... Je connais bien les tableaux en Java, mais seulement de façon sommaire.

Comment le créer et que dois-je y mettre ?

F1 dans MetaEditor et MQLQL-learning ne m'ont pas apporté de clarté...


Créez un tableau et, par le biais d'une boucle (par exemple, for), remplissez-le avec la valeur de l'indicateur. Et ensuite utiliser la fonctioniBandsOnArray().

 
Aleksey Vyazmikin:

Créez un tableau et utilisez une boucle (par exemple, for) pour le remplir avec la valeur de l'indicateur. Et ensuite utiliser la fonctioniBandsOnArray().


Soit votre version est très complexe, soit je ne comprends pas la valeur dont vous parlez...


double Array[], BB;  


 Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array[1],0,34,1,0,MODE_UPPER,1);

Ma variante génère une erreur sur le fragment sélectionné :

'Array' - tableau requis.

N'est-ce pas ainsi que l'on obtient une valeur d'indicateur dans un tableau ?


 
Aleksey Vyazmikin:

Êtes-vous sûr qu'un seul objet est dessiné et non plusieurs aux mêmes coordonnées ?



Oui, vous avez raison. Les rectangles sont dessinés sur les mêmes coordonnées. J'ai résolu le problème de la manière suivante :

void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);

      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);
      
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
J'ai ajouté une variableTimeFrame, pour changer rapidement le délai calculé.
 
Ras al Ghul:

Soit votre variante est très compliquée, soit je ne comprends pas la valeur dont vous parlez...


Dans ma variante, la pièce surlignée est assermentée :

'Array' - tableau requis.

N'est-ce pas ainsi que l'on obtient une valeur d'indicateur dans un tableau ?


Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array,0,34,1,0,MODE_UPPER,1);