Questions des débutants MQL4 MT4 MetaTrader 4 - page 36

 

Bonjour !

Aidez-moi à corriger le code pour que les légendes des barres soient au centre de la barre, au-dessus de la barre haute, et non sur le côté.

#propriété stricte
#property indicator_chart_window

input int TextSize = 8 ; //taille de la police de caractères
couleur d'entrée TextColor = clrYellow ; //couleur du texte
input int TextAngle = 90 ; //angle de rotation du texte
input int MaxBar = 100 ; //nombre de barres à partir de 0 pour lesquelles la taille du chandelier est calculée

int OnInit()
{
return(INIT_SUCCEED) ;
}

int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int i ;
for ( i = 0 ; i < MaxBar ; i++ ) {
si ( ObjectFind ("candlesize "+ IntegerToString(i)) >=0 ) {
ObjectDelete("candlesize "+ IntegerToString(i))
}
ObjectCreate ("candlesize "+ IntegerToString(i),
OBJ_TEXT,
0,
temps[i],
high[i]+StepPer()*Point) ;
ObjectSet ("candlesize "+IntegerToString(i),
OBJPROP_ANGLE,
Angle du texte
) ;
ObjectSetText ("candlesize "+IntegerToString(i),
DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),
TextSize,
NUL,
TextColor
) ;
}
retour(taux_total) ;
}

int StepPer ()
{
int i = 0 ;
switch (Period())
{
cas PERIOD_M1 :
i = 5 ;
pause ;
cas PERIOD_M5 :
i = 15 ;
pause ;
cas PERIOD_M15 :
i = 25 ;
pause ;
i = 40 ;
pause ;
cas PERIOD_H1 :
i = 60 ;
pause ;
cas PERIOD_H4 :
i = 90 ;
pause ;
cas PERIOD_D1 :
i = 220 ;
pause ;
cas PERIOD_W1 :
i = 500 ;
pause ;
cas PERIOD_MN1 :
i = 2000 ;
pause ;
par défaut :
pause ;
}
retour (i) ;
}

 
ed3sss:

Preuve : Print("Travail précédent PrixAsk-",PrixAsk) ; le journal est vide.

Sans détails, ce n'est pas une preuve )))) Montrez-moi le texte complet de l'init et la déclaration des variables.

En outre, pourquoi vérifier TOUTES les commandes, depuis le tout début de la vie du compte, si vous avez besoin de la plus récente ? - Comment faire autrement, s'il y a 10 paires de devises ouvertes ?

Vous devez les parcourir depuis la fin et sortir du cycle à temps. Qu'est-ce que 10 paires ont à voir avec ça ? Même une centaine, vous avez le choix des symboles.

 
Игорь:

Bonjour !

Aidez-moi à corriger le code pour que les inscriptions au-dessus des barres soient au centre de la barre au-dessus de la barre haute et non sur le côté.

Apprenez à utiliser le bouton SRC pour insérer du code.

Et lisez sur OBJPROP_ANCHOR.

 
Vitalie Postolache:

Apprenez à utiliser le bouton SRC pour insérer du code.

Et lisez sur OBJPROP_ANCHOR.

Je l'ai eu !

Désolé pour la brusquerie !

 
Игорь:

Je l'ai eu, merci !

Désolé pour la sévérité !

#property strict
#property indicator_chart_window

input int      TextSize = 8; //размер шрифта
input color    TextColor = clrYellow; //цвет текста
input int      TextAngle = 90; //угол поворота текста
input int      MaxBar = 100;  //количество баров, начиная с 0, для которых вычисляется размер свечей

int OnInit()
{
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int i;
   for ( i = 0; i < MaxBar; i++ )   {
      if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 )   {
             ObjectDelete("candlesize"+ IntegerToString(i));
      }
      ObjectCreate ("candlesize"+ IntegerToString(i),  
                    OBJ_TEXT,  
                    0,  
                    time[i],  
                    high[i]+StepPer()*Point);
       //--- установим привязку к правому верхнему углу
      ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_UPPER);
     ObjectSet (  "candlesize"+IntegerToString(i),  
                    OBJPROP_ANGLE,  
                    TextAngle
                 );
      ObjectSetText ( "candlesize"+IntegerToString(i),  
                      DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),  
                      TextSize,  
                      NULL,  
                      TextColor
                     );
   }
   return(rates_total);
}

int StepPer ()
{
     int i = 0;
     switch (Period())
     {
          case PERIOD_M1:
          i = 5;
          break;
          case PERIOD_M5:
          i = 15;
          break;
          case PERIOD_M15:
          i = 25;
          break;
          case PERIOD_M30:
          i = 40;
          break;
          case PERIOD_H1:
          i = 60;
          break;
          case PERIOD_H4:
          i = 90;
          break;
          case PERIOD_D1:
          i = 220;
          break;
          case PERIOD_W1:
          i = 500;
          break;
          case PERIOD_MN1:
          i = 2000;
          break;
          default:  
          break;
     }
     return (i);
}  
Je l'ai mis en place et il est toujours décentré et sur la mauvaise barre ! ?
 
#property strict
#property indicator_chart_window

input int      TextSize = 8; //размер шрифта
input color    TextColor = clrYellow; //цвет текста
input int      TextAngle = 90; //угол поворота текста
input int      MaxBar = 100;  //количество баров, начиная с 0, для которых вычисляется размер свечей

int OnInit()
{
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int i;
   for ( i = 0; i < MaxBar; i++ )   {
      if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 )   {
             ObjectDelete("candlesize"+ IntegerToString(i));
      }
      ObjectCreate ("candlesize"+ IntegerToString(i),  
                    OBJ_TEXT,  
                    0,  
                    time[i],  
                    high[i]+StepPer()*Point);
       //--- установим привязку к правому верхнему углу
      ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_UPPER);
     ObjectSet (  "candlesize"+IntegerToString(i),  
                    OBJPROP_ANGLE,  
                    TextAngle
                 );
      ObjectSetText ( "candlesize"+IntegerToString(i),  
                      DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),  
                      TextSize,  
                      NULL,  
                      TextColor
                     );
   }
   return(rates_total);
}

int StepPer ()
{
     int i = 0;
     switch (Period())
     {
          case PERIOD_M1:
          i = 5;
          break;
          case PERIOD_M5:
          i = 15;
          break;
          case PERIOD_M15:
          i = 25;
          break;
          case PERIOD_M30:
          i = 40;
          break;
          case PERIOD_H1:
          i = 60;
          break;
          case PERIOD_H4:
          i = 90;
          break;
          case PERIOD_D1:
          i = 220;
          break;
          case PERIOD_W1:
          i = 500;
          break;
          case PERIOD_MN1:
          i = 2000;
          break;
          default:  
          break;
     }
     return (i);
}  
Les gars, vous pouvez aider un clochard au milieu, là où se trouve le joint ?
 
Игорь:
#property strict
#property indicator_chart_window

input int      TextSize = 8; //размер шрифта
input color    TextColor = clrYellow; //цвет текста
input int      TextAngle = 90; //угол поворота текста
input int      MaxBar = 100;  //количество баров, начиная с 0, для которых вычисляется размер свечей

int OnInit()
{
   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   int i;
   for ( i = 0; i < MaxBar; i++ )   {
      if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 )   {
             ObjectDelete("candlesize"+ IntegerToString(i));
      }
      ObjectCreate ("candlesize"+ IntegerToString(i),  
                    OBJ_TEXT,  
                    0,  
                    time[i],  
                    high[i]+StepPer()*Point);
       //--- установим привязку к правому верхнему углу
      ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_UPPER);
     ObjectSet (  "candlesize"+IntegerToString(i),  
                    OBJPROP_ANGLE,  
                    TextAngle
                 );
      ObjectSetText ( "candlesize"+IntegerToString(i),  
                      DoubleToStr(NormalizeDouble((high[i]-low[i]+Point)/Point, 0), 0),  
                      TextSize,  
                      NULL,  
                      TextColor
                     );
   }
   return(rates_total);
}

int StepPer ()
{
     int i = 0;
     switch (Period())
     {
          case PERIOD_M1:
          i = 5;
          break;
          case PERIOD_M5:
          i = 15;
          break;
          case PERIOD_M15:
          i = 25;
          break;
          case PERIOD_M30:
          i = 40;
          break;
          case PERIOD_H1:
          i = 60;
          break;
          case PERIOD_H4:
          i = 90;
          break;
          case PERIOD_D1:
          i = 220;
          break;
          case PERIOD_W1:
          i = 500;
          break;
          case PERIOD_MN1:
          i = 2000;
          break;
          default:  
          break;
     }
     return (i);
}  
Aidez un vagabond, où est le joint au milieu ?
Je ne sais pas si c'est au-dessus de la barre ou sur le côté même si j'ai dit au centre !
 
Игорь:

Je l'ai inséré et il est toujours décentré et sur la mauvaise barre !

Eh bien, après avoir tourné, le point n'est plus en haut au centre, mais au centre gauche, et le texte est donc décalé vers la droite.

ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_LEFT);
Le point d'ancrage est défini à 0 degré de rotation, vous devez prendre en compte l'angle de rotation et définir le point d'ancrage pour qu'il soit en bas si l'objet est surélevé, dans votre cas ce serait le point central gauche.
 
Vitalie Postolache:

Eh bien, après avoir tourné, le point n'est plus en haut au centre, mais au centre gauche, et le texte est donc décalé vers la droite.

ObjectSetInteger(ChartID(),"candlesize"+IntegerToString(i),OBJPROP_ANCHOR,ANCHOR_LEFT);
Le point d'ancrage est défini lorsque vous effectuez une rotation de 0 degré, vous devez prendre en compte l'angle de rotation et définir le point d'ancrage, qui sera en bas si l'objet est surélevé, dans votre cas ce sera un point à gauche au centre.

Merci beaucoup ! !!!!

Tout s'est passé comme je le voulais !

Encore une fois, je m'excuse pour mon incompréhension et ma sévérité !

 
Vitalie Postolache:

Sans détails, ce n'est pas une preuve )))) Montrez le texte complet de l'init et la déclaration des variables.

De la fin pour passer et sortir de la boucle à temps. Qu'est-ce que 10 paires ont à voir avec ça ? Même une centaine, vous avez une sélection caractère par caractère.

bool s=false ;
double b=AccountBalance() ;
i=0 ;
for(;i<OrdersTotal();i++)
{//+----------------------------------------------------------------------------------------+for
ViborOrdera=OrderSelect(i,SELECT_BY_POS) ;
si(OrderSymbol()!=Symbol())continuer ;
si(OrderType()>1)continuer ;
s=true ;
int Ticket=OrderTicket() ;
double Lots=OrderLots() ;
double prix ;
if(OrderType()==1)Price=NormalizeDouble(Ask,Digits);else Price=NormalizeDouble(Bid,Digits) ;
//+-----------------------------------------------------------------------------------------+
ViborOrdera=OrderClose(Ticket,Lots,Price,3) ;
if(GetLastError()==6){Alert("No connection");return(0);}
if(GetLastError()==132){Alert("Market is closed");return(0);}
RefreshRates() ;
i-- ;

}//+---------------------------------------------------------------------------------------+for

Ok, même boucle ici, pourquoi ferme-t-il les ordres ?)

Raison: