ENUM_TRADE_RETURN_CODES Kod Tanımlayıcı Açıklama 10004 TRADE_RETCODE_REQUOTE Yeniden Fiyatlandırma 10006 TRADE_RETCODE_REJECT İstek reddedildi ... 10005 kodu yok . Bu bir hata değil mi? Samimi olarak...
Soru. Böyle bir GetTickCount () işlevi vardır -sistemin başlatılmasından bu yana geçen milisaniye sayısını döndürür . Notta "sayaç, sistem zamanlayıcısının çözünürlüğü ile sınırlıdır. Zaman işaretsiz bir tamsayı olarak depolandığından, bilgisayar sürekli çalışırken her 49,7 günde bir taşar " diyor.
Ve sayaç taştıktan sonra ne olur? Sıfırlanıp yeni bir geri sayıma mı başlıyor yoksa sistem duruyor mu?
Soru. switch(expression){...} ifadesinin açıklaması, " switch ifadesinin ifadesinintamsayı türünde olması gerektiğini" söylüyor. İnternette bu operatörün tanımını başka tür ifadelerle tanıştım. Switch ifadesinin kullanımı, dize türü ifadeleri içerecek şekilde genişletilecek mi?
Soru. switch(expression){...} ifadesinin açıklaması, " switch ifadesinin ifadesinintamsayı türünde olması gerektiğini" söylüyor. İnternette bu operatörün tanımını başka tür ifadelerle tanıştım. Switch ifadesinin kullanımı, dize türü ifadeleri içerecek şekilde genişletilecek mi?
Hayır, ne yazık ki olmayacak. Yalnızca dize türleri için eğer ... else if ... else
Anahtarda tamsayı türlerinin kullanılması nedeniyle, if ile karşılaştırıldığında birkaç kat hızlanma elde edilir.
Soru. StringConcatenate() işlevinin açıklaması, " StringConcatenate() işlevi, geçici dize değişkenlerinin kullanılmaması nedeniyle, ekleme işlemlerini kullanarak dizeleri birleştirmekten daha hızlı ve bellek açısından daha verimlidir" diyor. El Kitabındaki örnekleri biraz değiştirerek kullandım:
string a= "a" ,b= "b" ,c;
uint start,stop;
long i,length= 10000000 ;
//--- первый способ
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
c=a+b;
}
stop= GetTickCount ();
Print ( "time for 'c = a + b' = " ,(stop-start), " milliseconds, i = " ,i);
//--- второй способ
a= "a" ; // заново инициализируем переменную a
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
StringAdd (a,b);
}
stop= GetTickCount ();
Print ( "time for 'StringAdd(a,b)' = " ,(stop-start), " milliseconds, i = " ,i);
//--- третий способ
a= "a" ;c= "" ;
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
int k= StringConcatenate (c,a,b);
//c=""; //с такой строчкой работает ещё дольше.
}
stop= GetTickCount ();
Print ( "time for 'StringConcatenate(c,a,b)' = " ,(stop-start), " milliseconds, i = " ,i);
Çıktıda aldım:
DR 0 DoubleToString (EURGBP,M1) 22 : 15 : 55 time for'c = a + b' = 2359 milliseconds, i = 10000000
QE 0 DoubleToString (EURGBP,M1) 22 : 15 : 56 time for'StringAdd(a,b)' = 1031 milliseconds, i = 10000000
FE 0 DoubleToString (EURGBP,M1) 22 : 16 : 00 time for'StringConcatenate(c,a,b)' = 3891 milliseconds, i = 10000000
StringConcatenate'in , toplama işlemlerini kullanarak dizeleri birleştirmekten daha yavaş olduğu ortaya çıktı. Amaç ne?
Soru. StringConcatenate() işlevinin açıklaması, " StringConcatenate() işlevi, geçici dize değişkenlerinin kullanılmaması nedeniyle, ekleme işlemlerini kullanarak dizeleri birleştirmekten daha hızlı ve bellek açısından daha verimlidir" diyor. El Kitabındaki örnekleri biraz değiştirerek kullandım:
Çıktıda aldım:
StringConcatenate'in , toplama işlemlerini kullanarak dizeleri birleştirmekten daha yavaş olduğu ortaya çıktı. Amaç ne?
Kontrol etmek biraz farklı (her şeyi doğru anladıysam). Fonksiyonun özelliği başka bir ...
Bu kod gibi bir şey
////////////////////////////////////////////////////////////////////////////////// Global variables, used in working the trade system //////////////////////////////////////////////////////////////////////////////////string a= "Пример" ;
double b= 1.26 ,c = 1.27 ;
string d;
uint start,stop;
long i,length= 10000000 ;
////////////////////////////////////////////////////////////////////////////////voidOnStart ()
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------//
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
d=a+( string )b+( string )c;
}
stop= GetTickCount ();
Print ( "time for 'd = a + b + c' = " ,(stop-start), " milliseconds, i = " ,i);
//Второй способ
d= "" ;
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
StringAdd (d,a);
StringAdd (d,( string )b);
StringAdd (d,( string )c);
}
stop= GetTickCount ();
Print ( "time for 'StringAdd()' = " ,(stop-start), " milliseconds, i = " ,i);
//Третий способ
d= "" ;
start= GetTickCount ();
for (i= 0 ;i<length;i++)
{
int k= StringConcatenate (d,a,b,c);
}
stop= GetTickCount ();
Print ( "time for 'StringConcatenate(d,a,b,c)' = " ,(stop-start), " milliseconds, i = " ,i);
//----------------------------------------------------------------------------//
}
////////////////////////////////////////////////////////////////////////////////
Ve böyle bir sonuç
2011.04 . 1515 : 28 : 58123 (EURUSD,D1) time for'd = a + b + c' = 81094 milliseconds, i = 100000002011.04 . 1515 : 30 : 24123 (EURUSD,D1) time for'StringAdd()' = 85828 milliseconds, i = 100000002011.04 . 1515 : 31 : 46123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 81812 milliseconds, i = 100000002011.04 . 1515 : 33 : 36123 (EURUSD,D1) time for'd = a + b + c' = 82938 milliseconds, i = 100000002011.04 . 1515 : 35 : 00123 (EURUSD,D1) time for'StringAdd()' = 83859 milliseconds, i = 100000002011.04 . 1515 : 36 : 21123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 80719 milliseconds, i = 10000000
not
Büyük olasılıkla, d= "" satırı for döngüsüne yerleştirilmiş olmalıydı, ancak bunun sonucu gerçekten etkilemediğini düşünüyorum.
Garip. MQL5'te zaten sitede olması gereken bir koda ihtiyacınız var. Sadece bakmaya değer. İşte bundan bahsediyoruz.
Ancak, size kalmış.
arama çok sıkıcı, sadece birileri hemen söyleyebilir.
Bu arada, bu kodu mql5 olarak değiştirdim. Belki birilerinin işine yarar
lütfen yorum yap:
ENUM_TRADE_RETURN_CODES
Kod Tanımlayıcı Açıklama
10004 TRADE_RETCODE_REQUOTE Yeniden Fiyatlandırma
10006 TRADE_RETCODE_REJECT İstek reddedildi
...
10005 kodu yok . Bu bir hata değil mi?
Samimi olarak...
Soru. Böyle bir GetTickCount () işlevi vardır - sistemin başlatılmasından bu yana geçen milisaniye sayısını döndürür . Notta " sayaç, sistem zamanlayıcısının çözünürlüğü ile sınırlıdır. Zaman işaretsiz bir tamsayı olarak depolandığından, bilgisayar sürekli çalışırken her 49,7 günde bir taşar " diyor.
Ve sayaç taştıktan sonra ne olur? Sıfırlanıp yeni bir geri sayıma mı başlıyor yoksa sistem duruyor mu?
Yedelkin :
Ve sayaç taştıktan sonra ne olur? Sıfırlanıp yeni bir geri sayıma mı başlıyor yoksa sistem duruyor mu?
Taşar ve sıfırdan başlar.
Soru. switch(expression){...} ifadesinin açıklaması, " switch ifadesinin ifadesinin tamsayı türünde olması gerektiğini" söylüyor. İnternette bu operatörün tanımını başka tür ifadelerle tanıştım. Switch ifadesinin kullanımı, dize türü ifadeleri içerecek şekilde genişletilecek mi?
Soru. switch(expression){...} ifadesinin açıklaması, " switch ifadesinin ifadesinin tamsayı türünde olması gerektiğini" söylüyor. İnternette bu operatörün tanımını başka tür ifadelerle tanıştım. Switch ifadesinin kullanımı, dize türü ifadeleri içerecek şekilde genişletilecek mi?
Hayır, ne yazık ki olmayacak. Yalnızca dize türleri için eğer ... else if ... else
Anahtarda tamsayı türlerinin kullanılması nedeniyle, if ile karşılaştırıldığında birkaç kat hızlanma elde edilir.
Hayır, ne yazık ki olmayacak. Yalnızca dize türleri için eğer ... else if ... else
Anahtarda tamsayı türlerinin kullanılması nedeniyle, if ile karşılaştırıldığında birkaç kat hızlanma elde edilir.
Soru. StringConcatenate() işlevinin açıklaması, " StringConcatenate() işlevi, geçici dize değişkenlerinin kullanılmaması nedeniyle, ekleme işlemlerini kullanarak dizeleri birleştirmekten daha hızlı ve bellek açısından daha verimlidir" diyor. El Kitabındaki örnekleri biraz değiştirerek kullandım:
Çıktıda aldım:StringConcatenate'in , toplama işlemlerini kullanarak dizeleri birleştirmekten daha yavaş olduğu ortaya çıktı. Amaç ne?
Soru. StringConcatenate() işlevinin açıklaması, " StringConcatenate() işlevi, geçici dize değişkenlerinin kullanılmaması nedeniyle, ekleme işlemlerini kullanarak dizeleri birleştirmekten daha hızlı ve bellek açısından daha verimlidir" diyor. El Kitabındaki örnekleri biraz değiştirerek kullandım:
Çıktıda aldım:StringConcatenate'in , toplama işlemlerini kullanarak dizeleri birleştirmekten daha yavaş olduğu ortaya çıktı. Amaç ne?
Kontrol etmek biraz farklı (her şeyi doğru anladıysam). Fonksiyonun özelliği başka bir ...
Bu kod gibi bir şey
Ve böyle bir sonuç
not
Büyük olasılıkla, d= "" satırı for döngüsüne yerleştirilmiş olmalıydı, ancak bunun sonucu gerçekten etkilemediğini düşünüyorum.