"KimIV의 유용한 기능"만. - 페이지 9

 

StringLower() 함수.

이 함수 는 문자열을 소문자로 변환합니다 . 모든 UPPER(큰) 문자는 소문자(작게)가 됩니다. StringLower() 함수는 입력 문자열인 필수 매개변수를 하나만 사용합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수 는 문자열을 대문자로 변환합니다 . 모든 소문자(작은) 문자는 UPPER(큰)가 됩니다. StringUpper() 함수는 입력 문자열인 필수 매개변수를 하나만 사용합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 문자열을 구성 실수로 분할하고 각 숫자는 별도의 요소로 배열에 추가됩니다. 얼마나 많은 실수가 문자열에 포함될 것인지, 동일한 수의 요소가 배열에 추가될 것입니다. 세미콜론은 구분 기호로 인식됩니다. StringToArrayDouble() 함수는 배열 요소의 수를 반환하고 다음 필수 매개변수를 사용합니다.

  • st - 세미콜론으로 구분된 실수 문자열입니다.
  • ad - 실수의 배열입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 문자열을 구성하는 정수로 분할하고 각 숫자는 별도의 요소로 배열에 추가됩니다. 얼마나 많은 정수가 문자열에 포함될 것이며 동일한 수의 요소가 배열에 추가됩니다. 쉼표는 구분 기호로 인식됩니다. StringToArrayDouble() 함수는 배열 요소 의 수를 반환하고 다음 필수 매개변수를 사용합니다.

  • st - 쉼표로 구분된 정수 값 문자열.
  • ai - 정수 배열.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 각 부분 문자열이 별도의 배열 요소가 되는 방식으로 문자열을 구성 부분 문자열로 분할합니다. 구분 기호는 매개변수로 설정되며 임의적일 수 있습니다. StrSplit() 함수는 배열 요소의 수를 반환하고 다음 매개변수를 사용합니다.

  • st - 구분된 문자열입니다.
  • as - 문자열 유형의 요소 배열입니다.
  • - 구분자. 선택적 매개변수입니다. 기본값은 ","(쉼표)입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 부분 문자열 교체를 수행합니다. 발견된 모든 항목이 대체됩니다. 예를 들어, 모든 쉼표를 마침표로 바꾸거나 그 반대의 경우도 마찬가지입니다. StrSplit() 함수는 결과 문자열을 반환하고 다음 필수 매개변수를 사용합니다.

  • str - 부분 문자열 strFrom 을 대체할 문자열입니다.
  • strFrom - 교체할 부분 문자열입니다. 하위 문자열 strFrom 이 문자열 str 에서 발견되면, 이는 하위 문자열 strTo 로 대체됩니다.
  • strTo - 대체 하위 문자열입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 시간 거래 허가 플래그를 반환합니다. 실제로 실제로 확인되는 것은 특정 기간 내 거래 서버의 현재 시간 위치입니다. 내부에 있으면 isTradeTimeString() 함수는 true를 반환하고 그렇지 않으면 false를 반환합니다. 이 기능의 특징은 하루 내와 하루 외의 시간 간격을 설정하는 기능입니다. 이것은 사용 예에서 더 자세히 표시됩니다. isTradeTimeString() 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • TimeBegin - "HH:MM" 형식의 문자열로 거래 시작 시간을 설정합니다. 기본값은 "00:00"입니다.
  • TimeEnd - "HH:MM" 형식의 문자열로 거래 종료 시간을 설정합니다. 기본값은 "00:00"입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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() 함수.

이 함수는 시간 거래 허가 플래그를 반환합니다. 반환 값은 true 또는 false입니다. isTradeTimeInt() 함수는 시간 간격 인식 원칙에 의해 isTradeTimeString() 함수와 유사합니다. 날). isTradeTimeInt() 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • hb - 숫자, 거래 시작 시간을 설정합니다. 기본값은 0입니다.
  • mb - 숫자, 거래 시작 시간의 분을 설정합니다. 기본값은 0입니다.
  • he - 숫자, 거래 종료 시간을 설정합니다. 기본값은 0입니다.
  • me - 숫자, 거래 종료 시간(분)을 설정합니다. 기본값은 0입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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 :
파일은 모두 하나의 아카이브에 있습니다.
파일:
kimiv.zip  187 kb
 
Igor Kim 은 자신의 기능을 여기와 웹사이트에 "기능 모음" 형식으로 하나의 파일에 게시했습니다. 이 형식에서는 이러한 컬렉션을 플러그인 라이브러리로 사용할 수 없습니다. 그러나 특히 Expert Advisor를 개발할 때 라이브러리를 사용하여 Expert Advisor 코드를 단순화하고 줄이는 것은 매우 편리합니다. 또한 거래 작업의 올바른 사용에 대한 모든 질문을 제거하고 초기 프로그래밍 기술이 있는 거래자에게 특히 유용한 전략에 집중할 수 있습니다.
첨부 파일에는 라이브러리로 설계된 동일한 기능 모음이 모두 있습니다. 라이브러리는 단순히 .../experts/include 디렉토리에 배치되며 컴파일할 필요가 없습니다. 포함의 예는 아래에 나와 있습니다.
연결한 후에는 어드바이저 코드에서 필요한 기능을 호출하면 됩니다.
 #include <b-Positions_include.mqh>       // Библиотека функций для работы с позициями 
#include <b-KimIV _include .mqh>           // Библиотека дополнительных функций
#include <b-Orders _include .mqh>          // Библиотека функций для работы с ордерами
 

어디선가 친애하는

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

satop :

isCloseLastPosByStop() 함수.

이 함수는 stop으로 마지막 위치를 닫기 위한 플래그를 반환합니다. 플래그 발생 - True - StopLoss가 트리거되었습니다. 플래그가 생략됨 - False - 다른 이유로 포지션이 마감되었습니다. 고려할 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.

 
제가 알기로는 아직 5글자가 없을때 작성된 함수입니다. JPY는 일종의 비교 예였습니다.
 
hoz :
제가 알기로는 아직 5글자가 없을때 작성된 함수입니다. JPY는 일종의 비교 예였습니다.

1씩 늘리는건 쉽습니다!