Çok para birimli Uzman Danışmanların test sonuçları - sayfa 4

 
tol64 :
Ama şubenin başında yaptığım gibi bir örnek gösterebilir misiniz? Yalnızca bir sembolde alım satımı etkinleştirin, ancak Expert Advisor'ı başka bir sembolde test edin. Bir ekran görüntüsü alın ve üzerinde test ettiğiniz sembolü test edin. Şube başında sunulanlara benzer farklılıklar olacak mı? Tüm sembollerde çubukların oluşumu izlenirse de, her şey aynı olmalıdır. Ama yine de kontrol etmeniz gerekiyor...

Peki, test etmeyeceğim. Kodu gönderebilirim ve test edebilirsiniz ;-):

string Instruments[] = ...
int SymbolCount = ArraySize(Instruments);

void RefreshRates( string symbol)
{
   MqlTick tick;
   SymbolInfoTick (symbol, tick);
   SymbolInfoDouble (symbol, SYMBOL_BID );
}

bool Synchronization()
{
   static bool Sync = true ;

   string StrUnsync;
   int u = 0 ;

   datetime dt0 = ( datetime ) SeriesInfoInteger ( _Symbol , Period (), SERIES_LASTBAR_DATE );
  
   for ( int j = 0 ; j < SymbolCount; j++)
  {
    RefreshRates(Instruments[j]);
     datetime dt = ( datetime ) SeriesInfoInteger (Instruments[j], Period (), SERIES_LASTBAR_DATE );
     if (dt != dt0)
    {
      StrUnsync = StrUnsync + Instruments[j] + " " ;
      u++;
    }
  }
   if (u > 0 )
  {
     Print ( "Some symbols are unsynchonized:" , StrUnsync);
    Sync = false ;
     return ( false );
  }
   else
  {
     if (!Sync)
    {
       Print ( "Synchronization done" );
    }
    Sync = true ;
  }
   return ( true );
}

void OnTick ()
{
   if (!Synchronization()) return ;
  ...
}
 
marketeer :

Peki, test etmeyeceğim. Kodu gönderebilirim ve test edebilirsiniz ;-):

)) Sağlanan seçenek için teşekkür ederiz. Şimdi sadece Yedelkin ve İlginç forum üyeleri tarafından olası bir hataya işaret eden varsayımımı kontrol edeceğim ve ardından sürümünüzü zevkle test edeceğim. Sonuçları detaylı olarak bildireceğim. ))
 

Yedelkin 

Kodun şu kısmına dikkat edin:

Burada, belirli bir "Casus Kontrol paneli MCM" göstergesini iki farklı sembole "astığınızı" görebilirsiniz. Onlar. Sinyal kaynaklarınız farklı karakterlerdir. Ama aynı zamanda "işlemlerin EURUSD üzerinden yapıldığını" iddia ediyorsunuz, yani. sinyalin kaynağı aynı semboldür. Karar verelim.

Alım satım sadece EURUSD üzerinden yapılır.

Testlerimde Konstantin Gruzdev tarafından yazılan şemayı düşünüyorum - " MetaTrader 5'te çoklu para birimi modunun uygulanması ". ))) Her şey tanımlıdır. Makaleye eklenen dosyalar Casus Kontrol paneli MCM göstergesini ve exSpy Kontrol paneli MCM uzmanı içerir. Uzman Danışmanı bir çizelgeye yerleştirerek nasıl çalıştığını görebilirsiniz. Günlük, uzman tarafından farklı sembollerden alınan belirtilen olayları açıkça gösterir. Her şey açık, hiçbir şey karışık değil.

Şimdi, tanımlayıcının alındığı sembolü OnChartEvent () içinde belirtmeye çalıştım, ancak bu, sonuçları değiştirmedi. Yanlış olayları alma olasılığını ortadan kaldırmak için ikinci karakteri OnInit () öğesinden kaldırdım. Şimdi test bu seçeneğe göre yapıldı:

 enum ENUM_CHART_EVENT_SYMBOL
  {
   CHARTEVENT_NO         = 0 ,           // События отключены
   CHARTEVENT_INIT       = 0 ,           // Событие "инициализация" 
   
   CHARTEVENT_NEWBAR_M1  = 0x00000001 , // Событие "новый бар" на 1 -минутном графике
   CHARTEVENT_NEWBAR_M2  = 0x00000002 , // Событие "новый бар" на 2 -минутном графике
   CHARTEVENT_NEWBAR_M3  = 0x00000004 , // Событие "новый бар" на 3 -минутном графике
   CHARTEVENT_NEWBAR_M4  = 0x00000008 , // Событие "новый бар" на 4 -минутном графике
   
   CHARTEVENT_NEWBAR_M5  = 0x00000010 , // Событие "новый бар" на 5 -минутном графике
   CHARTEVENT_NEWBAR_M6  = 0x00000020 , // Событие "новый бар" на 6 -минутном графике
   CHARTEVENT_NEWBAR_M10 = 0x00000040 , // Событие "новый бар" на 10-минутном графике
   CHARTEVENT_NEWBAR_M12 = 0x00000080 , // Событие "новый бар" на 12-минутном графике
   
   CHARTEVENT_NEWBAR_M15 = 0x00000100 , // Событие "новый бар" на 15-минутном графике
   CHARTEVENT_NEWBAR_M20 = 0x00000200 , // Событие "новый бар" на 20-минутном графике
   CHARTEVENT_NEWBAR_M30 = 0x00000400 , // Событие "новый бар" на 30-минутном графике
   CHARTEVENT_NEWBAR_H1  = 0x00000800 , // Событие "новый бар" на 1 -часовом графике
   
   CHARTEVENT_NEWBAR_H2  = 0x00001000 , // Событие "новый бар" на 2 -часовом графике
   CHARTEVENT_NEWBAR_H3  = 0x00002000 , // Событие "новый бар" на 3 -часовом графике
   CHARTEVENT_NEWBAR_H4  = 0x00004000 , // Событие "новый бар" на 4 -часовом графике
   CHARTEVENT_NEWBAR_H6  = 0x00008000 , // Событие "новый бар" на 6 -часовом графике
   
   CHARTEVENT_NEWBAR_H8  = 0x00010000 , // Событие "новый бар" на 8 -часовом графике
   CHARTEVENT_NEWBAR_H12 = 0x00020000 , // Событие "новый бар" на 12-часовом графике
   CHARTEVENT_NEWBAR_D1  = 0x00040000 , // Событие "новый бар" на дневном графике
   CHARTEVENT_NEWBAR_W1  = 0x00080000 , // Событие "новый бар" на недельном графике
     
   CHARTEVENT_NEWBAR_MN1 = 0x00100000 , // Событие "новый бар" на месячном графике   
   CHARTEVENT_TICK       = 0x00200000 , // Событие "новый тик"
   
   CHARTEVENT_ALL        = 0xFFFFFFFF , // Все события включены
  };

...

int OnInit ()
{
 if ( iCustom ( "EURUSD" , PERIOD_D1 , "Spy Control panel MCM" , ChartID (), 0 ,CHARTEVENT_TICK) == INVALID_HANDLE )
   { Print ( "Ошибка установки шпиона на EURUSD" ); return ( true );}

 return ( 0 );
}

void OnChartEvent ( const int id,         // идентификатор события
                   const long &   lparam, // флаг события поступившего от агента панели.
                                         // Флаги соответствуют перечислению ENUM_CHART_EVENT_SYMBOL.
                   const double & dparam, // цена
                   const string & sparam   // инструмент 
                 )
{
 // Объявление массивов переменных для торговых сигналов
 static datetime New_Bar[1];  
 static bool UpSignal[1], DnSignal[1];
 
 if (id >= CHARTEVENT_CUSTOM )
   {
     if (sparam == Symbol_01)
      {
       // Получение торговых сигналов
       TradeSignalCounter( 0 ,Symbol_01,Trade_01,Timeframe_01,UpSignal,DnSignal,New_Bar);
      
       // Совершение торговых операций
       TradePerformer( 0 ,Symbol_01,Trade_01,Timeframe_01,Stop_Loss_01,Take_Profit_01,Slippage_01,UpSignal,DnSignal,New_Bar);
      }
   }
}

EURUSD tablosundan EURUSD enstrümanı üzerinde test edin:

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin:

Sonuçlar uyuşmuyor.

ilginç

Bu koda bakılırsa, sinyaller gerçekten iki sembolden geliyor, ancak EA bu sinyallerden birini gecikmeli olarak işleyebilir.

İkinci sembol artık yok, sinyaller sadece EURUSD'den geliyor. Ama bu ne yazık ki sorunu çözmedi.

 
marketeer :

Peki, test etmeyeceğim. Kodu gönderebilirim ve test edebilirsiniz ;-):

Sürümünüzü test ettim. )) Sonuçlar hemen hemen aynıdır. Ön (hızlı) testler için oldukça uygundur. Tamamen aynı sonuçları elde etmek için OnTimer () işlevini kullanacağız.

İşte test sonuçları:

EURUSD tablosundan EURUSD enstrümanı üzerinde test edin:

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin:

 
MetaDriver :

Bence 10 saniye çok kısa. Yalnızca şekillendirilmiş çubuklar ilgi çekiciyse, aralık en az bir dakika olmalıdır.

Kısaltmanın bir anlamı yok, bir dakika minimum makul aralık ..

Sonuçta, 10 saniyenin üzerindeki sonuçlar arasındaki tutarsızlığı göstermek için başka bir dizi test yaptım. Konunun başında sağlanan aynı "standart" ile karşılaştıracağız. Yani, Expert Advisor test edilen sembol üzerindeyken oluşturulan günlük çubuklar tarafından OnTick () işlevinden. İşte burada:

Ayrıca, tüm sonuçlar OnTimer () işlevinden olacaktır. GBPUSD sembolünde Uzman Danışman:

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 10 saniye:

Bu en doğru sonuçtur.

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 1 dakika:

Doğru değil. Sonuç, önemli ölçüde daha iyi çıktı, bu da doğru ve yanıltıcı değil.

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 60 dakika:

Sonuç pek çok yerde standartla örtüşmemektedir.

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 1 gün:

Sonuç en tutarsız.

---------------------------

Genel olarak, doğru sonuçlardan tamamen emin olmak için, çoklu para birimi Uzman Danışmanları, maksimum minimum aralığı ayarlarken OnTimer () işlevi kullanılarak test edilmelidir.

 
tol64 :

Sonuçta, 10 saniyenin üzerindeki sonuçlar arasındaki tutarsızlığı göstermek için başka bir dizi test yaptım. Konunun başında sağlanan aynı "standart" ile karşılaştıracağız. Yani, Expert Advisor test edilen sembol üzerindeyken oluşturulan günlük çubuklar tarafından OnTick () işlevinden. İşte burada:

Ayrıca, tüm sonuçlar OnTimer () işlevinden olacaktır. GBPUSD sembolünde Uzman Danışman:

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 10 saniye:

Bu en doğru sonuçtur.

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 1 dakika:

Doğru değil. Sonuç, önemli ölçüde daha iyi çıktı, bu da doğru ve yanıltıcı değil.

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 60 dakika:

Sonuç pek çok yerde standartla örtüşmemektedir.

GBPUSD tablosundan EURUSD enstrümanı üzerinde test edin. Zamanlayıcı aralığı 1 gün:

Sonuç en tutarsız.

---------------------------

Genel olarak, doğru sonuçlardan tamamen emin olmak için, çoklu para birimi Uzman Danışmanları, maksimum minimum aralığı ayarlarken OnTimer () işlevi kullanılarak test edilmelidir.

pek anlamadım. Yanlış karşılaştırdığınız bir şey.

İlk test doğrudur: iki test yönteminin karşılaştırılması - "sizin" cihazınızda ve diğerinde. Ve sonra bu ilk sonucu bir kıyaslama olarak aldınız ve diğer tüm sonuçları onunla karşılaştırdınız.

Bu doğru değil. Kimlik için diğer çalıştırmaları ilk sonuçla değil, "sizin" enstrümanınızdaki aynı tıklama frekansındaki çalıştırmalarla karşılaştırmak gerekir.

"10 saniye" olandan farklı olacaklar, bu oldukça doğal, ana şey çiftler halinde aynı olmaları gerektiğidir.

Lütfen testi tamamlayın.

Aksi takdirde, "10 saniyelik testin faydaları hakkında" ilk yanılsamasını bir şekilde doğrulamayı başararak boşuna zaman öldürdüğü ortaya çıktı.

 
tol64 :

Sürümünüzü test ettim. )) Sonuçlar hemen hemen aynıdır. Ön (hızlı) testler için oldukça uygundur. Tamamen aynı sonuçları elde etmek için OnTimer () işlevini kullanacağız.

Anladığım kadarıyla, senkronizasyon yöntemimi değil, MetaTrader onay oluşturucusunu test ettiniz. Gerçek şu ki, testleri başlattığınızda, eurusd adı altında ve gbpusd adı altında farklı kene tabanları oluşturdunuz ve onlar için sonuçlar neredeyse hiçbir zaman eşit olmayacak. Gerçekte, farklı semboller üzerinde belirtilen senkronizasyon bloğuna sahip iki Expert Advisor çalıştırırsanız, fark ihmal edilebilir veya hatta yoktur.
 
MetaDriver :

pek anlamadım. Yanlış karşılaştırdığınız bir şey.

İlk test doğrudur: iki test yönteminin karşılaştırması - "sizin" cihazınızda ve diğerinde. Ve sonra bu ilk sonucu bir kıyaslama olarak aldınız ve diğer tüm sonuçları onunla karşılaştırdınız.

Bu doğru değil. Kimlik için diğer çalıştırmaları ilk sonuçla değil, "sizin" enstrümanınızdaki aynı tıklama frekansındaki çalıştırmalarla karşılaştırmak gerekir.

"10 saniye" olandan farklı olacaklar, bu oldukça doğal, ana şey çiftler halinde aynı olmaları gerektiğidir.

Lütfen testi tamamlayın.

Aksi takdirde, "10 saniyelik testin faydaları hakkında" ilk yanılsamasını bir şekilde doğrulamayı başararak boşuna zaman öldürdüğü ortaya çıktı.

İyi. Şimdi başka bir uzun teste başladım. Uyandığımda bitecek. Ama şimdi bile gördüğüm kadarıyla çiftler halinde aynı olduklarını söyleyebilirim. Sadece size göstermek için kalır. Ancak benzer bir testi kendiniz de yapabilirsiniz. Bu aynı zamanda ticaret sistemlerinin test edilmesinde de önemli bir noktadır. Ve sonra aniden yanlış bir şey yapıyorum.)))

Not Benim için asıl mesele, çiftler halinde aynı olmamalarıydı, çünkü OnTimer () işleviyle test ederken, yine de çiftler halinde aynı olacaklar. Amaç, başlangıçta bunları, çubukların açık kontrolü ile OnTick () işlevinde normal modda elde edilen sonuçla aynı hale getirmekti. Tek bir sembol üzerinde işlem yapan Uzman Danışmanlar, bunun için mükemmel bir iş çıkarır. Ancak çoklu para birimi modunda bunun açıklığa kavuşturulması gerekiyordu. Sonuç belli.

 
marketeer :
Anladığım kadarıyla, senkronizasyon yöntemimi değil, MetaTrader onay oluşturucusunu test ettiniz. Gerçek şu ki, testleri başlattığınızda, eurusd adı altında ve gbpusd adı altında farklı kene tabanları oluşturdunuz ve onlar için sonuçlar neredeyse hiçbir zaman eşit olmayacak. Gerçekte, farklı semboller üzerinde belirtilen senkronizasyon bloğuna sahip iki Expert Advisor çalıştırırsanız, fark ihmal edilebilir veya hatta yoktur.
Hangi gerçeklikten bahsediyorsun? Gerçek zamanlı test? Evet ise, kesinlikle katılıyorum. İki uzmanı sembollerine asarsanız, her şey doğru olacaktır. Ama çoklu para birimi modunu test ediyorum. Ve aynı sonuç yalnızca OnTimer () işleviyle (10 saniye) gösterilir.
 
tol64 :

Alım satım sadece EURUSD üzerinden yapılır.

Doğru ifadeyle başlayalım. Orijinal örnekte, "Eurodollar'ın işlem görmesini" istiyorsunuz. Aslında, kullanıcı olayları iki sembolden alındı ve olay işleyicide, olaylar bu iki sembolden herhangi birinden alındığında TradeSignalCounter()+TradePerformer() işlevleri çağrıldı. Olay kuyruğunun her zaman sınıra kadar dolu olduğu varsayılabilir.

Şimdi sinyal kaynaklarından birini kaldırdınız, ancak bir nedenden dolayı olay işleyicisine " if (sparam == Symbol_01)" kontrolünü girdiniz. Ama başka bir soru farklı. Koda bakılırsa, "Tüm işaretler" modunda Lizar'ın şemasını kullanırsınız ve sinyal kaynağından (EURUSD) gelen her işarette TradeSignalCounter()+TradePerformer() işlevleri çağrılır. İlgi zaten olay kuyruğunun olası bir taşma ihtimalini ima etti. Ayrıca bu iki işlev için Symbol_01 parametresi olarak hangi enstrümanı kullandığınızı merak ediyorum ve Lizar'ın şemasındaki olayların sıklığını değiştirmeyi denediniz mi?

Neden: