기고글 토론 "MQL4, MQL5로 프랙탈을 이용한 추세선 그리기"

 

새로운 기고글 MQL4, MQL5로 프랙탈을 이용한 추세선 그리기 가 게재되었습니다:

이번 글에서는 MQL4와 MQL5로 프랙탈 인디케이터를 기반으로 하는 자동 추세선 플로팅에 관한 내용을 다룹니다. 두 언어의 솔루션을 서로 비교할 수 있도록 작성되었습니다. 추세선은 가장 마지막으로 생성된 두 개의 프랙탈을 기반으로 플로팅됩니다.

요즘 추세선에 대해 생각하고 있는데요. 어떤 방법을 이용해서 선 시작점을 찾을지, 어떻게 하면 보다 정확한 추세선을 그릴 수 있을지에 대해 고민해 봤습니다. 프랙탈 구조를 이용해 보기로 했습니다.

저는 평소에 일하면서 종종 시장 분석을 하는데요. 참, 큰 타임프레임에는 추세선을 그릴 수가 없습니다. 최대 15분의 타임프레임 내에 위치한 극점을 이용해 그려야 합니다. 타임프레임이 커지면 M15의 경우 그 결과가 달라질 수도 있거든요. 자동화가 필요한 이유이기도 하죠. 저는 처음에는 MQL5로 코드를 작성했는데요. 그러다가 MQL4로 옮겼습니다. MetaTrader4에 적용할 프로그램이 필요해서요.

본문에서는 MQL4와 MQL5 모두를 다룰 겁니다. 두 솔루션을 비교할 수 있도록 작성했지만 MQL4와 MQL5의 효율성을 비교하는 건 적절하지 않은 것 같네요. 참고로, 제 솔루션보다 훨씬 효과적인 다른 솔루션도 있을 겁니다. MQL4 또는 MQL5를 이용해 스크립트를 작성하는 초보 개발자에게 적합한 글입니다. 특히 프랙탈과 추세선을 이용하고자 한다면요.

3. 프랙탈 가격 및 시간 값 설정

라인을 그리려면 프랙탈의 시간과 가격을 알아야 합니다. 물론 QL4의 경우이미 설정된 시계열 High[]와 Low[], iTime() 함수를 이용해 쉽게 구할 수 있지만 추세선을 정확히 그리기 위해서는 보다 정확한 시간 좌표가 필요합니다.

그림 1과 2는 H4와 M15 타임프레임의 극점 시간 값의 차이를 나타냅니다.

그림 1. H4 극점 시간 값

그림 1. H4 극점 시간 값

그림 2. M15 극점 시간 값

그림 2. M15 극점 시간 값


작성자: Almat Kaldybay

[삭제]  
오후입니다. 비판. 하루가 항상 고정 된 수의 양초가 아닙니다. 귀하의 경우 - M15에 대해 96개의 캔들 데이터를 확인하는 것이 항상 올바른 것은 아닙니다. 때로는 다른 날의 데이터에 들어갈 수 있습니다.
 
Tapochun:
오후입니다. 비판. 하루가 항상 고정 된 수의 양초가 아닙니다. 귀하의 경우 - M15에 대해 96개의 캔들 데이터를 확인하는 것이 항상 올바른 것은 아닙니다. 때로는 다른 날의 데이터에 들어갈 수 있습니다.
말씀 주셔서 감사합니다. 저는 일중 거래를 위해 일일 TL을 포기했기 때문에이 문제를 직접 경험하지 않았습니다 (4 시간, 시간 및 m15를 봅니다). 하지만 일반적으로 상황을 자세히 살펴봐야 할 것 같습니다.
[삭제]  
Almat Kaldybay:
댓글 주셔서 감사합니다. 저는 일중 거래를 선호하여 일일 TL을 포기했기 때문에 (4 시간, 시간 및 m15를 봅니다) 실제로 이것을 직접 경험하지 못했습니다. 그러나 일반적으로 상황을 자세히 살펴봐야 할 것입니다.
이는 반드시 M15가 아닌 모든 TF에 해당됩니다. 요점은 예를 들어 전날과 같이 하루 안에 고점/저점을 찾는 경우 고정 된 수의 캔들에 의존해서는 안되며,이 경우 전날 개장부터 현재 날짜의 개장 (00.00이 아닌 다른 시간을 가질 수있는 첫 번째 캔들)까지 시간에 의존하는 것이 더 낫다는 것입니다.
 
Tapochun:
이것은 반드시 M15가 아닌 모든 TF에 해당됩니다. 요점은 예를 들어 전날과 같이 하루 안에 고점 / 루트를 찾고 있다면 고정 된 수의 양초에 의존해서는 안되며,이 경우 전날 개장부터 현재 날짜의 개장 (00.00 이외의 시간을 가질 수있는 첫 번째 양초)까지 시간에 의존하는 것이 좋습니다.

지금 막 mql4에서 EA 하나를 작성하고 있는데 귀하의 비판을 기억했습니다. 실제로 이러한 상황을 겪은 적은 없지만 제외하기로 결정했습니다. 해결책은 다음과 같습니다:

//1.2 극한값 다음 막대 결정하기
int UpperFractal_1_base_next=UpperFractal_1_base-1;
int UpperFractal_2_base_next=UpperFractal_2_base-1;
int LowerFractal_1_base_next=LowerFractal_1_base-1;
int LowerFractal_2_base_next=LowerFractal_2_base-1;
//1.3 프랙탈 형성 시간 결정하기
datetime UpFractalTime_1_base=iTime(NULL,base_tf,UpperFractal_1_base);
datetime UpFractalTime_2_base=iTime(NULL,base_tf,UpperFractal_2_base);
datetime LowFractalTime_1_base=iTime(NULL,base_tf,LowerFractal_1_base);
datetime LowFractalTime_2_base=iTime(NULL,base_tf,LowerFractal_2_base);
//1.4 극한점 다음 막대의 시간 결정하기
datetime UpFractalTime_1_base_next=iTime(NULL,base_tf,UpperFractal_1_base_next);
datetime UpFractalTime_2_base_next=iTime(NULL,base_tf,UpperFractal_2_base_next);
datetime LowFractalTime_1_base_next=iTime(NULL,base_tf,LowerFractal_1_base_next);
datetime LowFractalTime_2_base_next=iTime(NULL,base_tf,LowerFractal_2_base_next);
//1.5 프랙탈 바 개방 시간에 대한 M15의 바 인덱스 결정
int UpperFractal_1_m15_base=iBarShift(NULL, 15, UpFractalTime_1_base,true);
int UpperFractal_2_m15_base=iBarShift(NULL, 15, UpFractalTime_2_base,true);
int LowerFractal_1_m15_base=iBarShift(NULL, 15, LowFractalTime_1_base,true);
int LowerFractal_2_m15_base=iBarShift(NULL, 15, LowFractalTime_2_base,true);
//1.6 극값 다음 막대에 대해 m15에서 막대 인덱스를 결정합니다.
int UpperFractal_1_m15_base_next=iBarShift(NULL, 15, UpFractalTime_1_base_next,true);
int UpperFractal_2_m15_base_next=iBarShift(NULL, 15, UpFractalTime_2_base_next,true);
int LowerFractal_1_m15_base_next=iBarShift(NULL, 15, LowFractalTime_1_base_next,true);
int LowerFractal_2_m15_base_next=iBarShift(NULL, 15, LowFractalTime_2_base_next,true);
//1.7 막대-프랙탈과 다음 막대 사이의 막대 수를 m15에서 구합니다.
int UpperFractal_1_m15_NumBars_base=(UpperFractal_1_m15_base-UpperFractal_1_m15_base_next);
int UpperFractal_2_m15_NumBars_base=(UpperFractal_2_m15_base-UpperFractal_2_m15_base_next);
int LowerFractal_1_m15_NumBars_base=(LowerFractal_1_m15_base-LowerFractal_1_m15_base_next);
int LowerFractal_2_m15_NumBars_base=(LowerFractal_2_m15_base-LowerFractal_2_m15_base_next);
// --- 2단계 - - 극한값 세분화
//2.1 첫 번째 가장 작은 프랙탈의 경우
int Bar_1_Lowest_m15_base=iLowest(NULL,PERIOD_M15,MODE_LOW,LowerFractal_1_m15_NumBars_base,LowerFractal_1_m15_base_next);
datetime Time_1_Lowest_m15_base=iTime(NULL,PERIOD_M15,Bar_1_Lowest_m15_base);
double Price_1_Lowest_m15_base=iLow(NULL,PERIOD_M15,Bar_1_Lowest_m15_base);
//2.2 두 번째로 작은 프랙탈의 경우
int Bar_2_Lowest_m15_base=iLowest(NULL,PERIOD_M15,MODE_LOW,LowerFractal_2_m15_NumBars_base,LowerFractal_2_m15_base_next);
datetime Time_2_Lowest_m15_base=iTime(NULL,PERIOD_M15,Bar_2_Lowest_m15_base);
double Price_2_Lowest_m15_base=iLow(NULL,PERIOD_M15,Bar_2_Lowest_m15_base);
//2.3 첫 번째로 큰 프랙탈의 경우
int Bar_1_Highest_m15_base=iHighest(NULL,PERIOD_M15,MODE_HIGH,UpperFractal_1_m15_NumBars_base,UpperFractal_1_m15_base_next);
datetime Time_1_Highest_m15_base=iTime(NULL,PERIOD_M15,Bar_1_Highest_m15_base);
double Price_1_Highest_m15_base=iHigh(NULL,PERIOD_M15,Bar_1_Highest_m15_base);
//2.4 두 번째로 큰 프랙탈의 경우
int Bar_2_Highest_m15_base=iHighest(NULL,PERIOD_M15,MODE_HIGH,UpperFractal_2_m15_NumBars_base,UpperFractal_2_m15_base_next);
datetime Time_2_Highest_m15_base=iTime(NULL,PERIOD_M15,Bar_2_Highest_m15_base);
double Price_2_Highest_m15_base=iHigh(NULL,PERIOD_M15,Bar_2_Highest_m15_base);

	          
[삭제]  
Almat Kaldybay:

실제로 이런 상황을 겪은 적은 없지만, 그럼에도 불구하고 제외하기로 결정했습니다.

예를 들어 오늘 00:05에 첫 캔들이 열린 GBPUSD/EURUSD M5 쌍을 열어봅시다. M15와 유사하게 288 개의 캔들 스틱을 사용하면 다른 날의 데이터를 얻을 수 있습니다.

사실, 이것은 MT5용입니다... MT4(메타쿼츠-데모 서버)에서도 00:00부터 다른 브로커에서... 그래서... 모든 것이 개별적이며 여전히 확인해야합니다.

 
MetaQuotes Software Corp.:

MQL4 및 MQL5를 사용하여 프랙탈을 기반으로 추세선 그리기라는 새 문서가 게시되었습니다:

작성자: Almat Kaldybay

안녕하세요,

위 그림과 같이 추세선이 그려지지 않습니다.
특별한 설정이 있나요?

 
Hairi Baba:

안녕하세요,

위의 그림과 같이 추세선이 표시되지 않습니다.
특별한 설정이 있나요?

안녕하세요, 과거 데이터 M15가 없을 수도 있습니다.
 

안녕하세요 알마트입니다,

차트에 추세선이 표시되지 않지만 모바일 알림이 계속 수신됩니다. 제가 놓친 것이 있으면 도와주세요.

고마워요,
Prakash.R

 
prakki79:

안녕하세요 알마트입니다,

차트에 추세선이 표시되지 않지만 모바일 알림이 계속 수신됩니다. 제가 놓친 것이 있으면 도와주세요.

고마워요,
Prakash.R

안녕하세요,

1. 메타 에디터에서 mq4 파일을 컴파일해야 합니다;

2. 차트에 추세선이 있다고 생각하지만 차트의 스케일 때문에 보이지 않습니다.

 
안녕하세요, mt4에 전문가 조언자를 넣는 방법을 알려주세요. trendlines.mq4 파일을 다운로드하여 컴파일하고 소스 코드와 함께 mql4 / Indicators 폴더로 전송하고 터미널을 다시로드하고 지표를 차트에 첨부하려고 시도했지만 반응이 없습니다. 제가 뭘 잘못하고 있는 걸까요?