Hatalar, hatalar, sorular - sayfa 932

 
notused :

birkaç ay boyunca düzenli olarak (haftada birkaç kez) yer darlığı nedeniyle uzak temsilciler düşüyor:

veya

aynı zamanda, aracı günlüklerinde ya her şey temizdir ya da:

ve yerler aslında doldurulur:

Ağır bir şeyi test ettiğimizde kendini gösterir (yani, bir veya iki yıllık bir süre için 10 enstrümandan oluşan çok para birimi sistemi). Bir noktada aracı bir mega dosya oluşturmak istiyor gibi görünüyor (EA'nın herhangi bir çıktısı olmamasına veya dosyalarla çalışmamasına rağmen). Genel olarak, çalışmak gerçekten zorlaştı

Hesaplama: Bir yıllık onay geçmişi (M1'deki tüm onay modunda) geçici dosyalar için yaklaşık 3 Gb disk alanı gerektirir ("...\tester\Agent-0.0.0.0-xxxx\temp" klasörünü izleyin görev çalışıyor). Temsilci sayısıyla çarpın. 17 Gb zaten eşiğinde (ve 8 ajan varsa, o zaman bunun ötesinde)

Bir uzman için harika bir isim. ;)

not. Test cihazı (743) adsız sınırlamalarla karşılaşıyor...

 

Bana yardım et lütfen. Neden bir anlaşma bulamıyor (hata 4755)?

 void OnTradeTransaction( const MqlTradeTransaction& trans,
                         const MqlTradeRequest & request,
                         const MqlTradeResult & result) {
   if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol )) {
     if ( HistoryDealSelect (trans.deal)) {
       long DealMagic;
       if ( HistoryDealGetInteger (trans.deal, DEAL_MAGIC , DealMagic)) {
         //
      }
       else Print ( "HistoryDealGetInteger(" + ( string )trans.deal + ", DEAL_MAGIC, DealMagic) = false! GetLastError() = " , GetLastError ());
    }
     else Print ( "HistoryDealSelect(" + ( string )trans.deal + ") = false! GetLastError() = " , GetLastError ());
  }
}

Terminal listesi:

 2013.02 . 07 10 : 31 : 52    instant sell 0.01 EURUSD at 1.35354 ( 1.35354 / 1.35364 / 1.35354 )
2013.02 . 07 10 : 31 : 52    deal # 1028 sell 0.01 EURUSD at 1.35354 done (based on order # 1028 )
2013.02 . 07 10 : 31 : 52    deal performed [ # 1028 sell 0.01 EURUSD at 1.35354 ]
2013.02 . 07 10 : 31 : 52    order performed sell 0.01 at 1.35354 [ # 1028 sell 0.01 EURUSD at 1.35354 ]
2013.02 . 07 10 : 31 : 52    HistoryDealGetInteger ( 1028 , DEAL_MAGIC , DealMagic) = false ! GetLastError () = 4755
 
Ashes :

Hesaplama: Bir yıllık onay geçmişi (M1'deki tüm onay modunda) geçici dosyalar için yaklaşık 3 Gb disk alanı gerektirir ("...\tester\Agent-0.0.0.0-xxxx\temp" klasörünü izleyin görev çalışıyor). Temsilci sayısıyla çarpın. 17 Gb zaten eşiğinde (ve 8 ajan varsa, o zaman bunun ötesinde)

Bir uzman için harika bir isim. ;)

Teşekkür ederim! 16GB'ın yeterli olmayabileceğini bile anlayamadım. Ajanları başka bir diske aktaracağım - 650 GB, umarım bu yeterlidir.

Bunu da gözlemledim - özellikle bilgisayar yüklendiğinde. Ancak son zamanlarda, yüklü bir bilgisayarla, testin tek bir geçişi terminali kapatıyor (bu bir boşluk değil - terminal, 650 GB boş alanın olduğu yerdir). Ancak tüm olası süreçleri öldürürseniz - her şey bir patlama ile gider.
 
voix_kas :

Bana yardım et lütfen. Neden bir anlaşma bulamıyor (hata 4755)?

Kod strateji test cihazında test edildiyse, HistoryDealSelect ile ilgili sorunlar olabilir.

yazılar


 
sion :

Kod strateji test cihazında test edildiyse, HistoryDealSelect ile ilgili sorunlar olabilir.

yazılar


Yapıyı HistorySelect() ile kullanırsam, her şey yolunda gider.

OnTradeTransaction'da çalışmıyor. Muhtemelen bu olay, işlemle ilgili bilgiler belirli bir veritabanına yerleştirilmeden önce gerçekleşir. Belgelerdeki açık belirtiye rağmen:

TRADE_TRANSACTION_DEAL_ADD - Geçmişe bir anlaşma ekleme. Hesap bakiyesi ile emir yürütme veya işlemler sonucunda gerçekleştirilir.

 
voix_kas :

Yapıyı HistorySelect() ile kullanırsam, her şey yolunda gider.

OnTradeTransaction'da çalışmıyor. Muhtemelen bu olay, işlemle ilgili bilgiler belirli bir veritabanına yerleştirilmeden önce gerçekleşir. Belgelerdeki açık belirtiye rağmen:

TRADE_TRANSACTION_DEAL_ADD - Geçmişe bir anlaşma ekleme. Hesap bakiyesi ile emir yürütme veya işlemler sonucunda gerçekleştirilir.

Burada test ettik, HistorySelect() ile çalıştı, HistoryDealSelect aracılığıyla aynı istek zaten başarısız oldu. Bu örnekte, veritabanına yerleştirme hızı etkilemedi.

Yani strateji test cihazında kontrol ediyor musunuz? Gerçek hayatta, büyük olasılıkla iyi çalışacaktır.

 
sion :

Burada test ettik, HistorySelect() ile çalıştı, HistoryDealSelect aracılığıyla aynı istek zaten başarısız oldu. Bu örnekte, veritabanına yerleştirme hızı etkilemedi.

Yani strateji test cihazında kontrol ediyor musunuz? Gerçek hayatta, büyük olasılıkla, iyi çalışacaktır.

HistorySelect () biçiminde bir döküm içeren bu kodun düzgün çalıştığını onaylıyorum:  

 void OnTradeTransaction( const MqlTradeTransaction& trans,
                         const MqlTradeRequest & request,
                         const MqlTradeResult & result) {
   if ((trans.type == TRADE_TRANSACTION_DEAL_ADD) && (trans.symbol == _Symbol )) {
     if ( HistorySelect ( 0 , TimeTradeServer ())) {
       for ( int i = 0 ; i < HistoryDealsTotal (); i++) {
         ulong Ticket = HistoryDealGetTicket (i);
         if (trans.deal == HistoryDealGetInteger (Ticket, DEAL_ORDER )) {
           Print ( HistoryDealGetInteger (Ticket, DEAL_MAGIC ));
           break ;
        }
      }
    }
     else Log( "HistorySelect(0, TimeTradeServer() = false! GetLastError() = " , GetLastError ());
  }
}

Geliştiricinin bariz bir hatayı düzeltmesini beklemek kalır.

 
Evet, strateji test cihazında kontrol ediyorum. Gerçek zamanlı olarak herhangi bir sorun yoktur.
 
voix_kas :
Evet, strateji test cihazında kontrol ediyorum. Gerçek zamanda sorun yok.
Tynts . İşe yarayabilir, büyük olasılıkla hiçbir şey değişmedi.
 
sion :
Tynts . Kullanışlı olabilir, büyük olasılıkla hiçbir şey değişmedi.

Genel olarak, ihtiyaçlarım için bir geçici çözüm buldum. OnTradeTransaction olmadan.

HistoryDealGetTicket() işleviyle ilgili ek bir soru vardı.

Belgeler, işlem bilet numarasını döndürdüğünü söylüyor. Aynı zamanda, bir hata döndürme durumu açıkça tanımlanmamıştır, örneğin, "> 0" için döndürülen değeri kontrol etmek gerekli midir?

Aynı şekilde HistoryOrderGetTicket() ile. Ancak, örnekteki sonuncusu pozitif bir dönüş değeri kontrolüne sahiptir.

Forum aramaları, insanların hem sipariş hem de ticaret için getiri değerini kontrol ettiğini gösteriyor.

Büyük olasılıkla, böyle bir kontrol, örneğin HistoryDealTotal()-1'den daha büyük bir sıra numarasına sahip bir anlaşma talebi olması durumunda yapılmalıdır. Ancak geliştiricilere MQL5 dilinin belgelerini açıkladıkları için minnettardım.