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

 
143alex :

(구매 준비)))) 동일하지만 Excel 작업을 위해 있습니까?

아니, 아니...))))

 

GetPotentialLossInCurrency() 함수는 예치 통화로 미결 포지션의 잠재적 손실 총계를 반환합니다. 계산은 포지션 개시 가격과 StopLoss 가격 수준을 기반으로 합니다. StopLoss가 어떤 위치에도 설정되지 않은 경우 함수는 거래 계정 잔액의 현재 크기를 반환합니다.

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

  • - 도구의 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 운영 , 포지션 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • 미네소타 - 포지션 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 17.02.2012                                                     |
//|  Описание : Возвращает суммарный потенциальный убыток                      |
//|             открытых позиций в валюте депозита.                            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetPotentialLossInCurrency( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double pl= 0 ;
   double po, tv;                   // Пункт, спрэд и стоимость пункта
   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== "" ) && (mn< 0 || OrderMagicNumber ()==mn)) {
         if (( OrderType ()==OP_BUY || OrderType ()==OP_SELL) && (op< 0 || OrderType ()==op)) {
           if ( OrderStopLoss ()> 0 ) {
            po= MarketInfo ( OrderSymbol (), MODE_POINT);
             if (po== 0 ) Message( "В обзоре рынка отсутствует символ " + OrderSymbol ()+ ". Точность расчётов не гарантируется!" );
             else {
              tv= MarketInfo ( OrderSymbol (), MODE_TICKVALUE);
               if ( OrderType ()==OP_BUY) {
                pl+=( OrderOpenPrice ()- OrderStopLoss ())/po* OrderLots ()*tv;
              }
               if ( OrderType ()==OP_SELL) {
                pl+=( OrderStopLoss ()- OrderOpenPrice ())/po* OrderLots ()*tv;
              }
              pl+= OrderCommission ()+ OrderSwap ();
            }
          } else {
            pl= AccountBalance ();
             break ;
          }
        }
      }
    }
  }
   return (pl);
}

GetPotentialLossInCurrency() 함수의 작동을 테스트하는 스크립트가 첨부되어 있습니다.

 

안녕하세요 이고르입니다. 매우 유용한 기능을 제공해 주셔서 감사합니다.

도움 좀 부탁드려도 될까요... 부분 사물함 같은 걸 하고 싶어요. 하지만 아직 정리하는 방법을 모르겠습니다. 아이디어는 다음과 같습니다.

4개 - -200$ -175$ -150$ 및 -25$ 주문이 있고 총 +400$에 대해 5개 이상의 주문이 있다고 가정해 보겠습니다.

400 > -200+-175이지만 -200+-175+-150보다 작으면 주문 5 플러스 및 마이너스 마감 -200 -175, 즉 큰 것에서 작은 것 순으로 손실이 있는 2개의 주문입니다.

예는 물론 무례하지만 아이디어를 전달했다고 생각합니다 ...

첫 번째 문제는 처음에는 어떻게 든 어딘가에 적어 둘 것입니다. (배열에서 나는 아직 정말로 이해하지 못한다) 또는 다른 옵션을 찾으십시오.

두 번째 문제는 첫 번째 문제에 이어집니다. 4개의 주문에서 무스와 함께 los [ x ]를 얻었다고 가정해 봅시다 ... drive moose( los [ x ]) 1y ( los [ price ]) 2nd ( los 2[ 티켓 ])?

내가 모르는 것을 고르거나 가르칠 수있는 곳에서 코를 찌르게 될 것입니다 =)

 

아마도 모든 거래자는 조만간 예금이 소진되기 전에 남은 포인트 수를 계산하기 시작합니다. 계산은 간단합니다. 우리는 돈을 가져와 시장의 랏 수, 포인트 비용으로 나누고 관심 있는 답을 얻습니다. 이것이 바로 내 새 ReserveDepositInPoint() 함수가 하는 일이며 다음 매개변수를 사용합니다.

  • - 악기의 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 운영, 포지션 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • 미네소타 - 포지션 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.

ReserveDepositInPoint() 함수는 반대 위치를 올바르게 처리합니다. 즉, 매수 로트와 매도 로트의 차이를 계산하고 이 차이를 계산에 사용합니다. 계산은 자기자본을 기반으로 합니다. 즉, 중지가 100%라고 가정합니다. 스왑, 세금 및 수수료는 고려되지 않습니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.02.2012                                                     |
//|  Описание : Возвращает запас депозита в пунктах.                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int ReserveDepositInPoint( string sy= "" , int op=- 1 , int mn=- 1 ) {
   int     i, k= OrdersTotal ();       // Номера позиций
   int     n, r;                     // Номер символа в массиве, запас депозита в пунктах
   double ol[], tv;                 // Массив лотов, стоимость пункта
   string os[];                     // Массив символов

   if (sy== "0" ) sy= Symbol ();
   ArrayResize (os, 0 );
   ArrayResize (ol, 0 );

   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber ()==mn)) {
        n=ArraySearchString(os, OrderSymbol ());
         if (n< 0 ) {
          n= ArraySize (os);
           ArrayResize (os, n+ 1 );
           ArrayResize (ol, n+ 1 );
        }
        os[n]= OrderSymbol ();
         if ((op< 0 || OrderType ()==op) && ( OrderType ()==OP_BUY || OrderType ()==OP_SELL)) {
           if ( OrderType ()==OP_BUY ) ol[n]+= OrderLots ();
           if ( OrderType ()==OP_SELL) ol[n]-= OrderLots ();
        }
      }
    }
  }

  n= ArraySize (os);
   for (i= 0 ; i<n; i++) {
    tv= MarketInfo (os[i], MODE_TICKVALUE);
     if (tv== 0 ) Message( "В обзоре рынка отсутствует символ " +os[i]+ ". Точность расчётов не гарантируется!" );
     else {
       if (ol[i]!= 0 ) {
        ol[i]= MathAbs (ol[i]);
        r+= AccountEquity ()/tv/ol[i];
      }
    }
  }
   if (n> 1 ) r/=n*n;

   return (r);
}

ReserveDepositInPoint() 함수 의 동작 확인을 위한 Expert Advisor를 첨부합니다.

파일:
 

SetFibo() 함수.

이 함수는 현재 차트의 개체 OBJ_FIBO 피보나치 수준을 설정합니다.

  • cl - 피보나치 레벨 개체의 색상 배열입니다. 필수 매개변수입니다. 두 가지 요소. 첫 번째는 개체의 색상을 설정하고 두 번째는 레벨 라인의 색상을 설정합니다.
  • st - 객체 스타일의 배열 피보나치 수준 . 필수 매개변수입니다. 두 가지 요소. 첫 번째는 객체의 스타일을 설정하고 두 번째는 레벨 라인의 스타일을 설정합니다.
  • wd - 객체 너비의 배열 피보나치 수준 . 필수 매개변수입니다. 두 가지 요소. 첫 번째는 객체의 너비를 설정하고 두 번째는 레벨 라인의 너비를 설정합니다.
  • fl - 피보나치 수준의 배열입니다. 필수 매개변수입니다.
  • nm - 개체의 이름입니다. 기본값을 전달할 때 - "" 현재 막대의 여는 시간이 이름으로 사용됩니다.
  • t1 - 개체 설치 시간의 첫 번째 좌표입니다. 기본값은 0 - 열 번째 막대 여는 시간입니다.
  • p1 - 객체 설치 가격의 첫 번째 좌표. 기본값은 0 - 낮은 10번째 막대입니다.
  • t2 - 개체 설치 시간의 두 번째 좌표입니다. 기본값은 0 - 현재 막대의 여는 시간입니다.
  • p2 - 물체의 설치 가격의 두 번째 좌표. 기본값은 0 - 현재 막대의 최저값입니다.
  • ry - 플래그 속성 RAY. 기본값은 False 입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.03.2012                                                     |
//|  Описание : Установка объекта OBJ_FIBO Уровни Фибоначчи.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cl - массив цветов линий                                                |
//|    st - массив стилей линий                                                |
//|    wd - массив ширин линий                                                 |
//|    fl - массив уровней Фибоначчи                                           |
//|    nm - наименование               (  ""  - время открытия текущего бара)  |
//|    t1 - время открытия бара        (  0   - Time[10]                       |
//|    p1 - ценовой уровень            (  0   - Low[10])                       |
//|    t2 - время открытия бара        (  0   - текущий бар)                   |
//|    p2 - ценовой уровень            (  0   - Bid)                           |
//|    ry - луч                        (False - не луч)                        |
//+----------------------------------------------------------------------------+
void SetFibo( color & cl[], int & st[], int & wd[], double & fl[], string nm= "" ,
             datetime t1= 0 , double p1= 0 , datetime t2= 0 , double p2= 0 ,
             bool ry=False) {
   if (nm== "" ) nm= DoubleToStr (Time[ 0 ], 0 );
   if (t1<= 0 ) t1=Time[ 10 ];
   if (p1<= 0 ) p1=Low[ 10 ];
   if (t2<= 0 ) t2=Time[ 0 ];
   if (p2<= 0 ) p2=Bid;

   int i, k= ArraySize (fl);

   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_FIBO , 0 , 0 , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1     , t1);
   ObjectSet (nm, OBJPROP_PRICE1    , p1);
   ObjectSet (nm, OBJPROP_TIME2     , t2);
   ObjectSet (nm, OBJPROP_PRICE2    , p2);
   ObjectSet (nm, OBJPROP_COLOR      , cl[ 0 ]);
   ObjectSet (nm, OBJPROP_RAY       , ry);
   ObjectSet (nm, OBJPROP_STYLE      , st[ 0 ]);
   ObjectSet (nm, OBJPROP_WIDTH      , wd[ 0 ]);
   ObjectSet (nm, OBJPROP_LEVELCOLOR , cl[ 1 ]);
   ObjectSet (nm, OBJPROP_LEVELSTYLE , st[ 1 ]);
   ObjectSet (nm, OBJPROP_LEVELWIDTH , wd[ 1 ]);
   if (k> 0 ) {
     ObjectSet (nm, OBJPROP_FIBOLEVELS, k);
     for (i= 0 ; i<k; i++) {
       ObjectSet (nm, OBJPROP_FIRSTLEVEL+i, fl[i]);
       ObjectSetFiboDescription (nm, i, DoubleToStr ( 100 *fl[i], 1 ));
    }
  }
}
SetFibo() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.
파일:
 

GetLastThreeExtremumZZ() 함수.

마지막 세 개의 지그재그 극값을 검색하고 각 극값에 대한 막대 번호 및 가격 수준의 값을 반환합니다. 이 모든 데이터는 함수 매개변수로 전달되는 2차원 배열에 맞습니다. 다음은 함수 매개변수 목록입니다.

  • zz - 지그재그 값의 2차원 배열입니다. 막대의 수는 첫 번째 열에 추가되고 가격 값은 두 번째 열에 추가됩니다. 배열의 차원은 zz[3,2]여야 합니다.
  • sy - 도구 이름. "" 또는 NULL 은 현재 문자입니다. 기본값은 NULL 입니다.
  • tf - 기간. 기본값 0 은 현재 문자입니다.
  • dp , DVD , bs - ZigZaga 매개변수: ExtDepth, ExtDeviation, ExtBackstep.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.03.2012                                                     |
//|  Описание : Возвращает последние три экстремума ЗигЗага.                   |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    zz - двумерный массив значений ЗигЗага                                  |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
bool GetLastThreeExtremumZZ( double & zz[][], string sy= "" , int tf= 0 , int dp= 12 , int dv= 5 , int bs= 3 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   double z;
   int i, k= iBars (sy, tf), ke= 0 ;
   ArrayInitialize (zz, 0 );

   for (i= 0 ; i<k; i++) {
    z= iCustom (sy, tf, "ZigZag" , dp, dv, bs, 0 , i);
     if (z!= 0 ) {
      zz[ke][ 0 ]=i;
      zz[ke][ 1 ]=NormalizePrice(z, sy);
      ke++;
       if (ke> 3 ) return (True);
    }
  }
   Print ( "GetLastThreeExtremumZZ(): Недостаточно баров!" );
   return (False);
}

GetLastThreeExtremumZZ() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.

 

NumberOfOrdersByPrice() 함수.

주어진 가격 수준에서 이루어진 주문 수를 반환합니다. 함수 매개변수로 확인된 주문 목록을 제한할 수 있습니다.

  • 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                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.03.2012                                                     |
//|  Описание : Возвращает количество ордеров, установленных по заданной цене. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pp - цена                       (-1   - любая цена)                     |
//+----------------------------------------------------------------------------+
int NumberOfOrdersByPrice( string sy= "" , int op=- 1 , int mn=- 1 , double pp=- 1 ) {
   int d, i, k= OrdersTotal (), ko= 0 ;

   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) ko++;
          }
        }
      }
    }
  }
   return (ko);
}

 

NumberOfLastLossPosFromDate() 함수.

이 함수는 특정 날짜 이후에 마감된 마지막 일련의 무익한 포지션(연속 숫자)을 반환합니다. 고려할 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 시장 상품의 이름. 이 매개변수를 설정하면 이 기능은 지정된 도구의 위치만 고려합니다. 기본값은 "" 는 모든 시장 상품을 의미합니다. NULL 은 현재 기기를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID, MagicNumber. 기본값 -1 은 모든 식별자를 의미합니다.
  • dt - 1970년 이후의 날짜 및 시간(초). 기본값 - 0 은 기록에서 사용 가능한 모든 위치를 고려함을 의미합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 14.03.2012                                                     |
//|  Описание : Возвращает последнюю серию убыточных позиций                   |
//|             (количество подряд), закрытых с определённой даты.             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
int NumberOfLastLossPosFromDate( string sy= "" , int op=- 1 , int mn=- 1 , datetime dt= 0 ) {
   int i, k= OrdersHistoryTotal (), kp= 0 ;

   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 ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber ()==mn) {
             if (dt< OrderCloseTime ()) {
               if ( OrderProfit ()< 0 ) kp++; else kp= 0 ;
            }
          }
        }
      }
    }
  }
   return (kp);
}

 

ClosePosExceptTicket() 함수.

이 기능은 제출된 티켓이 있는 포지션을 제외한 모든 포지션을 시장 가격으로 마감합니다. 폐쇄 위치의 보다 정확한 선택은 외부 매개변수에 의해 설정됩니다.

  • sy - 도구 이름. 이 매개변수를 설정하면 이 기능은 지정된 기기의 위치만 확인합니다. NULL 은 현재 도구를 의미하고 "" (기본값)은 모든 도구를 의미합니다.
  • op - 거래 작업, 위치 유형. 유효한 값: OP_BUY , OP_SELL 또는 -1 . 기본값 -1 은 임의의 위치를 의미합니다.
  • mn - 위치 ID(MagicNumber). 기본값은 -1 - 모든 마법입니다.
  • ti - 포지션 티켓. 기본값은 0 (모든 티켓)입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 20.03.2009                                                     |
//|  Описание : Закрытие позиций по рыночной цене за исключением одной,        |
//|           :  с переданным тикетом.                                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ti - тикет позиции              ( 0   - любой тикет)                    |
//+----------------------------------------------------------------------------+
void ClosePosExceptTicket( string sy= "" , int op=- 1 , int mn=- 1 , int ti= 0 ) {
   int i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if (( OrderSymbol ()==sy || sy== "" ) && (op< 0 || OrderType ()==op)) {
         if ( OrderType ()==OP_BUY || OrderType ()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber ()==mn) {
             if (ti== 0 || ti!= OrderTicket ()) ClosePosBySelect();
          }
        }
      }
    }
  }
}

 

GetChangeBalance() 함수.

매개변수로 전달된 특정 날짜 이후의 비거래 (예금, 출금, 내부 이체, 이자 발생, 보너스) 잔액 변경을 반환합니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2010                                                     |
//|  Описание : Возвращает неторговое изменение баланса с определённой даты    |
//|             (пополнения, снятия, внутренние переводы).                     |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    dt - Дата и время в секундах с 1970 года  (0 - с начала истории)        |
//+----------------------------------------------------------------------------+
double GetChangeBalance( datetime dt= 0 )
{
   double p= 0 ;
   int     i, k= OrdersHistoryTotal ();

   for (i= 0 ; i<k; i++) {
     if ( OrderType ()== 6 ) {
       if (dt< OrderCloseTime ()) p+= OrderProfit ();
    }
  }
   return (p);
}
사유: