Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1089

 

Outra questão é como cortar os zeros extras?

double a = 0.20000;

para obter 0,2
ps o número de dígitos após o ponto decimal será sempre usado de forma diferente
 
Money_Maker:

Outra questão é como cortar os zeros extras?

para que seja 0,2.
ps o número de dígitos após o ponto decimal será sempre usado de forma diferente

Há até 8 dígitos decimais fracionários, corretos conforme sua necessidade.

// Переводит в строку курс
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
[Excluído]  
Money_Maker Obrigado) Pena que você não pode economizar tempo(
O tempo pode ser economizado em um nome de linha horizontal
[Excluído]  
boing9267:    Boa noite, ao executar o roteiro há um erro nos registros: razão uninit 0 ... Você pode me dizer, por favor, o que está errado?

Reformulou assim - tudo vai

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); 
}
[Excluído]  
Vlad143:    Há até 8 dígitos decimais fracionários aqui, corretos como você desejar.
// Переводит в строку курс    Вот так короче!!!  Строк меньше и в каждой строке прозрачнее
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:


Mais curto no código fonte, mais longo na execução. Eu sou a favor da execução rápida. Execute o roteiro de comparação, eu tenho 6 segundos e 11 segundos. Culpe o número para a operação de cordas, é melhor fazer isso uma vez.

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

Reformulou assim - está indo

Como você entende o que está acontecendo? As duas linhas horizontais estão sendo criadas? Não há erros no meu registro, mas as linhas não aparecem após o início do roteiro

É estranho, porém - funcionou e criou linhas no AUDCAD, mas não no AUDCHF e EURUSD...

Acho que entendo... Ela não aparece nos gráficos que já têm linhas horizontais. Se eu os remover e executar o roteiro, aparecerão linhas. Mas por que eles aparecem? Pergunta.

 
LRA:
É proibido recriar uma linha ou mesmo outro objeto com o mesmo nome
Não... Eu desenhei essas linhas à mão, elas não têm nomes.
[Excluído]  

Qualquer objeto tem um nome. Clique com o botão direito do mouse sobre o gráfico --> Lista de objetos


 
LRA:
O tempo pode ser economizado em nome da linha horizontal
Obrigado, mas o nome é ocupado por um comentário , a linha de tendência é mais adequada ambos os preços são ao mesmo tempo a primeira vez é 0 e a segunda é a correta ... esta é provavelmente a mais razoável