표준 편차로 거래 시스템을 설계하는 방법 알아보기
소개
이 글은 가장 인기 있는 기술 지표로 거래 시스템을 만드는 방법에 대해 알아보는 시리즈의 새로운 기사입니다. 이 새로운 기사에서 우리는 거래를 향상시키는 데 사용할 수 있는 새로운 도구에 대해 자세히 알아보고 그 기본 개념을 기반으로 거래 시스템을 만드는 방법을 배울 것입니다. 이 새로운 지표는 표준 편차 지표입니다. 다음과 같은 주제를 통해 이 지표에 대해 자세히 다룰 것입니다.
표준편차의 정의라는 주제를 통해 표준편차가 무엇인지, 무엇을 측정하는 지와 표준 편차를 수동으로 계산하는 방법에 대해 자세히 알아보고 그 기본 개념을 학습한 다음 표준편차 값을 계산하는 예제에 적용해 보겠습니다. 그 후 다음 주제인 표준편차 전략으로 넘어가 지표의 기본 개념을 바탕으로 간단한 전략을 통해 표준편차 지표를 활용하는 방법에 대해 알아보겠습니다. 그런 다음 그 다음 주제인 표준 편차 전략의 청사진으로 이동하여 각 전략을 수행하는 거래 시스템을 만드는 데 도움이 되는 청사진을 설계합니다. 이 청사진은 이 거래 시스템을 만들기 위한 아이디어를 구성하는 데에 도움을 주는 단계별 청사진이 될 것입니다. 그런 다음 이 기사에서 가장 흥미로운 주제인 표준 편차 거래 시스템으로 이동하여 각 전략을 수행하는 거래 시스템을 만들어 MetaTrader 5가 자동으로 신호를 생성하도록 하는 데 사용할 것입니다.
우리는 MetaTrader 5와 MetaEditor를 사용하여 MQL5(MetaQuates Language) 코드를 작성하여 거래 시스템을 만들 것입니다. MetaEditor를 다운로드하고 사용하는 방법을 모르는 경우 이전 기사에서 메타에디터에서 MQL5 코드 작성하기라는 주제를 읽어 보시기 바랍니다.
여러분은 기사 정보를 최대한 활용할 수 있도록 이해를 심화해야 하고 이 글의 주제 또는 관련된 다른 주제에 대해 더 많은 통찰력을 얻기 위해 배운 내용을 스스로 적용해야 합니다. 또한 모든 사람에게 맞는 전략은 없기 때문에 실제 계정에서 전략을 사용하기 전에 테스트하여 유용한 전략인지를 직접 확인해야 합니다.
면책: 모든 정보는 정보 제공의 목적으로만 '있는 그대로' 제공되며 거래의 목적이나 자문을 위해 준비된 것이 아닙니다. 여기의 정보는 어떤 종류의 결과도 보장하지 않습니다. 귀하의 거래 계정에서 이들 자료를 사용하기로 한 경우 귀하는 이에 대한 위험을 감수해야 하며 이에 대한 책임은 오직 귀하에게만 있습니다.
이제 새로운 도구를 배우기 위해 주제를 시작하겠습니다.
표준 편차의 정의
이 항목에서는 표준 편차 지표를 정의하고 무엇을 측정하는지 알아보고 수동으로 계산하는 방법을 통해 기본 개념을 학습해 보는 등 표준 편차 지표가 무엇인지 자세히 알아봅니다. 그런 다음 표준 편차의 계산을 예제에 적용합니다.
표준 편차는 통계 용어입니다. 이 통계 용어는 평균 또는 평균 주변의 분산을 측정합니다. 분산이란 간단히 말해서 실제 값이나 평균 또는 평균의 차이입니다. 분산이 높을수록 표준 편차가 높아집니다. 분산이 낮을수록 표준 편차가 낮아집니다. 표준 편차 지표는 변동성을 측정합니다.
이제 표준 편차를 계산하는 방법을 알아봅니다. 다음과 같은 단계를 통해 쉽게 할 수 있습니다.
1- 원하는 기간의 average 또는 mean을 계산합니다.
2- 평균(average)에서 각 종가를 빼서 편차를 계산합니다.
3- 각 계산된 편차를 제곱합니다.
4- 제곱 편차를 합산한 다음 관측치로 나눕니다.
5- 4단계 결과에서 제곱근과 같은 표준 편차를 계산합니다.
다음은 이해를 돕기 위해 이 계산을 적용하는 예입니다. 어떤 종목에 대해 다음과 같은 데이터가 있는 경우.
# | 종가 |
---|---|
1 | 1.05535 |
2 | 1.05829 |
3 | 1.0518 |
4 | 1.04411 |
5 | 1.04827 |
6 | 1.04261 |
7 | 1.04221 |
8 | 1.02656 |
9 | 1.01810 |
10 | 1.01587 |
11 | 1.01831 |
1단계: 10주기의 이동 평균을 계산하고 10번째 이동 평균까지 모든 MA가 동일한 이동 평균이라고 간주합니다. 이를 계산한 결과는 다음과 같습니다.
2단계: 편차를 계산합니다. 다음은 계산 결과입니다.
3단계: 편차 제곱을 계산합니다.
4단계: 편차 제곱의 10주기의 평균을 계산합니다.
5단계: 표준 편차의 계산 = 4단계 결과의 제곱근.
앞의 단계를 통해 이와 같이 표준 편차 값을 계산했습니다. 표준 편차 지표는 MetaTrader 5 거래 플랫폼에 내장된 지표이기 때문에 수동으로 계산할 필요는 없습니다. 우리는 매우 운이 좋습니다. 거래 플랫폼에 있는 사용 가능한 지표에서 선택하기만 하면 됩니다. 다음은 표준 편차 지표를 어떻게 적용하는지 보여줍니다.
MetaTrader 5 거래 플랫폼을 열고 삽입 탭 --> 지표 --> 추세 --> 표준 편차를 누릅니다.
그러면 지표의 매개 변수가 나오는 다음 창과 같은 창이 나옵니다.
1- 사용할 기간을 결정합니다.
2- 원하는 경우 지표 라인의 수평적인 이동 정도를 결정합니다.
3- 이동 평균의 유형을 선택합니다.
4- 계산에 사용할 가격 유형을 선택합니다.
5- 지표선의 색상을 결정합니다.
6- 선의 스타일을 결정합니다.
7- 선의 두께를 결정합니다.
원하는 매개변수를 결정하면 다음과 같이 차트에 삽입된 지표를 찾을 수 있습니다.
앞의 그림에서 볼 수 있듯이 표준 편차가 삽입되고 아래쪽 창에서 표준 편차 값을 기준으로 그려지는 진동 선을 볼 수 있습니다.
이 항목을 통해 표준 편차 지표가 무엇인지, 무엇을 측정하는지, 그 기본 개념을 이해하고 이 계산을 예제에 적용하기 위해 수동으로 계산하는 방법을 알아보는 등 표준 편차 지표에 대해 자세히 알아보았습니다.
표준 편차 전략
우리는 표준 편차 지표에 대해 자세히 알아보고 주요 개념에 대해 알아보았습니다. 이번 항목에서는 이러한 기본 개념을 기반으로 표준 편차 지표를 사용하는 방법에 대해 알아봅니다. 세 가지 간단한 전략을 통해 표준 편차 지표를 사용하는 방법을 배웁니다. 첫 번째 항목인 단순 표준 편차 - 변동성은 변동성이 있는지 여부를 확인하는 데 사용됩니다. 두 번째인 단순 표준 편차 - Std 및 MA는 표준 편차를 이동 평균과 함께 사용하여 매수 또는 매도 신호를 얻습니다. 세 번째, Simple Std Dev - Std, AVG 및 MA는 높은 변동성을 확인한 후 표준 편차를 이동 평균과 함께 사용해서 매수 또는 매도 신호를 얻습니다.
- 전략 1: 단순 표준 편차 - 변동성:
이 전략을 기반으로 현재 Std Dev와 이전 5개 Std 값의 평균 간의 비교에 기반한 변동성을 측정해야 합니다. 현재 Std Dev가 Std Dev 5주기 평균보다 큰 경우 이는 높은 변동성을 나타내는 신호가 됩니다. 현재 Std가 Std Dev 5주기 평균보다 낮으면 변동성이 낮은 것입니다.
현재 표준 > 표준 AVG --> 높은 변동성
현재 표준 < 표준 AVG --> 낮은 변동성
- 전략 2: 단순 표준 편차 - Std 및 MA:
우리는 이 전략을 기반으로 특정 조건에 따라 매수 및 매도 신호를 얻을 수 있어야 합니다. 현재 Std Dev가 이전 Std Dev보다 크고 Ask 값이 이동 평균보다 크면 이는 매수 신호가 됩니다. 현재 Std Dev가 이전 Std Dev보다 크고 Bid 값이 이동 평균보다 아래면 매도 신호가 됩니다.
현재 표준 > 이전 Std 및 Ask > MA --> 매수 신호
현재 표준 > 이전 Std 및 Bid < MA --> 매도 신호
- 전략 3: 단순 표준 편차 - Std, Std AVG와 MA:
우리는 이 전략을 기반으로 또 다른 조건에 따라 매수 및 매도 신호를 얻어야 합니다. 현재 Std Dev가 Std Dev Avg보다 크고 Ask가 이동 평균보다 크면 이는 매수 신호가 됩니다. 현재 Std Dev가 Std Dev Avg보다 크고 Bid가 이동 평균보다 낮으면 매도 신호가 됩니다.
현재 표준 > 표준 평균 및 매도 > MA --> 매수 신호
현재 표준 > 표준 평균 및 입찰가 < Ma --> 매도 신호
이와 같은 전략으로 우리는 세 가지 간단한 전략을 통해 표준 편차 지표를 사용하여 변동성을 측정하고 두 가지 조건에 따라 매수 및 매도 신호를 얻는 방법을 알아보았습니다. 또한 여러분이 또 다른 기술 지표를 함께 사용한다면 트레이딩 계획이나 전략에 따라 여러 관점에서 금융 상품에 대한 더 많은 통찰력을 얻을 수 있을 것입니다.
표준 편차 전략 청사진
이 항목에서는 앞에서 살펴 본 각각의 전략을 기반으로 하는 거래 시스템을 만드는 데 도움이 되는 단계별 청사진을 설계하는 방법을 배웁니다. 제 생각에 이 단계는 거래 시스템을 원활하고 쉽게 만드는 데 도움이 되고 아이디어를 정리하는 데 도움이 되기 때문에 매우 중요합니다. 그러면 이제 우리가 정확히 무엇을 해야 하는지를 컴퓨터에게 알리는 데 도움이 되는 청사진을 살펴보겠습니다.
- 전략 1: 단순 표준 편차 - 변동성:
이 전략에 따르면 우리는 두 값을 확인하고 지속적으로 비교하는 거래 시스템이 필요합니다. 이 두 값은 이전 5개 값의 현재 표준 편차 및 표준 편차 평균입니다. 그 후 우리는 어느 것이 다른 것보다 더 큰지를 결정하는 거래 시스템이 필요합니다. 현재 표준 편차가 평균보다 크면 차트에 다음과 같은 코멘트가 표시되어야 합니다.
- 높은 변동성.
- 현재 표준편차 값.
- 표준편차 5주기 평균값.
현재 표준 편차가 평균보다 낮으면 차트에 다음과 같은 코멘트가 표시되어야 합니다.
- 낮은 변동성.
- 현재 표준편차 값.
- 표준편차 5주기 평균값.
- 전략 2: 단순 표준 편차 - Std 및 MA:
이 전략에 따르면 4가지 값을 확인하고 지속적으로 비교를 수행하는 거래 시스템이 필요합니다. 이 네 가지 값은 현재 Std Dev, 이전 Std Dev, Ask 및 이동 평균 값입니다. 이러한 값을 확인한 후 이를 기반으로 적절한 신호를 결정하고 표시하는 거래 시스템이 필요합니다.
현재 Std Dev가 이전 Std Dev보다 크고 Ask 값이 이동 평균보다 큰 경우 거래 시스템이 다음과 같은 값으로 차트에 코멘트를 생성해야 합니다.
- 매수 신호.
- 현재 표준편차 값.
- 이전 표준편차 값.
- Ask 값.
- 이동 평균값.
현재 Std Dev가 이전 Std Dev보다 크고 Bid 값이 이동 평균보다 낮은 경우 거래 시스템이 다음과 같은 값으로 차트에 코멘트를 생성해야 합니다.
- 매도 신호.
- 현재 표준편차 값.
- 이전 표준편차 값.
- Bid 값.
- 이동 평균값.
- 전략 3: 단순 표준 편차 - 표준, 평균 및 MA:
이 전략에 따르면 이 값들 사이의 비교를 기반으로 우리가 어떤 신호를 봐야 하는지 결정하기 위해 이 4개의 값을 지속적으로 체크하는 거래 시스템이 필요합니다. 이러한 값은 현재 Std Dev, Std Dev Avg, Ask 및 이동 평균입니다.
현재 Std 값이 Std Dev Avg보다 크고 Ask가 이동 평균보다 큰 경우 다음의 값을 차트에 코멘트로 나타내어 신호를 생성하는 거래 시스템이 필요합니다.
- 매수 신호.
- 현재 표준 편차 값.
- 표준 편차 평균값.
- Ask 값.
- 이동 평균값.
현재 Std Dev가 Std Dev 평균보다 크고 Bid가 이동 평균보다 아래인 경우 거래 시스템에서 다음과 같은 값을 사용하여 차트에 코멘트로 신호를 생성해야 합니다.
- 매도 신호.
- 현재 표준 편차 값.
- 표준 편차 평균값.
- Bid 값.
- 이동 평균값.
이제 우리는 각 전략에 대한 단계별 청사진을 설계하는 방법을 알아보았습니다. 이러한 청사진은 체계적인 단계를 통해 거래 시스템을 만드는 데 도움을 줍니다.
표준 편차 거래 시스템
이번 주제에서는 언급된 각 전략을 MetaTrader 5에 적용하기 위해 MQL5를 사용하여 거래 시스템을 설계하는 방법을 배웁니다. 먼저 표준편차 값을 차트에 코멘트로 생성하는 간단한 표준편차 매매 시스템을 설계하고 이 매매 시스템을 기반으로 각 전략을 수행하는 매매 시스템을 설계할 것입니다.
- 분수 값을 나타내는 "double" 함수를 사용하여 Std Dev 배열을 만듭니다. double은 데이터 유형 중 하나인 부동 소수점 유형 중 하나입니다.
double StdDevArray[];
- 현재 데이터에서 이 배열을 정렬하고 "ArraySetAsSeries" 함수를 사용하여 true 또는 false 또는 boolean 값을 반환합니다. "ArraySetAsSeries"의 매개변수는 다음과 같습니다.
- An Array[]
- Flag
ArraySetAsSeries(StdDevArray,true);
- 표준 편차 지표의 핸들을 반환하는 "iStdDev" 함수를 사용해서 표준 편차를 정의하기 위해 StdDevDef의 정수 변수를 생성합니다. 이 함수의 매개변수는 다음과 같습니다.
- symbol, symbol 이름을 설정하기 위해 현재 차트에 적용할 "_Symbol"을 지정합니다.
- 기간을 설정하기 위해 현재 기간에 적용할 "_Period"를 지정합니다.
- ma_period, 이동 평균 길이를 설정하기 위해 기본값으로 20을 설정합니다.
- ma_shift, 수평 이동을 설정합니다. 우리는 0으로 설정합니다.
- ma_method, 이동 평균의 유형을 결정합니다. 우리는 단순 이동 평균(MODE_SMA)을 사용합니다.
- used_price, 사용할 가격의 유형을 결정합니다. 우리는 종가(PRICE_CLOSE)를 사용합니다.
int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE);
- 복사된 데이터의 수를 반환하거나 오류가 있는 경우 -1을 반환하기 위해 "CopyBuffer" 함수를 사용하여 StdDev의 배열에 가격 데이터를 복사합니다. 이 함수의 매개변수는 다음과 같습니다.
- indicator_handle, "StdDevDef"로 지표의 정의를 지정합니다.
- buffer_num, 인디케이터 버퍼 번호를 설정합니다. 우리는 0으로 설정합니다.
- start_pos, 시작 위치를 설정합니다. 우리는 0으로 설정합니다.
- count, 복사할 양을 설정합니다. 우리는 3으로 설정합니다.
- buffer[], 복사할 대상 배열을 결정합니다. 우리는 "StdDevArray"로 합니다.
CopyBuffer(StdDevDef,0,0,3,StdDevArray);
- "StdDevVal"이라는 double 변수를 생성한 후 double형인 "NormalizeDouble" 함수를 사용하여 StdDev 값을 가져옵니다. "Normalizedouble"의 매개변수는 다음과 같습니다:
- normalized된 숫자를 결정합니다. 우리는 "StdDevArray[0]"로 지정합니다.
- 자릿수, 소수점 이하 자릿수를 결정합니다. 우리는 6으로 합니다.
double StdDevVal = NormalizeDouble(StdDevArray[0],6);
- "Comment" 기능을 사용하여 현재 StdDev 값으로 차트에 코멘트를 표시합니다. 반환 값은 없지만 정의된 코멘트가 출력됩니다.
Comment("StdDev Value is",StdDevVal);
이 코드를 컴파일하면 오류나 경고가 없습니다. 이후 네비게이터 창에서 다음과 같은 이 거래 시스템의 EA를 찾을 수 있습니다.
원하는 차트에 EA를 끌어다 놓으면 다음과 같은 거래 시스템 창이 나타납니다.
"알고 거래 허용" 옆에 체크하고 "확인"을 누르면 다음과 같이 이 거래 시스템의 EA가 차트에 첨부되는 것을 볼 수 있습니다.
이전 그림의 오른쪽 모서리에서 볼 수 있듯이 EA가 차트에 첨부되어 있습니다.
다음 그림은 이 거래 시스템에 따라 생성된 신호가 나타나는 테스트의 예입니다.
다음 그림은 신호를 자동으로 생성하기 위해 이 거래 시스템의 EA를 부착한 또 다른 예로 내장된 표준 편차 지표를 삽입하여 두 StdDev 값이 동일한지를 확인한 것입니다.
- 전략 1: 단순 표준 편차 - 변동성:
이제 우리는 표준 편차 - 변동성 전략을 수행하는 거래 시스템을 만들 것이며 다음은 이 전략을 기반으로 거래 시스템을 만드는 전체 코드입니다.
//+------------------------------------------------------------------+ //| Simple Std Dev - Volatility.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 StdDevArray[]; ArraySetAsSeries(StdDevArray,true); int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE); CopyBuffer(StdDevDef,0,0,6,StdDevArray); double StdDevVal = NormalizeDouble(StdDevArray[0],6); double StdDevVal1 = NormalizeDouble(StdDevArray[1],6); double StdDevVal2 = NormalizeDouble(StdDevArray[2],6); double StdDevVal3 = NormalizeDouble(StdDevArray[3],6); double StdDevVal4 = NormalizeDouble(StdDevArray[4],6); double StdDevVal5 = NormalizeDouble(StdDevArray[5],6); double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5); if(StdDevVal>StdDevAVGVal) { Comment("High volatility","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal); } if(StdDevVal<StdDevAVGVal) { Comment("Low volatility","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal); } } //+------------------------------------------------------------------+
이 코드의 차이점은 아래와 같습니다:
현재 Std Dev 값 만을 정의하는 것뿐만 아니라 현재 값을 정의하는 것과 동일한 함수를 사용하여 이전 5개의 값을 정의할 것입니다. 그러나 원하는 값을 얻기 위해 정규화된 수에 다른 숫자를 사용합니다.
double StdDevVal1 = NormalizeDouble(StdDevArray[1],6); double StdDevVal2 = NormalizeDouble(StdDevArray[2],6); double StdDevVal3 = NormalizeDouble(StdDevArray[3],6); double StdDevVal4 = NormalizeDouble(StdDevArray[4],6); double StdDevVal5 = NormalizeDouble(StdDevArray[5],6);
이전 5개 값의 평균을 계산합니다.
double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5);
전략의 조건:
변동성이 큰 경우,
if(StdDevVal>StdDevAVGVal) { Comment("High volatility","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal); }
변동성이 낮은 경우,
if(StdDevVal<StdDevAVGVal) { Comment("Low volatility","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal); }
이 코드를 컴파일한 후 탐색기에서 다음과 같이 EA를 찾을 수 있습니다.
원하는 차트에 EA를 드래그 앤 드롭하면 다음과 같은 거래 시스템의 창을 찾을 수 있습니다.
"확인"을 누르면 차트에 첨부된 EA가 이 전략에 따라 신호의 생성을 시작합니다.
보시다시피 단순 표준 편차 - 변동성 거래 시스템의 EA가 이전 사진의 오른쪽 상단에서 볼 수 있는 것과 마찬가지로 부착되어 있습니다.
다음 그림과 같이 테스트에서 이 거래 시스템에 따라 생성된 신호의 예를 볼 수 있습니다:
이 전략에 따라 변동성이 큰 경우,
이전 그림에서 볼 수 있듯이 차트의 왼쪽 상단 모서리에 세 줄의 코멘트가 있습니다.
- 높은 변동성 진술.
- 현재 표준 편차 값.
- 이전 5개 표준 편차 값의 평균.
이 전략에 따라 낮은 변동성의 경우,
이전 그림에서 볼 수 있듯이 차트의 왼쪽 상단 모서리에 또 다른 세 줄의 코멘트가 있습니다.
- 변동성이 낮습니다.
- 현재 Std Dev 값입니다.
- 이전 5개 표준 편차 값의 평균입니다.
- 전략 2: 단순 표준 편차 - Std 및 MA:
다음 코드는 단순 표준 편차 - Std 및 MA 전략을 수행화는 거래 시스템을 만드는 방법에 대한 것입니다:
//+------------------------------------------------------------------+ //| Simple Std Dev - Std & MA.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 Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double StdDevArray[]; double PArray[]; ArraySetAsSeries(StdDevArray,true); ArraySetAsSeries(PArray,true); int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE); int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE); CopyBuffer(StdDevDef,0,0,3,StdDevArray); CopyBuffer(MADef,0,0,10,PArray); double StdDevVal = NormalizeDouble(StdDevArray[0],6); double StdDevVal1 = NormalizeDouble(StdDevArray[1],6); double MAValue = NormalizeDouble(PArray[0],6); if(StdDevVal>StdDevVal1&&Ask>MAValue) { Comment("Buy signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Previous Std Dev value is ",StdDevVal1,"\n", "Ask value is ",Ask,"\n", "MA value is ",MAValue); } if(StdDevVal>StdDevVal1&&Bid<MAValue) { Comment("Sell signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Previous Std Dev value is ",StdDevVal1,"\n", "Bid value is ",Bid,"\n", "MA value is ",MAValue); } } //+------------------------------------------------------------------+
이 코드에서 차이점은 다음과 같습니다:
모든 사람에 대한 double 변수를 생성하여 Ask 및 Bid 값을 정의하고 "NormalizeDouble" 함수를 사용하여 double 유형 값을 반환한 다음 "SymbolInfoDouble"을 normalized 된 숫자로 사용하여 특정 심볼의 해당 속성을 반환합니다. "SymbolInfoDouble"의 매개변수는 다음과 같습니다:
- 심볼의 이름은 현재 심볼 차트에 적용할 "_Symbol"을 사용합니다.
- prop_id, 속성을 정의합니다 여기에서는 "SYMBOL_ASK"입니다.
double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
가격 배열을 하나 더 만듭니다.
double PArray[];
현재 데이터에서 이 배열을 정렬합니다.
ArraySetAsSeries(PArray,true);
MADef의 정수 변수를 생성한 후 "iMA" 함수를 사용하여 이동 평균을 정의합니다.
int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE);
이 생성된 배열에 가격 데이터를 복사합니다.
CopyBuffer(MADef,0,0,10,PArray);
Std Dev의 이전 값을 정의합니다.
double StdDevVal1 = NormalizeDouble(StdDevArray[1],6);
이동 평균의 값을 정의합니다.
double MAValue = NormalizeDouble(PArray[0],6);
전략의 조건:
매수 시그널의 경우,
if(StdDevVal>StdDevVal1&&Ask>MAValue) { Comment("Buy signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Previous Std Dev value is ",StdDevVal1,"\n", "Ask value is ",Ask,"\n", "MA value is ",MAValue); }
매도 시그널의 경우,
if(StdDevVal>StdDevVal1&&Bid<MAValue) { Comment("Sell signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Previous Std Dev value is ",StdDevVal1,"\n", "Bid value is ",Bid,"\n", "MA value is ",MAValue); }
이 코드를 컴파일하면 다음 그림과 같이 탐색기 창에서 EA를 찾을 수 있습니다:
더블 클릭하면 다음 그림과 같이 이 EA의 다음과 같은 창을 볼 수 있습니다:
"알고 거래 허용" 옆에 체크한 후 "확인"을 누르면 아래 그림과 같이 EA가 차트에 첨부되는 것을 볼 수 있습니다.
Expert Advisor가 붙여진 차트의 오른쪽 상단에서 볼 수 있듯이 이 전략에 따라 테스트한 예는 다음의 예와 같습니다.
매수 시그널의 경우,
앞에서 살펴 본 매수 신호의 예를 통해 알 수 있듯이 차트의 왼쪽 상단에 5줄의 코멘트가 있습니다:
- 매수 신호
- 현재 표준 편차 값
- 이전 표준 편차 값
- Ask 값
- MA 값
매도 시그널의 경우,
앞에서 살펴 본 매도 신호의 예를 통해 알 수 있듯이 차트의 왼쪽 상단에 다섯 줄의 코멘트가 있습니다:
- 매도 신호
- 현재 표준 편차 값
- 이전 표준 편차 값
- Bid 값
- MA 값
이와 같이 우리는 표준 편차와 이동 평균을 기반으로 매수 또는 매도 신호를 생성하는 거래 시스템을 만드는 방법에 대해 알아보았습니다.
- 전략 3: 단순 표준 편차 - 표준 편차, 표준 AVG 및 MA:
다음은 이 전략을 수행하는 거래 시스템을 만드는 전체 코드입니다:
//+------------------------------------------------------------------+ //| Simple Std Dev - Std Dev & AVG Std Dev & MA.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 Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); double StdDevArray[]; double PArray[]; ArraySetAsSeries(StdDevArray,true); ArraySetAsSeries(PArray,true); int StdDevDef = iStdDev(_Symbol,_Period,20,0,MODE_SMA,PRICE_CLOSE); int MADef = iMA(_Symbol,_Period,10,0,MODE_SMA,PRICE_CLOSE); CopyBuffer(StdDevDef,0,0,6,StdDevArray); CopyBuffer(MADef,0,0,10,PArray); double StdDevVal = NormalizeDouble(StdDevArray[0],6); double StdDevVal1 = NormalizeDouble(StdDevArray[1],6); double StdDevVal2 = NormalizeDouble(StdDevArray[2],6); double StdDevVal3 = NormalizeDouble(StdDevArray[3],6); double StdDevVal4 = NormalizeDouble(StdDevArray[4],6); double StdDevVal5 = NormalizeDouble(StdDevArray[5],6); double StdDevAVGVal = ((StdDevVal1+StdDevVal2+StdDevVal3+StdDevVal4+StdDevVal5)/5); double MAValue = NormalizeDouble(PArray[0],6); if(StdDevVal>StdDevAVGVal&&Ask>MAValue) { Comment("Buy signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal,"\n", "Ask value is ",Ask,"\n", "MA value is ",MAValue); } if(StdDevVal>StdDevAVGVal&&Bid<MAValue) { Comment("Sell signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal,"\n", "Bid value is ",Bid,"\n", "MA value is ",MAValue); } } //+------------------------------------------------------------------+
이 코드의 차이점은 다음과 같습니다:
전략의 조건,
매수 시그널의 경우,
if(StdDevVal>StdDevAVGVal&&Ask>MAValue) { Comment("Buy signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal,"\n", "Ask value is ",Ask,"\n", "MA value is ",MAValue); }
매도 시그널의 경우,
if(StdDevVal>StdDevAVGVal&&Bid<MAValue) { Comment("Sell signal","\n", "Current Std Dev value is ",StdDevVal,"\n", "Std Dev Avg value is ",StdDevAVGVal,"\n", "Bid value is ",Bid,"\n", "MA value is ",MAValue); }
이 코드를 컴파일하면 탐색기 창에서 다음과 같은 EA를 찾을 수 있습니다.
EA를 더블 클릭하거나 차트에 끌어다 놓으면 다음과 같은 창이 나타납니다.
"확인"을 누르면 아래 그림과 같이 EA가 차트에 첨부된 것을 볼 수 있습니다.
차트의 오른쪽 상단에서 볼 수 있듯이 EA가 첨부된 것을 볼수 있습니다.
이제 이 거래 시스템을 기반으로 생성된 신호의 예를 혹인 할수 있어여 하며 다음의 예를 통해 볼 수 있습니다:
매수 시그널의 경우,
차트의 왼쪽 상단 모서리에 있는 이전의 예를 통해 볼 수 있듯이 이 거래 시스템은 5줄의 코멘트를 생성했습니다:
- 매수 신호
- 현재 표준 편차 값
- 표준 편차 평균 값
- Ask 값
- 이동 평균 값
매도 시그널의 경우,
이전의 매도 신호의 예를 통해 알 수 있듯이 이 거래 시스템을 기반으로 하는 5줄의 코멘트가 나타납니다:
- 매도 신호
- 현재 표준 편차 값
- 표준 편차 평균 값
- Bid 값
- 이동 평균 값
이와 같이 각각의 전략을 기반으로 자동 신호를 생성하는 데 사용할 수 있는 거래 시스템을 만드는 방법을 배웠습니다.
결론
이 기사를 통해 우리는 표준 편차 지표가 무엇인지, 무엇을 알려주고 측정하는지 그리고 응용 프로그램을 통해 지표에 대한 이해를 심화하기 위해 수동으로 계산하는 방법을 배우며 표준 편차 지표에 대해 더 많이 알게 되었습니다. 우리는 이 지표에 대한 이해를 넓히고 지표의 기본 개념을 바탕으로 간단한 전략을 통해 어떻게 활용할 수 있는지 배웠습니다. 단순 표준 편차 - 변동성 전략을 통해 변동성을 측정하고 이를 어떻게 사용하여야 하는지 알아보았습니다. 단순 표준 편차 - Std 및 MA 전략과 Std, Std AVG, MA 전략을 통해 두 가지 조건에 따라 매수 또는 매도 신호를 얻는 데 사용하는 방법을 배웠습니다. 이 후 우리는 각 전략과 관련한 단계별 청사진을 설계하여 각 전략을 수행하는 거래 시스템을 원활하고 쉽게 만드는 방법을 배웠습니다. 그 후 MetaTrader 5가 자동으로 신호를 생성하여 시간을 절약하고, 특정 조건에 따라 정확한 신호를 얻고, 명확한 신호를 받아 감정과 주관성을 피하는 데 도움이 되는 거래 시스템을 각 언급된 전략을 기반으로 MQL5을 써서 만들었습니다. 이는 프로그래밍의 이점입니다.
여러분이 명확한 통찰력을 제공하는 거래 시스템을 설계할 때 금융 상품의 가장 중요한 요소에 대해 관점에서 더 많은 통찰력을 얻기 위해 이 지표를 다른 기술 지표와 함께 사용하면 유용할 것입니다.
여기서 주요 목표는 이러한 시스템이 여러분에게 유용하거나 적합한지 알아보도록 하기 우한 교육일 뿐이므로 사용하기 전에 어떤 전략이든 직접 테스트해야 한다는 것을 다시 한 번 강조합니다. 이 기사의 주제를 이해하고 거래를 향상시키는 데 유용할 수 있는 새로운 아이디어를 얻음으로써 이 기사가 도움이 되기를 바랍니다.
이 기사가 유용하다고 생각하고 가장 인기 있는 기술 지표로 거래 시스템을 설계하는 방법을 배우기 위해 또 다른 기사를 읽고 싶다면 이 시리즈의 다른 기사를 참고하시기 바랍니다.
MetaQuotes 소프트웨어 사를 통해 영어가 번역됨
원본 기고글: https://www.mql5.com/en/articles/11185