English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
preview
차이킨 오실레이터로 트레이딩 시스템을 설계하는 방법 알아보기

차이킨 오실레이터로 트레이딩 시스템을 설계하는 방법 알아보기

MetaTrader 5트레이딩 | 16 5월 2023, 10:49
528 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

소개

이번 글은 가장 인기 있는 보조지표로 트레이딩 시스템을 설계하는 방법을 배우는 시리즈를 마무리하는 글이며 새로운 보조지표인 차이킨 오실레이터를 사용하여 이를 수행하는 방법을 배울 것입니다.

다음과 같은 주제를 통해 이 기술적 지표에 대해 자세히 알아보겠습니다:

  1. 차이킨 오실레이터 정의
  2. 차이킨 오실레이터 전략
  3. 차이킨 오실레이터 전략 청사진
  4. 차이킨 오실레이터 거래 시스템
  5. 결론

이와 같은 주제를 통해 차이킨 오실레이터로 거래 시스템을 만들고 설계하는 방법을 단계별로 배워보겠습니다. 차이킨 오실레이터 지표가 무엇인지, 무엇을 측정하는 지와 수동으로 계산하는 방법을 알아보며 그 뒤에 숨겨진 주요 개념을 알아 봅니다. 차이킨 오실레이터 정의라는 주제에서 이 모든 것을 배우게 됩니다. 차이킨 오실레이터 전략이라는 주제에서는 기본 개념에 기반한 간단한 전략을 통해 이 지표를 사용하는 방법을 배웁니다. 그 후 차이킨 오실레이터 전략 청사진이라는 주제에서는 각 전략에 대한 거래 시스템을 쉽게 만들 수 있도록 언급된 각 전략에 대한 단계별 청사진을 작성해 볼 것입니다. 그 후 차이 킨 오실레이터 거래 시스템 주제에서는 언급된 각 전략을 수행하는 거래 시스템을 만들어 실행하고 MetaTrader 5에서 자동으로 신호를 수신 하게 하는 방법에 대해 알아볼 것입니다.

우리는 MQL5(메타쿼츠 언어)를 사용하여 매매 전략 코드를 작성하고 이를 MetaTrader5에서 실행하여 자동으로 신호를 받도록 할 것입니다. MetaTrader5를 다운로드하여 MQL5를 사용하는 방법은 이전 글의 메타에디터에서 MQL5 작성하기라는 주제를 읽어 보시기 바랍니다.

면책: 모든 정보는 정보 제공의 목적으로만 '있는 그대로' 제공되며 거래의 목적이나 조언을 위해 준비된 것이 아닙니다. 여기의 정보는 어떤 종류의 결과도 보장하지 않습니다. 귀하의 거래 계정에서 이들 자료를 사용하기로 한 경우 귀하는 이에 대한 위험을 감수해야 하며 이에 대한 책임은 오직 귀하에게만 있습니다.

이제 각각의 주제에 관해 알아보도록 하겠습니다.


차이킨 오실레이터 정의

이 부분에서는 차이킨 오실레이터 지표에 대해 자세히 알아보고 지표의 기본 개념에 대해 알아볼 것입니다. 차이킨 오실레이터 인디케이터는 모멘텀 인디케이터로 마크 차이킨이 만들었으며 인디케이터의 이름이 만든이의 이름을 따서 명명되었습니다. 이 지표는 이동평균 수렴 발산(MACD) 공식을 사용하여 누적 분포선의 모멘텀을 측정합니다. 이 모멘텀을 측정하면 누적 분포선의 방향의 변화에 대한 인사이트를 얻을 수 있습니다.

차이킨 오실레이터의 개념을 더 자세히 이해하기 위해 수동으로 계산하고 싶다면 다음 단계를 통해 계산할 수 있습니다:

  1. 자금 흐름 승수 계산 = ((종가 - 저가) - (고가 - 종가))/(고가 - 저가)
  2. 자금 흐름 볼륨 계산 = 자금 흐름 승수 * 볼륨
  3. 누적 분배선(ADL) 계산 = 이전 ADL + 현재 자금 흐름량
  4. 차이킨 오실레이터 = (ADL의 3-주기 EMA) - (ADL의 10-주기 EMA)

요즘에는 지표가 MetaTrader5에 내장되어 있어 차트에 삽입하기만 하면 되므로 수동으로 지표를 계산할 필요는 없습니다. 사용 가능한 지표 중에서 선택하기만 하면 되지만 여기서는 그 이면의 주요 개념에 대해서도 알아볼 것입니다.

MetaTrader5 --> 인디케이터 --> 오실레이터 --> 차이킨 오실레이터에서 삽입 탭을 클릭해 차트에 삽입할 수 있습니다. 다음 그림은 이러한 단계를 보여주는 그림입니다:

차이킨 오실레이터 인서트

차이킨 오실레이터 지표를 선택하면 지표의 매개 변수 창이 다음과 같이 표시됩니다:

 차이킨 오실레이터 파라미터

1- 볼륨 유형을 결정합니다.

2- 빠른 이동 평균 기간을 결정합니다.

3- 느린 이동 평균 기간을 결정합니다.

4- 이동 평균 유형을 결정합니다.

5- 지표의 선의 색상을 결정합니다.

6- 인디케이터의 선의 유형을 결정합니다.

7- 인디케이터의 선의 두께를 결정합니다.

이전 매개 변수를 결정하고 "확인"을 누르면 다음과 같이 차트에 지표가 삽입되는 것을 볼 수 있습니다:

차이킨 오실레이터 삽입됨

이전 그림의 하단에 표시기가 삽입된 것을 볼 수 있습니다. 표시기의 라인이 0 레벨 위아래로 진동하는 것을 알 수 있습니다.


차이킨 오실레이터 전략

이 주제에서는 주요 개념을 기반으로 차이킨 오실레이터 지표를 사용하는 간단한 전략에 대해서 배웁니다. 다른 기술적 도구를 사용하여 매매 결정을 좀더 확실히 하고 더 많은 가중치를 부여할 수 있는 방법을 찾는 것이 때 좋은 접근 방식이 될 것이며 이는 기술적 분석의 기능 중 하나입니다. 여기서 확인해야 할 것은 실제 계정에서 사용하기 전에 전략을 테스트하여야 한다는 것입니다. 특히 이와 같이 교육의 목적으로 배운 경우 자신에게 적합한 전략인지 확인해야 합니다.

  • 전략 1: 차이킨 오실레이터 교차:

이 전략에 따르면 우리는 현재 차이킨 값과 제로 레벨 사이의 크로스오버를 기준으로 매수 또는 매도의 신호를 얻어야 합니다. 현재 차이킨 값이 0 수준 이상이 되면 매수 신호가 됩니다. 다른 시나리오는 현재 차이킨 값이 0 수준 이하가 되면 매도 신호가 됩니다.

간단히 하면,

현재 차이킨 값 > 제로 레벨 --> 매수 신호.

현재 차이킨 값 < 0 수준 --> 매도 신호입니다.

  • 전략 2: 차이킨 오실레이터 무브먼트:

이 전략에 따르면, 마지막 두 값을 기반으로 한 차이킨 지표 곡선의 움직임으로 신호를 얻어야 합니다. 현재 차이킨 값이 이전 값보다 크면 상승 움직임의 신호가 됩니다. 그 반대의 경우 즉 현재 차이킨 값이 이전 값보다 낮으면 하락 움직임의 신호입니다.

간단합니다,

현재 차이킨 값 > 이전 차이킨 값 --> 상승 움직임.

현재 차이킨 값 < 이전 차이킨 값 --> 하락 움직임.

  • 전략 3: 차이킨 오실레이터 - 상승 추세:

이 전략에 따라 상승 추세 동안 현재와 이전 고점, 현재 차이킨과 이전 차이킨의 값을 확인하여 강한 상승 움직임이 있는지 또는 약세 다이버전스가 있는지 알아야 합니다. 현재 고점이 이전 고점보다 크고 현재 차이킨이 이전 차이킨 값보다 크다면 이는 상승 추세에서 강한 상승인 움직임의 신호가 될 것입니다. 현재 고점이 이전 고점보다 크고 현재 차이킨이 이전 차이킨의 값보다 낮다면 이는 약세 다이버전스 신호입니다.

현재 고점 > 이전 고점 및 현재 차이킨 > 이전 차이킨 --> 상승 추세 동안 강한 상승 움직임.

현재 고점 > 이전 고점 및 현재 차이킨 < 이전 차이킨 --> 약세 다이버전스.

  • 전략 4: 차이킨 오실레이터 - 하락 추세:

이 전략에 따라 하락 추세에서는 현재 및 이전의 저점 값과 현재 및 이전의 차이킨 값을 비교하여 강한 하락 움직임이 있는지 여부 또는 강세 다이버전스가 있는지 여부를 알아야 합니다. 현재 저점이 이전 저점보다 낮고 현재 차이킨 값이 이전 저점보다 낮으면 하락 추세에서 강한 하락의 움직임이 나타납니다. 현재 저점이 이전 저점보다 낮고 현재 차이킨이 이전보다 크면 강세 다이버전스의 신호가 됩니다.

현재 저점 < 이전 저점 및 현재 차이킨 < 이전 차이킨 --> 하락 추세 동안 강한 하락 움직임.

현재 저점 < 이전 저점 및 현재 차이킨 > 이전 차이킨 --> 강세 다이버전스.


차이킨 오실레이터 전략 청사진

이번 주제에서는 살펴본 모든 전략에 대한 트레이딩 시스템을 만드는 데 도움이 되는 각 단계별 청사진을 설계할 것이며 이 단계는 목표를 달성하기 위해 아이디어를 정리하는 것이므로 매우 중요합니다. 그럼 이제 그 작업을 시작하겠습니다.

  • 전략 1: 차이킨 오실레이터 교차:

이 전략에 따르면 특정 조건이 충족되면 차트에 특정한 코멘트를 반환하는 거래 시스템을 만들어야 합니다. 매 틱마다 차이킨 오실레이터의 값을 확인하고 이 값이 0 수준 이상이 되면 매수 신호와 현재 차이킨 값이 차트의 각각도의 줄에 표시되는 코멘트가 표시되는 거래 시스템이 필요합니다. 다른 시나리오에서는 차이킨 값이 0 수준 이하가 되면 거래 시스템이 매도 신호와 현재 차이킨 값을 각각 별도의 줄에 표시하는 코멘트를 반환해야 합니다.

다음은 이 청사진의 그림입니다.

차이킨 오실레이터 크로스오버 블루프린트

  • 전략 2: 차이킨 오실레이터 무브먼트:

이 전략에 따르면 거래 시스템은 두 값을 확인하고 매 틱마다 어느 값이 다른 값보다 큰지를 결정해야 합니다. 이 두 값은 현재 및 이전의 차이킨 오실레이터입니다. 현재 값이 이전 값보다 크면 거래 시스템이 코멘트를 반환해야 합니다: 차이킨 오실레이터가 상승하고 있으며 현재 차이킨 Val, 이전 차이킨 Val이 각각 별도의 라인에 있습니다. 현재 값이 이전 값보다 낮으면 거래 시스템에서 코멘트를 반환해야 합니다: 차이킨 오실레이터가 하락하고 있습니다. 현재 차이킨 Val, 이전 차이킨 Val.

다음은 이 전략의 청사진을 보여주는 그림입니다.

차이킨 오실레이터 무브먼트 청사진

  • 전략 3: 차이킨 오실레이터 - 상승 추세:

이 전략에 따르면 거래 시스템은 틱마다 네 가지 값을 확인해야 합니다. 이 값들은 현재 고가, 이전 고가, 현재 차이킨 및 이전 차이킨입니다. 현재 고점과 이전 고점, 현재 차이킨과 이전 차이킨 값 중 어느 것이 더 큰지 결정하려면 이러한 값을 확인하는 거래 시스템이 필요합니다. 현재 고점이 이전 고점보다 크고 현재 차이킨이 이전 차이킨 값보다 큰 경우 거래 시스템이 상승 추세 동안 강한 상승 움직임이란 코멘트를 반환하고 현재 고점, 이전 고점, 현재 차이킨 값 및 이전 차이킨 값 각각의 값을 별도의 줄에 표시하여야 합니다. 다른 시나리오에서는 현재 고점이 이전 고점보다 크고 현재 차이킨이 이전 차이킨 값보다 낮은 경우 거래 시스템은 약세 다이버전스, 현재 고점, 이전 고점, 현재, 차이킨 값, 이전 차이킨 값을 각각 별도의 줄에 표시하여 차트에 코멘트를 반환해야합니다.

다음은 이 전략의 청사진을 보여주는 그림입니다.

차이킨 오실레이터 청사진

  • 전략 4: 차이킨 오실레이터 - 하락 추세:

이 전략을 기반으로 하면 매 틱마다 네 가지 값을 지속적으로 확인하는 거래 시스템을 만들어야 하며 확인해야 할 값등은 현재 저점, 이전 저점, 현재 차이킨 값, 이전 차이킨 값이며 현재 저점이 이전 저점보다 낮고 현재 차이킨 값이 이전 차이킨 값보다 낮으면 차트에 강한 하락 움직임, 현재 저점, 이전 저점, 현재 차이킨 값, 이전 차이킨 값을 가각 별도의 줄로 표시하는 코멘트를 반환하는 거래 시스템이 필요합니다. 다이버전스를 감지하는 다른 시나리오의 경우는 현재 저점이 이전 저점보다 낮고 현재 차이킨 값이 이전 차이킨 값보다 큰 경우일 때 트레이딩 시스템은 강세 다이버전스, 현재 저점, 이전 저점, 현재 차이킨 값, 이전 차이킨 값 각각의 값을 별도의 줄로 표시한 코멘트를 반환해야 합니다.

다음 그림은 이 청사진의 모습입니다.

차이킨 오실레이터 - 하락 추세 청사진

Chaikin 오실레이터는 상승

차이킨 오실레이터 거래 시스템

이 부분에서는 MQL5로 프로그래밍 또는 코딩하여 살펴본 전략을 자동으로 수행하는 트레이딩 시스템으로 전환하는 방법을 배웁니다. 이제부터 우리는 차트에 차이킨 오실레이터의 현재 값을 자동으로 코멘트로 표시하는 간단한 거래 시스템을 코딩하고 이 거래 시스템을 앞에서 살펴본 전략의 기반으로 사용할 것입니다. 다음은 이 거래 시스템을 만드는 방법입니다.

  • 분수 값을 나타내는 "double" 함수를 사용하여 차이킨 오실레이터의 배열을 생성합니다. double은 데이터 유형 중 하나인 부동 소수점 유형 중 하나입니다.
double chaiArray[];
  • 이렇게 생성된 배열을 현재 데이터에서 정렬하기 위해 boolean 값을 반환하는 "ArraySetAsSeries" 함수를 사용하겠습니다. "ArraySetAsSeries"의 파라미터는 다음과 같습니다:
    • An array[]
    • Flag
ArraySetAsSeries(chaiArray,true);
  • "iChaikin" 함수를 사용하여 차이킨 오실레이터를 정의하기 위해 chaiDef의 정수 변수를 생성합니다. 이 함수는 차이킨 오실레이터 지표의 핸들을 반환합니다. 이 함수의 매개 변수는 다음과 같습니다:
    • symbol, 심볼 이름을 설정하려면 현재 차트에 적용할 "_Symbol"을 지정합니다.
    • period, 기간을 설정하려면 현재 기간에 적용될 "_Period"를 지정합니다.
    • fast_ma_period를 사용하여 빠른 이동 평균의 길이를 설정할 수 있습니다. 기본값으로 3을 설정합니다.
    • slow_ma_period를 사용하여 느린 이동 평균의 길이를 설정합니다. 기본값으로 10을 설정합니다.
    • ma_method를 사용하여 이동 평균의 유형을 결정합니다. 우리는 지수 이동 평균(MODE_EMA)을 사용합니다.
    • applied volume, 볼륨의 유형을 결정합니다. 우리는 틱 볼륨(VOLUME_TICK)을 사용합니다.
int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);
  • 복사된 데이터 개수 또는 오류가 있는 경우 -1을 반환하는 "CopyBuffer" 함수를 사용하여 가격 데이터를 chaiArray의 배열에 복사합니다. 이 함수의 매개 변수는 다음과 같습니다:
    • indicator_handle, 지표 정의 "chaiDef"를 지정합니다.
    • buffer_num, 지표 버퍼 번호를 설정합니다. 우리는 0으로 설정합니다.
    • start_pos, 시작 위치를 설정합니다. 우리는 0으로 설정합니다.
    • count, 복사할 양을 설정합니다. 우리는 3으로 설정합니다.
    • buffer[], 복사할 배열을 결정합니다. 우리는 "chaiArray"로 정합니다.
CopyBuffer(chaiDef,0,0,3,chaiArray);
  • "chaiVal"란 double 변수를 생성한 후 "NormalizeDouble" 함수를 사용하여 double 유형으로 차이킨 오실레이터 값을 구합니다. "Normalizedouble"의 매개변수는 다음과 같습니다:
    • value, 정규화된 수를 결정합니다. 우리는 "chaiArray[0]"로 지정합니다. 우리는 현재 값을 반환하기 위해 0을 사용합니다.
    • digits 소수점 뒤의 자릿수를 결정합니다. 우리는 6으로 합니다.
int chaiVal = NormalizeDouble(chaiArray[0],6);
  • 코멘트 함수를 사용하여 현재 차이킨 오실레이터 값을 코멘트로 차트에 반환합니다.
Comment("Chaikin Oscillator Value is ",chaiVal);

다음은 이 간단한 거래 시스템을 만드는 전체 코드입니다.

//+------------------------------------------------------------------+
//|                                    Simple Chaikin Oscillator.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);

   Comment("Chaikin Oscillator Value is ",chaiVal);

  }
//+------------------------------------------------------------------+

이 코드를 컴파일하면 탐색기 창에서 Expert Advisors 폴더에 있는 이 프로그램의 파일을 다음과 같이 찾을 수 있습니다.

탐색

이 Expert Advisor를 차트에 끌어다 놓으면 다음과 같은 프로그램 창이 나타납니다.

단순 차이킨 오실레이터 승리

"확인"을 누르면 다음과 같이 차트에 Expert Advisor가 첨부됩니다.

간단한 차이킨 오실레이터 부착

이전 차트의 오른쪽 상단에서 볼 수 있듯이 EA가 차트에 첨부되어 있습니다. 이후 다음과 같이 생성된 신호를 찾을 수 있습니다.

차이킨 오실레이터 신호

이전 테스트의 예시에서 볼 수 있듯이 차트 왼쪽 상단에는 현재 차이킨 오실레이터 값을 나타내는 코멘트가 있습니다. 생성된 값이 MetaTrader5의 내장 지표에서 생성된 값과 동일한지 확인하려면 Expert Advisor를 연결한 후 매개변수를 정하고 내장 지표를 삽입하면 다음과 같이 두 값의 값이 동일하게 나옵니다.

차이킨 오실레이터 동일한 신호

차트 오른쪽 모서리에서 볼 수 있듯이 차트에 Expert Advisor가 첨부되어 있고 왼쪽 모서리에 아래 창에서 삽입된 지표의 값과 동일한 EA가 생성한 값을 확인할 수 있습니다.

  • 전략 1: 차이킨 오실레이터 교차:

다음은 이 전략을 기반으로 트레이딩 시스템을 만드는 전체 코드입니다.

//+------------------------------------------------------------------+
//|                                 Chaikin Oscillator Crossover.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiVal = NormalizeDouble(chaiArray[0],6);
   
   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

  }
//+------------------------------------------------------------------+

이 코드에서의 차이점:

차이킨 오실레이터 교차 조건:

매수 신호의 경우,

   if(chaiVal>0)
   {
   Comment("Buy signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

매도 신호의 경우,

   if(chaiVal<0)
   {
   Comment("Sell signal","\n","Chaikin Oscillator Value is ",chaiVal);
   }

이 코드를 컴파일하면 내비게이터 창에서 다음과 같은 Expert Advisor의 파일을 찾을 수 있습니다.

Nav1

차트에 끌어다 놓으면 EA의 창이 다음과 같이 나타납니다:

차이킨 오실레이터 크로스오버 승리

"확인"을 누르면 EA가 다음과 같이 차트에 첨부됩니다:

차이킨 오실레이터 크로스오버 부착됨

오른쪽 상단에서 볼 수 있듯이 차이킨 오실레이터 교차 EA가 차트에 첨부되어 있으며 이제 이 전략에 따라 생성 된 신호를 볼 수 있습니다. 다음은 그 예입니다.

매수 신호의 경우,

차이킨 오실레이터 크로스오버 - 매수 신호

차트 왼쪽 상단에서 볼 수 있듯이 차이킨 오실레이터 값이 0 레벨을 넘어섰을 때 매수 신호가 발생했습니다.

매도 신호의 경우,

차이킨 오실레이터 크로스오버 - 매도 신호

차트 왼쪽 상단에서 볼 수 있듯이 차이킨 오실레이터 값이 0 수준 아래로 교차하면서 매도 신호가 생성되었습니다.

  • 전략 2: 차이킨 오실레이터 무브먼트:

다음은 이 전략을 기반으로 트레이딩 시스템을 만드는 전체 코드입니다.

//+------------------------------------------------------------------+
//|                                  Chaikin Oscillator Movement.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];

   ArraySetAsSeries(chaiArray,true);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

   if(chaiCurrentVal>chaiPrevVal)
     {
      Comment("Chaikin Oscillator is rising","\n",
              "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

   if(chaiCurrentVal<chaiPrevVal)
     {
      Comment("Chaikin Oscillator is declining","\n",
              "Chaikin Oscillator Cuurent Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

  }
//+------------------------------------------------------------------+

이 코드의 차이점은 다음과 같습니다:

현재 및 이전 차이킨 오실레이터 값을 정의합니다.

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

전략의 조건.

상승하는 경우,

   if(chaiCurrentVal>chaiPrevVal)
     {
      Comment("Chaikin Oscillator is rising","\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

하락하는 경우,

   if(chaiCurrentVal<chaiPrevVal)
     {
      Comment("Chaikin Oscillator is declining","\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

이 코드를 컴파일하면 내비게이터 창에서 다음과 같은 EA를 찾을 수 있습니다:

 Nav2

EA를 차트에 끌어다 놓으면 다음과 같은 프로그램 창이 나타납니다:

차이킨 오실레이터 무브먼트 승리

"확인"을 누르면 다음과 같이 EA가 차트에 첨부된 것을 확인할 수 있습니다:

차이킨 오실레이터 무브먼트 장착

다음은 이 전략에 따라 생성된 신호의 예입니다.

현재 데이터상 상승하는 경우:

차이킨 오실레이터 움직임 - 전류와 함께 상승하는 신호

이전 데이터상 상승한 경우,

차이킨 오실레이터 움직임 - 이전과 함께 상승 신호

이전 차트에서 볼 수 있듯이 왼쪽 상단에 세 줄이 있습니다:

  • 차이킨 오실레이터가 상승 중입니다.
  • 차이킨 오실레이터 현재 값
  • 차이킨 오실레이터 이전 값

현재 데이터상 감소하는 경우의 다른 시나리오입니다,

차이킨 오실레이터 움직임 - 전류와 함께 감소하는 신호

이전 데이터상 감소한 경우,

차이킨 오실레이터 움직임 - 이전과 함께 감소하는 신호

이전 차트에서 볼 수 있듯이 차트의 왼쪽 상단 모서리에 코멘트가 있습니다:

차이킨 오실레이터가 하락하고 있습니다.

차이킨 오실레이터 현재 값.

차이킨 오실레이터 이전 값.

  • 전략 3: 차이킨 오실레이터 - 상승 추세:

다음은 이 전략에 따라 트레이딩 시스템을 생성하는 전체 코드입니다:

//+------------------------------------------------------------------+
//|                                 Chaikin Oscillator - Uptrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];
   MqlRates priceArray[];

   ArraySetAsSeries(chaiArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);


   double currentHighVal=NormalizeDouble(priceArray[2].high,6);
   double prevHighVal=NormalizeDouble(priceArray[1].high,6);

   if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Strong Up Move During The Uptrend","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }


   if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Bearish Divergence","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

  }
//+------------------------------------------------------------------+

이 코드의 차이점은 다음과 같습니다:

가격, 거래량, 스프레드에 대한 정보를 저장하는 "MqlRates" 함수를 사용하여 앞서 배운 것과 동일하게 ChaiArray와 priceArray에 대한 두 개의 배열을 생성합니다.

ArraySetAsSeries(chaiArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

현재 및 이전 차이킨 오실레이터의 값을 정의합니다.

int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
int chaiPrevVal = NormalizeDouble(chaiArray[1],6);

현재 및 이전 고점의 값을 정의합니다.

double currentHighVal=NormalizeDouble(priceArray[2].high,6);
double prevHighVal=NormalizeDouble(priceArray[1].high,6);

이 전략의 조건:

상승 추세에서 강한 움직임이 있는 경우:

   if(currentHighVal>prevHighVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Strong Up Move During The Uptrend","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

약세 다이버전스의 경우:

   if(currentHighVal>prevHighVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Bearish Divergence","\n",
              "Current High Value is: ",currentHighVal,"\n",
              "Previous High Value is: ",prevHighVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

이 코드를 컴파일하면 다음과 같이 내비게이터에서 EA를 찾을 수 있습니다:

 Nav3

차트에 끌어다 놓으면 EA 창이 다음과 같이 나타납니다:

차이킨 오실레이터 - 상승 추세 승리

"확인"을 누르면 다음과 같이 EA가 차트에 첨부되어 있는 것을 확인할 수 있습니다:

차이킨 오실레이터 - 상승 추세 첨부

다음은 이 트레이딩 시스템을 기반으로 생성된 신호의 예입니다.

현재 데이터상 강한 움직임이 있는 경우:

차이킨 오실레이터 - 상승 추세 - 강세 - 현재 데이터

이전 데이터상 강한 움직임이 있는 경우:

차이킨 오실레이터 - 상승 추세 - 강세 - 이전 데이터

앞의 두 차트에서 볼 수 있듯이 차트의 왼쪽 상단 모서리에 다섯 줄의 코멘트가 있습니다:

  •  상승 추세 중 강한 상승 움직임
  • 현재 최고 값
  • 이전 최고 값
  • 현재 차이킨 값
  • 이전 차이킨 값

현재 데이터상 약세 다이버전스가 있는 다른 시나리오에서도 다음과 같은 예를 볼 수 있습니다:

차이킨 오실레이터 - 상승 추세 - 다이버전스 - 현재 데이터

이전 데이터상 약세 다이버전스 발생 시

차이킨 오실레이터 - 상승 추세 - 다이버전스 - 이전 데이터

앞의 두 차트에서 볼 수 있듯이 5줄로 된 코멘트가 있습니다:

약세 다이버전스.

현재 최고 값.

이전 최고 값.

현재 차이킨 값.

이전 차이킨 값.

  • 전략 4: 차이킨 오실레이터 - 하락 추세:

다음은 이 전략을 실행하는 거래 시스템을 만드는 전체 코드입니다:

//+------------------------------------------------------------------+
//|                               Chaikin Oscillator - Downtrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   double chaiArray[];
   MqlRates priceArray[];

   ArraySetAsSeries(chaiArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,priceArray);

   int chaiDef = iChaikin(_Symbol,_Period,3,10,MODE_EMA,VOLUME_TICK);

   CopyBuffer(chaiDef,0,0,3,chaiArray);

   int chaiCurrentVal = NormalizeDouble(chaiArray[0],6);
   int chaiPrevVal = NormalizeDouble(chaiArray[1],6);


   double currentLowVal=NormalizeDouble(priceArray[2].low,6);
   double prevLowVal=NormalizeDouble(priceArray[1].low,6);

   if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Strong Down Move During The Downtrend","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }


   if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Bullish Divergence","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

  }
//+------------------------------------------------------------------+

이 코드의 차이점은 이 전략의 조건입니다:

하락 추세에서 강한 하락 움직임이 있는 경우,

   if(currentLowVal<prevLowVal&&chaiCurrentVal<chaiPrevVal)
     {
      Comment("Strong Down Move During The Downtrend","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

강세 다이버전스의 경우:

   if(currentLowVal<prevLowVal&&chaiCurrentVal>chaiPrevVal)
     {
      Comment("Bullish Divergence","\n",
              "Current Low Value is: ",currentLowVal,"\n",
              "Previous Low Value is: ",prevLowVal,"\n",
              "Chaikin Oscillator Current Value is ",chaiCurrentVal,"\n",
              "Chaikin Oscillator Previous Value is ",chaiPrevVal);
     }

이 코드를 컴파일하면 내비게이터 창에서 다음과 같이 이 전략의 EA를 찾을 수 있습니다:

 Nav4

이 EA를 차트에 끌어다 놓으면 다음과 같이 이 프로그램의 창이 나타납니다:

차이킨 오실레이터 - 하락 추세 승리

"확인"을 누르면 다음과 같이 EA가 차트에 첨부되어 있는 것을 확인할 수 있습니다:

차이킨 오실레이터 - 하락 추세 첨부

다음은 테스트에서 이 전략을 기반으로 생성된 신호의 예입니다:

현재 데이터상 하락 추세 중 강한 하락이 발생한 경우,

차이킨 오실레이터 - 하락 추세 - 강세 - 현재 데이터

이전 데이터상 강한 하락이 발생한 경우,

차이킨 오실레이터 - 하락 추세 - 강세 - 이전 데이터

앞의 두 차트에서 볼 수 있듯이 5줄로 된 코멘트가 있습니다:

  • 하락 추세 중 강한 하락 움직임
  • 현재 최저 값
  • 이전 최저 값
  • 현재 차이킨 값
  • 이전 차이킨 값

강세 다이버전스의 다른 시나리오에서도 다음과 같은 신호의 예를 볼 수 있습니다:

현재 데이터상 강세 다이버전스인 경우,

차이킨 오실레이터 - 하락 추세 - 다이버전스 - 현재 데이터

이전 데이터상 강세 다이버전스인 경우,

차이킨 오실레이터 - 하락 추세 - 다이버전스 - 이전 데이터 

앞의 두 차트에서 볼 수 있듯이 5줄로 된 코멘트가 있습니다:

  • 강세 다이버전스
  • 현재 최저 값
  • 이전 최저 값
  • 현재 차이킨 값
  • 이전 차이킨 값


결론

우리는 이상과 같이 차이킨 오실레이터에 대해 자세히 알아보았습니다. 이 지표가 무엇인지, 무엇을 측정하는지, 수동으로 계산하는 방법, 내장된 MetaTrader5 지표를 사용하고 삽입하는 방법을 배웠습니다. 우리는 전략은 물론 이 지표의 주요 개념에 따라 간단하게 사용할 수 있는 방법도 배웠습니다:

  • 차이킨 오실레이터 교차: 제로 레벨 교차를 기준으로 매수 및 매도 신호를 받습니다.
  • 차이킨 오실레이터 무브먼트: 상승 또는 하락하는 경우 지표 라인의 움직임을 알려주는 신호를 얻습니다.
  • 차이킨 오실레이터 - 상승 추세: 상승 추세에서 강한 상승 움직임이 있거나 약세 다이버전스가 있을 때 신호를 받습니다.
  • 차이킨 오실레이터 - 하락 추세: 하락 추세에서 강한 하락 움직임이 있거나 강세 다이버전스가 있을 때 신호를 받습니다.

목표를 달성하기 위해 아이디어를 정리하는 것은 매우 중요한 단계이므로 각 전략을 수행하는 거래 시스템을 만드는 데 도움이 되도록 모든 전략에 대한 청사진도 설계했습니다. MetaTrader 5에서 전략을 실행한 후 자동으로 신호를 생성하는 모든 전략을 수행하는 트레이딩 시스템을 만들어 트레이딩을 쉽게 하고, 향상시키고 시간을 절약할 뿐만 아니라 더 나은 결과를 얻을 수 있는 방법을 배웠습니다.

모든 사람에게 맞는 전략은 세상에 없습니다. 그러므로 실제 계정에서 사용하기 전에 반드시 테스트해야 한다는 점을 다시 한 번 확인합니다. 여기서 제가 강조하고자 하는 것은 연습은 모든 학습 및 개발 과정에서 중요한 요소이므로 프로그래밍 기술을 향상시켜야 하는 경우 배운 내용을 스스로 적용하고 연습해야 한다는 것입니다. 이 기사가 도움이 되었기를 바라며 비슷한 기사를 더 읽고 싶다면 이 시리즈의 다른 기사에서 가장 인기있는 기술 지표를 기반으로 거래 시스템을 설계하는 방법에 대해 읽어 보시기 바랍니다.

MetaQuotes 소프트웨어 사를 통해 영어가 번역됨
원본 기고글: https://www.mql5.com/en/articles/11242

인구 최적화 알고리즘 인구 최적화 알고리즘
이 글은 최적화 알고리즘(OA) 분류에 관한 소개 글입니다. 이 글에서는 OA를 비교하고 널리 알려진 알고리즘 중에서 가장 보편적인 알고리즘을 알아보는 데 사용할 테스트 스탠드(함수 집합)를 만들려고 합니다.
표준 편차로 거래 시스템을 설계하는 방법 알아보기 표준 편차로 거래 시스템을 설계하는 방법 알아보기
이 기사는 MetaTrader 5 거래 플랫폼에서 가장 인기 있는 기술 지표를 사용하여 거래 시스템을 설계하는 방법에 대해 알아보는 시리즈의 새로운 기사입니다. 이번 기사에서는 표준 편차 지표로 거래 시스템을 설계하는 방법에 대해 알아봅니다.
모집단 최적화 알고리즘: 파티클 스웜(PSO) 모집단 최적화 알고리즘: 파티클 스웜(PSO)
이 글에서는 널리 사용되는 파티클 스웜 최적화(PSO) 알고리즘에 대해 살펴보겠습니다. 이전에는 수렴, 수렴 속도, 안정성, 확장성과 같은 최적화 알고리즘의 중요한 특성에 대해 알아보고 테스트 스탠드를 개발했으며 가장 간단한 RNG 알고리즘에 대해 알아보았습니다.
Expert Advisor 개발 기초부터(17부): 웹에서 데이터 액세스하기(III) Expert Advisor 개발 기초부터(17부): 웹에서 데이터 액세스하기(III)
이 문서에서는 웹에서 데이터를 가져와 Expert Advisor에서 사용하는 방법에 대해 계속 살펴봅니다. 이번에는 대체 시스템 개발에 대해 알아볼 것입니다.