Hatalar, hatalar, sorular - sayfa 1661

 

Bu bir hata veya soru, ama anlaşılmaz bir şey... hem test cihazında hem de hata ayıklamada oluyor... EURUSD'de her şey yolunda ama USDJPY'de böyle bir sorun var...

Kodun bir parçası

 void funArrPositionTicket( ulong & arrBuy[], int & buySize, ulong & arrSell[], int & sellSize)
{
 double bp, sp;
  buyProfit = 0 ; sellProfit = 0 ; buyVolume = 0 ; sellVolume = 0 ;
   int i, total = PositionsTotal ();
     for (i = 0 ; i < total; i++)
     {
       if ( PositionGetTicket (i) > 0 && PositionGetString ( POSITION_SYMBOL ) == _Symbol )
       {
         if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_BUY )
         {
          buySize = ArraySize (arrBuy);
           ArrayResize (arrBuy, buySize+ 1 );
            arrBuy[buySize] = ( int ) PositionGetInteger ( POSITION_TICKET );
           buyProfit += PositionGetDouble ( POSITION_PROFIT );
          buyVolume += PositionGetDouble ( POSITION_VOLUME );
         }
         if ( PositionGetInteger ( POSITION_TYPE ) == POSITION_TYPE_SELL )
         {
          sellSize = ArraySize (arrSell);
           ArrayResize (arrSell, sellSize+ 1 );
            arrSell[sellSize] = ( int ) PositionGetInteger ( POSITION_TICKET );
           sp = PositionGetDouble ( POSITION_PROFIT );
           sellProfit += sp;
          sellVolume += PositionGetDouble ( POSITION_VOLUME );
         }
       }
     }
} /*******************************************************************/

Koddan sizi ilgilendiren şey, ekran görüntülerinden açıktır ... kodda vurgulanmıştır.

7.39 kayıplı BİR Satış emri var ama kod sadece 0.93 kayıp veriyor


Bir sonraki ekrandaki yeşil ok, hata ayıklamanın bu satırda durdurulduğunu gösterir...



Yani, sl değişkenine zaten PositionGetDouble(POSITION_PROFIT) değeri atanmıştır.


SORU: Bu neden oluyor??? Bu bir hata mı yoksa düzenlilik mi, mql5 test cihazının/hata ayıklayıcısının özel özellikleri mi???

sp değişkeni biraz sonra tanıtıldı, başlangıçta fonksiyona girerken sıfırlanan sellProfit değişkeni kontrol edildi.

 
Alexey Viktorov :

Bu bir hata veya soru, ama anlaşılmaz bir şey... hem test cihazında hem de hata ayıklamada oluyor... EURUSD'de her şey yolunda ama USDJPY'de böyle bir sorun var...

Mevcut olandan bir düzine veya iki önceki yapıda, görselleştirici bir onay işareti için geleceği gösterdiğinde bir sorun oluştu, ancak MQL iyi çalıştı - geleceği görmedi.

Bir sonraki onay işaretinde PositionGetDouble( POSITION_PROFIT ) karşılaştırmayı deneyin. Görselleştiricinin ondan önce gösterdiğiyle eşleşiyorsa, sorun budur. Slava açıklamalarda bulundu ve düzeltme sözü verdi.

Değilse, o zaman başka bir hata.

 
fxsaber :

Mevcut olandan bir düzine veya iki önceki yapıda, görselleştirici bir onay işareti için geleceği gösterdiğinde bir sorun oluştu, ancak MQL iyi çalıştı - geleceği görmedi.

Bir sonraki onay işaretinde PositionGetDouble( POSITION_PROFIT ) karşılaştırmayı deneyin. Görselleştiricinin ondan önce gösterdiğiyle eşleşiyorsa, sorun budur. Slava açıklamalarda bulundu ve düzeltme sözü verdi.

Değilse, o zaman başka bir hata.

Belki öyledir, ancak kod bir sonraki onay işaretini kontrol etmemektedir. Yeni bir barın açılışı sırasında sadece bir kez. Ve bunların bir sonraki tikteki değerler olduğunun garantisi nedir??? Evet, hayır ... Tekrar başlattım, kayıp 2,55'i gösterdi ve hata ayıklayıcıda hala 0,93 idi.

Öte yandan, parmaklar sonuna kadar açık... 5 numaralı test cihazı 4 numaralı test cihazından çok daha iyi... Bazı aksaklıklar ve yetersiz çalışma... Bu tür sorunları olan bir danışmanı nasıl hata ayıklayabilirsiniz??? İnsanlar başka nasıl optimize eder? Aslında, optimizasyon zaten kendini aldatmadır ve bu tür sıkıntılarla, yaslanmış 8 derecesine kadar kendini aldatma.

Demoyu kontrol etmemiz gerekecek ... bir hafta değil ...

 

Görselleştiricinin saçmalık göstermesi, test edenin kendisinin doğru olmadığı anlamına gelmez. Test cihazı, kelimenin tam anlamıyla görselleştirme problemlerini umursamıyor.

TickValue kullanarak kâr boyutunu hesaplayın ve POSITION_PROFIT ile karşılaştırın. Her şeyin eşleştiğini görün. Ve görselleştirme bir hata, öyle görünüyor.

 
fxsaber :

Görselleştiricinin saçmalık göstermesi, test edenin kendisinin doğru olmadığı anlamına gelmez. Test cihazı, kelimenin tam anlamıyla görselleştirme problemlerini umursamıyor.

TickValue kullanarak kâr boyutunu hesaplayın ve POSITION_PROFIT ile karşılaştırın. Her şeyin eşleştiğini görün. Ve görselleştirme bir hata, öyle görünüyor.

Evet, soruyu göndermeden önce saydım. Gerçeğe benziyor, ekran görüntülerine güvenebilirsiniz. Sadece kontrol etmeye başlamadım. Kayıptan, kapanışta alımın beklenen kâr olacağı partinin büyüklüğü kabul edilir. EURUSD'de her şey doğru kabul edildi, ancak USDJPY'de aniden kayıp örtüşmüyor... Formülü kontrol etmeye başladım... ve bu hatayı aldım. Görselleştiricinin hiç iş yapmadığı ortaya çıktı.

 
Alexey Viktorov :

Evet, soruyu göndermeden önce saydım. Gerçeğe benziyor, ekran görüntülerine güvenebilirsiniz. Sadece kontrol etmeye başlamadım. Kayıptan, kapanışta alımın beklenen kâr olacağı partinin büyüklüğü kabul edilir. EURUSD'de her şey doğru kabul edildi, ancak USDJPY'de aniden kayıp örtüşmüyor... Formülü kontrol etmeye başladım... ve bu hatayı aldım. Görselleştiricinin hiç iş yapmadığı ortaya çıktı.

Üzgünüm ama fikrini anlamadım. Sizce kim hatalar - bir testçi mi yoksa görselleştirici mi?
 

Script1.mq5 derlenirken hata oluştu

 //Script.mqh
typedef void (*fn)();
#import "Script1.ex5"
         void g();
#import "Script2.ex5"
         void h();
         void h( fn );
#import
class A {
public :
         void f1() { h( g ); } //Error: #1 - no one of the overloads can be applied to the function call
                               //Error: #2 - cannot resolve function address
         void f2() {    g(); } //нормально (*)
         void f3() { Print ( __FUNCTION__ ); }
};
//Script1.mq5
#property library
#include "Script.mqh"
void g() export
{
        A a;
        a.f3();
}

1 numaralı hata. İmza ile, h'ye yapılan çağrı burada nettir.

Hata #2. A::f1()'de g - anlamında h( g ) çağrısı belirsiz görünebilir, ancak diğer yandan A::f2()'de derleyici g() hakkında gereksiz sorular sormaz (ve doğru bir şekilde yapar - en azından ilk başta, uygulanmasıyla birlikte bir modüle işlev bildirimi içeren bir başlık dosyasını dahil etme ve bu modülde sonraki kullanım sorunları uzun süredir çözülmüştür). Ayrıca, Script.mqh yaygın bir başlık dosyası olduğundan, farklı şekilde yeniden yazmak zordur.

 
fxsaber :
Üzgünüm ama fikrini anlamadım. Sizce kim hatalar - bir testçi mi yoksa görselleştirici mi?

Gerçeğe yakın ancak yanlış verilere göre sayılan değerleri gösteriyorsa hamamböceklerinin test cihazında veya görselleştiricide değil mql5'te olduğu ortaya çıkıyor.

Genel olarak, katılımınız için teşekkürler, sorunu uzun vadede yeneceğim. Ve bugün para biriminin benzer başka bir bölümünü kontrol edeceğim. Belki bu, buradaki kenelerde bir sorundur, xs?

 

Neden birdenbire uyarı veriyorsun?

 void OnStart ()
{
   uchar Data[];  
   ArrayInitialize (Data, UCHAR_MAX ); // Warning: truncation of constant value
}
 
Sevgili profesyoneller, lütfen neler olduğunu anlamama yardım edin. EA, süresi 3 çubuktan 10.000 veya daha fazlasına kadar geniş bir aralıkta değiştirilebilen gösterge sinyalleri üzerinde çalışır. Göstergenin kendisi, ayrı olarak alındığında, belirtilen sınırlar dahilinde dönem değişikliklerine yeterince yanıt vererek düzgün çalışır. Ve test cihazındaki Expert Advisor, "Sıfır Bölme"ye göre 1002'den fazla bar ayarını kabul etmez. Sorun ne olabilir? Danışman kodunda herhangi bir kısıtlama bulamadım.