Çok Para Birimli EA'yı Geri Test Etme - sayfa 3

 

Bunu o zaman yayınlamak istedim, ancak ön sayfada korkunç görünüyordu:

Portföy EA'nın Mantıkları

 

Merhaba erkekler ve kızlar,

Bu sorunla bir süre önce ben de karşılaştım ve burada tartıştık: https://www.mql5.com/en/forum/1642

EA'mın yalnızca açık fiyatlar stratejisi var ve geriye dönük test sırasında (belli ki) zaman kazanmak için buna bağlı kalmak istedim.

Benim tasarladığım çözüm şu şekilde:

  1. EA'nızın ana işlem periyodu sırasında en aktif çifti 'sürücü' (keneleri oluşturan tablo) olarak kullanın.
  2. her onTick()'te sürücünüzün yeni bir çubuğa girip girmediğini kontrol edin
    1. yeni çubuk yoksa biraz daha bekleyin
    2. yeni bir çubuk varsa, OnTick() mesajını bireysel tüccarlarınıza dağıtın (her tüccar bir döviz çiftinden sorumludur)
  3. tüccarda tüccarın döviz çiftinin son zamanının sürücüden gelen "yeni çubuk zamanı"na eşit olup olmadığını kontrol edin
    1. evet ise, normal şekilde devam edebilirsiniz
    2. hayır ise, mevcut barın kapanış fiyatını aradığınız açılış fiyatı olarak kabul etmeniz ve önceki barlardan bilgi arıyorsanız bu "tek tek" durumunu dikkate almanız gerekir.

EA'mdan gelen kodun önemli bölümlerini buraya kesip yapıştıracağım. Umarım bu size herhangi bir yardımcı olacaktır!

Şerefe!


 // this is from the Trader base class

     // manage a new tick and predetermines whether a new bar hast started
     virtual void onTick() {
         MqlRates rates[ 1 ];
    
         // check the rates of the tick stream we're attached to (_Symbol!!!)
         if ( CopyRates ( _Symbol , _period, 0 , 1 , rates) != 1 ) {
             Print ( "CopyRates of " , _Symbol , " failed" );
             return ;
        }

         if (_newBar = (rates[ 0 ].time != _currBarTime)) {
            _prevBarTime = _currBarTime;   // remember the previous bar time
            _currBarTime = rates[ 0 ].time;   // remember the current bar time
        }

    }


// this is the actual trader for a specific currency pair

     // checks whether a new trade (closing or opening) is to be performed
     void checkForTrade( void ) {    
    
         MqlRates rates[ 3 ];

         if ( CopyRates (_symbol, _period, 0 , 3 , rates) != 3 ) {
             Print ( "CopyRates of " , _symbol, " failed" );
             return ;
        }

         bool inSameBar = (rates[ 2 ].time == _currBarTime);   // _currBarTime determined in OnTick()!


         double sBuf[ 3 ];   // signal buffer! 2: current bar, 1: previous bar, 0: current - 2 

         if ( CopyBuffer (_ind, SIGNAL3, 0 , 3 , sBuf) != 3 ) {
             Print ( "copy signal from indicator failed, no data" );
             return ;
        }    
        
        
         // first close exiting orders
         double v0 = inSameBar ? sBuf[ 0 ] : sBuf[ 1 ];   // determine the actual 'previous' bar
         double v1 = inSameBar ? sBuf[ 1 ] : sBuf[ 2 ];   // determine the actual 'current' bar
        
         if (_volume > 0 ) {
             if (crossesZeroDownwards(v0, v1)) {   // cross down?
                setReqVolume( 0 );   // close this order
                tradeCloses = true;
            }    
        } else if (_volume < 0 ) {
             if (crossesZeroUpwards(v0, v1)) {   // cross up?
                setReqVolume( 0 );   // close this order
                tradeCloses = true;
            }    
        }

        ...
Tick generation - Open bar only
  • www.mql5.com
The whole list printed shows also many discrepancies in times.
 

Sadece bu sorunla kendim karşılaştım. Tahmin ettiniz, JForex'ten MQL5'e geçiş yapmaya çalışıyorsunuz! Keşke zahmet etmeseydim demeye başlıyorum, ancak sanırım son teslim tarihi uzatması yardımcı olur :)

Görünüşe göre MetaQuotes hala düzeltmedi.

MT5 forex, DOM'u desteklemiyor gibi görünüyor.

isNewBar bana yardım etmeyecek.

Gülünç bir durum gibi görünüyor.

MT5'in içinde bu sorunla ilgili bir değişiklik olup olmadığını bilen var mı?

Kenelerle beslenmeyi bekleyen çok para birimli bir strateji için işe yarayan bir çözüm bilen var mı?

Seninki hayal kırıklığı içinde,

Jim

 
TradingGurus :

Sadece bu sorunla kendim karşılaştım. Tahmin ettiniz, JForex'ten MQL5'e geçiş yapmaya çalışıyorsunuz! Keşke zahmet etmeseydim demeye başlıyorum, ancak sanırım son teslim tarihi uzatması yardımcı olur :)

Görünüşe göre MetaQuotes hala düzeltmedi.

MT5 forex, DOM'u desteklemiyor gibi görünüyor.

isNewBar bana yardım etmeyecek.

Gülünç bir durum gibi görünüyor.

MT5'in içinde bu sorunla ilgili bir değişiklik olup olmadığını bilen var mı?

Kenelerle beslenmeyi bekleyen çok para birimli bir strateji için işe yarayan bir çözüm bilen var mı?

Seninki hayal kırıklığı içinde,

Jim


OnTick() yerine 1 saniye zamanlayıcı ile OnTimer() kullanmayı deneyin.
 

merhaba enivid,

enivid :
OnTick() yerine 1 saniye zamanlayıcı ile OnTimer() kullanmayı deneyin.

Önerin için teşekkürler. Çözümünüz, kesinlikle gereksinimlerimiz için denediğim diğerlerinden çok daha iyi çalışıyor.

Bununla birlikte, farklı çiftlere karşı çoklu para birimi geriye dönük testler yapmak yine de biraz farklı sonuçlar verir.

Büyük miktarda güven uyandırmaz!

Şimdi çok daha fazla gece yarısı yağı yakmaya gidiyorum!

Şerefe,

Jim

 
enivid :
OnTick() yerine 1 saniye zamanlayıcı ile OnTimer() kullanmayı deneyin.

TradingGurus :

Bununla birlikte, farklı çiftlere karşı çoklu para birimi geriye dönük testler yapmak yine de biraz farklı sonuçlar verir.

Jim, yarışma portföyüm EA'da 1 saniye ile OnTimer çözümünü kullanıyorum. Stratejiniz her tıklamaya dayanıyorsa, evet, OnTimer ile OnTick'i tek bir para biriminde kullanırken saniyede birden fazla tıklama mümkün olduğundan farklı sonuçlar alırsınız. "Eksik" onay işareti yüksek veya düşük yeni bir çubuk oluşturduğunda genellikle en fazla farkı yarattığını buldum. Herhangi bir değişiklik için önceki çubuğu yüksek/düşük ve mevcut çubuğu yüksek/düşük olarak kontrol edebilir ve tabii ki mevcut onay yeni çubuğu yüksek/düşük oluşturmadıkça, meydana geldiklerinde bunları "eksik onay" olarak ekleyebilirsiniz.

Ayrıca MetaTrader Strateji Test Cihazının yalnızca kene verilerini simüle ettiğini unutmayın. Kene hareketiyle ilgili stratejinizin ne kadar hassas olduğuna bağlı olarak, bu simülasyonun geriye dönük teste karşı ileriye dönük test üzerinde önemli bir etkisi olabilir.

- Patrick

 
Merhaba Patrick,
Pix :

Stratejiniz her tıklamaya dayanıyorsa, evet, OnTimer ile OnTick'i tek bir para biriminde kullanırken saniyede birden fazla tıklama mümkün olduğundan farklı sonuçlar alırsınız.

- Patrick


Demek istediğim tam olarak bu değildi. (hala tek potansiyel!) yarışmamız EA, 12 çiftin tümünü takas ediyor. Yalnızca OnTimer() kullanarak, örneğin EUR/USD yerine strateji test cihazında GBP/USD'yi seçersem farklı geriye dönük test sonuçları alıyorum.

Simüle edilmiş keneler kullanarak geriye dönük test yaparken MT4'ün sınırlamalarına fazlasıyla aşinayım. Maalesef MT5 çok daha iyi değil gibi görünüyor!

Jim

 

Tarihsel nedenlerden dolayı tüm bunları keneler ile devam ettirmek için son derece hevesliydik, ancak vazgeçtik. Sadece işleri tutarlı hale getiremiyorum.

Mermiyi ısırdık ve şimdi OnTimer() ve isNewBar() yardımıyla 1 dakikalık çubuklarla çalışıyoruz.

Sonunda işler belli belirsiz mantıklı görünmeye başladı ve dahası şampiyonanın son teslim tarihine 4 saat kaldı :)

Jim
 

Sonunda EA'mızı son teslim tarihinden önce yaklaşık 5 dakika ayırdık.

Kemerinin altında bir geri test ve optimizasyon yok.

Bunu daha önce hiç yapmadım, biri bana hala onaylanma şansı olup olmadığını söyleyebilir mi?

Öyleyse, önümüzdeki hafta giriş ayarlarıyla oynamamıza izin verilecek mi, verilmeyecek mi?

Jim

 
TradingGurus :

Sonunda EA'mızı son teslim tarihinden önce yaklaşık 5 dakika ayırdık.

Kemerinin altında bir geri test ve optimizasyon yok.

Bunu daha önce hiç yapmadım, biri bana hala onaylanma şansı olup olmadığını söyleyebilir mi?

Öyleyse, önümüzdeki hafta giriş ayarlarıyla oynamamıza izin verilecek mi, verilmeyecek mi?

Jim

İyi Şanslar Jim!

EA'nız 2010.01.01'den 2010.08.01'e kadar herhangi bir hata ( ticari hatalar vb.) ve kâr olmadan doğru bir şekilde geriye dönük test yaptıysa, kişisel bilgileriniz de doğru olduğu sürece büyük olasılıkla onaylanacaksınız. Ancak, bu noktadan sonra ayarlar (giriş parametreleri) dahil hiçbir şeyi değiştiremezsiniz.

Botunuzu çalışırken görmeyi umuyorum!

- Patrick

Neden: