KimIV'ten faydalı özellikler - sayfa 44

 

GetNearestDownFractal() işlevini kullanma örnekleri.

  • Mevcut grafikte en yakın üst fraktalın fiyat seviyesi. Fraktal formül 2-2 (standart).
     Message ( GetNearestUpFractal ()) ;
  • USDJPY H1 grafiğindeki en yakın üst fraktalın fiyat seviyesi. Fraktal formül 5-2'dir.
     Message ( GetNearestUpFractal ( " USDJPY " , PERIOD_H1 , 5 )) ;
  • Mevcut grafikte en yakın 4-3 yukarı fraktalın fiyat seviyesi boyunca yatay bir çizgi çizin.
     double p = GetNearestUpFractal ( NULL , 0 , 4 , 3 ) ;
    SetHLine ( Red , "" , p ) ; 

not. GetNearestUpFractal() işlevini test etmek için bir komut dosyası ektedir.

Dosyalar:
 

CorrectTF() işlevi.

Bu işlevi, bazen bir göstergenin veya danışmanın giriş parametrelerinde, tam bir dakika sayısına eşit olan yanlış zaman dilimini kolayca belirleyebildiğimi keşfettikten sonra yazdım. Örneğin, saat için 60 yerine 50 yazdım. Şey... bir nevi kaçırdım. Böylece, iRSI() işlevinin yanlış zaman çerçevesi için sıfır döndürdüğü ortaya çıktı. Diğer işlevler hakkında hiçbir şey söylemeyeceğim çünkü kontrol etmedim. Ve dikkatsizlikten kaynaklanan kendi hatalarımdan kaynaklanan can sıkıcı yanlış anlamaları önlemek için, bu işlevi "aptallara" karşı temel bir koruma olarak yazdım. Girdi parametresini "en yakın" doğru zaman dilimine göre ayarlar ve değerini döndürür.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.03.2008                                                     |
//|  Описание : Корректирует таймфрейм под ближайший поддерживаемый МТ4.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
int CorrectTF ( int TimeFrame = 0 ) {
   if ( TimeFrame == 0 ) TimeFrame = Period () ;
   if ( TimeFrame < PERIOD_M5                          ) return ( PERIOD_M1 ) ;
   if ( TimeFrame >= PERIOD_M5   && TimeFrame < PERIOD_M15 ) return ( PERIOD_M5 ) ;
   if ( TimeFrame >= PERIOD_M15 && TimeFrame < PERIOD_M30 ) return ( PERIOD_M15 ) ;
   if ( TimeFrame >= PERIOD_M30 && TimeFrame < PERIOD_H1 ) return ( PERIOD_M30 ) ;
   if ( TimeFrame >= PERIOD_H1   && TimeFrame < PERIOD_H4 ) return ( PERIOD_H1 ) ;
   if ( TimeFrame >= PERIOD_H4   && TimeFrame < PERIOD_D1 ) return ( PERIOD_H4 ) ;
   if ( TimeFrame >= PERIOD_D1   && TimeFrame < PERIOD_W1 ) return ( PERIOD_D1 ) ;
   if ( TimeFrame >= PERIOD_W1   && TimeFrame < PERIOD_MN1 ) return ( PERIOD_W1 ) ;
   if ( TimeFrame >= PERIOD_MN1                          ) return ( PERIOD_MN1 ) ;
}
not. Ekli, CorrectTF() işlevini test etmek için bir komut dosyasıdır.
Dosyalar:
 

DateBeginQuarter() işlevi.

Bu fonksiyon, çeyreğin başlangıç tarihini numarasına göre döndürür. Örneğin, şimdi 08/27/2008 ise, mevcut çeyreğin başlangıç tarihi 07/01/2008 olacaktır. İşlev yalnızca bir parametre alır - mevcut olana göre çeyreğin sayısı. Örneğin, 0 geçerli çeyrek, 1 sonraki ve -1 önceki çeyrektir. Yani, pozitif çeyrek sayıları gelecekten, sıfır ve negatif sayılar geçmişten tarih isteyecektir. Dönüş değeri, 1 Ocak 1970 00:00'dan bu yana geçen saniye sayısıdır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.05.2008                                                     |
//|  Описание : Возвращает дату начала квартала                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - позапрошлый)                      |
//|                                    (-1 - прошлый)                          |
//|    nq - номер квартала             ( 0 - текущий)                          |
//|                                    ( 1 - следующий)                        |
//|                                    ( 2 - последующий)                      |
//+----------------------------------------------------------------------------+
datetime DateBeginQuarter ( int nq = 0 ) {
   int ye = Year () - MathFloor ( nq / 4 ) ;
   nq = MathMod ( nq , 4 ) ;
   int mo = Month () - MathMod ( Month () + 2 , 3 ) + 3 * nq ;
   if ( mo < 1 ) {
     mo += 12 ;
     ye --;
   }
   if ( mo > 12 ) {
     mo -= 12 ;
     ye ++;
   }

   return ( StrToTime ( ye + " . " + mo + " .01 " )) ;
}

PS Ekli, DateBeginQuarter() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 

DateOfMonday() işlevi.

Bu işlev, numarasına göre haftanın başlangıç tarihini (Pazartesi tarihi) döndürür. Örneğin, şimdi 08/29/2008 ise, mevcut haftanın başlangıç tarihi 08/25/2008 olacaktır. İşlev yalnızca bir parametre alır - geçerli olana göre haftanın sayısı. Örneğin, 0 geçerli hafta, 1 sonraki hafta ve -1 önceki haftadır. Yani, pozitif hafta sayıları gelecekten, sıfır ve negatif olanlar geçmişten tarihler isteyecektir. Dönüş değeri, 1 Ocak 1970 00:00'dan bu yana geçen saniye sayısıdır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.05.2008                                                     |
//|  Описание : Возвращает дату понедельника по номеру недели                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|                                    (-2 - предпредыдущая неделя)            |
//|                                    (-1 - предыдущая неделя)                |
//|    nn - номер недели               ( 0 - текущая неделя)                   |
//|                                    ( 1 - следующая неделя)                 |
//|                                    ( 2 - последующая неделя)               |
//+----------------------------------------------------------------------------+
datetime DateOfMonday ( int nn = 0 ) {
   datetime dt = StrToTime ( TimeToStr ( TimeCurrent () , TIME_DATE )) ;

   while ( TimeDayOfWeek ( dt ) != 1 ) dt -= 24 * 60 * 60 ;
   dt += nn * 7 * 24 * 60 * 60 ;

   return ( dt ) ;
}

PS Ekli, DateOfMonday() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 

Fibonacci() işlevi.

Bu fonksiyon, Fibonacci serisinin elemanını seri numarasına göre döndürür.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.08.2008                                                     |
//|  Описание : Возвращает элемент ряда Фибоначчи по его порядковому номеру.   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    n - номер элемента ряда                                                 |
//+----------------------------------------------------------------------------+
int Fibonacci ( int n ) {
   int a = 0 , b = 0 , i = 1 , s = 0 ;

   if ( n == 1 ) s = 1 ;
   if ( n > 1 ) {
     s = 1 ;
     while ( i < n ) {
       i ++;
       a = b ;
       b = s ;
       s = a + b ;
     }
   }
   return ( s ) ;
}

PS Ekli, Fibonacci() işlevini test etmek için bir komut dosyasıdır.

Dosyalar:
 

GetNameMA() işlevi.

Bu işlev, tanımlayıcısına göre MA yönteminin adını (Hareketli Ortalamalar) döndürür. Bu işlev yorumlarda, gösterge mesajlarında, danışmanlarda kullanım için uygundur.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование метода МА.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mm - идентификатор метода МА                                            |
//+----------------------------------------------------------------------------+
string GetNameMA ( int mm ) {
   switch ( mm ) {
     case MODE_SMA : return ( " SMA " ) ;
     case MODE_EMA : return ( " EMA " ) ;
     case MODE_SMMA : return ( " SMMA " ) ;
     case MODE_LWMA : return ( " LWMA " ) ;
     default        : return ( " Unknown Method " ) ;
   }
}
 
KimIV писал (а) >>

GetNameMA() işlevi.

Bu işlev, tanımlayıcısına göre MA yönteminin adını (Hareketli Ortalamalar) döndürür. Bu işlev yorumlarda, gösterge mesajlarında, danışmanlarda kullanım için uygundur.

Bunu saçmalık olarak algılamayın....

 default        : return ( " Unknown Method " ) ;

Sadece tutarlı olacaksan, o zaman sonuna kadar ...
 
TheXpert писал (а) >>

Bunu saçmalık olarak algılamayın....

mümkün değil... teşekkürler! Sabit!

 
KimIV

Tünaydın !

Deneyimin biraz taşınmasına yardımcı olun.

Siparişlerin enfeksiyonunu açar ve duruma göre bu paketi kapatmaz.

onlar. sadece bir anlaşma varsa, o zaman pozdan çıkar ve eğer 2 anlaşma varsa, o zaman durur.

Dosyalar:
panzer.mq4  5 kb
 

GetPriceDiffInPoint() işlevi.

Bu fonksiyon, sayılarına göre verilen iki çubuk arasındaki fiyat farkını döndürür. Bu işlevi geliştirmenin amacı, parkur hareketinin büyüklüğünü ve yönünü belirlemekti. GetPriceDiffInPoint() işlevi, çubukların hangi pivot noktalarının (Açık veya Yüksek veya Düşük veya Kapalı) dikkate alınacağını bağımsız olarak belirler. İşlev, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • sy - Araç adı. "" veya NULL geçerli karakterdir. Varsayılan değer NULL'dur .
  • tf - Zaman çerçevesi. Varsayılan değer 0 , geçerli karakterdir.
  • n2 - Sol çubuğun numarası. Varsayılan değer 2'dir .
  • n1 - sağ çubuğun numarası. Varsayılan değer 1'dir .

Geri dönüş değeri:

  • pozitif - N2 ve N1 çubukları arasında oranda bir artış oldu.
  • negatif - N2 ve N1 çubukları arasında oranda bir düşüş oldu.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает ценовую разницу в пунктах между двумя барами.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий таймфрейм)  |
//|    n2 - номер левого бара               (    2       - второй бар)         |
//|    n1 - номер правого бара              (    1       - первый бар)         |
//|  Возвращаемое значение:                                                    |
//|    положительное - между барами N2 и N1 был рост курса                     |
//|    отрицательное - между барами N2 и N1 было снижение курса                |
//+----------------------------------------------------------------------------+
int GetPriceDiffInPoint ( string sy = " 0 " , int tf = 0 , int n2 = 2 , int n1 = 1 ) {
   if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
   double p = MarketInfo ( sy , MODE_POINT ) ;
   int      d = MarketInfo ( sy , MODE_DIGITS ) ;
   int      dd = 0 , k = iBars ( sy , tf ) ;

   if ( n1 > k || n2 > k )
     Print ( " GetPriceDiffInPoint(): Недостаточно баров для " , sy , " " , GetNameTF ( tf )) ;
   else {
     if ( n1 > 0 && n2 > 0 ) {
       int d1 = NormalizeDouble (( iHigh ( sy , tf , n1 ) - iLow ( sy , tf , n2 )) / p , d ) ;
       int d2 = NormalizeDouble (( iLow ( sy , tf , n1 ) - iHigh ( sy , tf , n2 )) / p , d ) ;

       if ( MathAbs ( d1 ) > MathAbs ( d2 )) dd = d1 ;
       if ( MathAbs ( d1 ) < MathAbs ( d2 )) dd = d2 ;
       if ( MathAbs ( d1 ) == MathAbs ( d2 )) {
         if ( iOpen ( sy , tf , n2 ) > iClose ( sy , tf , n1 )) dd = d2 ; else dd = d1 ;
       }
     }
   }

   return ( dd ) ;
}