MQL uzmanları için soru - sayfa 16

 
artmedia70 :

Böyle bir sembol var mı?

Aşağıda teşekkür ederim!!! Böyle bir aksaklık asla bulamazdım... Ders kitaplarına saçma sapan yazarlar ve baştan çıkardım, bakmadan kopyalarım...
 

Lütfen bana hatanın nerede olduğunu söyle? Sonuçlar neden farklı?

 //+------------------------------------------------------------------+
//|                                                       TestFr.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   double FrUpz= 0 ;
   double FrUp1 = GetFractal( "0" , 0 , 1 , MODE_UPPER );
   double FrUp2 = GetFractal( "0" , 0 , 2 , MODE_UPPER );
   double FrUp3 = GetFractal( "0" , 0 , 3 , MODE_UPPER );
   Print ( "# FrUp1=" ,FrUp1);
   Print ( "# FrUp2=" ,FrUp2);
   Print ( "# FrUp3=" ,FrUp3);
   for ( int z= 1 ;z<= 3 ;z++)
      {
       FrUpz = GetFractal( "0" , 0 , z, MODE_UPPER );
       Print ( "z=" ,z, " FrUpz=" ,FrUpz);
      } 
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal( string sy= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ;
   int     i, k= iBars (sy, tf), kf;
   for (i= 3 ; i<k; i++) {
     if (mode== MODE_LOWER ){
    f= iFractals (sy, tf, MODE_LOWER , i);
     if (f!= 0 ) {
      kf++;
       if (kf>nf) return ( iLow (sy,tf,i));
     } 
    }
     if (mode== MODE_UPPER ){
    f= iFractals (sy, tf, MODE_UPPER , i);
     if (f!= 0 ) {
      kf++;
       if (kf>nf) return ( iHigh (sy,tf,i));
      }
    }
  }
   Print ( "GetFractalBar(): Фрактал не найден" );
   return (- 1 );
}

Sonuç:

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083

 
khorosh :

Lütfen bana hatanın nerede olduğunu söyle? Sonuçlar neden farklı?

Sonuç:

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=3 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=2 FrUpz=1.37083

2014.02.17 19:56:38.828 TestFr EURUSD,M15: z=1 FrUpz=1.37104

2014.02.17 19:56:38.828 TestFr EURUSD,M15: # FrUp3=1.37056

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp2=1.37162

2014.02.17 19:56:38.812 TestFr EURUSD,M15: # FrUp1=1.37083


Kontrol kolaylığı için, fonksiyon biraz elden geçirildi, Şimdi çubuğun numarasını döndürür

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru  & khorosh        |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.02.2009                                                     |
//|  Описание : Возвращает фрактал по его номеру.                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
double GetFractal( string sy= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ;
   int     i,k= iBars (sy,tf),kf;
   for (i= 3 ; i<k; i++) 
     {
       if (mode== MODE_LOWER )
        {
         f= iFractals (sy,tf, MODE_LOWER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
       if (mode== MODE_UPPER )
        {
         f= iFractals (sy,tf, MODE_UPPER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
     }
   Print ( "GetFractalBar(): Фрактал не найден" );
   return (- 1 );
  }
//+------------------------------------------------------------------+

Sonuç

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=3 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=2 FrUpz=9.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:45:57.409 TestFr GBPUSD,H1: # FrUp1=13.0


 

Tüm değişkenlerin açık bir şekilde başlatılması eklendi

 double GetFractal( string sy= "0" , int tf= 0 , int nf= 0 , int mode= MODE_UPPER ) 
  {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double f= 0 ;
   int     i= 0 ,k= iBars (sy,tf),kf= 0 ;
   for (i= 3 ; i<k; i++) 
     {
       if (mode== MODE_LOWER )
        {
         f= iFractals (sy,tf, MODE_LOWER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iLow(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
       if (mode== MODE_UPPER )
        {
         f= iFractals (sy,tf, MODE_UPPER ,i);
         if (f!= 0 ) 
           {
            kf++;
//            if(kf>nf) return(iHigh(sy,tf,i));
               if (kf>nf) return (i);
           }
        }
     }
   Print ( "GetFractalBar(): Фрактал не найден" );
   return (- 1 );
  }

Sonuç

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

Geliştiricilere göstermemiz gerekiyor. İşlevlerde bir sorun var

 

kodu olduğunu fark ettim

Print(ChartID()," ",ChartGetInteger(ChartID(), CHART_HEIGHT_IN_PIXELS ,0));

göstergeye yerleştirilen garip sonuçlar verir. Bu nedenle, göstergenin gerçekten sıfırlandığı grafiğin sekmesi açıksa, ana grafik penceresinin yüksekliğinin sonuçları oldukça doğru bir şekilde görüntülenir.

Ancak "yerel" grafikten çıkar çıkmaz, bir nedenden dolayı sonuç 75'e eşit oluyor (elbette, diğer durumlarda sonuçlar farklı olabilir), ancak grafik tanımlayıcısının değeri aynı kalıyor.

"Yerel" arsaya döndüğünüzde, yükseklik değerleri doğru hale gelir.

Geliştiricilerden ve "bilgili" olanlardan, özelliğin burada ne olduğunu açıklamaları için büyük bir istek. Böyle mi olması gerekiyor?! Bir şey inanılmaz!

Eğer öyleyse, herhangi bir açık sekme için "yerel" grafiğin yüksekliğinin doğru değerini veren bir kod önermenizi rica ediyorum.
 
Vinin :

Tüm değişkenlerin açık bir şekilde başlatılması eklendi

Sonuç

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=3 FrUpz=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=2 FrUpz=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: z=1 FrUpz=13.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp3=24.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp2=17.0

2014.02.17 21:50:09.462 TestFr GBPUSD,H1: # FrUp1=13.0

Geliştiricilere göstermemiz gerekiyor. İşlevlerde bir sorun var

Sorunumla ilgilendiğiniz için teşekkür ederim. Sebebin yalnızca, işlevdeki iki değişkenin açıkça başlatılmamış olmasından kaynaklandığı ortaya çıktı. Kim'in tüm işlevlerini gözden geçirip düzeltmemiz gerekecek.
 

Tünaydın.

I.Kim'in işlevleri danışman kodunda yer alır. Hangi "monte edilmiş" kitaplıkların çağrısını sağlar. "Harici parametrelerden" sonraki kodda şunlar sağlanır:

 //-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

Ancak, şans eseri (aynı mt4 güncellemesinden sonra - danışman çalışmıyor), "Danışman Özellikleri" penceresinde, "bağımlılıklar" sekmesinde garip bir giriş fark ettim:

Söyleyin bana, bu hata ne anlama geliyor ve nasıl düzeltilir (her iki kitaplık da Dahil Et klasöründe hala mevcutsa)? Kitaplıklar klasörü ne olacak?

 
Rita :

Tünaydın.

I.Kim'in işlevleri danışman kodunda yer alır. Hangi "monte edilmiş" kitaplıkların çağrısını sağlar. "Harici parametrelerden" sonraki kodda şunlar sağlanır:

Ancak, şans eseri (aynı mt4 güncellemesinden sonra - danışman çalışmıyor), "Danışman Özellikleri" penceresinde, "bağımlılıklar" sekmesinde garip bir giriş fark ettim:

Söyleyin bana, bu hata ne anlama geliyor ve nasıl düzeltilir (her iki kitaplık da Dahil Et klasöründe hala mevcutsa)? Kitaplıklar klasörü ne olacak?


stderror.mqh , ErrorDescription işlevini , kaynak koduyla birlikte terminalin standart dağıtımındaki Kitaplıklar klasöründe bulunan stdlib.ex4 kitaplığından içe aktarır. Bu dosyanın orada olup olmadığını kontrol edin, yoksa başka bir terminalden alın.
 

Her iki klasör de (Include ve Libraries) stdlib kaynaklarını içerir. Her ihtimale karşı, Include klasöründen ekledim-kopyaladım.

Ancak yukarıda açıklanan hata hala "bağımlılıklar" sekmesinde görüntüleniyor. Belki bir şekilde bu işlevlerin çağrısını değiştirin: Bunun yerine:

 //-- Подключаемые модули --
#include <stderror.mqh>
#include <stdlib.mqh>

Başka bir şekilde arama mı yapıyorsunuz?

Yoksa MT4'ün son versiyonunda I.Kim'in fonksiyonlarını kullanmak artık imkansız mı olacak?

 
Rita :

Her iki klasör de (Include ve Libraries) stdlib kaynaklarını içerir. Her ihtimale karşı, Include klasöründen ekledim-kopyaladım.

Ancak yukarıda açıklanan hata hala "bağımlılıklar" sekmesinde görüntüleniyor. Belki bir şekilde bu işlevlerin çağrısını değiştirin: Bunun yerine:

Başka bir şekilde arama mı yapıyorsunuz?

Yoksa MT4'ün son versiyonunda I.Kim'in fonksiyonlarını kullanmak artık imkansız mı olacak?


stdlib.ex4 yürütülebilir dosyasının Kitaplıklar klasöründe bulunduğundan emin olun, ancak teslimattaki standart dosya olan Kimov'a ait gibi görünmüyor.


Bir seçenek olarak, Kimov işlevinin ondan ne aldığını görün ve neyin yanlış olduğunu anlayın.