KimIV의 유용한 기능 - 페이지 11

 
KimIV :
남자는 누구나 좌에서 우로 우열을 가집니다.. 이런.. 이런 점에서 좀 재미있게 할게요.

Ilnar 는 프랙탈에 대한 보류 중인 주문 이라는 주제에 대해 다음과 같이 질문했습니다.


Ilnar는 프랙탈의 가격 수준을 결정하는 데 어려움을 겪었을 것입니다. 따라서 나는 전통적으로 내 기능을 사용할 것을 제안합니다.


 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal ( string sy = " 0 " , int tf = 0 , int mode = MODE_LOWER ) {
  if ( sy == "" || sy == " 0 " ) sy = Symbol () ;
  double f = 0 ;
  int d = MarketInfo ( sy , MODE_DIGITS ) , s ;
  if ( d == 0 ) if ( StringFind ( sy , " JPY " ) < 0 ) d = 4 ; else d = 2 ;
 
  for ( s = 2 ; s < 100 ; s ++ ) {
    f = iFractals ( sy , tf , mode , s ) ;
    if ( f != 0 ) return ( NormalizeDouble ( f , d )) ;
  }
  Print ( " FindNearFractal(): Фрактал не найден " ) ;
  return ( 0 ) ;
}
FindNearFractal() 함수는 주어진 시간에 주어진 기호에서 주어진 유형의 가장 가까운 프랙탈을 검색하고 해당 가격 수준을 반환합니다. 프랙탈 위치의 가격 수준을 알면 이미 이 수준에서 쉽게 주문할 수 있습니다.
함수가 두 개의 값(예: 프랙탈이 있는 막대의 번호)을 반환할 수 있습니까? 아니면 다른 값을 연결해야 합니까?
 
xrust писал (а):
함수가 두 개의 값(예: 프랙탈이 있는 막대의 번호)을 반환할 수 있습니까? 아니면 다른 값을 연결해야 합니까?
하나면 충분할 때 두 개의 값을 반환하는 이유는 무엇입니까? 막대 번호? 이렇게 하려면 연산자에서:
 return ( NormalizeDouble ( f , d )) ;
가격 수준이 아니라 바 카운터 값 전송을 기록하십시오. 출력에서 프랙탈 막대의 번호를 가져옵니다. 그리고 프랙탈 유형에 따라 iHigh ( ) 또는 iLow() 함수 중 하나로 가격 수준을 가져옵니다.
 
아니요, 여기서 모든 것이 명확합니다. 기본적으로 묻습니다. 감사합니다. 귀하의 게시물은 매우 도움이 됩니다.
 
xrust :
아니요, 여기서 모든 것이 명확합니다. 기본적으로 묻습니다.
아 ... 음, 원칙적으로 참조로 전달된 배열을 사용할 수 있습니다. 그러면 반환되는 매개변수의 수 는 배열의 크기에 의해 제한됩니다.
 

ExistOrdersByLot() 함수.

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

  • sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 악기의 순서만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 작업, 보류 중인 주문 유형. 유효한 값은 OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT, OP_SELLSTOP 또는 -1 입니다. 기본값 -1 은 모든 주문 유형을 의미합니다.
  • mn - 주문 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
  • lo - 소수점 이하 두 자리의 정확도를 가진 로트 크기. 기본값 0 - 모든 로트 크기.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Возвращает флаг существования ордера по размеру лота.          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    lo - лот                        ( 0   - любой лот)                      |
//+----------------------------------------------------------------------------+
bool ExistOrdersByLot ( string sy = "" , int op =- 1 , int mn =- 1 , double lo = 0 ) {
   int i , k = OrdersTotal () , ot ;
   lo = NormalizeDouble ( lo , 2 ) ;

   if ( sy == " 0 " ) sy = Symbol () ;
   for ( i = 0 ; i < k ; i ++ ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES )) {
       ot = OrderType () ;
       if ( ot > 1 && ot < 6 ) {
         if (( OrderSymbol () == sy || sy == "" ) && ( op < 0 || ot == op )) {
           if ( mn < 0 || OrderMagicNumber () == mn ) {
             if ( lo <= 0 || NormalizeDouble ( OrderLots () , 2 ) == lo ) return ( True ) ;
           }
         }
       }
     }
   }
   return ( False ) ;
}
 

ExistOrdersByLot() 함수 사용 예.

  1. 로트 크기가 0.2인 주문을 확인하십시오.
     ExistOrdersByLot ( "" , - 1 , - 1 , 0.2 ) ;
  2. 현재 차트의 기호에 대해 로트 크기가 0.3인 주문을 확인하십시오.
     ExistOrdersByLot ( NULL , - 1 , - 1 , 0.3 ) ;
  3. 모든 상품에 대해 0.5가 많은 BuyLimit 주문을 확인하십시오.
     ExistOrdersByLot ( "" , OP_BUYLIMIT , - 1 , 0.5 ) ;
  4. EURUSD에서 매직 123456으로 0.1이 많은 SellStop 주문을 확인하십시오.
     ExistOrdersByLot ( " EURUSD " , OP_SELLSTOP , 123456 , 0.1 ) ;
  5. 매직 987 USDJPY로 0.4가 많은 주문이 있는지 확인하십시오.
     ExistOrdersByLot ( " USDJPY " , - 1 , 987 , 0.4 ) ;

평소와 같이 위의 예가 포함된 작업 스크립트가 첨부되어 있습니다.

파일:
 

GetLotLastOrder() 함수.

마지막 주문의 로트 크기를 반환하거나 -1 을 반환합니다. 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.

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

GetLotLastOrder() 함수 사용의 예.

  1. 마지막 주문의 로트 크기 알아보기
     GetLotLastOrder () ;
  2. 현재 상품에 대한 마지막 주문의 로트 크기 찾기
     GetLotLastOrder ( NULL ) ;
  3. 모든 상품에 대한 마지막 BuyLimit 주문의 로트 크기 알아보기
     GetLotLastOrder ( "" , OP_BUYLIMIT ) ;
  4. EURUSD에서 매직 123456을 사용하여 마지막 SellStop 주문의 로트 크기를 알아보십시오.
     GetLotLastOrder ( " EURUSD " , OP_SELLSTOP , 123456 ) ;
  5. 현재 악기에 대한 Magic 2345를 사용하여 마지막 주문의 로트 크기 알아보기
     GetLotLastOrder ( NULL , - 1 , 2345 ) ;

첨부 파일은 전통적으로 위의 예와 함께 작동하는 스크립트입니다.

파일:
 

GetOrderOpenPrice() 함수.

마지막 주문 가격 또는 0 을 반환합니다. 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.

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

GetOrderOpenPrice() 함수 사용의 예.

  1. 마지막으로 주문한 가격을 알아보십시오.
     GetOrderOpenPrice () ;
  2. 현재 상품에 대해 마지막으로 주문한 가격을 알아보십시오.
     GetOrderOpenPrice ( NULL ) ;
  3. 모든 상품에 대한 마지막 BuyLimit 주문 가격 알아보기
     GetOrderOpenPrice ( "" , OP_BUYLIMIT ) ;
  4. EURUSD에서 매직 123456으로 마지막 SellStop 주문을 한 가격을 알아보십시오.
     GetOrderOpenPrice ( " EURUSD " , OP_SELLSTOP , 123456 ) ;
  5. 현재 악기의 Magic 2345로 마지막 주문 가격을 알아보세요.
     GetOrderOpenPrice ( NULL , - 1 , 2345 ) ;

위의 예와 함께 완벽하게 작동하는 스크립트가 첨부되어 있습니다.