Hatalar, hatalar, sorular - sayfa 1871

 
Slava :
Ve bu mümkün olmamalı


1. Birliğin tanıtımı ne zaman planlanıyor?

2. typedef'ler birleşim girişi ile tanıtılacak mı?

3. Temel türlere işaretçileri tanıtmayı planlıyor musunuz?
 
Konstantin :


1. Birliğin tanıtımı ne zaman planlanıyor?

2. typedef'ler birleşim girişi ile tanıtılacak mı?

3. Temel türlere işaretçileri tanıtmayı planlıyor musunuz?

1. Yakında. Derleyicide her şey hazır, test ediyoruz. Testten sonra yayınlanacak.

2. Ne zaman olduğu henüz bilinmiyor.

3. Planlanmadı.

 

Bazı nedenlerden dolayı, CopyTime işlevi (veya benzeri), alıcı dizinin boyutu kopyalanması gerekenden daha büyük olsa bile , alıcı diziyi yeniden boyutlandırır .

Beyler, bu iyi mi? Hep böyle miydi? Yoksa bir böcek mi?

Örneğin:

 static datetime TimeBuf[]; 

if ( ArraySize (TimeBuf) == 0 ) ArrayResize (TimeBuf, 10 );

CopyTime ( _Symbol , _Period , 0 , 1 , TimeBuf);

CopyTime işlevi , TimeBuf dizisinin boyutunu 1 olarak değiştirir.

Bu prensipte yanlıştır.

Önemli bir nüans olmasa bile korkutucu olmazdı: veriler dizinin başına kopyalanır ve sonuç olarak, optimizasyonun tüm özü tomurcukta kaybolur.

 
Marat Sultanov :

Bazı nedenlerden dolayı, CopyTime işlevi (veya benzeri), alıcı dizinin boyutu kopyalanması gerekenden daha büyük olsa bile , alıcı diziyi yeniden boyutlandırır .

Beyler, bu iyi mi? Hep böyle miydi? Yoksa bir böcek mi?

Örneğin:

CopyTime işlevi , TimeBuf dizisinin boyutunu 1 olarak değiştirir.

Bu prensipte yanlıştır.

Önemli bir nüans olmasa bile korkutucu olmazdı: veriler dizinin başına kopyalanır ve sonuç olarak, optimizasyonun tüm özü tomurcukta kaybolur.

Diziniz dinamik! Yani, yeniden boyutlandırılabilir. Boyutunu köşeli parantez içinde belirtmediğiniz için.

Statik kelimesi, bu dizinin nesnesinin Expert Advisor yüklendiğinde oluşturulduğu ve boşaltıldığında yok edildiği anlamına gelir.

 
Slava :

Diziniz dinamik! Yani, yeniden boyutlandırılabilir. Boyutunu köşeli parantez içinde belirtmediğiniz için.

Statik kelimesi, bu dizinin nesnesinin Expert Advisor yüklendiğinde oluşturulduğu ve boşaltıldığında yok edildiği anlamına gelir.

Kusura bakmayın ama konuyu yanlış anladınız.

Dizinin global kapsamda bildirilmesine izin verin

 datetime _TimeBuf[]; 

void OnTick ()
{}

Sonra:

1) İlk defa diziye kopyalayacağız (CopyTime) kaç tane çubuk var.

 datetime _TimeBuf[];
int       _BarsCountReserveSize;

void OnTick ()
{
   int BarsCount = Bars ( _Symbol , _Period );
   
   if ( ArraySize (_TimeBuf) == 0 )
   { 
       if (_BarsCountReserveSize <= BarsCount) _BarsCountReserveSize = ( int ) ceil (BarsCount* 1.3 );

       ArrayResize (_TimeBuf, BarsCount, _BarsCountReserveSize);

       CopyTime ( _Symbol , _Period , 0 , BarsCount, _TimeBuf);
   }
}

2) Optimal tasarıma göre, yeni bir çubuk göründüğünde, tüm çubukları kopyalamamızın bir anlamı yok, değil mi? Bu nedenle, yalnızca son 2 değiştirilen çubuğu kopyalamaya karar veriyoruz.

 datetime _TimeBuf[];
int       _BarsCountReserveSize;

void OnTick ()
{
   int BarsCount = Bars ( _Symbol , _Period );
   
   if ( ArraySize (_TimeBuf) == 0 )
   { 
      _BarsCountReserveSize = ( int ) ceil (BarsCount* 1.3 );

       ArrayResize (_TimeBuf, BarsCount, _BarsCountReserveSize);

       CopyTime ( _Symbol , _Period , 0 , BarsCount, _TimeBuf);
   }
   else
   {
       int RequiredCount = BarsCount - ArraySize (_TimeBuf) + 1 ;
      
       ArrayResize (_TimeBuf, RequiredCount, _BarsCountReserveSize);

       CopyTime ( _Symbol , _Period , 0 , RequiredCount, _TimeBuf);
   }
}

3) Sonuç olarak, optimizasyonumuz çalışmıyor, çünkü CopyTime diziyi yeniden boyutlandırır ve size = RequiredCount değerini ayarlar, ayrıca yedek boyutu kaybederiz ( CopyTime bunun farkında değildir).

 

CopyTime , dizinin sonundan başa hemen kopyalasaydı, bu durum olmazdı:

yerine:

_TimeBuf[ 0 ] = D'2017.01.01' ;
_TimeBuf[ 1 ] = D'2017.01.02' ;
_TimeBuf[ 2 ] = D'2017.01.03' ;

Bu:

 const int ArrSize = ArraySize (_TimeBuf);

_TimeBuf[ArrSize- 3 ] = D'2017.01.01' ;
_TimeBuf[ArrSize- 2 ] = D'2017.01.02' ;
_TimeBuf[ArrSize- 1 ] = D'2017.01.03' ;
 

Kopyalama işlevleri, dinamik bir dizinin boyutunu her zaman değiştirmiştir. Yukarı veya aşağı. Ancak talep sonucunda döndürülen kayıtların sayısı ile ilgili her zaman net bir yazışma oldu.

Sizin durumunuzda, ilk istek dinamik olarak yeniden boyutlandırılabilir bir dizi içindir. Her seferinde bir öğe isteyen diğer tüm istekler, yeniden tahsis olmaması için bilinen bir boyuta (datetime _TimeBuf1[1]) sahip bir diziye gönderilmelidir. Alınan öğeyi kendi başınıza büyük bir dinamik diziye aktarın

 

Yani bu hep böyleydi ve sorun değil. Anladım. Cevabın için teşekkürler!

Genişletmenin farkındaydım, ancak istenen verinin boyutuna küçültmekle ilgili değildi. Şimdi biliyorum, teşekkürler!

 

MT4 yapı 1065

USDJPY TF M15 testi

sonuç günlüğünden:

406 2014.11.28 20:30 Sat 18 5.50 118.641 0.000 117.015 0.00
521 2014.12.09 17:15 t/p 18 5.50 118.386 0.000 118.386 -148.95

Kayıp nasıl yapılır?
 
-Aleks- :

Kayıp nasıl yapılır?

Takas.