Hatalar, hatalar, sorular - sayfa 343

 
Kairoser :

Tünaydın!

420 sürümüne güncelledikten sonra Expert Advisor'ı test etmeye başladım ve bir nedenden dolayı "birleşmeye" başladığını fark ettim. İşlemleri analiz ettim ve zararı durdurmanın var olmayan fiyatlarda tetiklendiğini fark ettim. Örneğin, EURUSD çifti için, 1.06520 olarak bir stop loss ayarlanır, bu çubuktaki maksimum fiyat 1.05920 olmasına rağmen tetiklenir. Daha fazla bakıyorum ve bu tür birçok anlaşma olduğunu görüyorum. Aynı prensiple (var olmayan fiyatlarla), kar al da tetiklenir - delta aynıdır - 600 puan. Grafikteki test cihazında, yukarı ve aşağı oklar, çubuklardan uzakta havada "asılır".

Ekran görüntüsü ekliyorum.

MetaQuotes-Demo'da testler yapın, lütfen. Alpari'nin açıkçası hatalı (yayılmalarda) bir grafik geçmişi var.
 
Renat :
MetaQuotes-Demo'da testler yapın, lütfen. Alpari'nin açıkçası hatalı (yayılmalarda) bir grafik geçmişi var.
Evet, gerçekten de MetaQuotes-Demo sunucusunda her şey yolunda gidiyor. Yardım için teşekkürler.
 

Birkaç soruyla ilgileniyor.

1. Strateji test edicide göstergeler kullanılıyorsa sistem nasıl performans gösteriyor? İlk olarak, tutamaçların belirtildiği tüm göstergeler hesaplanır ve ancak bundan sonra OnTick başlatılır mı?

2. Evet ise, önce OnTick'i başlatmak ve ardından komutla ekli göstergelerin hesaplanmasını başlatmak işlevselliğe zarar vermez. Bu nedenle, örneğin, her beş basamaklı kene üzerinde göstergeleri hesaplamam gerekmiyor, örneğin sadece dört işaret üzerinde. OnTick'i başlatırken, mevcut ve önceki fiyatı kontrol eder ve göstergeleri hesaplamaya başlayıp başlamamaya karar veririm.

Bu nedenle, birçoğu varsa ve oldukça "ağır" iseler, optimizasyon modunda kaynakları yerler ...

Ontic'te tutamaçlar oluşturmayı deneyebilir ve sonunda göstergeleri silebilseniz de ve ontic'i bir sonraki başlatışınızda (gerekirse), yeniden tanıtıcılar oluşturun - ve bunun performansta fayda sağlayıp sağlamadığı tam olarak açık değil ...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish :

Birkaç soruyla ilgileniyor.

1. Strateji test edicide göstergeler kullanılıyorsa sistem nasıl performans gösteriyor? İlk olarak, tutamaçların belirtildiği tüm göstergeler hesaplanır ve ancak bundan sonra OnTick başlatılır mı?

Evet. Daha genel bir yanıt, olay işleyiciye yapılan her çağrıdan önce tüm göstergelerin değerlerini hesaplamaktır:

  • OnTick
  • Zamanlayıcı
  • OnChartEvent ve benzeri
 
olyakish :
2. Evet ise, önce OnTick'i başlatmak ve ardından komutla ekli göstergelerin hesaplanmasını başlatmak işlevselliğe zarar vermez. Bu nedenle, örneğin, her beş basamaklı kene üzerinde göstergeleri hesaplamam gerekmiyor, örneğin sadece dört işaret üzerinde. OnTick'i başlatırken, mevcut ve önceki fiyatı kontrol eder ve göstergeleri hesaplamaya başlayıp başlamamaya karar veririm.

Bu nedenle, birçoğu varsa ve oldukça "ağır" iseler, optimizasyon modunda kaynakları yerler ...

Bu şekilde yapamazsınız. Test için daha hızlı kene oluşturma modlarını kullanabilirsiniz:

  1. Dakika çubuklarında OHLC fiyatları
  2. Sadece test döneminin açılış fiyatları
 
Rosh :

Bu şekilde yapamazsınız. Test için daha hızlı kene oluşturma modlarını kullanabilirsiniz:

  1. Dakika çubuklarında OHLC fiyatları
  2. Sadece test döneminin açılış fiyatları
Bu modları ve özelliklerini biliyorum. Ben sadece optimizasyonu benim için kabul edilebilir (muhtemelen optimal) yollarla hızlandırmak istedim.
 

Anlamama yardım et , veri dönüştürme işlevleri çalışmak istemiyor, kontrol etmek için basit bir komut dosyası yazdım. 420, işletim sistemi - 64 bit oluşturun.

 void OnStart ()
  {
//---
   int i= 0 ;
   bool res= false ;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double    buf2;
   double    buf3;
   double    buf4;
   double    buf5;
   
   int filehandle= FileOpen ( "56451.csv" , FILE_READ | FILE_CSV | FILE_ANSI , ',' ,CP_UTF8);

   if (filehandle== INVALID_HANDLE ) Print ( "Ошибка № - " , GetLastError ());
   else
     {

       while (!res)
        {
         stroka1 = FileReadString (filehandle);
         stroka2 = FileReadString (filehandle);
         stroka3 = FileReadString (filehandle);
         stroka4 = FileReadString (filehandle);
         stroka5 = FileReadString (filehandle);

         buf1 = StringToTime (stroka1);
         buf2 = StringToDouble (stroka2);
         buf3 = StringToDouble (stroka3);
         buf4 = StringToDouble (stroka4);
         buf5 = StringToDouble (stroka5);

         res= FileIsEnding (filehandle);
         i++;
        }
       FileClose (filehandle);
     }
  }
//+------------------------------------------------------------------+
Dosyalar:
56451.zip  16 kb
 
sergey1294 :

Anlamama yardım et, veri dönüştürme işlevleri çalışmak istemiyor, kontrol etmek için basit bir komut dosyası yazdım. 420, işletim sistemi - 64 bit oluşturun.


Herhangi bir aşamada alıntılardan kurtulun....
 
AlexSTAL :
Herhangi bir aşamada alıntılardan kurtulun....
Ama nasıl yapmalı?
 
sergey1294 :
Ama nasıl yapmalı?

ya orijinal olarak dosyada olmadıklarını ya da okurken ek olarak işlevi kullanın, örneğin:

 string StringWithoutQuotes( string Value)
{
   StringTrimLeft (Value);
   StringTrimRight (Value);
   return ( StringSubstr (Value, 1 , StringLen (Value) - 2 ));
}

..........

         stroka1 = StringWithoutQuotes( FileReadString (filehandle));
         stroka2 = StringWithoutQuotes( FileReadString (filehandle));