Algoritmalar, karar yöntemleri, performanslarının karşılaştırılması - sayfa 20

 
Реter Konow :

İdeal çözüme neden varlıklar ekleyeceğimi bilmiyorum. Amacı görmüyorum.

Aynı anda iki şapka takmıyorsunuz. Ve neden?

Önce bunu açıklayın. ))


"İnsanlara eziyet ediyorsun, acı çektiriyorsun, onları ahlaki ve psikolojik olarak alçaltıyorsun... "

Lanetli Dünya (koleksiyon) Yazarlar: Dmitry Ganin

 
Sergey Dzyublik :

"İnsanlara eziyet edip acı çektiriyorsunuz, onları ahlaki ve psikolojik olarak alçaltıyorsunuz... "

Lanetli Dünya (koleksiyon) Yazarlar: Dmitry Ganin

Yanlışlıkla manevi ve psikolojik olarak mağdur ettiğim herkesten içtenlikle özür dilerim.

Belirli bir soruna ideal çözümü bulmaktan başka bir amaç peşinde koşmadım.

Aksine, kendisi anlaşılmaz saldırılara ve motivasyonsuz saldırganlığa maruz kaldı.

Görünüşe göre bu bedeli topluma ayak uydurmak istemeyen herkes ödüyor.

Seçimimi yaptım ve kimseyi suçlamıyorum ...

 
Реter Konow :

İdeal çözüme neden varlıklar ekleyeceğimi bilmiyorum.


İdeal bir çözüm olarak kodunuz hakkında konuşmak için çok erken olabilir.

Ve işte şapkaların gerçek koleksiyonu

 
Alexandr Andreev :

İdeal bir çözüm olarak kodunuz hakkında konuşmak için çok erken olabilir.

genel konuştum...

"Neden ideal çözüme (herhangi bir), varlıklar ekleyin."

Birçoğunun bana çok değerli fikirler verdiğini ve doğru hatalara dikkat çektiğini söylemeliyim:

1. Karakter sayısıyla ilgili hata.

2. Alt dizelerin ortak dize içindeki çarpışmalarından kaynaklanan bir hata.

3. Her belirli hat için ayrılan bellek yetersiz.

4. Bir dizinin boyutunu değiştirmenin verilerin silinmesine yol açtığına dair yanlış inanç.


Bu hataları işaret ettiğiniz için herkese çok teşekkürler!

 
Реter Konow :
...

Bu hataları işaret ettiğiniz için herkese çok teşekkürler!

Objektif olmak gerekirse, sonuncusu, ideal çözüm herkese aittir , çünkü ben buna hataları işaret ederek, insanlarla iletişim kurarak ve etkileşim kurarak geldim.

 
Реter Konow :

Objektif olmak gerekirse, sonuncusu, ideal çözüm herkese aittir , çünkü ben buna hataları işaret ederek, insanlarla iletişim kurarak ve etkileşim kurarak geldim.


Bir kez daha, son seçenek sadece bir seçenek, önceden olan bir seçenek değildi! Ve onun mükemmel olduğu gerçeği tartışmalı bir ifadedir.

 
Alexandr Andreev :

Bir kez daha, son seçenek sadece bir seçenek, önceden olan bir seçenek değildi! Ve onun mükemmel olduğu gerçeği tartışmalı bir ifadedir.

İyi. Benim için mükemmel olsun. Herkes kendi ölçeğinde değerlendirebilir.
 

Hata ayıklama baskılarına ve kuyruklu yıldızlara geçmeyi öneriyorum - kimin fikri var?

 

işlevin şu şekilde olması durumunda çalışma süresini test etti:

1. sınıfa sarılmış

2. bir sınıfa sarılır , new operatörünü kullanarak sınıfın bir örneğini yaratırız

3. sarmalayıcı kullanmadan işlevi çağırmanız yeterlidir

 //+------------------------------------------------------------------+

#define   SpeedTest(count_x10,msg,EX)        { uint mss= GetTickCount (); ulong count=( ulong ) pow ( 10 ,count_x10); for ( ulong i= 0 ;i<count&&! _StopFlag ;i++){EX;} \
                                               printf ( "%s: loops=%i ms=%u" ,msg,count, GetTickCount ()-mss);}
//+------------------------------------------------------------------+
class COpen
{
private :
   string             m_symbol;
public :
                     COpen( const string symbol): m_symbol(symbol) {}
   double             getOpen( const int bar) const                  { return ( iOpen (m_symbol, 0 , bar)); }

};
//+------------------------------------------------------------------+
void OnStart ()
{   #define loop_x10 9
//1.
   COpen sym1( _Symbol );
   srand ( GetTickCount ());
   SpeedTest(loop_x10, "1. COpen" , sym1.getOpen( rand ()));
//2.
   srand ( GetTickCount ());
   SpeedTest(loop_x10, "2. new COpen" ,
             COpen *sym2 = new COpen( _Symbol );
             sym2.getOpen( rand ());
             delete sym2;
            );
//3.            
   srand ( GetTickCount ());
   SpeedTest(loop_x10, "3. iOpen" , iOpen ( NULL , 0 , rand ()););            
}
//_______________________________________________________________________

2019.10.12 12:39:29.802 SpeedTst_class (EURUSD,M1) 1. Copen: döngüler=1000000000 ms=41016

2019.10.12 12:41:05.352 SpeedTst_class (EURUSD,M1) 2. yeni Copen: döngüler=1000000000 ms=95562

2019.10.12 12:41:45.939 SpeedTst_class (EURUSD,M1) 3. iOpen: döngüler=1000000000 ms=40578


testler 1 ve 3 performans açısından yakındır, yani bir işlev çağrısını bir sınıfa sarmak kritik değildir, yapıcı ve yıkıcının çağrısı nedeniyle 2 numaralı test süresi doldu

 

SymbolInfoDouble() işlevlerini çağırırken yürütme hızı testi

 #property version    "1.00"
// количество итераций теста
#define LOOPx10 8

#define   SpeedTest(count_x10,msg,EX)        { uint mss= GetTickCount (); ulong count=( ulong ) pow ( 10 ,count_x10); for ( ulong i= 0 ;i<count&&! _StopFlag ;i++){EX;} \
                                               printf ( "%s: loops=%i ms=%u" ,msg,count, GetTickCount ()-mss);}
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   double lot;

   srand ( GetTickCount ());
   SpeedTest(LOOPx10, "calcNormVol_my()" , lot = rand () / 1000.0 ; calcNormVol_my(lot))

   srand ( GetTickCount ());
   SpeedTest(LOOPx10, "calcNormVol_alexeyvik()" , lot = rand () / 1000.0 ; calcNormVol_alexeyvik(lot))
   
   srand ( GetTickCount ());
   SpeedTest(LOOPx10, "calcNormVol_fxsaber()" , lot = rand () / 1000.0 ; calcNormVol_fxsaber(lot))
   
   srand ( GetTickCount ());
   SpeedTest(LOOPx10, "calcNormVol_my_2()" , lot = rand () / 1000.0 ; calcNormVol_my_2(lot))

}
//+------------------------------------------------------------------+
double calcNormVol_my( const double value)
{
   const static string sym = _Symbol ;
   return ( NormalizeDouble ( fmax ( fmin ( SymbolInfoDouble (sym, SYMBOL_VOLUME_STEP ) * round (value / SymbolInfoDouble (sym, SYMBOL_VOLUME_STEP )), SymbolInfoDouble (sym, SYMBOL_VOLUME_MAX )),
                               SymbolInfoDouble (sym, SYMBOL_VOLUME_MIN )),   2 ));
}
//+------------------------------------------------------------------+
double calcNormVol_alexeyvik( const double value)
{
//   const string sym = _Symbol;
   return (
             NormalizeDouble ( fmax ( fmin ( SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP ) * round (value / SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_STEP )),
                                       SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MAX )),   SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN )), 2 )
         );
}
//+------------------------------------------------------------------+
const double VolumeStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
const double VolumeMax = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
const double VolumeMin = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
const int O_DigitsInVolumeStep = 2 ;
double calcNormVol_fxsaber( const double value )
{
   return ((value > VolumeMax) ? VolumeMax
          : ((value < VolumeMin) ? VolumeMin
             : NormalizeDouble (VolumeStep * ( int )(value / VolumeStep + 0.5 ), O_DigitsInVolumeStep)));
}
//+------------------------------------------------------------------+
double calcNormVol_my_2( const double value )
{
   const static double volumeStep = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_STEP );
   const static double volumeMax = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
   const static double volumeMin = SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
   const static int o_digitsInVolumeStep = 2 ;
   return ((value > volumeMax) ? volumeMax
          : ((value < volumeMin) ? volumeMin
             : NormalizeDouble (volumeStep * ( int )(value / volumeStep + 0.5 ), o_digitsInVolumeStep)));
}
//+------------------------------------------------------------------+

2019.12.11 21:13:08.896 tst_volum (EURUSD,W1) calcNormVol_my(): döngüler=100000000 ms=173406

2019.12.11 21:15:45.425 tst_volum (EURUSD,W1) calcNormVol_alexeyvik(): döngüler=100000000 ms=156531

2019.12.11 21:15:45.533 tst_volum (EURUSD,W1) calcNormVol_fxsaber(): döngüler=100000000 ms=110

2019.12.11 21:15:45.916 tst_volum (EURUSD,W1) calcNormVol_my_2(): döngüler=100000000 ms=390