Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1089

 

Un'altra domanda è come tagliare gli zeri extra?

double a = 0.20000;

per ottenere 0,2
ps il numero di cifre dopo il punto decimale sarà sempre usato in modo diverso
 
Money_Maker:

Un'altra domanda è come tagliare gli zeri extra?

per renderlo 0,2.
ps il numero di cifre dopo il punto decimale sarà sempre usato in modo diverso

Ci sono fino a 8 cifre decimali frazionarie, da correggere come necessario.

// Переводит в строку курс
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 Grazie) Peccato che non si possa risparmiare il tempo(
Il tempo può essere salvato in un nome di linea orizzontale
 
boing9267:    Buona sera, quando si esegue lo script c'è un errore nei log: uninit reason 0 ... Potete dirmi cosa c'è che non va?

Rielaborato in questo modo - tutto 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:    Qui ci sono fino a 8 cifre decimali frazionarie, correggete come volete.
// Переводит в строку курс    Вот так короче!!!  Строк меньше и в каждой строке прозрачнее
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:


Più breve nel codice sorgente, più lungo nell'esecuzione. Sono a favore di un'esecuzione rapida. Eseguendo lo script di confronto, ho ottenuto 6 secondi e 11 secondi. Colpa dell'operazione da numero a stringa, è meglio farlo una volta sola.

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

Rielaborato in questo modo - sta andando

Come si capisce che sta andando? Si stanno creando le due linee orizzontali? Non ci sono errori nel mio log ma le linee non appaiono dopo l'inizio dello script

È strano, però - ha funzionato e creato linee su AUDCAD, ma non ha funzionato su AUDCHF e EURUSD...

Credo di aver capito... Non appare sui grafici che hanno già linee orizzontali. Se li rimuovo ed eseguo lo script, le linee appaiono. Ma perché appaiono? Domanda.

 
LRA:
È vietato ricreare una linea o anche un altro oggetto con lo stesso nome
No... Ho disegnato a mano queste linee, non hanno nomi.
 

Qualsiasi oggetto ha un nome. Cliccate con il tasto destro del mouse sul grafico --> Elenco degli oggetti


 
LRA:
Il tempo può essere salvato nel nome della linea orizzontale
Grazie, ma il nome è occupato da un commento, la linea di tendenza è più adatta entrambi i prezzi sono lo stesso tempo il primo tempo è 0 e il secondo è quello giusto ... questo è probabilmente il più ragionevole