English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
마이크로, 미들, 메인 추세의 지표

마이크로, 미들, 메인 추세의 지표

MetaTrader 5트레이딩 | 4 8월 2021, 16:47
189 0
Dmitriy Skub
Dmitriy Skub


소개

James Hyerczyk은 그의 책 "패턴, 가격 및 시간: 거래 시스템에서 Gann 이론 사용" 서문에서 다음과 같이 썼습니다.

"선물 비즈니스에서의 제 경험에 따르면 트레이더들은 분석에서 패턴, 가격 또는 시간에 너무 자주 집착합니다. 그들은 동등한 균형 없이 한 방향으로 분석에 가중치를 두는 경향이 있습니다. 가장 흔한 실수는 진입 시점과 출구 가격, 또는 진입 가격과 출구 시점을 중심으로 구축된 시스템입니다. 또한 패턴을 사용하는 트레이더는 종종 나쁜 가격이나 나쁜 시점에 진입하거나 퇴장하게 됩니다. 이러한 관찰은 시장에서 성공하려면 세 가지 방법의 조합이 필요하다는 추가적인 증거를 제공합니다. 제가 쓴 책은 이를 전제로 하고 있습니다."

누군가는 이 말에 동의하지 못할 것입니다. 이러한 방법 중 일부를 실제로 사용하는 방법을 이해하려고 해봅시다. 이 글의 주제는 책에 설명된 몇 가지 아이디어를 기반으로 지표 및 EA의 형태로 거래 자동화 및 분석의 가능성을 조사하는 것입니다. 따라서 자료를 더 잘 이해하려면 이 글을 읽기 전에 책(또는 적어도 책의 첫 부분인 모델)을 읽는 것이 좋습니다.


1.1 마이크로 추세

마이너 추세의 그래프는 그림 1에 나와 있습니다. 마이너 추세를 구성하는 규칙을 간략하게 살펴보겠습니다.

  • 위로 이동하는 동안(다음 바의 최대값이 이전 바의 최대값보다 높고, 다음 바의 최소값이 이전 바의 최소값보다 높을 때) 저희는 바의 다음 최대값을 다음 바와 연결하고 상승 추세의 라인을 얻게 됩니다.
  • 아래로 이동하는 동안(다음 바의 최소값이 이전 바의 최소값보다 낮고 다음 바의 최대값이 이전 바의 최대값보다 낮은 경우), 바의 다음 최소값을 이전 바와 연결하고 하락 추세선을 얻습니다.
  • 상향 이동 중에 다른 바의 최대값이 이전 바의 최대값을 초과하지 않아 다음 바의 최소값이 이전 바의 최소값보다 낮으면 이동 방향은 아래쪽으로 변경됩니다;
  • 아래로 이동하는 동안 다음 바의 최소값이 이전 바의 최소값보다 낮지 않고 동시에 다음 바의 최대값이 이전 바의 최대값보다 높으면 방향은 상승하게 됩니다;
  • 어떤 움직임에 대해 다음 바의 최소값이 이전 바의 최소값보다 높고 동시에 다음 바의 최대값이 이전 바의 최대값보다 낮으면 이 바를 inside(그림 1 참조)라고 하며 해당 바는 그래프 구성에 참여하지 않습니다.
  • 이동 중에 다음 바의 최대값이 이전 바의 최대값보다 높고 동시에 다음 바의 최소값이 이전 바의 최소값보다 낮으면 이 바를 outside(그림 1 참조)라고 합니다. 바의 방향(위쪽 또는 아래쪽)에 따라 저희는 그래프의 해당 세그먼트를 구성합니다.

그림 1. 마이너 추세

그림 1. 마이너 추세

그래프의 이동 방향이 바뀌면 이른바 마이너 최고점과 최저점이 형성됩니다. 그림 1의 마이너 최저점은 빨간색으로 왼쪽 가격 레이블로 표시되고 마이너 최고점은 녹색으로 오른쪽 가격 레이블로 표시됩니다.

상향 이동 중에 방향이 하향으로 변경되었지만 마지막 최저점에 도달하지 않은 경우 수정 이동이 있습니다. 그렇지 않으면 방향이 변경되었습니다. 이는 하향 움직임도 마찬가지입니다.

따라서 가격은 저점과 고점 사이를 이동합니다. 이러한 움직임을 스윙이라고 합니다. 동시에 수정 움직임이 생성될 수 있습니다.

다음은 마이크로 추세의 지표 라인을 구성하기 위한 간략한 규칙입니다. 자세한 설명은 책의 첫 부분에서 찾을 수 있습니다. 이 지표의 그래프는 잘 알려진 지그재그 지표의 그래프와 유사합니다. 그러나 그것과 달리 다른 바를 클로징 한 후에는 다시 그려지지 않으며 라인의 구성에 영향을 주는 외부 조정 가능한 매개변수가 없습니다.


1.2. GannMicroTrend 지표

마이크로 추세의 그래프를 표시할 지표를 개발해봅시다. 모양은 그림 1과 같아야 합니다. 또한 시간과 관련하여 최고점과 최저점의 최신 위치 표시에 출력을 추가해 보겠습니다. 이 지표는 이 글에 첨부된 GannMicroTrend.mq5 파일에 있습니다.

이 정보를 표시하려면 표준 라이브러리 클래스를 사용하여 자신만의 마켓 워치 만들기 문서에 설명된 라이브러리를 사용하세요. 이렇게 하려면 지표 텍스트의 시작 부분에 #include 지시문을 추가합니다.

#include  <TextDisplay.mqh>

위의 파일은 \MQL5\Include 폴더에 있다고 가정합니다.

지표는 현재 추세의 매개변수와 최신 고점 및 저점의 매개변수를 전역 변수에 저장해야 합니다. 또한 이력에서 주어진 철근 수에 대한 계산의 깊이를 지정할 가능성이 있어야 합니다.

이렇게 하려면 지정된 외부 매개변수를 추가합니다.

input int     MaxBars = 1000;
input bool    IsSaveTrendParams = true;
//---------------------------------------------------------------------
input bool    ShowInfo = true;
input int     UpDownInfoShift = 1;
input int     LeftRightInfoShift = 1;
input color   TitlesColor = LightCyan;
input color   TopFieldsColor = Green;
input color   LowFieldsColor = Brown;
//---------------------------------------------------------------------
input color   UpTrendColor = LightGreen;
input color   DnTrendColor = LightPink;
input int     LineWidth = 4;
//---------------------------------------------------------------------
input color   UpStopLossColor = Green;
input color   DnStopLossColor = Brown;
input int     StopLossWidth = 1;

이러한 매개변수의 목적은 다음 표에 나와 있습니다.

매개변수의 이름

 매개변수의 목적

MaxBars

 지표가 그려지는 기록의 최대 바의 수입니다. 0이면 기록에서 사용 가능한 모든 바가 계산되고 그려집니다.

IsSaveTrendParams

 true인 경우 현재 추세에 대한 매개변수와 최신 최고점 및 최저점의 매개변수가 전역 변수에 저장됩니다.

ShowInfo

 true인 경우 그래프 창에 가장 최근의 최고점과 최저점의 좌표가 표시됩니다.

UpDownInfoShift

 정보 출력 장소의 위에서 아래로 수직 이동.

LeftRightInfoShift

 정보가 출력되면 장소의 왼쪽에서 오른쪽으로 수평 이동.

TitlesColor

 정보 출력 중 헤더의 색상.

TopFieldsColor

 최신 최고점의 매개변수를 출력하는 동안의 텍스트 색상.

LowFieldsColor

 가장 최근의 최저점을 출력할 때의 텍스트 색상.

UpTrendColor

 위로 움직이는 라인 드로잉의 색상.

DnTrendColor

 하향 움직임의 라인 드로잉의 색상.

LineWidth

 추세선의 너비.

UpStopLossColor

 최고점을 나타내는 올바른 가격 레이블의 색상.

DnStopLossColor

 최저점을 나타내는 왼쪽 가격 라벨의 색상.

StopLossWidth

 최고점과 최저점을 나타내는 가격 레이블의 크기입니다.


CChartObjectTrend 유형의 그래픽 개체를 사용하여 추세선을 구성할 것입니다. 표준 클래스 집합에서 말이죠. 두 번째 최고점은 왼쪽 가격 레이블로 표시됩니다. - CChartObjectArrowLeftPrice 유형의 개체로 표시되고, 두 번째 최저점은 CChartObjectArrowRightPrice 유형 개체로 표시됩니다. 이러한 모든 개체는 MetaTrader 5 터미널과 함께 제공되는 표준 라이브러리 클래스에 포함되어 있습니다.

앞으로 추세선과 최고점/하점을 조작해야 할 수 있으므로 CList 유형의 개체 목록에 저장합니다. 또한 일련의 표준 클래스에서도 말이죠. 이렇게 하려면 헤더 파일을 포함하라는 지시문을 지표의 시작 부분에 추가하십시오.

#include  <Arrays\List.mqh>
#include  <ChartObjects\ChartObjectsLines.mqh>
#include  <ChartObjects\ChartObjectsArrows.mqh>

다음으로 개체 목록을 추가합니다.

CList*  trend_list_Ptr = NULL;  // list of the trend lines
CList*  up_list_Ptr = NULL;     // list of the peaks
CList*  dn_list_Ptr = NULL;     // list of the bottoms

이제 지표 구성에 필요한 모든 요소가 있습니다.

지표의 OnInit 기능은 다음과 같습니다.

int OnInit()
{
  trend_list_Ptr = new CList();
  if(CheckPointer(trend_list_Ptr) != POINTER_DYNAMIC)
  {
    Print("Error of creating the object CList #1");
    return(-1);
  }

  up_list_Ptr = new CList();
  if(CheckPointer(up_list_Ptr) != POINTER_DYNAMIC)
  {
    Print("Error of creating the obkect CList #2");
    return(-1);
  }

  dn_list_Ptr = new CList();
  if(CheckPointer(dn_list_Ptr) != POINTER_DYNAMIC)
  {
    Print("Error of creating the object CList #3");
    return(-1);
  }

  if(InitGraphObjects() != 0)
  {
    Print("Error of creating the object TableDisplay");
    return(-1);
  }

  return(0);
}

여기에 객체 목록에 대한 포인터가 생성되고 생성 성공 여부가 확인됩니다. 포인터가 유효하지 않으면 오류 메시지가 수신되고 이것으로 지표 작업이 완료됩니다. 오류가 발생한 포지션은 # 문자가 포함된 숫자로 식별할 수 있습니다. 다음으로, 최근의 최고점 및 최저점에 대한 매개변수를 표시하기 위한 테이블이 초기화됩니다. 이것은 함수 코드 InitGraphObjects에서 수행됩니다.

지표의 주요 부분은 계산을 수행해야 하는 이벤트 처리기입니다. OnCalculate 기능. 이를 조각 별로 생각해 봅시다. 첫 번째 부분 - 지표의 표시된 부분 전체를 다시 계산해야 하는지 확인합니다. 예를 들어, 지표가 그래프에서 처음 시작될 때, 그래프에서 업데이트된 내역을 다운로드할 때, 시간 프레임의 변경이 발생했을 때 이러한 요구가 발생합니다. 이 모든 경우에 인수 prev_calculated의 값은 0과 같습니다.

이것은 다음과 같은 방법으로 확인됩니다.

int index, start = prev_calculated - 1;

if(prev_calculated == 0)
{
  if(CheckPointer(trend_list_Ptr) != POINTER_INVALID)
  {
    trend_list_Ptr.Clear();
  }
  if(CheckPointer(up_list_Ptr) != POINTER_INVALID)
  {
    up_list_Ptr.Clear();
  }
  if(CheckPointer(dn_list_Ptr) != POINTER_INVALID)
  {
    dn_list_Ptr.Clear();
  }

//  Determine the bar number of the beginning of calculations:
  if(MaxBars > 0 && rates_total > MaxBars)
  {
    start = rates_total - MaxBars;
  }
  else
  {
    start = 0;
  }
  time_prev = 0;
  trend_prev = 0;
}

전체 지표를 다시 계산해야 하는 경우 추세선 목록과 최고점/최저점 목록을 지우게 됩니다. 게다가 이러한 그래픽 개체도 그래프에서 삭제됩니다. 그런 다음 지표의 계산을 시작하는 데 필요한 바의 수(start 변수)를 결정합니다. MaxBars 외부 변수의 값이 0보다 크고 rates_total 그래프의 바의 수보다 작은 경우 계산의 시작 바는 다음과 같습니다. :

    start = rates_total - MaxBars;

시계열 바의 색인 생성은 0(최근 바)부터 시작한다는 점을 기억하십시오.

MaxBars 외부 변수의 값이 0과 같거나(즉, 그래프의 모든 바에 대한 지표를 계산해야 함) 그래프의 바의 수보다 크면 그래프의 모든 바에 대한 지표의 모든 값을 다시 계산해야 합니다. 즉, start는 0과 같습니다.

다음으로 추세선과 두 번째 최고점/최저점의 포지션을 ​​계산하는 주기가 있습니다. 위의 규칙에 따라 바의 최대 및 최소 가격 값을 분석하는 것은 매우 간단하며 추가 설명이 필요하지 않습니다(GannMicroTrend.mq5 파일의 소스 텍스트 참조).

추세선의 섹션을 그리려면 다음과 같은 간단한 기능을 사용합니다.

//---------------------------------------------------------------------
//  Drawing of a section
//---------------------------------------------------------------------
void  CreateCut(datetime _dt1, double _prc1, datetime _dt2, double _prc2, color _clr, int _wd)
{
  string  name = GetUniqName(prefix + " ");
  CChartObjectTrend*  trend_obj = new CChartObjectTrend();
  if(CheckPointer(trend_obj) != POINTER_INVALID)
  {
    trend_obj.Create(0, name, 0, _dt1, _prc1, _dt2, _prc2);
    trend_obj.Color(_clr);
    trend_obj.Width(_wd);
    trend_list_Ptr.Add(trend_obj);
  }
}

여기에서 함수를 사용하여 그래프 내에서 고유한 이름 GetUniqName을 얻습니다. 이는 표준 라이브러리 클래스를 사용하여 나만의 시장 조사 만들기 문서에 자세히 설명되어 있습니다. 추세선 그래픽 개체가 성공적으로 구성되면 해당 매개변수(색상 및 라인 너비)가 지정되고 이 개체는 CList:: Add 메소드를 호출하여 라인 목록에 추가됩니다.

두번째 최고점/최저점의 포지션을 ​​그리기 위해 각각 CreateUpStopLoss/CreateDnStopLoss 함수를 사용합니다. CreateCut 함수와 유사하며 생성된 개체를 목록에 추가합니다.

계산이 끝나면 가장 최근의 최저점과 최고점의 매개변수가 표시됩니다. 여기에서는 이전 단계에서 만든 목록을 사용합니다. 증가에 따라 이미 시간별로 정렬된 이러한 목록을 얻고 CList:: GetLastNode 메소드를 호출하여 최고점 또는 최저점에 대한 최신 개체를 얻습니다.

설명된 지표의 작업 결과는 다음 그림에 나와 있습니다.

그림 2. 마이너 추세의 지표

그림 2. 마이너 추세의 지표


2.1. 미들 추세

미들 추세의 그래프는 시장의 움직임을 반영하며 두 개의 바(2개의 바 움직임)로 표시됩니다. 미들 추세의 그래프는 그림 2에 나와 있습니다. 미들 추세의 그래프를 구성하는 규칙을 간략하게 살펴보겠습니다.

  • 상향 이동 중(다음 바의 최대값이 이전 두 바 이동의 최대값보다 높고 다음 바의 최소값도 이전 두 바 이동의 최소값보다 높을 때) 바의 다음 최대값과 2개의 바 이동의 이전 최대값, 그리고 미들 추세의 상향 이동 라인을 얻습니다.
  • 아래로 이동하는 동안(다음 바의 최소값이 이전 두 바 이동의 최소값보다 낮고 다음 바의 최대값도 이전 두 바 이동의 최소값보다 낮을 때) 바의 다음 최소값과 2개의 바 이동의 이전 최소값, 그리고 미들 추세의 하향 이동 라인을 얻습니다.
  • 상향 이동 중에 다음 바의 최대값이 이전 두 바 이동의 최대값을 초과하지 않고 동시에 다음 바의 최소값이 이전 두 바 이동의 최소값보다 낮은 경우 그런 다음 이동 방향이 아래쪽으로 변경되었습니다.
  • 상향 이동 중에 다음 바의 최대값이 이전 두 바 이동의 최대값을 초과하지 않고 동시에 다음 바의 최소값이 이전 두 바 이동의 최소값보다 낮은 경우 그런 다음 이동 방향이 아래쪽으로 변경되었습니다.
  • 이동 중에 다음 바의 최소값이 이전 두 바 이동의 최소값보다 높고 동시에 다음 바의 최대값이 이전 두 바 이동의 최대값보다 낮으면 이 바는 inside라고 하며(그림 2 참조) 그래프 구성에 참여하지 않습니다.
  • 이동 중에 다음 바의 최대값이 이전 바의 최대값보다 높고 동시에 다음 바의 최소값이 이전 바의 최소값보다 낮으면 이 바를 outside(그림 2 참조)라고 합니다. 바의 방향(위쪽 또는 아래쪽)에 따라 저희는 그래프의 해당 세그먼트를 구성합니다.

그림 3. 미들 추세

그림 3. 중간 경향

미들 추세 반전의 유일한 지표는 중간 최고점 레벨의 교차점입니다. 마찬가지로 하향 반전의 유일한 지표는 중간 최저점 수준의 교차입니다.

미들 추세가 위쪽이고 시장이 중간 스윙을 아래쪽으로 만들지만 중간 스윙의 이전 최저점을 무효화하지 않는 경우 수정입니다. 그리고 미들 추세가 하향세이고 시장이 미들 스윙을 상향으로 만들지만 미들 스윙의 이전 고점을 무효화하지 않는 경우에도 조정입니다.


2.2. The GannMiddleTrend 지표

미들 추세의 그래프를 표시할 지표를 개발해 보겠습니다. 모양은 그림 2와 같아야 합니다. 또한 화면에 가장 최근의 최고점과 최저점의 포지션이 표시되어야 합니다. 이 지표는 문서 GannMiddleTrend.mq5에 추가된 파일에서 찾을 수 있습니다.

이 지표에서 그래프 요소의 렌더링을 위해 지표 버퍼와 그림 유형 DRAW_COLOR_SECTION을 사용합니다. 나중에 EA를 개발할 때 필요합니다. EA에서 이 지표의 데이터에 액세스하기 위해 지표 버퍼를 사용합니다.

화면에 표시되는 표시 매개변수는 다음 지시문에 의해 지정됩니다.

#property indicator_buffers    2
#property indicator_plots      1
#property indicator_type1      DRAW_COLOR_SECTION
#property indicator_color1     LightGreen, LightPink
#property indicator_width1     4

여기에서 순차적으로 지정합니다.

  • 지표 버퍼의 수(데이터 버퍼와 색상 인덱스 버퍼의 두 가지만 있음);
  • 화면에 표시되는 그래프의 수;
  • 지표 그래프의 렌더링 유형(색상 섹션을 사용하여 렌더링함);
  • 색 인덱스의 버퍼에 지정할 수 있는 색.
  • 지표 그래프의 라인 너비;

OnInit 초기화 함수에서 지표 버퍼에 할당된 것을 바인딩하고 다른 지표 매개변수를 지정합니다.

이것은 다음 코드 조각에 의해 수행됩니다.

SetIndexBuffer(0, DataBuffer, INDICATOR_DATA);
SetIndexBuffer(1, ColorBuffer, INDICATOR_COLOR_INDEX);

IndicatorSetInteger(INDICATOR_DIGITS, Digits( ));
IndicatorSetString(INDICATOR_SHORTNAME, "GannMiddleTrend");
PlotIndexSetString(0, PLOT_LABEL, "GannMiddleTrend");
PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);

여기에서 순차적으로 지정합니다.

  • 표시기에서 데이터 버퍼로 사용하기 위한 버퍼(화면에서 렌더링하기 위해);
  • 지표 그래프의 섹션 색상을 지정하기 위한 버퍼;
  • 화면에 지표 값을 표시하는 동안 소수점 이하 자릿수;
  • 화면에 표시되는 동안 지표의 짧은 이름.
  • 화면에 표시될 때 그래픽 시리즈의 이름(데이터 버퍼);
  • 화면의 null 값에 해당하는 값(렌더링 없음);

지표는 구조 및 외부 매개변수에서 마이크로 추세 GannMicroTrend의 지표와 유사합니다. 차이점은 그래픽 개체를 사용하는 대신 지표 버퍼와 색상 버퍼에서 값을 직접 할당하는 방식을 사용한다는 것입니다. 따라서 구현 세부 사항에 대해서는 언급하지 않습니다.

지표 작업의 결과는 다음 그림과 같습니다.

그림 4, 미들 추세 지표

그림 4, 미들 추세 지표

그림 3의 손으로 그린 ​​것과 일치하는 것을 볼 수 있습니다.


3.1. 메인추세

메인추세의 그래프는 세 개의 바(세 개의 바 움직임)로 요약된 시장의 움직임을 반영합니다. 메인추세 그래프의 모양은 그림 5에 나와 있습니다. 메인추세를 구성하는 규칙을 간략하게 고려해 보겠습니다.

  • 상향 이동 중(다음 바의 최대값이 이전 3개 바 이동의 최대값보다 높고 다음 바의 최소값도 이전 3개 바 이동의 최소값보다 높을 때) 3개 바 이동의 이전 최대값과 바의 다음 최대값, 그리고 메인추세의 상향 이동 라인을 얻습니다.
  • 아래로 이동하는 동안(다음 바의 최소값이 이전 3개 바 이동의 최소값보다 낮고 다음 바의 최대값도 이전 3개 바 이동의 최소값보다 낮을 때), 우리는 3개 바 이동의 이전 최소값과 함께 다음 바의 최소값, 그리고 메인추세의 하향 이동 라인을 얻습니다.
  • 상향 이동 중에 다음 바의 최대값이 이전 3개 바 이동의 최대값을 초과하지 않고 동시에 다음 바의 최소값이 이전 3개 바 이동의 최소값보다 낮은 경우 그런 다음 방향이 아래쪽으로 변경되었습니다.
  • 상향 이동 중에 다음 바의 최대값이 이전 3개 바 이동의 최대값을 초과하지 않고 동시에 다음 바의 최소값이 이전 3개 바 이동의 최소값보다 낮은 경우 그런 다음 방향이 아래쪽으로 변경되었습니다.
  • 어떤 움직임에서든 다음 바의 최소값이 이전 3개의 바 이동보다 크고, 동시에 다음 바의 최대값이 이전 3개의 바 이동의 최대값보다 낮은 경우, 이 바를 inside라고 하며(그림 5 참조), 이는 그래프 구성에 참여하지 않습니다.
  • 이동 중에 다음 바의 최대값이 이전 바의 최대값보다 높고 동시에 다음 바의 최소값이 이전 바의 최소값보다 낮으면 이 바를 <b0 >outside(그림 5 참조)라고 합니다. 바의 방향(위쪽 또는 아래쪽)에 따라 저희는 그래프의 해당 세그먼트를 구성합니다.

그림 5. 메인 추세

그림 5. 메인 추세

메인 추세의 상향 반전의 유일한 지표는 주요 최고점 레벨의 교차입니다. 마찬가지로 하향 반전의 유일한 지표는 주요 최저점 수준의 교차입니다.

메인추세가 상향이고 시장이 하향 스윙을 형성하지만 이전 최저점 스윙을 무효화하지 않으면 조정입니다. 그리고 메인추세가 하향세이고 시장이 상향 스윙을 형성하지만 이전 최고점 스윙을 무효화하지 않는 경우에도 조정입니다.


3.2. The GannMainTrend 지표

메인추세의 그래프를 표시할 지표를 개발해 보겠습니다. 모양은 그림 5와 같아야 합니다. 또한 화면에 가장 최근의 최고점과 최저점의 포지션이 표시되어야 합니다. 이 지표는 이 문서 GannMainTrend.mq5에 추가된 파일에 있습니다.

지표는 구조 및 외부 매개변수가 GannMiddleTrend 미들 추세 지표와 동일하므로 구현에 대한 자세한 내용은 다루지 않겠습니다. 지표 작업의 결과는 다음 그림과 같습니다.

그림 6. 메인 추세의 지표

그림 6. 메인 추세의 지표


4. 스윙 차트를 사용한 거래

그래서 우리는 모델 측면에서 시장을 분석하는 도구를 가지고 있습니다. 이제 가격 변동을 기반으로 간단한 거래 시스템을 개발해 보겠습니다.

James Hyerczyk의 책에서 그는 다음과 같은 전략을 제안합니다.

  • 장기적으로 하향(상향) 움직임이 있는 섹션을 식별합니다.
  • 침체가 형성되면 수평 방향으로 이동하여 시장에서 가장 최근 스윙의 고점 이상에서 매수(저점 아래에서 매도)를 주문합니다.
  • 보호 스톱은 가장 최근 스윙의 최저점 바로 아래(최고점 바로 위)에 위치합니다.
  • 포지션을 연 후, 스탑은 새로운 스윙의 생성된 최저점(최고점) 아래에서 가격 이후로 이동합니다.

이것을 그림으로 설명하자면 다음과 같습니다.

그림 7. 스윙 트레이딩

그림 7. 스윙 트레이딩

매우 높은 가격 수준에서는 매도 가능성을 고려하고 매우 낮은 가격 수준에서는 매수 가능성을 고려하는 것이 좋습니다. 그림 7은 미들 추세의 그래프를 보여줍니다. 메인추세의 그래프로 장기 움직임이 있는 섹션을 식별합니다. 우리는 미들 추세의 그래프로 "정체"시장의 섹션을 식별합니다. 포지션은 미들 추세 그래프로 모니터링됩니다.

다음은 메인추세 그래프에서 동일한 섹션이 어떻게 보이는지 보여줍니다.

그림 8. 메인추세 차트의 섹션

그림 8. 메인추세 차트의 섹션

장기 하향 움직임(스윙)은 주요 고점 1.36913과 주요 저점 1.18758 사이입니다. 이 움직임은 1815.5 4자리 포인트가 필요합니다. 그런 다음 1.24664에서 1.21495로 거의 수평 추세인 "정체" 시장 섹션이 나타납니다(그림 7 참조). 이 움직임은 316.9 포인트가 필요합니다. 이후 가격은 미들 추세 그래프에서 최근 스윙의 중간 고점 수준을 돌파하여 상승합니다.

중간 최저점 바로 아래에 초기 정지와 최신 스윙 1.21495를 설정하고 미들 추세의 그래프에서 포지션을 모니터링합니다. 이 거래의 결과, 우리는 약 1.31186 - 1.23966 = 722.0 포인트의 이익을 얻을 것입니다.


5. MQL5 마법사에서 사용할 거래 신호 클래스

거래 시스템 구현을 위한 코드를 설계하기 전에 거래의 전체 과정을 개략적으로 상상해 보겠습니다. 다음 그림을 고려하십시오.

그림 9. 롱 포지션 거래

그림 9. 롱 포지션 거래

BUY 포지션의 조정은 다음과 같이 구성됩니다.

  • 메인추세의 그래프로 장기적인 하향 움직임을 정의합니다(그림 9의 섹션 A-B). 이동 시간과 크기는 각각 dTdP 매개변수로 지정됩니다. 이 매개변수의 값은 이 기기의 내역을 연구한 결과를 바탕으로 결정되어야 합니다.
  • 메인추세의 그래프에 주요 최저점이 형성된 후(그림 9의 점 B), 미들 추세의 그래프에 점 C와 D가 형성될 때까지 기다립니다. 이 점들은 점 B와 함께 중간 B-C 및 C-D 스윙을 형성합니다. 이러한 스윙의 기간과 규모가 지정된 값을 초과하지 않으면 수평 추세(또는 "정체" 시장)를 형성했다고 가정합니다.
  • 중간 C 최고점(또는 C 이후에 형성되는 가장 최근의 중간 최고점) 수준에 도달할 때까지 기다립니다. 돌파 후, 지점 D(또는 C 이후에 형성된 가장 최근의 중간 기저)의 중간 최저점 바로 아래에 정지 장치를 배치합니다.
  • 형성된 중간 최저점 아래(점 F 및 L 바로 아래) 아래로 정지 장치를 이동하여 위쪽 이동이 계속되는 동안 포지션을 모니터링합니다.
  • 자본 관리 모드에 따라 위반 지점에서 형성된 중간 최고점(G 및 M 포인트)의 포지션 볼륨을 추가할 수 있습니다.
SELL 포지션 조정은 미러 이미지 동작으로 구성됩니다.


따라서 Expert Advisor를 구축하려면 다음 구성 요소가 필요합니다. 구매/판매 신호를 생성하는 모듈; 열린 포지션의 후행 정지 모듈 및 "피라미드" 포지션(돈 관리)를 담당하는 모듈일 수 있습니다.

이 부분을 작성할 때 다음 문서가 사용되었습니다. MQL5 마법사: 거래 신호 모듈을 만드는 방법, MQL5 마법사: 미결 포지션 추적 모듈을 만드는 방법 , MQL5 마법사: 위험 및 자금 관리 모듈을 만드는 방법.

거래 신호 생성을 담당하는 모듈의 개발은 다음으로 구성됩니다.

  • Expert Advisor 생성을 위한 모든 기본 클래스를 포함하는 표준 mqh 파일을 포함하도록 전처리기 지시문을 추가하십시오. 이는 다음과 같은 방식으로 수행됩니다.
#include <Expert\ExpertSignal.mqh>
거래 신호 생성 모듈의 시작 부분에 이 지시문을 삽입하십시오.
  • EA를 생성할 때 이 파일을 사용해야 함을 MetaEditor 편집기에 나타내는 주석 형식의 특수 문자열 추가:
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=Signal based on swings on charts                           |
//| of the middle and main trends according to Gann (iCustom)        |
//| Type=Signal                                                      |
//| Name=TGannBreakSignal                                            |
//| Class=TGannBreakSignal                                           |
//| Page=                                                            |
//| Parameter=MinMainSwingContinuance,int,5                          |
//| Parameter=MinMainSwingSize,double,300.0                          |
//| Parameter=MinMiddleSwingContinuance,int,3                        |
//| Parameter=MaxMiddleSwingSize,double,200.0                        |
//| Parameter=OpenPriceSpace,double,5.0                              |
//| Parameter=StopLossSpace,double,5.0                               |
//+------------------------------------------------------------------+
// wizard description end

여기에서 EA 생성 중에 MetaEditor' 목록에 나타나는 모듈 이름을 지정하는 매개변수 Title을 볼 수 있습니다(아래 설명 참조). 중요한 매개변수 - Type은 주어진 모듈이 신호 생성 모듈인지 결정합니다. 또한 외부 매개변수와 해당 기본값이 있습니다.

이 모든 행은 표준 파일 ExpertSignal.mqh의 포함 지시 직후에 추가됩니다.

  • ExpertSignal.mqh 파일에 설명된 기본 클래스의 하위 클래스에 대한 설명입니다. 이 클래스는 CExpertSignal 기본 클래스에 없는 일부 기능을 구현해야 합니다. 우리 클래스의 설명에는 다음과 같은 뷰가 있습니다(일부 필수가 아닌 부분은 여기에 표시되지 않음).
class TGannBreakSignal : public CExpertSignal
  {
private:
   int               min_main_swing_continuance;    // minimum swing duration time of the main tren
   double            min_main_swing_size_points;    // minimum swing amplitude on the chart of the main trend
   int               min_middle_swing_continuance;  // minimum swing duration time on the chart of the middle trend
   double            max_middle_swing_size_points;  // maximum swing amplitude of the chart of the middle trend
   double            open_price_space;              // distance between the open price and peak/bottom
   double            stop_loss_space;               // distance between the stop loss price and peak/bottom

   datetime          main_swing_lf_datetime;        // time of left point of a swing on the chart of the main trend
   double            main_swing_lf_price;           // price of left point of a swing on the chart of the main trend
   datetime          main_swing_rt_datetime;        // time of right point of a swing on the chart of the main trend
   double            main_swing_rt_price;           // price of right point of a swing on the chart of the main trend
   int               main_swing_continuance;        // swing duration time on the chart of the main trend
   double            main_swing_size_points;        // swing amplitude (in points) on the chart of the main trend

   datetime          middle_swing_lf_datetime;      // time of left point of a swing on the chart of the middle trend
   double            middle_swing_lf_price;         // price of left point of a swing on the chart of the middle trend
   datetime          middle_swing_rt_datetime;      // time of right point of a swing on the chart of the middle trend
   double            middle_swing_rt_price;         // price of right point of a swing on the chart of the middle trend
   int               middle_swing_continuance;      // swing duration time on the chart of the middle trend
   double            middle_swing_size_points;      // swing amplitude (in points) on the chart of the middle trend

   int               handle_main_swing;
   int               handle_middle_swing;
   double            main_swing_buff[];
   double            middle_swing_buff[];
   datetime          time_buff[];
   double            price_buff[];
public:
                     TGannBreakSignal();   // constuctor
                    ~TGannBreakSignal();   // destructor
   //   Settings:
   void              MinMainSwingContinuance(int _cont);
   void              MinMainSwingSize(double _size);
   void              MinMiddleSwingContinuance(int _cont);
   void              MaxMiddleSwingSize(double _size);
   void              OpenPriceSpace(double _space);
   void              StopLossSpace(double _space);

   int               GetMainSwingContinuance();    // gets swing duration time on the chart of the main trend
   double            GetMainSwingSizePoints();     // gets swing amplitude (in 4-digit points) on the chart of the main trend
   int               GetMiddleSwingContinuance();  // gets swing duration time on the chart of the middle trend
   double            GetMiddleSwingSizePoints();   // gets swing amplitude (in 4-digit points) on the chart of the middle trend
   
   // overloaded methods of the CExpertSignal class:
   virtual bool      ValidationSettings();
   virtual bool      CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration);
   virtual bool      CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration);
   virtual bool      InitIndicators(CIndicators *indicators);

   //   Additional methods:
protected:
   //   Sets swing parameters of the main trend
   void              SetMainSwingParameters(datetime _lf_dt,double _lf_price,datetime _rt_dt,double _rt_price);
   //   Sets swing parameters of the middle trend
   void              SetMiddleSwingParameters(datetime _lf_dt,double _lf_price,datetime _rt_dt,double _rt_price);
   // Gets swing parameters of the main trend
   int               GetMainSwing();                  
   // Gets swing parameters of the middle trend
   int               GetMiddleSwing( );                
  };

데이터 구성원의 목적은 주석에서 명확합니다. 클래스의 몇 가지 방법을 고려하십시오.

우선 기본 클래스의 메소드를 재정의해야 합니다. 첫 번째 방법은 EA의 지정된 외부 매개변수의 정확성을 확인하는 데 사용됩니다.

//---------------------------------------------------------------------
// Validation of settings
//---------------------------------------------------------------------
bool TGannBreakSignal::ValidationSettings()
  {
   if(this.min_main_swing_continuance<=0)
     {
      Print("Wrong Parameter: min_main_swing_continuance = ",
           this.min_main_swing_continuance);
      return(false);
     }
   if(this.min_main_swing_size_points<=0.0)
     {
      Print("Wrong Parameter: min_main_swing_size_points = ",
            DoubleToString(this.min_main_swing_size_points,1));
      return(false);
     }
   if(this.min_middle_swing_continuance<=0)
     {
      Print("Wrong Parameter: min_middle_swing_continuance = ",
             this.min_middle_swing_continuance);
      return(false);
     }
   if(this.max_middle_swing_size_points<=0.0)
     {
      Print("Wrong Parameter: max_middle_swing_size_points = ",
             DoubleToString(this.max_middle_swing_size_points,1));
      return(false);
     }

   return(true);
  }

여기에서 정확성을 위해 외부 매개변수를 간단히 확인합니다. 스윙의 진폭(포인트 단위)과 바 단위의 지속 시간은 0보다 작거나 같을 수 없다는 것이 분명합니다. 외부 매개변수가 잘못 지정된 경우 메소드는 false를 반환합니다.

다음으로 포지션 개설에 대한 신호를 생성하는 방법을 살펴보겠습니다.

롱 포지션을 열 필요가 있는지 확인하는 것은 기본 클래스인 메소드에서 상속된 다음으로 수행됩니다.

//---------------------------------------------------------------------
// Checks conditions to open long position
//---------------------------------------------------------------------
bool TGannBreakSignal::CheckOpenLong(double &_price,double &_sl,
                                         double &_tp,datetime &_expiration)
  {
   if(this.GetMainSwing()==-1)
     {
      return(false);
     }

   if(this.GetMiddleSwing()==-1)
     {
      return(false);
     }

// If the main swing upward, exit
   if(this.main_swing_rt_price>=this.main_swing_lf_price)
     {
      return(false);
     }

// If the middle weak swing isn't formed, exit:
   if(this.middle_swing_rt_price>=this.middle_swing_lf_price)
     {
      return(false);
     }

// Check swing parameters on the main trend chart
   if(this.main_swing_continuance<this.min_main_swing_continuance ||
     this.main_swing_size_points<this.min_main_swing_size_points)
     {
      return(false);
     }

// Check swing parameters on the middle trend chart
   if(this.middle_swing_continuance<this.min_middle_swing_continuance ||
      this.middle_swing_size_points>this.max_middle_swing_size_points)
     {
      return(false);
     }

   double unit=this.PriceLevelUnit();

// If the price has crossed the peak of the weak middle swing, set signal to open long position:
   double delta=this.m_symbol.Bid()
             -(this.middle_swing_lf_price+this.open_price_space*unit);
   if((delta>=0.0) && (delta<(10.0*unit)))
     {
      _price=0.0;
      _sl = this.m_symbol.NormalizePrice(this.middle_swing_rt_price - stop_loss_space*unit);
      _tp = 0.0;

      return(true);
     }

   return(false);
  }

먼저, 주요 및 중간 경향의 그래프에 대해 최신 스윙의 매개변수를 얻기 위한 두 가지 방법인 TGannBreakSignal::GetMainSwingTGannBreakSignal::GetMiddleSwing을 호출합니다. 이러한 방법이 성공하면 스윙의 매개변수를 분석할 수 있습니다.

롱 포지션을 여는 신호가 있는지 확인하고 있으므로 스윙은 아래쪽이어야 합니다. 우리는 점 A와 B의 포지션을 ​​비교합니다(그림 9 참조). 점 B의 가격이 점 A보다 낮으면 가격 변동은 아래쪽입니다.

다음으로 점 C와 D가 있는지 확인합니다(그림 9 참조). 또한 D 지점은 C 지점보다 가격이 낮아야 합니다. 이 조건이 충족되면 주요 및 미들 추세의 스윙 매개 변수를 확인합니다. 이동 시간과 크기가 확인됩니다.

이전의 모든 확인이 성공했다면 가격이 중간 스윙의 정점을 넘었는지 여부와 상관없이 마지막 확인이 수행됩니다. 그렇다면 중지 값을 채우고 결과를 true로 반환합니다.

매도 포지션을 열 필요가 있는지 확인하려면 TGannBreakSignal:: CheckOpenLong 메소드와 유사한 확인을 수행하는 TGannBreakSignal:: CheckOpenShort 메소드를 호출하지만 가격 축의 거울 이미지.

따라서 우리는 거래 신호 생성을 담당하는 모듈의 구조와 기본 방법을 검토했습니다. 설명된 모듈은 이 글의 GannTrendSignal.mqh 파일에 첨부되어 있습니다.

우리가 필요로 하는 두 번째 모듈은 열린 포지션의 후행 정지 모듈입니다. 이 모듈도 표준 클래스를 기반으로 개발되었으며 다음으로 구성됩니다.

  • 포지션 후행에 대한 코드를 생성하기 위한 기본 클래스가 포함된 표준 mqh 파일을 포함하는 전처리기 지시문 추가.

이는 다음과 같은 방식으로 수행됩니다.

#include <Expert\ExpertTrailing.mqh>

포지션 후행 모듈의 시작 부분에 이 지시문을 삽입하십시오.

  • 주석 형식의 특수 문자열을 추가하면 편집자 MetaEditor에 이 파일을 사용하여 EA에서 후행 포지션을 생성해야 함을 알립니다.
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=Trailing on peaks/bottoms on the chart of the middle trend |
//| Type=Trailing                                                    |
//| Name=MiddleTrend                                                 |
//| Class=MiddleTrendTrailing                                        |
//| Page=                                                            |
//| Parameter=StopLossSpace,double,5.0                               |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+

여기에서 매개변수 Type은 "Trailing" 값과 동일하게 설정됩니다. 이는 이 모듈이 위치(후행)를 지원하는 데 사용해야 함을 나타냅니다. 또한 외부 매개변수와 해당 기본값이 있습니다.

이 모든 행은 표준 파일 ExpertTrailing.mqh를 포함하라는 지시 직후에 추가됩니다.

  • ExpertTrailing.mqh 파일에 설명된 기본 클래스의 하위 클래스에 대한 설명입니다. 이 클래스는 기본 클래스 CExpertTrailing에 없는 일부 기능을 구현해야 합니다. 우리 클래스의 설명에는 다음과 같은 뷰가 있습니다(일부 필수가 아닌 부분은 여기에 표시되지 않음).
class MiddleTrendTrailing : public CExpertTrailing
  {
private:
   datetime          middle_swing_lf_datetime;  // time of left point of a swing on the chart of the main trend
   double            middle_swing_lf_price;     // price of left point of a swing on the chart of the main trend
   datetime          middle_swing_rt_datetime;  // time of right point of a swing on the chart of the main trend
   double            middle_swing_rt_price;     // price of right point of a swing on the chart of the main trend
   double            stop_loss_space;           // the distance between peak/bottom and stop loss price

   int               handle_middle_swing;
   double            middle_swing_buff[];
   datetime          time_buff[];
   double            price_buff[];
public:
                     MiddleTrendTrailing();     // constructor
                    ~MiddleTrendTrailing();     // destructor
private:
   int               GetMiddleSwing();          // get parameters of the middle swing

public:
   //   Settings:
   void              StopLossSpace(double _space);
   //   Overloaded methods of CExpertTrailing class:
   virtual bool      ValidationSettings();
   virtual bool      InitIndicators(CIndicators *indicators);
   virtual bool      CheckTrailingStopLong(CPositionInfo *position,double &sl,double &tp);
   virtual bool      CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp);
  };

우리 클래스에서 재정의된 기본 메소드 - MiddleTrendTrailing:: CheckTrailingStopLongMiddleTrendTrailing:: CheckTrailingStopShort. 이 두 가지 방법은 각각 롱 포지션과 숏 포지션에 대한 손절매 수정 조건을 확인합니다.

MiddleTrendTrailing:: CheckTrailingStopLong 메소드를 더 자세히 살펴보세요:

//---------------------------------------------------------------------
// Checks conditions of trailing stop for long position
//---------------------------------------------------------------------
bool MiddleTrendTrailing::CheckTrailingStopLong(CPositionInfo *_position,double &_sl,double &_tp)
  {
   if(_position==NULL)
     {
      return(false);
     }

   if(this.GetMiddleSwing()==-1)
     {
      return(false);
     }

   double sl_req_price = this.m_symbol.NormalizePrice(MathMin(middle_swing_lf_price,middle_swing_rt_price)
                      - this.stop_loss_space * this.m_adjusted_point );
   if(_position.StopLoss() >= sl_req_price )
     {
      return(false);
     }

   _tp = EMPTY_VALUE;
   _sl = sl_req_price;

   return(true);
  }

먼저 미들 추세 그래프에 대한 최신 스윙의 매개변수를 얻기 위한 메소드를 호출합니다. TGannBreakSignal:: GetMiddleSwing. 이 방법이 성공하면(0 값을 반환) 스윙의 매개변수를 분석할 수 있습니다.

다음으로 획득한 스윙 매개변수를 기반으로 손절매를 배치하기 위한 가격 수준을 계산합니다. 손절매의 계산된 수준이 현재 것(롱 포지션의 경우)보다 낮으면 _sl 새 값 sl_req_price 메소드의 매개변수를 채우고 반환합니다. 사실입니다. 그렇지 않으면 false를 반환합니다. 이는 손절매 수준을 수정할 필요가 없음을 나타냅니다.

매도 포지션에 대한 손절매 수정의 필요성을 확인하는 방법은 유사하게 구축됩니다.

따라서, 우리는 오픈 포지션의 후행(trailing)을 담당하는 모듈의 구조와 기본 방법을 검토했습니다. 설명된 모듈은 이 문서의 GannTrailing.mqh 파일에 첨부되어 있습니다.


거래 신호를 기반으로 한 EA 생성


"Masters MQL5"를 사용하여 템플릿으로 EA를 생성하는 것은 상당히 간단한 작업입니다. 다음과 같은 일련의 단계로 구성됩니다.

  • 1 단계

메인 메뉴 MetaEditor'a 파일 / 새로 만들기의 명령을 사용하여 EA 세대의 마스터를 호출합니다. 화면에는 다음 보기의 대화 상자 창이 표시됩니다.

그림 10. MQL5 마법사에서 준비된 Expert Advisor 대화 상자 만들기

그림 10. MQL5 마법사에서 준비된 Expert Advisor 대화 상자 만들기

"EA(생성)"라는 글자가 있는 "라디오 버튼"을 선택하고 "다음" 버튼을 클릭합니다. EA 생성의 다음 단계로 이동합니다.


  • 2 단계

이 단계에서는 EA의 일반 매개변수(이름, "마법" 번호 등)를 지정합니다. 다음 대화 창이 나타납니다.

그림 11. Expart Advisor의 일반 속성

그림 11. Expart Advisor의 일반 속성

매개변수 EveryTick의 값을 true로 지정하십시오. 모든 틱에 대해 EA의 작업이 필요하며 "마법" 숫자는 변경되지 않은 채로 둘 수 있습니다. "다음" 버튼을 클릭하고 생성의 다음 단계로 진행합니다.


  • 3 단계

이 단계에서 EA에 대한 신호의 매개변수를 지정합니다. 먼저 목록에서 특정 유형의 신호를 선택합니다.

그림 12. 거래 신호 모듈 선택

그림 12. 거래 신호 모듈 선택

이전에 작성한 신호 이름을 선택하면 다음 유형의 대화 상자가 화면에 나타납니다.

그림 13. 거래 신호 모듈의 입력 매개변수

그림 13. 거래 신호 모듈의 입력 매개변수

여기에서 매개변수의 기본값을 수정할 수 있습니다. 다시 "다음" 버튼을 누르고 다음 단계로 진행합니다.


  • 4 단계

이 단계에서 열린 포지션을 지원하기 위한 후행 유형을 선택합니다. 목록에서 아무거나 선택할 수 있지만 이전에 개발된 후행 중지 방법을 선택합니다.

그림 14. 후행 포지션 유형 선택

그림 14. 후행 포지션 유형 선택

다음 대화창이 나타납니다.

그림 15. 후행 매개변수 지정

그림 15. 후행 매개변수 지정

여기에서 지정된 외부 매개변수의 기본값을 조정할 수 있습니다. "다음" 버튼을 누르고 다음 단계로 진행합니다.


  • 5 단계

그림 16. 자금 관리 매개 변수 지정

그림 16. 자금 관리 매개 변수 지정

여기에서 자본 관리를 위한 매개변수를 선택할 수 있습니다(작업 랏 계산 방법). 그대로 두십시오 - 고정 거래량으로 거래하십시오. "완료" 버튼을 누르면 지정된 이름, 포지션 개설 알고리즘, 후행 및 자본 관리 규칙으로 준비된 생성된 EA를 얻을 수 있습니다.

생성된 EA를 테스트하여 작동하는지 확인합니다.

그림 17. 생성된 Expert Advisor 테스트

그림 17. 생성된 Expert Advisor 테스트

정확하게 식별된 추세가 완전히(이 방법이 허용하는 범위 내에서) 취해진 것을 볼 수 있습니다. 또한 일반적인 고려 사항에 따라 지정된 기본 매개변수를 사용했습니다.


결론

우리는 실제로 Gann 이론의 첫 번째 부분과 거래 시스템 및 시장 분석에서의 적용(모델)만을 고려했습니다. 그래프를 바로 나누는 것이 거래의 자연스러운 조직에 해당하는 기간에 응용 프로그램의 최상의 결과를 얻을 수 있는 것 같습니다.

주식 시장의 경우 - 일별, 주별, 월간 간격을 사용하여 거래합니다. 통화 시장의 경우 - 세션 간격을 사용하는 거래입니다. 상품 시장의 경우 - 이것은 일간, 주간 및 월간 간격뿐만 아니라 시장의 계절적 변동을 사용하는 거래입니다.


결론 후

저는 주제와 직접적인 관련이 없지만 Gann의 아이디어에 관해 약간의 추가 조사를 하기로 결정했습니다. 보다 구체적으로 질문: 가격이 이동하는 동안 소위 "둥근" 수준을 표시합니까? 즉 유로화 및 주식의 경우 숫자 50 및 100으로 끝나는 가격 수준(일본 엔의 경우 "올림/내림" 가격 수준은 40으로 끝나는 가격 수준입니다).

이를 위해 소수점 이하 마지막 숫자에 산점/하점 분포도를 구성해 보겠습니다. 다섯 자리 인용의 경우 소수점 뒤에 마지막 세 자리(마지막 자리 - 소수점의 10분의 1)가 있습니다. 일봉에 대한 미들 추세 그래프를 사용합니다.

원형 축에는 가격의 마지막 숫자가 0에서 50(포인트의 1/10까지 반올림)으로 표시되고 수직 축에는 이러한 수준에서 형성된 봉우리/최저점 수입니다. 최고점, 최저점 및 전체 수치에 대해 별도로 구성하십시오.

다음은 2000년부터 기간 동안 주요 통화 쌍 중 일부에 대한 정보입니다. 2011. 및 일일 시간 프레임:






이 결과를 어떻게 해석할 수 있습니까? 우선, 다이어그램에 왜곡이 있습니다. 즉 모든 가격 값이 고점/저점을 형성할 가능성이 동일하지는 않습니다. 둘째, 이러한 값은 기본적으로 예상했던 "올림/내림" 값과 정확히 일치하지 않습니다. 이것이 거래에 사용될 수 있는지 여부는 말하기 어렵습니다. 이것은 더 진지한 연구가 필요합니다. 아마도 실용적인 관점에서 주식 시장에서 더 흥미로운 결과를 얻을 수 있을 것 같습니다.

적어도 이것은 내역 분석을 위한 또 다른 도구이며 그 종류 중 최악은 아닙니다.

MetaQuotes 소프트웨어 사를 통해 러시아어가 번역됨.
원본 기고글: https://www.mql5.com/ru/articles/219

파일 첨부됨 |
ganntrailing.mqh (9.81 KB)
gannmicrotrend.mq5 (16.42 KB)
gannmiddletrend.mq5 (16.64 KB)
gannmaintrend.mq5 (16.32 KB)
textdisplay__1.mqh (15.54 KB)
차트 분석에 대한 계량학적 접근 차트 분석에 대한 계량학적 접근
이 글에서는 계량경제학적 분석 방법, 자기 상관 분석 및 특히 조건부 분산 분석에 대해 설명합니다. 여기에 설명된 접근 방식의 이점은 무엇입니까? 비선형 GARCH 모델을 사용하면 수학적 관점에서 공식적으로 분석된 시리즈를 표현하고 지정된 단계 수에 대한 예측을 생성할 수 있습니다.
Trading Model 기반 Multi-Expert Advisor 양성 Trading Model 기반 Multi-Expert Advisor 양성
MQL5에서 객체 지향 접근 방식을 사용하면 다중 통화/다중 시스템/다중 타임 프레임 Expert Advisors 생성이 크게 간소화됩니다. 하나의 EA가 수십 가지 거래 전략, 사용 가능한 모든 상품 및 모든 가능한 타임 프레임에서 거래한다고 상상해보십시오! 또한 EA는 테스터에서 쉽게 테스트되며 구성에 포함된 모든 전략에 대해 하나 또는 여러 개의 자금 관리 시스템이 있습니다.
MQL5 마법사: 신호 거래 모듈을 만드는 방법 MQL5 마법사: 신호 거래 모듈을 만드는 방법
이 글에서는 MQL5 마법사에 대해 생성된 클래스의 설명 형식 뿐 아니라, 가격과 이동 평균의 교차에 대한 신호 구현으로 자신만의 거래 신호 클래스를 작성하는 방법과 MQL5 마법사의 거래 전략 생성기에 포함하는 방법과 구조 뿐에 대해 설명합니다.
채널 그리기 - 내부 및 외부 보기 채널 그리기 - 내부 및 외부 보기
채널이 시장 분석과 이동 평균 이후 거래 결정을 위한 가장 인기있는 도구라고 말하면 과장이 아닐 것 같습니다. 채널과 그 구성 요소를 사용하는 대량의 거래 전략에 깊이 들어 가지 않고 수학적 기반과 지표의 실제 구현에 대해 논의 할 것입니다.