English
中文
日本語
ID
Vietnam
한국어
Filipino
 
   대학 내비게이션

Forex MQL4 가격 데이터: 개시 가격, 최고 가격, 최저 가격, 종가

MQL4 Price Data: Open, High, Low, Close, Bid, Ask

일반적으로 EA를 개발할 때 특정 바에 대한 바 가격 데이터를 사용합니다. 이 전체 MQL4 가격 데이터 기사에서 거래 EA를 프로그래밍하는 데 도움이 되는 4가지 수준의 가격 데이터(시가, 최고가, 최저가, 마감가)를 사용하여 완전한 기능을 갖춘 Expert Advisor를 작성하는 방법을 알아보세요.

레벨 가격 데이터 상수/ 기능기능
1고가, 저가, 시가, 종가, 추가: 입찰, 요청가장 쉬운 수준입니다. 가격 데이터는 차트 기호, 차트 기간 및 현재 막대의 현재 데이터 가격을 나타냅니다.
2높음[], 낮음[], 열기[], 닫기[]이전 레이어. 가격 데이터는 채팅 종류 및 차트 시간대의 현재 데이터 가격을 의미하지만, 어떤 과거 막대를 참조할 수 있는지가 더 유연합니다. 괄호 안의 숫자는 참조할 수 있는 과거 막대를 나타냅니다. 예: 종가[0] = 현재 봉 종가, 종가[1] = 이전 봉 종가.
3iHigh(), iLow(), iOpen(), iClose()매우 유연한 기능 수준. 가격 데이터 기능은 맞춤형 거래 기호 및/또는 기간 및/또는 과거 막대의 가격 데이터를 의미합니다. 예제 #1: iClose(NULL,0,0) = 차트 기호, 시간 범위, 현재 봉의 종가. 참고: 사용법은 Close, Bid 또는 iClose[0]와 거의 동일합니다. 예시 #2: iClose (“EURUSD”,30,1) = EURUSD 기호의 종가, 30분 기간, 이전 막대. 참고: 이번에 이를 사용하면 이전 가격 데이터 기능에 비해 기능이 3배 증가합니다.
4iHighest(), iLowest(),가격 데이터 기능은 일정 기간 내 최대 가격 데이터 값을 찾는 데 사용됩니다. 특정 범위에서 가장 높거나 가장 낮은 데이터 값을 찾는 데 적합합니다. 예: 낮음[iLowest(Symbol(), 0, MODE_LOW, 3, 1)] = 마지막 3개 막대 중 가장 낮은 막대.

이 4가지 수준의 가격 데이터를 별도로 살펴보겠습니다.

레벨 1 가격 데이터: 가격 데이터는 차트 기호, 차트 기간 및 현재 막대로 제한됩니다.

현재 차트 및 기간의 현재 막대에 대한 가격 데이터만 참조하려는 경우 고가, 저가, 시가, 종가 가격 데이터 방법 중 하나를 사용할 수 있습니다. , 입찰, 질문 .


프로그램에서 읽으려면 모두 대문자가 있어야 합니다(입찰은 유효하지만 입찰은 유효하지 않음). 현재 종가를 참고하고 싶다면 Close 또는 Bid를 사용하면 됩니다. MT4의 종가는 기본적으로 Bid로 설정되어 있기 때문입니다. 예를 들어, EA가 현재 종가가 200일 이동평균보다 커야 한다는 조건을 찾도록 하려면 다음과 같이 선언하면 됩니다.


닫기> iMA( NULL,0,200,0,MODE_EMA,PRICE_CLOSE,1)


또는 다음과 같이 하세요:


입찰> iMA (NULL,0,200,0,MODE_EMA,PRICE_CLOSE,1);


참고: 제발 이 간단한 가격 데이터 레벨은 차트 기호, 차트 기간 및 현재 막대에만 사용할 수 있다는 점을 기억하십시오. 다양한 막대를 유연하게 사용하려면 레벨 2 또는 3 가격 데이터를 사용해야 합니다. 다양한 차트 기호, 다양한 시간대, 다양한 막대를 사용할 수 있는 유연성을 원한다면 레벨 3 가격 데이터를 사용해야 합니다.

레벨 2 가격 데이터: 가격 데이터는 다양한 막대에서 사용할 수 있을 만큼 유연합니다.

현재 차트의 가격 데이터를 사용하고 싶지만 제어하려는 경우 표시된 막대에 대해 미리 정의된 계열 배열(High[], Low[], Open[] 및 Close [])을 사용할 수 있습니다.


Arrays Is a 여러 값을 저장하는 변수입니다. 이는 테이블의 항목을 그룹화하고 인덱스라고 하는 행 번호로 액세스할 수 있는 목록처럼 작동합니다. 번호가 매겨진 행이나 인덱스는 0에서 시작하여 1, 2, 3 등으로 진행됩니다. 이 숫자의 인덱스는 괄호 안에 포함되어 있습니다. 위의 특정 사례에서 각 번호가 매겨진 인덱스는 특정 시간 막대를 나타내며 숫자를 변경하면 참조하려는 시간 막대가 변경됩니다. 예를 들어 Close[0]은 현재 봉의 시초 가격이고 0은 인덱스입니다. 이를 변경하면 다른 봉의 종가를 얻을 수 있습니다. Close[1]은 현재 봉의 이전 봉을 참조하고, 닫기 [2]는 현재 막대에서 2개 막대 뒤로 이동하는 것을 의미합니다.


우리가 생성하는 대부분의 EA에서는 현재 막대 또는 이전 막대의 가격 값을 사용합니다. 그러나 다양한 과거 막대뿐만 아니라 현재 차트 외부의 다양한 기호 또는 현재 차트 외부의 다양한 시간대의 가격 데이터를 더 유연하게 처리하려면 레벨 3 가격 데이터로 이동해야 합니다.


레벨 3 가격 데이터: 사용자 정의 가능한 기호, 사용자 정의 가능한 기간 및 사용자 정의 가능한 과거 막대와 함께 작동하는 기능을 사용하는 가장 유연한 가격 데이터입니다.

현재 차트 이외의 거래상품의 가격 데이터(최고가, 최저가, 시가, 종가)를 사용하고 싶거나, 다른 시간대의 데이터가 필요한 경우 현재 차트 기간보다 가격 데이터의 경우 iHigh(), iLow(), iOpen() 및 iClose() 가격 데이터 기능을 사용할 수 있습니다. 이는 단일 기간 또는 막대 차트에서 가격 데이터 값을 제공합니다.


다음 표는 iClose() 함수의 구문을 보여줍니다.

 

< td style="word-break: break-all;">현재 막대를 기준으로 뒤로 이동
매개변수설명
기호사용된 통화 쌍 기호
Timeframe시간 프레임. 모든 기간 열거 값이 될 수 있습니다. 현재 표시된 시간 범위를 표시하려면(0)을 선택하거나 하나를 선택하세요. 다음 중 하나: (1, 5, 15, 30, 60, 240, 1440, 10080, 43200 ) {모두 포함 분}
Shift

예를 들어 1시간 차트가 열려 있지만 일일 차트에서 이전 막대의 종가를 보고 싶다고 가정해 보겠습니다.


어제 최고 가격과 최저 가격의 샘플입니다:


더블 하이= iHigh(NULL, PERIOD_D1, 1);

더블 로우 = iLow(NULL, PERIOD_D1, 1);


매개변수 표현:< /p>


NULL = 현재 차트 코드.


PERIOD_D1 = D1 또는 일일 차트 기간(1440일 수도 있음)


1 = 이동, 1은 이전 막대를 나타냅니다.


참고: iHigh() 및 iLow() 함수를 사용하면 단일 막대의 최대값을 이동할 수 있습니다. 막대 범위 내에서 최대값을 이동하려면 아래에서 자세히 설명하는 iHighest() 및 iLowest() 함수를 사용해야 합니다.

시간표 열거 테이블

시간 범위를 지정하는 방법에는 두 가지가 있습니다. 하나는 주기 상수로, 다른 하나는 정수 값으로 지정하는 것입니다(아래 예 참조).


이중 높이 = iClose(NULL,Period_D1,1);

이중 높이 = iClose(NULL, 1440,1);< /p>


PERIOD_D1은 하루를 구성하는 분 단위인 1440으로 대체될 수 있음을 알 수 있습니다.


이것은 상수 값과 이에 상응하는 정수 값이 포함된 전체 표입니다.:

td>
持续的설명
PERIOD_M111
PERIOD_M555
PERIOD_M303030
PERIOD_H160 1 시간
PERIOD_H42404 시간
PERIOD_D11440
매일
PERIOD_W110080주간
PERIOD_MN143200 월별
0(영)0차트의 시간 범위

이 작은 값 대체는 기억하기 쉽습니다. 일단 기억하고 나면 상수보다 지정된 매개변수 상자에 입력하기가 더 쉽습니다. 또한 이러한 정수는 외부 변수와 함께 더 쉽게 사용될 수 있다는 것을 알았습니다. 예를 들어, 자체 H1 차트와 다른 이전 종가를 참조하고 싶지만 어떤 기간을 사용해야 할지 모르는 경우에는 어떻게 해야 할까요? 그런 다음 다음 예와 같이 시간 범위 매개변수를 외부 변수로 구성할 수 있습니다.


// 외부 변수 섹션에

< p>External int TimeFrame = 30;


// 코드 어딘가에 배치하세요.

Double PreviousClose = iClose (NULL, TimeFrame , 1 );


TimeFrame은 시간 프레임 매개변수를 나타내는 내 식별자입니다. 내 기본값은 이전 M30 막대를 나타내는 30입니다. . Shift 매개변수에 1을 입력했기 때문에 이것이 이전 막대라는 것을 알고 있습니다. 현재 M5종가를 참조하고 싶다면 두 번째 파라미터에 5를 입력하고, 현재봉을 참조하고 싶다면 세 번째 파라미터에 0을 입력하면 됩니다.


이제 EA 참조를 여러 기간으로 쉽게 만들 수 있으며 원하는 경우 기간 최적화 간에 실행되도록 전략 테스터를 설정할 수도 있습니다.

Note

모든 가격 데이터 함수뿐만 아니라 모든 지표 및 사용자 정의 지표에 대해 대체 기간 방법(PERIOD_M30 = 30) 및 외부 정수 방법(extern int CloseTime = 30)을 사용할 수 있습니다. 모두 1초가 있습니다. 매개변수는 시간 범위를 나타내며 일반적으로 기본값은 0 또는 차트의 시간 범위이지만 위의 값으로 변경할 수 있습니다.

 

대체 통화 대체 방법론

가장 좋은 점은 여러 시간대를 쉽게 참조할 수 있을 뿐만 아니라 통화 쌍을 쉽게 참조할 수 있다는 것입니다. NULL은 현재 차트의 기호를 나타내지만 EA 자체 차트 외부의 통화를 포함한 모든 통화 기호로 대체될 수 있습니다. 그렇게 하는 것은 간단합니다. NULL을 사용하려는 기호(시장 창에 나타나야 함)로 바꾸고 이를 견적 시장에 넣기만 하면 됩니다.


EURUSD 기호를 인용하려면 예를 들어주세요:


double PreviousClose = iClose ("EURUSD", 30,1);


또한 다음과 같이 이 매개변수에 대한 외부 변수를 유연하게 구성할 수 있습니다. 다음 예:


//외부 변수 부분에 넣기

외부 문자열 통화 이름 = "EURUSD";

외부 int 시간 프레임 = 30;


// 코드 어딘가에 배치하세요.

double PreviousClose = iClose(CurrencyName, TimeFrame , 0) ;


보시다시피 NULL을 외부 문자열 변수로 대체합니다. 이 변수는 외부 문자열 변수로 식별되며, 기본값은 "EURUSD"입니다. (단, 견적에 입력하기만 하면 시장 창에서 볼 수 있는 모든 통화 쌍이 가능합니다). 또한 외부 변수에 추가되는 모든 통화 이름은 외부 문자열 변수를 사용해야 합니다.


차트와 다른 통화 쌍을 참조해야 하는 이유는 무엇입니까?


많은 이유를 생각할 수 있지만 가장 먼저 떠오르는 것은 상관관계를 통해 거래할 때입니다. 예를 들어, 귀하가 GBPUSD를 거래하고 있지만 EURUSD가 대부분의 주요 통화에 대한 주요 통화라고 믿고 있으므로 먼저 GBPUSD 거래를 개시하기 위한 전제 조건으로 EURUSD의 추세 방향을 확인하려고 한다고 가정해 보겠습니다.

참고

모두 통화 쌍을 참조하는 첫 번째 매개변수가 있습니다. . 기본값은 일반적으로 현재 차트 기호를 나타내는 NULL이지만 시장 관찰 창에 나타나는 모든 통화 기호로 변경할 수 있습니다.

레벨 4 가격 데이터: 기간 내 최고 가격 데이터 값을 이용한 기능

< p >단일 기간 동안 iHigh() 및 iLow와 같은 가격 데이터 기능을 사용하는 것 외에도 iHighest() 및 iLowest()와 같이 일련의 기간 동안 최대 값에 대한 가격 데이터 기능을 사용할 수도 있습니다. 이러한 각 기능을 사용하면 범위 내의 여러 막대에 대해 h/l을 처리할 수 있습니다.


이 두 함수에는 고유한 매개변수 세트가 있습니다:


int iHighest(string Symbol , int 시간 범위, int 유형, int count=WHOLE_ARRAY, int start=0)

 

< col/> < td style="word-break: break-all;">시작 막대부터 테스트하려는 막대 수 계산이 수행되는 곳 뒷열의 방향.
매개변수설명
Symbol사용된 기호. NULL=현재 차트
시간 프레임대략적인 시간입니다. 모든 시간 범위에 대한 개수가 될 수 있습니다. 0=현재 시간 범위
유형시리즈 배열 식별자. 모든 시리즈 배열 식별자 열거 값일 수 있습니다.
Bar Count
시작 표시줄Shift는 데이터를 가져와야 하는 현재 막대를 기준으로 막대를 표시합니다.

시리즈 배열 식별자 테이블:

< td class="rowhead">MODE_OPEN< td class ="rowhead">MODE_HIGH
상수설명
0시가
MODE_LOW1저렴한 가격
2높은 가격
MODE_CLOSE3종가
MODE_VOLUME4거래량, iLowest() 및 iHighest() 함수에 사용됩니다.
MODE_TIME5바 열기 시간, ArrayCopySeries() 함수에 사용됩니다.

참고: 위 유형 중 하나를 사용하도록 선택할 수 있는 것처럼 보이지만 일반적으로 실제로는 MODE_HIGH 및 iHighest()와 MODE_LOW 및 iLowest()를 사용합니다.


지난 3개 막대의 최저점과 최고점의 예:

// 정지 = 최저점 중 최저점 마지막 3개 막대
if(dir == OP_BUY)
{
stopLoss = Low[iLowest(Symbol(), 0, MODE_LOW, 3, 1)];
}else if ( dir == OP_SELL)
{
stopLoss = High[iHighest(Symbol(), 0, MODE_HIGH, 3, 1)];
}

위는 다양한 용도 기존 정지 손실 유형에 비해 영리한 기술입니다.


10~20바 사이의 가장 낮은 값을 얻으려면 어떻게 해야 합니까?


// 해당 범위에 있는 10개의 연속 막대 중 가장 낮은 값을 계산합니다.

// 현재 차트의 10번째부터 19번째 인덱스( 포함)

double val=Low[iLowest(NULL,0,MODE_LOW,10,10)];