Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1089

 

Une autre question est de savoir comment couper les zéros supplémentaires ?

double a = 0.20000;

pour obtenir 0,2
ps le nombre de chiffres après le point décimal sera toujours utilisé différemment
 
Money_Maker:

Une autre question est de savoir comment couper les zéros supplémentaires ?

pour qu'il soit de 0,2.
ps le nombre de chiffres après le point décimal sera toujours utilisé différemment

Il y a jusqu'à 8 chiffres décimaux fractionnels, à corriger selon vos besoins.

// Переводит в строку курс
string KursS(double Ku) {
int k, i;
string S; // 8 дробных цифр для составного курса открытия позиции в MT5
S=DoubleToString(NormalizeDouble(Ku,8),8); // Уберем концевые нули
i=StringLen(S)-1;
if (StringSubstr(S,i,1)!="0") return(S); // Их нет
for (k=i-1;k>0;k--) if (StringSubstr(S,k,1)!="0") {S=StringSubstr(S,0,k+1); break;}
i=StringLen(S)-1; // Уберем концевую точку
if (StringSubstr(S,i,1)==".") S=StringSubstr(S,0,i);
return (S);
} // KursS
 
Money_Maker Merci) Dommage que vous ne puissiez pas économiser le temps(
Le temps peut être enregistré dans un nom de ligne horizontale
 
boing9267:    Bonsoir, lors de l'exécution du script il y a une erreur dans les logs : uninit reason 0 ... Pouvez-vous me dire ce qui ne va pas ?

Je l'ai retravaillé comme ça - tout va

void OnStart()
{
   ObjectCreate(ChartID(),"HLine",OBJ_HLINE,0,0,iHigh(NULL,PERIOD_W1,0));
   ObjectSetInteger(ChartID(),"HLine",OBJPROP_COLOR, Yellow); // Желтый виднее 
   ObjectSetInteger(ChartID(),"HLine",OBJPROP_STYLE,0);   // стиль отображения
   ObjectSetInteger(ChartID(),"HLine",OBJPROP_WIDTH,1);   // толщина линии 
   ObjectSetInteger(ChartID(),"HLine",OBJPROP_BACK,true); // на передний план 

   ObjectCreate(ChartID(),"LLine",OBJ_HLINE,0,0,iLow(NULL,PERIOD_W1,0));
   ObjectSetInteger(ChartID(),"LLine",OBJPROP_COLOR,Blue); 
   ObjectSetInteger(ChartID(),"LLine",OBJPROP_STYLE,0); 
   ObjectSetInteger(ChartID(),"LLine",OBJPROP_WIDTH,1); 
   ObjectSetInteger(ChartID(),"LLine",OBJPROP_BACK,true); 
}
 
Vlad143:    Il y a jusqu'à 8 chiffres décimaux fractionnels ici, corrigez comme vous le souhaitez.
// Переводит в строку курс    Вот так короче!!!  Строк меньше и в каждой строке прозрачнее
string Kurs(double Ku)
{
  string S="0";   int n=8;     // Количество знаков дробной части
  while(S[StringLen(S)-1]=='0'  && n>=0)
  {
    S=DoubleToString(Ku,n); // n дробных цифр
    n--;
  }
  return (S);
} // Kurs
 
LRA:


Plus court dans le code source, plus long dans l'exécution. Je suis pour une exécution rapide. En exécutant le script de comparaison, j'ai obtenu 6 secondes et 11 secondes. C'est la faute de l'opération nombre à chaîne, il vaut mieux la faire une fois.

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

// Переводит в строку курс
string KursS(double Ku) {
int k, i;
string S; // 8 дробных цифр для составного курса открытия позиции в MT5
S=DoubleToString(NormalizeDouble(Ku,8),8); // Уберем концевые нули
i=StringLen(S)-1;
if (StringSubstr(S,i,1)!="0") return(S); // Их нет
for (k=i-1;k>0;k--) if (StringSubstr(S,k,1)!="0") {S=StringSubstr(S,0,k+1); break;}
i=StringLen(S)-1; // Уберем концевую точку
if (StringSubstr(S,i,1)==".") S=StringSubstr(S,0,i);
return (S);
} // KursS

// Переводит в строку курс    Вот так короче!!!  Строк меньше и в каждой строке прозрачнее
string Kurs(double Ku)
{
  string S="0";   int n=8;     // Количество знаков дробной части
  while(S[StringLen(S)-1]=='0'  && n>=0)
  {
    S=DoubleToString(Ku,n); // n дробных цифр
    n--;
  }
  return (S);
} // Kurs   

void OnStart() {
  string S;
  datetime TBeg,T1, T2;
  double x;
  int N,i;
  N=10000000; x=0.2;
  TBeg=TimeLocal();
  for (i=0;i<N;i++) S=KursS(x);
  T1=TimeLocal()-TBeg;
  TBeg=TimeLocal();
  for (i=0;i<N;i++) S=Kurs(x);
  T2=TimeLocal()-TBeg;
  Alert ("KursS -",(long)(T1),"сек   Kurs - ",(long)(T2),"сек");
  }
 
LRA:

Je l'ai retravaillé comme ça - ça va...

Comment comprenez-vous que ça se passe ? Les deux lignes horizontales sont-elles créées ? Il n'y a pas d'erreurs dans mon journal, mais les lignes n'apparaissent pas après le début du script.

C`est étrange, cependant - cela a fonctionné et a créé des lignes sur AUDCAD, mais cela n`a pas fonctionné sur AUDCHF et EURUSD....

Je crois que je comprends... Il n'apparaît pas sur les graphiques qui ont déjà des lignes horizontales. Si je les supprime et que j'exécute le script, des lignes apparaissent. Mais pourquoi apparaissent-ils ? Question.

 
LRA:
Il est interdit de recréer une ligne ou même un autre objet portant le même nom.
Non... J'ai dessiné ces lignes à la main, elles n'ont pas de nom.
 

Tout objet a un nom. Clic droit sur le graphique --> Liste d'objets


 
LRA:
Le temps peut être enregistré dans le nom de la ligne horizontale
Merci, mais le nom est occupé par un commentaire, la ligne de tendance est mieux adaptée les deux prix sont le même temps le premier temps est 0 et le second est le bon ... c'est sans doute le plus raisonnable.
Raison: