Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 1089

 

Başka bir soru, fazladan sıfırların nasıl kesileceğidir?

 double a = 0.20000 ;

ne olurdu 0.2
ps ondalık noktadan sonraki basamak sayısı her zaman farklı kullanılacaktır
 
Money_Maker :

Başka bir soru, fazladan sıfırların nasıl kesileceğidir?

ne olurdu 0.2
ps ondalık noktadan sonraki basamak sayısı her zaman farklı kullanılacaktır

8 adede kadar ondalık basamak vardır, ihtiyacınıza göre ayarlayın.

 // Переводит в строку курс
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 : teşekkürler) zamandan tasarruf edememeniz çok yazık(
Zaman yatay satır adında saklanabilir
 
boing9267 : İyi akşamlar, komut dosyasını çalıştırırken, günlüklerdeki hata şudur: uninit sebep 0 ... Lütfen bana neyin yanlış olduğunu söyler misiniz?

Bunu böyle değiştirdi - her şey yolunda

 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 adede kadar ondalık ondalık basamak vardır, istediğiniz gibi düzeltin.
 // Переводит в строку курс     Вот так короче!!!  Строк меньше и в каждой строке прозрачнее
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 :


Kaynak kodunda daha kısa, yürütmede daha uzun. Ben tüm yürütme hızı için varım. Karşılaştırma komut dosyasını çalıştırın, 6 saniye 11 saniyem var. Bir sayıyı bir dizgeye dönüştürme işlemi suçlamaktır, bir kez yapmak daha iyidir.

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

Bunu böyle değiştirdi - her şey yolunda

Her şeyin yolunda gittiğini nasıl anlarız? İki yatay çizgi mi oluşturuldu? Şu anda günlükte hiçbir hatam yok, ancak komut dosyasını çalıştırdıktan sonra satırlar görünmüyor

Garip olsa da AUDCAD üzerinde çalıştı, çizgiler oluşturdu ama AUDCHF ve EURUSD üzerinde olmadı...

Sanırım anladım... Halihazırda yatay çizgilerin olduğu grafiklerde görüntülenmiyor. Bunları siler ve komut dosyasını çalıştırırsanız, çizgiler görünür. Ama bu neden oluyor? Soru.

 
LRA :
Aynı ada sahip bir satırı ve hatta başka bir nesneyi yeniden oluşturmak yasaktır
hayır ... bu çizgileri ellerimle uyguladım, isimleri yok
 

Her nesnenin bir adı vardır. Grafiğe sağ tıklayın --> Nesnelerin listesi


 
LRA :
Zaman yatay satır adında saklanabilir
teşekkürler ama isim bir yorumla dolu