Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1089

 

Eine andere Frage ist, wie man überzählige Nullen abschneidet?

double a = 0.20000;

um 0,2 zu erhalten
ps die Anzahl der Nachkommastellen wird immer anders verwendet
 
Money_Maker:

Eine andere Frage ist, wie man überzählige Nullen abschneidet?

auf 0,2 zu erhöhen.
ps die Anzahl der Nachkommastellen wird immer anders verwendet

Es gibt bis zu 8 Nachkommastellen, die Sie nach Bedarf korrigieren können.

// Переводит в строку курс
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 Danke) Schade, dass Sie die Zeit nicht sparen können(
Die Zeit kann in einem horizontalen Zeilennamen gespeichert werden
 
boing9267:    Guten Abend, wenn das Skript ausgeführt wird, gibt es einen Fehler in den Protokollen: uninit Grund 0 ... Können Sie mir bitte sagen, was falsch ist?

So wurde es umgestaltet - alles geht

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:    Hier gibt es bis zu 8 Nachkommastellen, die Sie nach Belieben korrigieren können.
// Переводит в строку курс    Вот так короче!!!  Строк меньше и в каждой строке прозрачнее
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:


Im Quellcode kürzer, in der Ausführung länger. Ich bin für eine schnelle Ausführung. Wenn ich das Vergleichsskript ausführe, erhalte ich 6 Sekunden und 11 Sekunden. Geben Sie die Schuld an der Zahl zu String-Operation, es ist besser, es einmal zu tun.

#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:

Ich habe es so umgearbeitet - es geht

Wie verstehen Sie die Entwicklung? Werden die beiden horizontalen Linien erstellt? In meinem Protokoll gibt es keine Fehler, aber nach dem Start des Skripts erscheinen keine Zeilen

Es ist jedoch seltsam - es funktionierte und erstellte Linien auf AUDCAD, aber nicht auf AUDCHF und EURUSD...

Ich glaube, ich verstehe es... Sie erscheint nicht in Diagrammen, die bereits horizontale Linien haben. Wenn ich sie entferne und das Skript ausführe, werden Zeilen angezeigt. Aber warum erscheinen sie? Frage.

 
LRA:
Es ist verboten, eine Zeile oder sogar ein anderes Objekt mit demselben Namen neu zu erstellen.
Nein... Ich habe diese Zeilen von Hand gezeichnet, sie haben keine Namen.
 

Jedes Objekt hat einen Namen. Rechtsklick auf die Grafik --> Liste der Objekte


 
LRA:
Die Zeit kann im Namen der horizontalen Linie gespeichert werden
Danke, aber der Name ist durch einen Kommentar belegt, die Trendlinie ist besser geeignet, beide Preise sind zur gleichen Zeit das erste Mal ist 0 und das zweite ist das richtige... das ist wahrscheinlich das vernünftigste
Grund der Beschwerde: