"KimIV의 유용한 기능"만.

 

모든 기능은 이 스레드에서 가져왔습니다. - h ttp://forum.mql4.com/ru/11287 , 스레드에는 각 기능에 대한 자세한 설명과 사용 예가 포함되어 있습니다.

콘텐츠

 페이지 #1 SetOrder - 주문 설정. 백테스트를 위한 함수 버전입니다. ExistOrders - 주문의 존재에 대한 플래그를 반환합니다. ExistPositions - 포지션의 존재에 대한 플래그를 반환합니다 . OpenPosition - 포지션을 엽니다. 백테스트를 위한 함수 버전입니다. OpenPosition - 포지션을 열고 티켓을 반환합니다. 온라인용 . 메시지 - 댓글 및 로그에 메시지 표시 GetNameTF - 기간의 이름을 반환합니다. GetNameOP - 거래 작업의 이름을 반환합니다. ModifyOrder - 미리 선택된 하나의 주문 수정. DeleteOrders - 주문을 삭제합니다. 백테스트를 위한 함수 버전입니다. DeleteOrders - 주문을 삭제합니다 . 온라인용 . FindNearFractal - 가장 가까운 프랙탈 검색 ExistOrdersByLot - 로트 크기별로 주문의 존재에 대한 플래그를 반환합니다. GetLotLastOrder - 마지막 주문의 로트 크기를 반환하거나 -1 GetOrderOpenPrice - 마지막 주문의 가격을 반환하거나 0 을 반환합니다. IndexByTicket - 티켓의 주문 또는 위치 인덱스를 반환합니다.
2 쪽
NumberOfOrders - 주문 수를 반환합니다.

ClosePosBySelect - 미리 선택된 위치 하나를 닫습니다.

ClosePosBySizeProfitInCurrency - 특정 가치의 예금 통화로 이익이 있는 포지션을 청산합니다.

ClosePosBySizeLossInCurrency - 예금 통화 손실이 특정 값을 초과한 포지션 청산

ClosePositions - 시장 가격으로 포지션을 마감합니다.

ClosePosFirstProfit - 먼저 수익성 있는 시장 가격으로 포지션을 청산합니다.

ClosePosWithMaxProfitInCurrency - 예금 통화에서 최대 양수 이익으로 한 포지션을 마감합니다.

DistMarketAndPos- 시장과 가장 가까운 위치 사이의 거리를 포인트 단위로 반환합니다.

ExistOPNearMarket - 시장 근처에 위치 또는 주문의 존재에 대한 플래그를 반환합니다.

ExistPosByPrice - 시가에 포지션이 존재한다는 플래그를 반환합니다.

GetAmountLotFromOpenPos - 열린 위치의 랏의 양을 반환합니다.

페이지 #3
GetIndexByTicket - 티켓별 주문 또는 위치의 인덱스를 반환합니다.

상관 관계 - 두 계열의 상관 관계를 반환합니다.

GetIndexLastPos - 마지막 열린 위치의 인덱스를 반환하거나 -1

GetLotLastPos - 마지막 열린 위치의 로트 크기를 반환하거나 -1

GetMaxLotFromOpenPos - 열린 위치에서 최대 로트 크기를 반환합니다.

GetMinLotFromOpenPos - 열린 위치에서 최소 로트 크기를 반환합니다.

NumberOfPositions - 위치 수를 반환합니다.

GetProfitFromDateInCurrency - 특정 날짜 이후 마감된 포지션의 예금 통화로 총 이익을 반환합니다.

GetProfitOpenPosInCurrency - 예치 통화로 열린 포지션의 총 이익을 반환합니다.

GetProfitOpenPosInPoint - 오픈 포지션의 총 이익을 포인트로 반환합니다.

GetTicketLastPos - 마지막 열린 위치의 티켓을 반환하거나 -1

페이지#4
GetTypeLastClosePos - 마지막으로 닫힌 위치의 유형을 반환하거나 -1

GetTypeLastOpenPos - 마지막 열린 위치의 유형을 반환하거나 -1

isCloseLastPosByStop - 스톱으로 마지막 위치를 닫기 위한 플래그를 반환합니다.

isCloseLastPosByTake - 마지막 위치를 테이크에 의해 닫는 플래그를 반환합니다.

isLossLastPos - 마지막 위치의 손실 플래그를 반환합니다.

isTradeToDay - 오늘의 거래 플래그를 반환합니다.

NumberOfBarCloseLastPos - 마지막 위치의 닫는 막대 번호 또는 -1을 반환합니다.

NumberOfBarOpenLastPos - 마지막 위치의 열린 막대 번호 또는 -1을 반환합니다.

NumberOfLossPosToday - 오늘 마감된 손실 위치 수를 반환합니다.

PriceCloseLastPos - 마지막으로 마감된 포지션의 종가를 반환합니다.


페이지 #5
PriceOpenLastPos - 마지막 오픈 포지션의 시가를 반환합니다.

PriceOpenLastClosePos - 마지막으로 마감된 포지션의 시가를 반환합니다.

PriceOpenNearPos - 가장 가까운 위치의 시가를 반환합니다.

TicketNearPos - 시가에서 시장에 가장 가까운 위치의 티켓을 반환합니다.

TypeNearPos - 시장에 가장 가까운 위치 유형을 반환하거나 -1을 반환합니다.

TimeOpenLastPos - 마지막 오픈 포지션의 오픈 시간을 반환합니다.

BubbleSort - 배열 요소에 대해 버블 정렬을 수행합니다.

BarsBetweenLastFractals - 마지막 두 프랙탈 사이의 막대 수를 반환합니다.

SecondsAfterCloseLastPos - 마지막 위치가 닫힌 후의 시간(초)을 반환합니다.

SecondsAfterOpenLastPos - 마지막 위치가 열린 후의 시간(초)을 반환합니다.

DeleteOppositeOrders - 반대 주문 위치 삭제

ArraySearchDouble - 값으로 배열의 요소를 검색하고 발견된 요소의 인덱스 또는 -1을 반환합니다.

ArraySearchInt - 값으로 배열의 요소를 검색하고 찾은 요소의 인덱스 또는 -1을 반환합니다.

ArraySearchString - 값으로 배열 요소를 검색하고 찾은 요소의 인덱스를 반환하거나 -1

GetLotLastClosePos - 마지막 마감 위치의 로트 크기를 반환하거나 -1

ArrayMax - 배열의 최대 요소 값을 반환합니다.


페이지 #6
ArrayMin - 배열의 최소 요소 값을 반환합니다.

GetExtremumZZBar - 지그재그 극한 막대 번호를 숫자로 반환합니다.

ArrayAvg - 배열 요소의 산술 평균을 반환합니다.

ArrayAvGeom - 배열 요소의 기하 평균을 반환합니다.

SetHLine - OBJ_HLINE 개체를 수평선으로 설정합니다.
SetVLine - OBJ_VLINE 개체를 수직선으로 설정합니다.
SetTLine - OBJ_TREND 개체를 추세선으로 설정합니다.

SetTLineByAngle - 추세선의 OBJ_TRENDBYANGLE 개체를 각도로 설정합니다.

SetArrow - 차트의 아이콘인 OBJ_ARROW 개체를 설정합니다.

SetLabel - OBJ_LABEL 개체인 텍스트 레이블을 설정합니다.

CrossPointOfLines - 두 선의 교차점 좌표를 계산합니다.각 선은 점의 좌표 쌍으로 지정됩니다.

SetRegression - OBJ_REGRESSION 개체를 선형 회귀 채널로 설정합니다.

EquationDirect - 직선의 방정식. 선과의 교차점에서 X의 Y 값을 계산합니다.
GetArrowInterval - 신호 포인터를 설정하기 위한 간격을 반환합니다.
GetArrowInterval - 신호 포인터를 설정하기 위한 간격을 반환합니다.
FindNearFractal - 가장 가까운 프랙탈 찾기. 가격 수준을 반환합니다.
GetExtremumZZBar - 지그재그 극한 막대 번호를 숫자로 반환합니다.
GetExtremumZZPrice - 지그재그 극한값을 숫자로 반환합니다.

GetFractalBar - 프랙탈 막대 번호를 숫자로 반환합니다.

GetNearestDownFractal - 가장 가까운 다운 프랙탈의 가격 수준을 반환합니다.

GetNearestUpFractal - 가장 가까운 위쪽 프랙탈을 반환합니다.


페이지 #7
CorrectTF - 지원되는 가장 가까운 MT4로 타임프레임을 수정합니다.
DateBeginQuarter - 분기의 시작 날짜를 반환합니다.
DateOfMonday - 주 번호로 월요일 날짜를 반환합니다.

피보나치 - 피보나치 수열의 요소를 서수로 반환합니다.
GetNameMA - MA 메서드의 이름을 반환합니다.
GetPriceDiffInPoint - 두 막대 간의 가격 차이를 포인트 단위로 반환합니다.

GetTypePrice - 가격 유형 이름을 반환합니다.
ArrayLR - 선형 회귀 값의 배열을 생성합니다.
ArrayMo - 분포 밀도 곡선의 최대값인 모드를 반환합니다.

ExistOrdersByPrice - 설정된 가격에 주문이 존재한다는 플래그를 반환합니다.

ClosePosBySelect - 미리 선택된 하나의 위치 닫기
CountOrders - 유형별로 주문 수를 계산합니다.
ModifyOrder - 주문 수정. 백테스트를 위한 함수 버전입니다.

IIFc - 조건에 따라 두 값 중 하나를 반환합니다.

IIFd - 조건에 따라 두 값 중 하나를 반환합니다.
IIFi - 조건에 따라 두 값 중 하나를 반환합니다.
IIF - 조건에 따라 두 값 중 하나를 반환합니다.
ExistInHistoryCloseBetween - 날짜 사이에 마감(삭제)된 위치 또는 주문 내역의 존재 플래그를 반환합니다.

ExistInHistoryOpenBetween - 날짜 사이에 열린(세트) 위치 또는 주문 내역의 존재 플래그를 반환합니다.

ExistInHistoryToDay - 오늘의 기록에서 주문 또는 위치의 존재 플래그를 반환합니다.

TakeProfitLastPos - 마지막 오픈 포지션의 TakeProfit 가격 또는 -1을 반환합니다.

페이지 #8
TakeProfitLastClosePos - 마지막으로 마감된 포지션의 TakeProfit 가격 또는 -1을 반환합니다.

MovingInWL - 정지 수준을 손익분기점으로 이동

SimpleTrailing - 간단한 트롤로 위치 추적

ArrayZ - 숫자 계열의 Z 점수를 반환합니다.
ArrayDeleteInt - 주어진 인덱스에서 배열 요소를 삭제합니다. 새 배열의 크기를 반환하거나 제거할 수 없는 경우 -1을 반환합니다.
ArrayDeleteDouble - 주어진 인덱스에서 배열 요소를 삭제합니다. 새 배열의 크기를 반환하거나
제거할 수 없는 경우 -1을 반환합니다.
ArrayDeleteString - 주어진 인덱스에서 배열 요소를 삭제합니다. 새 배열의 크기를 반환하거나 -1을 반환합니다.
아무것도 제거할 수 없다면.
ArrayInsertDouble - 주어진 인덱스에 배열 요소를 삽입합니다. 새 배열의 크기를 반환합니다.
BubbleSort2 - 2차원 배열의 요소에 대해 거품 정렬을 수행합니다.
GetTypeLastDeleted - 마지막으로 삭제된 주문의 유형을 반환하거나 -1
iBarLargest - 가장 큰 막대의 인덱스 또는 -1을 반환합니다.
iBarOfDayCalc - 하루 시작부터 계산된 막대 번호를 반환합니다. 막대 번호 매기기는 1부터 시작합니다.
iBarOfDayReal - 하루 시작부터 막대의 실수를 반환합니다.
NameDayOfWeek - 요일의 이름을 반환합니다.
NormalizeLot - 거래된 로트의 정규화된 값을 반환합니다.
NormalizePrice - 틱 크기로 정규화된 가격 값을 반환합니다.
WeekOfMonth - 주어진 날짜의 주 번호를 반환합니다.
ClosePosBySortLots - 로트 크기별로 정렬 순서로 위치를 마감합니다.
AddLeadingZero - 문자열 S를 길이 K와 같게 만들기 위해 문자열 S에 충분한 선행 0 "0"을 추가합니다.

toTime - 2/3 정수를 시간 형식의 문자열로 변환합니다.

페이지 #9
StringLower - 소문자 문자열을 반환합니다.

StringUpper - 대문자로 된 문자열을 반환합니다.

StringToArrayDouble - 문자열에서 배열로 실수 전송

StringToArrayInt - 문자열에서 배열로 정수 값 전송

StrSplit - 문자열을 요소 배열로 분할

StrTran - 부분 문자열 교체

MovingInWL - 정지 수준을 손익분기점으로 이동

isTradeTimeString - 시간 거래 활성화 플래그를 반환합니다.

isTradeTimeInt - 시간 거래 허가 플래그를 반환합니다.


추가로:
하나의 아카이브에 모든 기능이 있습니다.
모든 기능은 연결된 라이브러리 형태입니다.


 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия  : 13.06.2007                                                      | //|  Описание : Установка ордера. Версия функции для тестов на истории.        | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента   (NULL или "" - текущий символ)          | //|    op - операция                                                           | //|    ll - лот                                                                | //|    pp - цена                                                               | //|    sl - уровень стоп                                                       | //|    tp - уровень тейк                                                       | //|    mn - Magic Number                                                       | //|    ex - Срок истечения                                                     | //+----------------------------------------------------------------------------+ void SetOrder( string sy, int op, double ll, double pp,                double sl= 0 , double tp= 0 , int mn= 0 , datetime ex= 0 ) {    color clOpen;    int    err, ticket;      if (sy== "" || sy== "0" ) sy= Symbol ();    if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;   ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, "" , mn, ex, clOpen);    if (ticket< 0 ) {     err= GetLastError ();      Print ( "Error(" ,err, ") set " ,GetNameOP(op), ": " ,ErrorDescription(err));      Print ( "Ask=" ,Ask, " Bid=" ,Bid, " sy=" ,sy, " ll=" ,ll,            " pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);   } } //+----------------------------------------------------------------------------+

ExistOrders() 함수.

주문 존재 플래그를 반환합니다. 그것은 순서가 설정되었는지 여부에 대한 질문에 답할 것입니다. 이 기능을 사용하여 더 구체적인 주문뿐만 아니라 모든 주문을 요청할 수 있습니다. 요청 필터는 함수 매개변수를 사용하여 구성됩니다.

  • sy - 악기 이름에 대한 제한을 부과합니다. 기본적으로 매개변수는 ""입니다. 제한이 없습니다. 즉, 모든 도구입니다. NULL을 전달하면 주문 선택이 현재 상품으로 제한됩니다.
  • op - 주문 유형에 제한을 둡니다. 기본적으로 제한이 없습니다. 즉, 모든 유형의 주문이 있는지 확인합니다. 유효한 매개변수 값은 -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT 및 OP_SELLSTOP입니다.
  • mn - 주문의 식별("매직") 번호에 제한을 둡니다. 기본적으로 제한이 없습니다. 즉, 마법 번호가 있는 주문이 있는지 확인합니다.
  • ot - 주문 배치 시간에 제한을 둡니다. 확인했습니다. 주문이 이 매개변수의 값보다 나중에 배치되도록 합니다. 기본적으로 제한이 없습니다. 즉, 설정 시간이 있는 주문이 있는지 확인합니다.
 //+----------------------------------------------------------------------------+ //|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 12.03.2008                                                     | //|  Описание : Возвращает флаг существования ордеров.                         | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента   (""   - любой символ,                   | //|                                     NULL - текущий символ)                 | //|    op - операция                   (-1   - любой ордер)                    | //|    mn - MagicNumber                (-1   - любой магик)                    | //|    ot - время открытия             ( 0   - любое время установки)          | //+----------------------------------------------------------------------------+ bool ExistOrders( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {    int i, k= OrdersTotal (), ty;      if (sy== "0" ) sy= Symbol ();    for (i= 0 ; i<k; i++) {      if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {       ty=OrderType();        if (ty> 1 && ty< 6 ) {          if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || ty==op)) {            if (mn< 0 || OrderMagicNumber()==mn) {              if (ot<=OrderOpenTime()) return (True);           }         }       }     }   }    return (False); }
Полезные функции от KimIV
Полезные функции от KimIV
  • www.mql5.com
В этой теме я буду выкладывать коды своих функций на языке программирования MQL4, приводить примеры их использования и отвечать на вопросы, связанн...
 

ExistPositions() 함수.

미결 매수 또는 매도를 확인하도록 설계되었습니다. ExistOrders 함수와 유사합니다. 기본적으로 모든 위치(현재 및 기타 상품)를 검사합니다. 필터 - 기능 매개변수 조합으로 선택 항목을 지정할 수 있습니다.

  • sy - 도구 이름에 제한을 가합니다. 기본적으로 매개변수는 ""입니다. 제한이 없습니다. 즉, 모든 도구입니다. NULL을 전달하면 위치 선택이 현재 기기로 제한됩니다.
  • op - 포지션 유형을 제한합니다(매수/매도). 기본적으로 제한이 없습니다. 즉, 모든 유형의 위치가 있는지 확인합니다. 유효한 매개변수 값은 -1, OP_BUY 및 OP_SELL입니다.
  • mn - 위치의 식별("매직") 번호에 제한을 가합니다. 기본적으로 제한이 없습니다. 즉, 임의의 매직 번호가 있는 위치가 있는지 확인합니다.
  • ot - 포지션 개시 시간에 제한을 둡니다. 이 매개변수의 값보다 늦게 위치가 열렸는지 확인합니다. 기본적으로 제한이 없습니다. 즉, 개장 시간이 있는 위치가 있는지 확인합니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 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()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (ot<=OrderOpenTime()) return (True);
            }
          }
        }
      }
    }
  }
   return (False);
}

테스터용 OpenPosition() 함수.


 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Открытие позиции. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" - текущий символ)                   |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition( string sy, int op, double ll, double sl= 0 , double tp= 0 , int mn= 0 ) {
   color   clOpen;
   double pp;
   int     err, ticket;
 
   if (sy== "" ) sy= Symbol ();
   if (op==OP_BUY) {
    pp=MarketInfo(sy, MODE_ASK); clOpen=clOpenBuy;
  } else {
    pp=MarketInfo(sy, MODE_BID); clOpen=clOpenSell;
  }
  ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, "" , mn, 0 , clOpen);
   if (ticket< 0 ) {
    err= GetLastError ();
     Print ( "Error(" ,err, ") open " ,GetNameOP(op), ": " ,ErrorDescription(err));
     Print ( "Ask=" ,Ask, " Bid=" ,Bid, " sy=" ,sy, " ll=" ,ll,
           " pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);
  }
}
 

온라인용 OpenPosition() 함수.


 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 21.03.2008                                                     |
//|  Описание : Открывает позицию и возвращает её тикет.                       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
int OpenPosition( string sy, int op, double ll, double sl= 0 , double tp= 0 , int mn= 0 ) {
   color     clOpen;
   datetime ot;
   double    pp, pa, pb;
   int       dg, err, it, ticket= 0 ;
   string    lsComm=WindowExpertName()+ " " +GetNameTF( Period ());
 
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
   for (it= 1 ; it<=NumberOfTry; it++) {
     if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) {
       Print ( "OpenPosition(): Остановка работы функции" );
       break ;
    }
     while (!IsTradeAllowed()) Sleep ( 5000 );
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
     if (op==OP_BUY) pp=pa; else pp=pb;
    pp= NormalizeDouble (pp, dg);
    ot= TimeCurrent ();
    ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0 , clOpen);
     if (ticket> 0 ) {
       if (UseSound) PlaySound (NameFileSound); break ;
    } else {
      err= GetLastError ();
       if (pa== 0 && pb== 0 ) Message( "Проверьте в Обзоре рынка наличие символа " +sy);
       // Вывод сообщения об ошибке
       Print ( "Error(" ,err, ") opening position: " ,ErrorDescription(err), ", try " ,it);
       Print ( "Ask=" ,pa, " Bid=" ,pb, " sy=" ,sy, " ll=" ,ll, " op=" ,GetNameOP(op),
             " pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);
       // Блокировка работы советника
       if (err== 2 || err== 64 || err== 65 || err== 133 ) {
        gbDisabled=True; break ;
      }
       // Длительная пауза
       if (err== 4 || err== 131 || err== 132 ) {
         Sleep ( 1000 * 300 ); break ;
      }
       if (err== 128 || err== 142 || err== 143 ) {
         Sleep ( 1000 * 66.666 );
         if (ExistPositions(sy, op, mn, ot)) {
           if (UseSound) PlaySound (NameFileSound); break ;
        }
      }
       if (err== 140 || err== 148 || err== 4110 || err== 4111 ) break ;
       if (err== 141 ) Sleep ( 1000 * 100 );
       if (err== 145 ) Sleep ( 1000 * 17 );
       if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 * 11 );
       if (err!= 135 ) Sleep ( 1000 * 7.7 );
    }
  }
   return (ticket);
}
 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Вывод сообщения в коммент и в журнал                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - текст сообщения                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
} 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование таймфрейма                             |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeFrame - таймфрейм (количество секунд)      (0 - текущий ТФ)         |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("UnknownPeriod");
  }
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Возвращает наименование торговой операции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    op - идентификатор торговой операции                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("Buy Limit");
    case OP_SELLLIMIT: return("Sell Limit");
    case OP_BUYSTOP  : return("Buy Stop");
    case OP_SELLSTOP : return("Sell Stop");
    default          : return("Unknown Operation");
  }
}
 

ModifyOrder() 함수.

ModifyOrder 기능은 미리 선택된 하나의 주문에 대해 하나 이상의 가격 수준을 변경하도록 설계되었습니다. 여기서 주문은 보류 중인 지정가 또는 지정가 주문과 매수 또는 매도 시장 주문, 즉 포지션을 모두 의미합니다. 위치의 경우 ModifyOrder 기능을 사용하여 StopLossTakeProfit 의 두 가지 가격 수준을 변경할 수 있으며, 보류 중인 주문의 경우 이에 추가하여 OpenPrice 설정 가격도 변경할 수 있습니다. 변경된 가격 수준은 매개변수로 ModifyOrder 함수에 전달됩니다. 매개변수가 음수이면 해당 가격 수준은 변경되지 않습니다.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.11.2006                                                     |
//|  Описание : Модификация одного предварительно выбранного ордера.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена установки ордера                                              |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    cl - цвет значка модификации                                            |
//+----------------------------------------------------------------------------+
void ModifyOrder( double pp=- 1 , double sl= 0 , double tp= 0 , color cl= CLR_NONE ) {
   bool    fm;
   double op, pa, pb, os, ot;
   int     dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
 
   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);
  op= NormalizeDouble (OrderOpenPrice() , dg);
  os= NormalizeDouble (OrderStopLoss()  , dg);
  ot= NormalizeDouble (OrderTakeProfit(), dg);
 
   if (pp!=op || sl!=os || tp!=ot) {
     for (it= 1 ; it<=NumberOfTry; it++) {
       if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ;
       while (!IsTradeAllowed()) Sleep ( 5000 );
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, 0 , cl);
       if (fm) {
         if (UseSound) PlaySound (NameFileSound); break ;
      } else {
        er= GetLastError ();
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
         Print ( "Error(" ,er, ") modifying order: " ,ErrorDescription(er), ", try " ,it);
         Print ( "Ask=" ,pa, "  Bid=" ,pb, "  sy=" ,OrderSymbol(),
               "  op=" +GetNameOP(OrderType()), "  pp=" ,pp, "  sl=" ,sl, "  tp=" ,tp);
         Sleep ( 1000 * 10 );
      }
    }
  }
}
 

DeleteOrders() 함수. 테스터 버전.

DeleteOrders() 함수는 BuyLimit, BuyStop, SellLimit 및 SellStop 보류 주문을 삭제 하도록 설계되었습니다. DeleteOrders() 함수는 보편적입니다. 즉, 기존의 모든 보류 주문과 함수 매개변수에 지정된 선택 조건을 충족하는 특정 주문을 모두 삭제하는 데 사용할 수 있습니다.

sy - 도구 이름. 테스터에서의 거래는 현재 상품에서만 수행할 수 있으므로 이 매개변수는 테스터 버전과 관련이 없으며 이 기능의 온라인 버전과의 호환성을 위해서만 필요합니다. 테스터에서는 ​"" 또는 NULL 값을 사용하는 것이 가장 좋습니다. 기본값은 "" - 모든 문자를 의미합니다.
op
- 거래 작업 유형, 보류 중인 주문 유형. -1, OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT 또는 OP_SELLSTOP의 다섯 가지 값 중 하나가 가능합니다. 기본값 -1은 모든 주문을 의미합니다.

mn - MagicNumber, 보류 중인 주문의 식별 번호입니다. 기본값 -1은 모든 마법을 의미합니다.


 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
   int i, k= OrdersTotal (), ot;
 
   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
       if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
         if (OrderSymbol()==sy && (op< 0 || ot==op)) {
           if (mn< 0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

DeleteOrders() 함수. 온라인 버전.


 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
   bool fd;
   int err, i, it, k= OrdersTotal (), ot;
  
   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; 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) {
             for (it= 1 ; it<=NumberOfTry; it++) {
               if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) break ;
               while (!IsTradeAllowed()) Sleep ( 5000 );
              fd=OrderDelete(OrderTicket(), clDelete);
               if (fd) {
                 if (UseSound) PlaySound (NameFileSound); break ;
              } else {
                err= GetLastError ();
                 Print ( "Error(" ,err, ") delete order " ,GetNameOP(ot),
                       ": " ,ErrorDescription(err), ", try " ,it);
                 Sleep ( 1000 * 5 );
              }
            }
          }
        }
      }
    }
  }
}
 
//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. 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 );
}

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);
}
 

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);
}
 

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);
}
 

IndexByTicket() 함수.

티켓별 주문 또는 포지션의 인덱스(주문 또는 오픈 포지션의 일반 목록에 있는 일련 번호)를 반환합니다. IndexByTicket() 함수가 필요한 티켓으로 주문이나 위치를 찾을 수 없으면 -1 을 반환합니다. 함수 매개변수로 확인된 주문 또는 위치 목록을 제한할 수 있습니다.

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