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

 

올바른TF() 함수.

나는 때때로 인디케이터나 어드바이저의 입력 매개변수에 잘못된 시간 프레임을 쉽게 지정할 수 있다는 것을 발견한 후 이 함수를 작성했습니다. 이는 정수 분과 같습니다. 예를 들어, 나는 60시간 대신에 50시간을 입력했습니다. 음... 일종의 놓친 것입니다. 따라서 iRSI() 함수는 잘못된 시간 프레임에 대해 0을 반환합니다. 다른 기능에 대해서는 확인하지 않았기 때문에 아무 말도 하지 않겠습니다. 그리고 부주의로 인한 내 자신의 실수로 인한 성가신 오해를 피하기 위해이 기능을 "바보"에 대한 기본 보호 기능으로 작성했습니다. 올바른 시간 프레임과 일치하는 "가장 가까운" 입력 매개변수를 조정하고 해당 값을 반환합니다.

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

DateBeginQuarter() 함수.

이 함수는 숫자로 분기의 시작 날짜를 반환합니다. 예를 들어, 지금이 2008년 8월 27일이면 현재 분기의 시작 날짜는 2008년 7월 1일입니다. 이 함수는 현재 매개변수를 기준으로 한 분기의 수인 하나의 매개변수만 사용합니다. 예를 들어, 0 은 현재 분기, 1 은 다음 분기, -1 은 이전 분기입니다. 즉, 분기의 양수는 미래의 날짜를 요청하고 0과 음수는 과거의 날짜를 요청합니다. 반환 값은 1970년 1월 1일 00:00 이후 경과된 시간(초)입니다.

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

DateOfMonday() 함수.

이 함수는 해당 주의 시작 날짜(월요일 날짜)를 숫자로 반환합니다. 예를 들어 지금이 2008년 8월 29일이면 현재 주의 시작 날짜는 2008년 8월 25일이 됩니다. 이 함수는 현재 매개변수에 상대적인 주의 수인 하나의 매개변수만 사용합니다. 예를 들어, 0 은 현재 주, 1 은 다음 주, -1 은 이전 주입니다. 즉, 양수 주 번호는 미래의 날짜를 요청하고 과거의 0 및 음수 날짜를 요청합니다. 반환 값은 1970년 1월 1일 00:00 이후 경과된 시간(초)입니다.

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

피보나치() 함수.

이 함수는 일련 번호로 피보나치 수열의 요소를 반환합니다.

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

GetNameMA() 함수.

이 함수는 식별자로 MA 메서드( 이동 평균 )의 이름을 반환합니다. 이 기능은 댓글, 지표의 메시지, 조언자에서 사용하기 편리합니다.

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

GetPriceDiffInPoint() 함수.

이 함수는 숫자로 주어진 두 막대 사이의 가격 차이를 반환합니다. 이 기능을 개발한 목적은 코스 이동의 크기와 방향을 결정하는 것이었습니다. GetPriceDiffInPoint() 함수는 고려할 막대의 피벗 포인트(Open 또는 High 또는 Low 또는 Close)를 독립적으로 결정합니다. 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 은 현재 문자입니다.
  • n2 - 왼쪽 막대의 번호입니다. 기본값은 2 입니다.
  • n1 - 오른쪽 막대의 번호입니다. 기본값은 1 입니다.

반환 값:

  • 양수 - 막대 N2와 N1 사이에 비율이 증가했습니다.
  • 음수 - 막대 N2와 N1 사이에 비율이 감소했습니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

GetTypePrice() 함수

가격 유형 이름을 반환합니다. 이 함수는 하나의 선택적 매개변수만 사용합니다. 유효한 값: PRICE_CLOSE, PRICE_OPEN, PRICE_HIGH, PRICE_LOW, PRICE_MEDIAN, PRICE_TYPICAL, PRICE_WEIGHTED. 기본값은 0 - PRICE_CLOSE입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование типа цены.                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    Applied_Price - тип цены                                                |
//+----------------------------------------------------------------------------+
string GetTypePrice( int Applied_Price= 0 ) {
   switch (Applied_Price) {
     case PRICE_CLOSE    : return ( "Close" );
     case PRICE_OPEN     : return ( "Open" );
     case PRICE_HIGH     : return ( "High" );
     case PRICE_LOW      : return ( "Low" );
     case PRICE_MEDIAN   : return ( "Median" );
     case PRICE_TYPICAL : return ( "Typical" );
     case PRICE_WEIGHTED : return ( "Weighted" );
     default             : return ( "Unknown Type Price" );
  }
}
 

ArrayLR() 함수.

이 함수는 선형 회귀 값의 배열을 생성합니다. 이 함수는 다음 필수 매개변수를 허용합니다.

  • x - 숫자 계열 값의 배열. 이것은 입력 매개변수입니다. 이 배열은 함수를 호출하기 전에 값을 포함해야 합니다.
  • y 는 선형 회귀 값의 배열입니다. 이것은 출력 매개변수입니다. 즉, 함수가 완료된 후 배열이 채워집니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.05.2008                                                     |
//|  Описание : Формирует массив значений линейной регрессии.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//|    y - массив значений линейной регрессии                                  |
//+----------------------------------------------------------------------------+
void ArrayLR( double & x[], double & y[]) {
   double a, b, c, sx= 0 , sx2= 0 , sxy= 0 , sy= 0 ;
   int     i, n= ArraySize (x);

   if (n> 1 ) {
     for (i= 0 ; i<n; i++) {
      sx+=i+ 1 ;
      sy+=x[i];
      sxy+=(i+ 1 )*x[i];
      sx2+=(i+ 1 )*(i+ 1 );
    }
    a=sx*sy-n*sxy;
    c=sx*sx-n*sx2;
     if (c!= 0 ) a=a/c; else a= 0 ;
    b=(sy-a*sx)/n;
     ArrayResize (y, n);
     for (i= 0 ; i<n; i++) y[i]=a*(i+ 1 )+b;
  } else Print ( "ArrayLR(): Недостаточное количество элементов ряда! n=" , n);
}

ArrayMo() 함수.

분포 밀도 곡선의 최대값인 모드를 반환합니다. 이 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • x - 숫자 계열 값의 배열입니다.
  • d - 숫자 계열 값의 정확도, 소수 자릿수 .
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.06.2008                                                     |
//|  Описание : Возвращает Моду - максимум кривой плотности распределения.     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив значений числового ряда                                      |
//|    d - точность значений числового ряда, количество знаков после запятой   |
//+----------------------------------------------------------------------------+
double ArrayMo( double & x[], int d= 4 ) {
   double e, s= 0 ;
   double m[][ 2 ];             // временный массив:
                             //  столбец 1 - количество значений
                             //  столбец 2 - значения
   int     i, k= ArraySize (x);
   int     n;                   // номер строки временного массива m
   int     r;                   // количество строк во временном массиве m

   if (k> 0 ) {
     for (i= 0 ; i<k; i++) {
      e= NormalizeDouble (x[i], d);
      n=ArraySearchDouble(m, e);
       if (n< 0 ) {
        r= ArrayRange (m, 0 );
         ArrayResize (m, r+ 1 );
        m[r][ 0 ]++;
        m[r][ 1 ]=e;
      } else m[n][ 0 ]++;
    }
     ArraySort (m, WHOLE_ARRAY , 0 , MODE_DESCEND);
    s=m[ 0 ][ 1 ];
  } else Print ( "ArrayMo(): Массив пуст!" );

   return (s);
}
 

ExistOrdersByPrice() 함수.

주어진 설정 가격에 주문이 있음을 나타내는 플래그를 반환합니다. True - 주문이 존재함(설정됨), False - 주문이 존재하지 않음(설정되지 않음). 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 악기의 순서만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 작업 유형, 보류 중인 주문 유형. 유효한 값은 OP_BUYLIMIT , OP_BUYSTOP , OP_SELLLIMIT , OP_SELLSTOP 또는 -1 입니다. 기본값 -1 은 모든 주문 유형을 의미합니다.
  • mn - 주문 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
  • pp - 주문을 위한 가격 수준. 기본값은 -1 (모든 가격)입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.07.2008                                                     |
//|  Описание : Возвращает флаг существования ордеров по цене установки        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       (-1   - любая цена)                     |
//+----------------------------------------------------------------------------+
bool ExistOrdersByPrice( string sy= "" , int op=- 1 , int mn=- 1 , double pp=- 1 ) {
   int d, 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 (OrderType()> 1 && OrderType()< 6 ) {
          d=MarketInfo(OrderSymbol(), MODE_DIGITS);
          pp= NormalizeDouble (pp, d);
           if (pp< 0 || pp== NormalizeDouble (OrderOpenPrice(), d)) {
             if (mn< 0 || OrderMagicNumber()==mn) return (True);
          }
        }
      }
    }
  }
   return (False);
}

테스터용 ClosePosBySelect() 함수.

하나의 미리 선택된 위치를 닫습니다. 이것은 이전에 13페이지 에 게시된 동일한 이름의 함수의 경량 버전입니다. 추가 사항은 없습니다. 주름이 없습니다. 내 연습에서는 테스터에서 포지션이 닫히지 않은 경우가 없었다. 따라서 이 기능에는 검사가 없습니다. 테스터에서는 중복됩니다.

 //+----------------------------------------------------------------------------+
//|  Автор   : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание: Закрытие одной предварительно выбранной позиции                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
   double pp;

   if (OrderType()==OP_BUY) {
    pp=MarketInfo(OrderSymbol(), MODE_BID);
    OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseBuy);
  }
   if (OrderType()==OP_SELL) {
    pp=MarketInfo(OrderSymbol(), MODE_ASK);
    OrderClose(OrderTicket(), OrderLots(), pp, Slippage, clCloseSell);
  }
}
 

테스터용 CountOrders() 함수.

내 테스트(MT4 테스터 전용으로 설계된) 버전의 EA에서 CountOrders() 함수는 ExistOrders() , ExistPositions() , NumberOfOrders()NumberOfPositions( ) 함수를 대체합니다. 즉, 어떤 종류의 포지션이나 오더의 존재에 대한 정보는 물론, 각 종류의 거래 횟수에 대한 정보를 제공할 수 있습니다. 이러한 교체는 주문 데이터베이스에 대한 원 틱 액세스로 표현되고 한 번에 필요한 모든 정보를 얻는 이점이 있습니다. 그리고 위에서 언급한 기능은 특히 조합하여 사용할 때 각각 동일한 주문 기반으로 독립적으로 작동하므로 동일한 호출을 반복적으로 수행합니다. 결과적으로 CountOrders() 함수를 사용하면 한 패스의 시간을 몇 초로 줄일 수 있으므로 최적화에 몇 시간을 절약할 수 있습니다.

CountOrders() 함수는 다음 매개변수를 사용합니다.

  • mo - 유형별 주문 수의 배열입니다. 함수를 실행한 후 배열에는 6개의 요소가 있습니다. 0 요소는 구매 유형의 거래 작업 수 , 첫 번째 요소는 판매 수, 번째 요소는 BuyLimit , 세 번째 요소는 SellLimit , 네 번째 요소는 BuyStop , 다섯 번째 요소는 SellStop 입니다.
  • mn - 위치 또는 주문의 식별자(MagicNumber). 기본값은 -1 - 모든 마법입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.08.2008                                                     |
//|  Описание : Рассчитывает количество ордеров по типам.                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mo - массив количества ордеров по типам                                 |
//|    mn - MagicNumber                          (-1 - любой магик)            |
//+----------------------------------------------------------------------------+
void CountOrders( int & mo[], int mn=- 1 ) {
   int i, k= OrdersTotal ();

   if ( ArraySize (mo)!= 6 ) ArrayResize (mo, 6 );
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (mn< 0 || OrderMagicNumber()==mn) mo[OrderType()]++;
    }
  }
}

테스터를 위한 ModifyOrder() 함수.

이것은 미리 선택된 단일 주문 또는 위치의 절대 가격 수준을 변경하기 위해 7페이지 에 게시된 ModifyOrder() 함수의 경량 버전입니다.

ModifyOrder() 함수는 다음 매개변수를 사용합니다.

  • pp - 주문 배치 가격. 0보다 작거나 같은 값을 전달하면 이 가격 수준의 수정이 수행되지 않습니다. 기본값은 -1 입니다.
  • sl - 가격 수준을 중지합니다. 0보다 작은 값을 전달하면 이 가격 수준의 수정이 수행되지 않습니다. 기본값은 0 입니다.
  • tp - 가격 수준을 취합니다. 0보다 작은 값을 전달하면 이 가격 수준의 수정이 수행되지 않습니다. 기본값은 0 입니다.
  • - 보류 중인 주문 만료 날짜. 기본값은 0 입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.03.2008                                                     |
//|  Описание : Модификация ордера. Версия функции для тестов на истории.      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена открытия позиции, установки ордера                            |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    ex - дата истечения                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder( double pp=- 1 , double sl= 0 , double tp= 0 , datetime ex= 0 ) {
   int     dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er;
   double op= NormalizeDouble (OrderOpenPrice() , dg);
   double os= NormalizeDouble (OrderStopLoss()  , dg);
   double ot= NormalizeDouble (OrderTakeProfit(), dg);
   color   cl;

   if (pp<= 0 ) pp=OrderOpenPrice();
   if (sl< 0 ) sl=OrderStopLoss();
   if (tp< 0 ) tp=OrderTakeProfit();
  
  pp= NormalizeDouble (pp, dg);
  sl= NormalizeDouble (sl, dg);
  tp= NormalizeDouble (tp, dg);

   if (pp!=op || sl!=os || tp!=ot) {
     if ( MathMod (OrderType(), 2 )== 0 ) cl=clModifyBuy; else cl=clModifySell;
     if (!OrderModify(OrderTicket(), pp, sl, tp, ex, cl)) {
      er= GetLastError ();
       Print ( "Error(" ,er, ") modifying order: " ,ErrorDescription(er));
       Print ( "Ask=" ,Ask, " Bid=" ,Bid, " sy=" ,OrderSymbol(),
             " op=" +GetNameOP(OrderType()), " pp=" ,pp, " sl=" ,sl, " tp=" ,tp);
    }
  }
}
 

IIFc() 함수.

포크 구축 측면에서 매우 편리한 기능입니다. 그렇다면 이 색상. 그리고 그렇지 않다면 다른 색상입니다. IIFc() 함수는 세 가지 필수 매개변수를 사용합니다.

  • 조건 - 부울 표현식 . 사실일 수도 있고 거짓일 수도 있습니다.
  • ifTrue - 조건식 이 참인 경우 IIFc() 함수가 반환할 색상입니다.
  • ifFalse - 조건식 이 false인 경우 IIFc() 함수에서 반환할 색상입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 18.07.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
color IIFc( bool condition, color ifTrue, color ifFalse) {
   if (condition) return (ifTrue); else return (ifFalse);
}

IIFd() 함수.

실수에 대한 유사한 편의. 그렇다면 그런 실수입니다. 그렇지 않은 경우 다른 번호입니다. IIFd() 함수는 세 가지 필수 매개변수를 사용합니다.

  • 조건 - 부울 표현식. 사실일 수도 있고 거짓일 수도 있습니다.
  • ifTrue - 조건식 이 참인 경우 IIFd() 함수가 반환할 실수입니다.
  • ifFalse - 조건식 이 거짓인 경우 IIFd() 함수에 의해 반환될 실수입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.02.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
double IIFd( bool condition, double ifTrue, double ifFalse) {
   if (condition) return (ifTrue); else return (ifFalse);
}

IIIFi() 함수.

정수에 대해서도 비슷한 편리함을 제공합니다. 그렇다면 그러한 정수입니다. 그렇지 않은 경우 다른 번호입니다. IIIFi() 함수는 세 가지 필수 매개변수를 사용합니다.

  • 조건 - 부울 표현식. 사실일 수도 있고 거짓일 수도 있습니다.
  • ifTrue - 조건식 이 참인 경우 IIIFi() 함수에 의해 반환될 정수입니다.
  • ifFalse - 조건식 이 거짓인 경우 IIFi() 함수에 의해 반환될 정수입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.02.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
int IIFi( bool condition, int ifTrue, int ifFalse) {
   if (condition) return (ifTrue); else return (ifFalse);
}

IIF() 함수.

문자열에 대한 유사한 편의. 그렇다면 그런 라인. 그리고 그렇지 않다면 다른 라인. IIFs() 함수는 세 가지 필수 매개변수를 사용합니다.

  • 조건 - 부울 표현식. 사실일 수도 있고 거짓일 수도 있습니다.
  • ifTrue - 조건식 이 참인 경우 IIFs() 함수에서 반환할 문자열입니다.
  • ifFalse - 조건식 이 false인 경우 IIFs() 함수에서 반환할 문자열입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.02.2008                                                     |
//|  Описание : Возвращает одно из двух значений взависимости от условия.      |
//+----------------------------------------------------------------------------+
string IIFs( bool condition, string ifTrue, string ifFalse) {
   if (condition) return (ifTrue); else return (ifFalse);
}
 

ExistInHistoryCloseBetween() 함수.

날짜 사이에 마감(삭제)된 위치 또는 주문 내역의 존재 플래그를 반환합니다. ExistInHistoryCloseBetween() 함수는 다음 매개변수를 사용합니다.

  • sy - 시장 상품의 이름. "" - 모든 문자, NULL - 현재 문자. 기본값은 "" 입니다.
  • op - 거래 작업. 유효한 값: -1 , OP_BUY , OP_SELL , OP_BUYLIMIT , OP_BUYSTOP , OP_SELLLIMIT , OP_SELLSTOP . 기본값은 -1 - 모든 작업입니다.
  • mn - 거래 작업의 식별자, MagicNumber . 기본값은 -1 - 모든 마법입니다.
  • d1 - 위치 종료 시간(대기 중인 스레드 삭제). 기본값은 0 - 모든 마감(삭제) 시간입니다. 시간 d1 은 시간 d2 보다 작아야 합니다.
  • d2 - 위치 종료 시간(대기 중인 스레드 삭제). 기본값은 0 - 모든 마감(삭제) 시간입니다. 시간 d2 는 시간 d1 보다 커야 합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : закрытой (удалённого) между датами.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая операция)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время закрытия             ( 0   - любое время закрытия)           |
//|    d2 - время закрытия             ( 0   - любое время закрытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryCloseBetween( string sy= "" , int op=- 1 , int mn=- 1 ,
                                 datetime d1= 0 , datetime d2= 0 ) {
   int i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (mn< 0 || OrderMagicNumber()==mn) {
           if (d1<=OrderCloseTime() && (d2== 0 || d2>=OrderCloseTime())) return (True);
        }
      }
    }
  }
   return (False);
}

ExistInHistoryOpenBetween() 함수.

날짜 사이에 열린(배치된) 위치 또는 주문 내역의 존재 플래그를 반환합니다. ExistInHistoryOpenBetween() 함수는 다음 매개변수를 사용합니다.

  • sy - 도구 이름. "" - 모든 문자, NULL - 현재 문자. 기본값은 "" 입니다.
  • op - 거래 작업. 유효한 값: -1 , OP_BUY , OP_SELL , OP_BUYLIMIT , OP_BUYSTOP , OP_SELLLIMIT , OP_SELLSTOP . 기본값은 -1 - 모든 작업입니다.
  • mn - 거래 작업의 식별자, MagicNumber . 기본값은 -1 - 모든 마법입니다.
  • d1 - 포지션 개시 시간( 보류 주문 배치 ). 기본값은 0 (개방(설정) 시간)입니다. 시간 d1 은 시간 d2 보다 작아야 합니다.
  • d2 - 포지션을 오픈한 시간(대기 주문 설정). 기본값은 0 (개방(설정) 시간)입니다. 시간 d2 는 시간 d1 보다 커야 합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 27.08.2008                                                     |
//|  Описание : Возвращает флаг существования в истории позиции или ордера,    |
//|           : открытой (установленного) между датами.                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    d1 - время открытия             ( 0   - любое время открытия)           |
//|    d2 - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistInHistoryOpenBetween( string sy= "" , int op=- 1 , int mn=- 1 ,
                               datetime d1= 0 , datetime d2= 0 ) {
   int i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (mn< 0 || OrderMagicNumber()==mn) {
           if (d1<=OrderOpenTime() && (d2== 0 || d2>=OrderOpenTime())) return (True);
        }
      }
    }
  }
   return (False);
}
 

ExistInHistoryToDay() 함수.

오늘 열린(배치된) 위치 또는 주문 내역의 존재 플래그를 반환합니다. ExistInHistoryToDay() 함수는 다음 매개변수를 사용합니다.

  • sy - 도구 이름. "" - 모든 문자, NULL - 현재 문자. 기본값은 "" 입니다.
  • op - 거래 작업 . 유효한 값: -1 , OP_BUY , OP_SELL , OP_BUYLIMIT , OP_BUYSTOP , OP_SELLLIMIT , OP_SELLSTOP . 기본값은 -1 - 모든 작업입니다.
  • mn - 거래 작업의 식별자, MagicNumber. 기본값은 -1 - 모든 마법입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает флаг наличия ордера или позиции в истории за сегодня|
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool ExistInHistoryToDay( string sy= "" , int op=- 1 , int mn=- 1 ) {
   int i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (op< 0 || OrderType()==op) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (TimeDay  (OrderOpenTime())==Day()
            &&  TimeMonth(OrderOpenTime())==Month()
            &&  TimeYear (OrderOpenTime())==Year()) return (True);
          }
        }
      }
    }
  }
   return (False);
}

TakeProfitLastPos() 함수.

이 함수는 마지막 오픈 포지션의 TakeProfit 가격 수준 또는 -1 을 반환합니다. TakeProfitLastPos() 함수는 다음과 같은 선택적 매개변수를 허용합니다.

  • sy - 도구 이름. "" - 모든 문자, NULL - 현재 문자. 기본값은 "" 입니다.
  • op - 거래 작업. 유효한 값: -1 , OP_BUY , OP_SELL . 기본값은 -1 - 모든 작업입니다.
  • mn - 거래 작업의 식별자, MagicNumber. 기본값은 -1 - 모든 마법입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.08.2008                                                     |
//|  Описание : Возвращает цену TakeProfit последней открытой позиций или -1.  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double TakeProfitLastPos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    r=- 1 ;
   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== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderTakeProfit();
              }
            }
          }
        }
      }
    }
  }
   return (r);
}
사유: