Yalnızca "KimIV'ten Faydalı özellikler". - sayfa 9

 

StringLower() işlevi.

Bu işlev , bir dizeyi küçük harfe dönüştürür . Tüm BÜYÜK (büyük) karakterler küçük harf (küçük) olur. StringLower() işlevi, giriş dizesi olan yalnızca bir gerekli parametreyi alır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в нижнем регистре                            |
//+----------------------------------------------------------------------------+
string StringLower( string s) {
   int c, i, k= StringLen (s), n;
   for (i= 0 ; i<k; i++) {
    n= 0 ;
    c=StringGetChar(s, i);
     if (c> 64 && c< 91 ) n=c+ 32 ;     // A-Z -> a-z
     if (c> 191 && c< 224 ) n=c+ 32 ;   // А-Я -> а-я
     if (c== 168 ) n= 184 ;             //  Ё  ->  ё
     if (n> 0 ) s=StringSetChar(s, i, n);
  }
   return (s);
}
 

StringUpper() işlevi.

Bu işlev , bir dizeyi BÜYÜK harfe dönüştürür . Tüm küçük (küçük) karakterler BÜYÜK (büyük) olur. StringUpper() işlevi, giriş dizesi olan yalnızca bir gerekli parametreyi alır.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает строку в ВЕРХНЕМ регистре                           |
//+----------------------------------------------------------------------------+
string StringUpper( string s) {
   int c, i, k= StringLen (s), n;
   for (i= 0 ; i<k; i++) {
    n= 0 ;
    c=StringGetChar(s, i);
     if (c> 96 && c< 123 ) n=c- 32 ;     // a-z -> A-Z
     if (c> 223 && c< 256 ) n=c- 32 ;   // а-я -> А-Я
     if (c== 184 ) n= 168 ;             //  ё  ->  Ё
     if (n> 0 ) s=StringSetChar(s, i, n);
  }
   return (s);
}


StringToArrayDouble() işlevi.

Bu işlev, dizeyi oluşturan gerçek sayılara böler ve her sayı diziye ayrı bir öğe olarak eklenir. Dizede kaç gerçek sayı olacak, diziye aynı sayıda eleman eklenecektir. Noktalı virgül, ayırıcı olarak tanınır. StringToArrayDouble() işlevi, dizi öğelerinin sayısını döndürür ve aşağıdaki zorunlu parametreleri alır:

  • st - Noktalı virgülle ayrılmış gerçek sayılar dizisi.
  • ad - Bir dizi gerçek sayı.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 10.10.2008                                                     |
//|  Описание : Перенос вещественных чисел из строки в массив                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка вещественных чисел через точку с запятой                    |
//|    ad - массив вещественных чисел                                          |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayDouble( string st, double & ad[]) {
   int     i= 0 , np;
   string stp;

   ArrayResize (ad, 0 );
   while ( StringLen (st)> 0 ) {
    np= StringFind (st, ";" );
     if (np< 0 ) {
      stp=st;
      st= "" ;
    } else {
      stp= StringSubstr (st, 0 , np);
      st= StringSubstr (st, np+ 1 );
    }
    i++;
     ArrayResize (ad, i);
    ad[i- 1 ]=StrToDouble(stp);
  }
   return ( ArraySize (ad));
}
 

StringToArrayInt() işlevi.

Bu işlev, dizeyi kurucu tamsayılarına böler ve her sayı diziye ayrı bir öğe olarak eklenir. Dizede kaç tam sayı olacak, diziye aynı sayıda eleman eklenecektir. Virgül, ayırıcı olarak kabul edilir. StringToArrayDouble() işlevi , dizi öğelerinin sayısını döndürür ve aşağıdaki zorunlu parametreleri alır:

  • st - Virgülle ayrılmış tamsayı değerleri dizisi.
  • ai - Tamsayı dizisi.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Перенос целочисленных значений из строки в массив              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    st - строка целочисленных значений через запятую                        |
//|    ai - целочисленный массив                                               |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//+----------------------------------------------------------------------------+
int StringToArrayInt( string st, int & ai[]) {
   int     i= 0 , np;
   string stp;

   ArrayResize (ai, 0 );
   while ( StringLen (st)> 0 ) {
    np= StringFind (st, "," );
     if (np< 0 ) {
      stp=st;
      st= "" ;
    } else {
      stp= StringSubstr (st, 0 , np);
      st= StringSubstr (st, np+ 1 );
    }
    i++;
     ArrayResize (ai, i);
    ai[i- 1 ]=StrToInteger(stp);
  }
   return ( ArraySize (ai));
}

StrSplit() işlevi.

Bu işlev, bir dizgiyi, her bir alt dizginin ayrı bir dizi öğesi olacak şekilde kendisini oluşturan alt dizgilere böler. Ayırıcı bir parametre ile ayarlanır ve isteğe bağlı olabilir. StrSplit() işlevi, dizi öğelerinin sayısını döndürür ve aşağıdaki parametreleri alır:

  • st - Sınırlandırılmış bir dize.
  • as - string türünde bir dizi öğe.
  • de - Ayırıcı. İsteğe bağlı parametre. Varsayılan değer "," (virgül) şeklindedir.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 23.06.2008                                                     |
//|  Описание : Разбиение строки на массив элементов                           |
//+----------------------------------------------------------------------------+
//|  Возврат:                                                                  |
//|    Количество элементов в массиве                                          |
//|  Параметры:                                                                |
//|    st - строка с разделителями                                             |
//|    as - строковый массив                                                   |
//|    de - разделитель                                                        |
//+----------------------------------------------------------------------------+
int StrSplit( string st, string & as[], string de= "," ) { 
   int     i= 0 , np;
   string stp;

   ArrayResize (as, 0 );
   while ( StringLen (st)> 0 ) {
    np= StringFind (st, "," );
     if (np< 0 ) {
      stp=st;
      st= "" ;
    } else {
      stp= StringSubstr (st, 0 , np);
      st= StringSubstr (st, np+ 1 );
    }
    i++;
     ArrayResize (as, i);
    as[i- 1 ]=stp;
  }
   return ( ArraySize (as));
}
 

StrTran() işlevi.

Bu işlev bir alt dizi değiştirme gerçekleştirir. Bulunan tüm olaylar değiştirilir. Örneğin, tek seferde tüm virgülleri noktalarla değiştirebilir veya tam tersini yapabilirsiniz. StrSplit() işlevi, elde edilen dizeyi döndürür ve aşağıdaki gerekli parametreleri alır:

  • str - strFrom alt dizesinin değiştirileceği dize.
  • strFrom - Değiştirilecek alt dize. strFrom alt dizesi str dizesinde bulunursa, strTo alt dizesiyle değiştirilecektir.
  • strTo - Değiştirilen alt dize.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  описание : Замена подстроки                                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    str     - текстовая строка, в которой производится замена               |
//|    strFrom - заменяемая подстрока                                          |
//|    strTo   - заменяющая подстрока                                          |
//+----------------------------------------------------------------------------+
string StrTran( string str, string strFrom, string strTo) {
   int     n;
   string strOut= "" , strTemp;

   for (n= 0 ; n< StringLen (str); n++) {
    strTemp= StringSubstr (str, n, StringLen (strFrom));
     if (strTemp==strFrom) {
      strOut= StringConcatenate (strOut, strTo);
      n=n+ StringLen (strFrom)- 1 ;
    } else strOut= StringConcatenate (strOut, StringSubstr (str, n, 1 ));
  }
   return (strOut);
}
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 23.04.2009                                                     |
//|  Описание : Перенос уровня стопа в безубыток                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void MovingInWL( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double po, pp;
   int     i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (mn< 0 || OrderMagicNumber()==mn) {
          po=MarketInfo(OrderSymbol(), MODE_POINT);
           if (OrderType()==OP_BUY) {
             if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_BID);
               if (pp-OrderOpenPrice()>LevelProfit*po) {
                ModifyOrder(- 1 , OrderOpenPrice()+LevelWLoss*po, - 1 );
              }
            }
          }
           if (OrderType()==OP_SELL) {
             if (OrderStopLoss()== 0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
              pp=MarketInfo(OrderSymbol(), MODE_ASK);
               if (OrderOpenPrice()-pp>LevelProfit*po) {
                ModifyOrder(- 1 , OrderOpenPrice()-LevelWLoss*po, - 1 );
              }
            }
          }
        }
      }
    }
  }
}
 

isTradeTimeString() işlevi.

Bu işlev, zaman ticareti izni bayrağını döndürür. Aslında asıl kontrol edilen, belirli bir zaman diliminde ticaret sunucusunun o anki saatinin konumudur. İçerideyse, isTradeTimeString() işlevi true döndürür, aksi takdirde false döndürür. Bu işlevin bir özelliği, hem bir gün içinde hem de bir gün dışında bir zaman aralığı belirleme yeteneğidir. Bu, kullanım örneklerinde daha ayrıntılı olarak gösterilecektir. isTradeTimeString() işlevi, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • TimeBegin - "SS:MM" formatındaki bir dize, ticaretin başlangıç zamanını ayarlar. Varsayılan değer "00:00"dır.
  • TimeEnd - "SS:MM" biçimindeki bir dize, işlemin bitiş zamanını ayarlar. Varsayılan değer "00:00"dır.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeBegin - время начала торговли         (ЧЧ:ММ)                       |
//|    TimeEnd   - время окончания торговли      (ЧЧ:ММ)                       |
//+----------------------------------------------------------------------------+
bool isTradeTimeString( string TimeBegin= "00:00" , string TimeEnd= "00:00" ) {
   datetime dtBegin, dtEnd;         // Время начала и окончания работы
   int       hc, he;                 // Часы текущего времени и окончания работы

  dtBegin=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE)+ " " +TimeBegin);
  dtEnd  =StrToTime(TimeToStr( TimeCurrent (), TIME_DATE)+ " " +TimeEnd);
  hc     =TimeHour( TimeCurrent ());
  he     =TimeHour(dtEnd);
   if (dtBegin>=dtEnd) {
     if (hc>=he) dtEnd+= 24 * 60 * 60 ; else dtBegin-= 24 * 60 * 60 ;
  }

   if ( TimeCurrent ()>=dtBegin && TimeCurrent ()<=dtEnd) return (True);
   else return (False);
}

isTradeTimeInt() işlevi.

Bu işlev, zaman ticareti izni bayrağını döndürür. Dönüş değeri doğru veya yanlıştır. isTradeTimeInt() işlevi, zaman aralığı tanıma ilkesine göre isTradeTimeString() işlevine benzer, yani ticaret başlangıç zamanı, bitiş zamanından (bir gün içindeki bir zaman aralığı) daha büyük veya daha kısa (farklı bir zaman aralığı) olabilir. günler). isTradeTimeInt() işlevi, aşağıdaki isteğe bağlı parametreleri kabul eder:

  • hb - Sayı, ticaretin başlama saatini ayarlar. Varsayılan değer 0'dır.
  • mb - Sayı, işlem başlama saatinin dakikalarını ayarlar. Varsayılan değer 0'dır.
  • he - Sayı, işlem bitiş saatinin saatlerini ayarlar. Varsayılan değer 0'dır.
  • me - Sayı, işlem bitiş saatinin dakikalarını ayarlar. Varsayılan değer 0'dır.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt( int hb= 0 , int mb= 0 , int he= 0 , int me= 0 ) {
   datetime db, de;           // Время начала и окончания работы
   int       hc;               // Часы текущего времени торгового сервера

  db=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE)+ " " +hb+ ":" +mb);
  de=StrToTime(TimeToStr( TimeCurrent (), TIME_DATE)+ " " +he+ ":" +me);
  hc=TimeHour( TimeCurrent ());
   if (db>=de) {
     if (hc>=he) de+= 24 * 60 * 60 ; else db-= 24 * 60 * 60 ;
  }

   if ( TimeCurrent ()>=db && TimeCurrent ()<=de) return (True);
   else return (False);
}
 
satop :
Dosyanın tümü tek bir arşivdedir.
Dosyalar:
kimiv.zip  187 kb
 
Igor Kim , işlevlerini hem burada hem de web sitesinde "fonksiyon koleksiyonları" şeklinde tek bir dosyada yayınladı. Bu formda, bu koleksiyonlar eklenti kitaplıkları olarak kullanılamaz. Ancak, özellikle Expert Advisor'ları geliştirirken, Expert Advisor kodunu basitleştirmek ve azaltmak için kütüphaneleri kullanmak çok uygundur. Ayrıca, alım satım işlemlerinin doğru kullanımıyla ilgili tüm soruları ortadan kaldırır ve özellikle başlangıç programlama becerilerine sahip yatırımcılar için değerli olan stratejiye odaklanmanıza olanak tanır.
Ekli dosyalarda, kütüphaneler olarak tasarlanmış tüm aynı işlev koleksiyonları. Kitaplıklar basitçe .../experts/include dizinine yerleştirilir, derlenmelerine gerek yoktur, aşağıda bir dahil etme örneği verilmiştir.
Bunları bağladıktan sonra, danışman kodundan gerekli işlevi çağırmak yeterlidir.
 #include <b-Positions_include.mqh>       // Библиотека функций для работы с позициями 
#include <b-KimIV _include .mqh>           // Библиотека дополнительных функций
#include <b-Orders _include .mqh>          // Библиотека функций для работы с ордерами
 

Sevgili hattın neresinden

 if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ;
появляется "JPY"??????

satop :

isCloseLastPosByStop() işlevi.

Bu işlev, durarak son konumu kapatmak için bayrağı döndürür. Bayrak kaldırıldı - Doğru - StopLoss tetiklendi. Bayrak atlandı - Yanlış - pozisyon başka bir nedenle kapatıldı. Dikkate alınacak pozisyonların daha doğru seçimi harici parametreler tarafından belirlenir:

  • sy - Piyasa aracının adı. Bu parametreyi ayarlarsanız, işlev yalnızca belirtilen takımın konumlarını dikkate alacaktır. Varsayılan değer "" herhangi bir piyasa aracı anlamına gelir. NULL , geçerli enstrüman anlamına gelir.
  • op - Ticaret işlemi, pozisyon türü. Geçerli değerler: OP_BUY , OP_SELL veya -1 . Varsayılan değer -1 , herhangi bir konum anlamına gelir.
  • mn - Konum Kimliği, MagicNumber. Varsayılan değer -1 , herhangi bir tanımlayıcı anlamına gelir.

 
Anladığım kadarıyla fonksiyonlar henüz 5 karakter yokken yazılmıştı. JPY, bir tür karşılaştırma örneği olarak hizmet etti.
 
hoz :
Anladığım kadarıyla fonksiyonlar henüz 5 karakter yokken yazılmıştı. JPY, bir tür karşılaştırma örneği olarak hizmet etti.

Birer birer artırmak çok kolay!