Hatalar, hatalar, sorular - sayfa 2437

 
Alexey Navoykov :

Onlar. OnTesterPass çerçevesiz çağrıldı mı? O zaman bariz bir hata. Bu olay, geçişin sonu değil, çerçevenin alındığı anlamına gelir.

OnTesterDeinit olayını çağırmadan önce tüm çerçeveler OnTesterPass'a ulaşmalıdır. Bu normal sağlıklı bir mantıktır. Tekrar edersem, testin zorunlu olarak kesilmesinden bahsetmiyoruz.

En az bir çerçeve geldiğinde OnTesterPass çağrılır. Bir paket çerçeve gelebilir. Bu nedenle, OnTesterPass'ta çerçeveleri birer birer değil, bir döngüde almanız gerekir. Ancak "son seferden sonra asla" ise, OnTesterPass çağrılmaz.

Optimizasyon, son sonuç geldiğinde durur. Çerçeveler, özellikle bir çerçevede büyük miktarda veri aktarılıyorsa veya tek geçişte aynı anda birkaç çerçeve aktarılıyorsa, daha sonra gelebilir. Bu nedenle optimizasyon tamamlandıktan sonra devreye alınan OnTesterDeinit'te kalan çerçevelerin alımının organize edilmesi gerekmektedir. Ayrıca döngüde.

Bu normal sağlıklı bir mantıktır.

Birkaç kez, yalnızca OnTesterPass'ta değil, OnTesterDeinit'te çerçeve alma örnekleri verdim. Ve farklı türlerdeki karmaşık çerçevelerin alınmasıdır.

 
Slava :

geçiş başına aynı anda birkaç çerçeve iletiliyorsa .

Bir kere denedim, olmadı. Yalnızca bir FrameAdd çalıştı.

 
Slava :

Optimizasyon, son sonuç geldiğinde durur. Çerçeveler, özellikle bir çerçevede büyük miktarda veri aktarılıyorsa veya tek geçişte aynı anda birkaç çerçeve aktarılıyorsa, daha sonra gelebilir. Bu nedenle optimizasyon tamamlandıktan sonra devreye alınan OnTesterDeinit'te kalan çerçevelerin alımının organize edilmesi gerekmektedir. Ayrıca döngüde.

Çerçeveler daha sonra gelebilirse, hemen OnTesterDeinit'te olacaklarının garantisi yok mu? Onlar. bir bekleme döngüsü yapmalı mıyım? Ve ne kadar beklemek?

Daha önce durumun böyle olduğunu düşünmüştüm: OnTesterPass, yalnızca önceki OnTesterPass'in bitiminden sonra gelen çerçeveler için çağrılır. OnTesterPass yürütülürken yeni bir çerçeve geldiyse ve daha spesifik olarak, FrameNext'e yapılan son çağrı anından işlevin sonuna kadar, bu çerçeve bir olay oluşturan yeni bir çerçeve gelene kadar asılı kalacaktır. Bu yüzden bu asma çerçeveleri elde etmek için OnTesterDeinit gereklidir.

 
Alexey Navoykov :

Çerçeveler daha sonra gelebilirse, hemen OnTesterDeinit'te olacaklarının garantisi yok mu? Onlar. bir bekleme döngüsü yapmalı mıyım? Ve ne kadar beklemek?

Daha önce durumun böyle olduğunu düşünmüştüm: OnTesterPass, yalnızca önceki OnTesterPass'in bitiminden sonra gelen çerçeveler için çağrılır. OnTesterPass yürütülürken yeni bir çerçeve geldiyse ve daha spesifik olarak, FrameNext'e yapılan son çağrı anından işlevin sonuna kadar, bu çerçeve bir olay oluşturan yeni bir çerçeve gelene kadar asılı kalacaktır. Bu yüzden bu asma çerçeveleri elde etmek için OnTesterDeinit gereklidir.

FrameNext, bir mqd dosyasının aptalca bir okumasıdır ve başka bir şey değildir.

FrameFirst - Dosya Arama.
 
fxsaber :

Bir kere denedim, olmadı. Yalnızca bir FrameAdd çalıştı.

Burada bir örnek gösterdim.
 

Teşekkür ederim.


PS FrameFirst burada gereksiz

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Sonucun bir Uzman Danışman olarak otomatik olarak değiştirilmesiyle stratejilerin programlanmış testi

Slava , 2013.04.10 15:04

İşte bir örnek. OnTester'da EA 2 çerçeve gönderir - işlemlerin geçmişi ve üzerinde çalıştığı tarih.

OnTesterDeinit'te, birinci ve ikinci türdeki tüm çerçevelerin alınması ve işlenmesi

 void OnTesterDeinit()
  {
   string         name;
   ulong          pass;
   long           id;
   double         value;
   int            handle,i;
   BalanceInTime balance[];
   MqlRates       rates[];
//---
   FrameFirst();
   FrameFilter( "" , 1 );
   while (FrameNext(pass,name,id,value,balance))
     {
      handle= FileOpen (name+ "_" + string (id)+ "_" + IntegerToString (pass, 5 , '0' )+ ".txt" , FILE_WRITE | FILE_CSV | FILE_ANSI );
       if (handle!= INVALID_HANDLE )
        {
         for (i= 0 ; i< ArraySize (balance); i++)
             FileWrite (handle,balance[i].date, EnumToString (balance[i].entry), DoubleToString (balance[i].price, 5 ), DoubleToString (balance[i].balance, 2 ));
         FileClose (handle);
        }
     }
//---
   FrameFirst();
   FrameFilter( "" , 2 );
   while (FrameNext(pass,name,id,value,rates))
     {
      handle= FileOpen (name+ "_" + string (id)+ "_" + IntegerToString (pass, 5 , '0' )+ ".txt" , FILE_WRITE | FILE_CSV | FILE_ANSI );
       if (handle!= INVALID_HANDLE )
        {
         for (i= 0 ; i< ArraySize (rates); i++)
             FileWrite (handle,rates[i].time, DoubleToString (rates[i].open, 5 ), DoubleToString (rates[i].high, 5 ), DoubleToString (rates[i].low, 5 ), DoubleToString (rates[i].close, 5 ), string (rates[i].tick_volume));
         FileClose (handle);
        }
     }
//---
  }
 
fxsaber :


PS FrameFirst burada gereksiz

Numara. Gereksiz değil - tamamen metodik olarak. Herhangi bir varsayılan olmadan eksiksiz bir kod bloğu

Bu kod, daha karmaşık bir koddan yırtılmıştır. 4 tip farklı çerçeve iletildi. Aynı zamanda OnTesterPass'ta da okurlar. İşte "rafine edilmiş" kod.

 
Slava :

Numara. Gereksiz değil - tamamen metodik olarak. Herhangi bir varsayılan olmadan eksiksiz bir kod bloğu

Bu kod, daha karmaşık bir koddan yırtılmıştır. 4 tip farklı çerçeve iletildi. Aynı zamanda OnTesterPass'ta da okurlar. İşte "rafine edilmiş" kod.

FrameFirst'ten önce çağrılırsa FrameFirst'in her zaman gereksiz olduğu gerçeği hakkında.

Birden fazla çerçeve üzerinden veri aktarımını önermem.

 
fxsaber :

FrameFirst'in FrameFilter'dan önce çağrılması durumunda her zaman gereksiz olduğu gerçeği hakkında.

Birden fazla çerçeve üzerinden veri aktarımını önermem.

1. Evet. Fazlalık olabilir.

2. OnTesterPass'ta bir tür çerçeve okunur, OnTesterDeinit'te okuma tamamlanır. Kalan çerçeveler OnTesterDeinit'te çıkarılır

Bu, birkaç tür çerçeve gönderme ve alma yeteneği, test cihazında yeniden üretilmesi zor birkaç hatayı düzeltmemize izin verdi. Ayrıca, çerçeveler yalnızca belirli bir referans değeri ile bir fark olması durumunda iletildi.

 
Slava :

Opt-format'ı açar mısınız?