포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1089

 

또 다른 질문은 추가 0을 차단하는 방법입니다.

 double a = 0.20000 ;

무슨 일이 일어날까 0.2
ps 소수점 뒤의 자릿수는 항상 다르게 사용됩니다.
 
Money_Maker :

또 다른 질문은 추가 0을 차단하는 방법입니다.

무슨 일이 일어날까 0.2
ps 소수점 뒤의 자릿수는 항상 다르게 사용됩니다.

최대 8개의 소수 자릿수가 있으므로 필요에 따라 조정하십시오.

 // Переводит в строку курс
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 : 감사합니다) 시간을 절약하지 못해서 안타깝습니다(
수평선 이름에 시간을 저장할 수 있습니다.
 
boing9267 : 좋은 저녁입니다. 스크립트를 실행할 때 로그의 오류는 다음과 같습니다. unitit reason 0 ... 무엇이 잘못되었는지 알려주실 수 있습니까?

이렇게 변경했습니다 - 모든 것이 진행됩니다.

 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 : 최대 8자리 소수 자릿수가 있으며 필요에 따라 수정합니다.
 // Переводит в строку курс     Вот так короче!!!  Строк меньше и в каждой строке прозрачнее
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 :


소스 코드가 짧고 실행 시간이 길어집니다. 나는 실행의 속도를 위해 모두입니다. 비교 스크립트를 실행하면 6초 11초가 나옵니다. 숫자를 문자열로 변환하는 작업은 책임이 있으므로 한 번 수행하는 것이 좋습니다.

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

이렇게 변경했습니다 - 모든 것이 진행됩니다.

모든 것을 이해하는 방법? 두 개의 수평선이 생성됩니까? 지금은 로그에 오류가 없지만 스크립트를 실행한 후 줄이 나타나지 않습니다.

이상하지만 AUDCAD에서 작동하고 라인을 생성했지만 AUDCHF 및 EURUSD에서는 작동하지 않았습니다...

알 것 같아요... 이미 수평선이 있는 차트에는 표시되지 않습니다. 삭제하고 스크립트를 실행하면 줄이 나타납니다. 그러나 왜 이런 일이 발생합니까? 문제.

 
LRA :
라인과 같은 이름의 다른 객체를 다시 만드는 것은 금지됩니다.
아니 ... 손으로 이 선을 적용했는데 이름이 없습니다.
 

모든 객체에는 이름이 있습니다. 차트를 마우스 오른쪽 버튼으로 클릭 --> 개체 목록


 
LRA :
수평선 이름에 시간을 저장할 수 있습니다.
고마워,하지만 이름은 주석으로 채워져 있고 추세선은 두 가격이 더 잘 맞습니다 처음으로 0에서 동일하게 설정하고 두 번째 것이 당신이 필요로하는 것입니다 .. 아마도 이것이 가장 합리적인 것으로 판명되었습니다.