English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
통계의 기초

통계의 기초

MetaTrader 5통계 및 분석 | 11 10월 2021, 16:06
95 0
QSer29
QSer29

개요

통계란 무엇인가? 위키백과는 통계를 다음과 같이 정의합니다. '통계학은 산술적 방법을 기초로 하여, 주로 다량의 데이터를 관찰하고 정리 및 분석하는 방법을 연구하는 수학의 한 분야이다.'(통계학). 정의를 통해 통계의 세 가지 기본 요소를 알 수 있죠. 바로 데이터 수집, 평가분석입니다. 특히 거래 터미널 또는 브로커로부터 이미 평가된 정보를 수신하는 우리 투자자들에게 데이터 분석은 아주 유용합니다.

대부분의 투자자들은 기술적 분석을 통해 매매를 결정합니다. 특정 인디케이터를 이용하거나 미래의 가격을 예측하는 것도 모두 통계와 관련이 있습니다. 가격 변동 차트 자체가 주식 또는 통화에 대한 통계를 나타내죠. 따라서 투자자의 의사결정 과정에 매우 중요한 기반이 되는 통계학의 기본 원리를 이해할 필요가 있습니다.


확률 이론과 통계

모든 통계는 한 개체의 상태 변화의 결과입니다. 시간 별 EURUSD 가격 차트를 이용하겠습니다.

EURUSD 차트
 

이 경우 개체는 두 통화의 상관 관계가 되고 통계는 매 순간 해당 통화쌍의 가격이 됩니다. 두 통화 간의 상관 관계가 가격에 어떤 영향을 미치는가? 왜 다른 가격 차트가 아닌 특정 가격 차트가 해당 기간에 나타나나? 왜 가격이 하락하고 있나? 위의 세 가지 질문에 대한 답은 바로 '확률'에 있습니다. 각 객체는 확률에 따라 하나의 값 또는 다른 값을 가질 수 있는데요.

간단한 실험을 해 보죠. 동전을 몇 번 던져 봅니다. 던질 때마다 어느 면이 나오는지 기록합니다. 앞뒤가 공평하게 나왔다고 가정할게요. 다음과 같은 표가 작성됩니다.

결과 확률
앞면 0.5
뒷면 0.5

앞면과 뒷면이 나올 확률이 각각 0.5로 동일하죠. 발생 가능한 사건(모서리로 떨어지는 경우 제외)에 대한 확률의 합이 1이므로 다른 결과는 나올 수 없습니다.

동전을 10번 던집니다. 결과를 다시 볼까요?

결과 횟수
앞면 8
뒷면 2

각 면으로 떨어질 확률이 같은데 왜 이런 결과가 발생하는 걸까요? 어느 쪽으로나 떨어질 확률이 같다는 것이 몇 번의 반복 후에도 동전이 양 쪽으로 떨어질 확률이 같다는 것을 의미하지는 않습니다. 해당 확률은 특정 시도에서 동전이 앞면 또는 뒷면으로 떨어질 것이며 두 경우의 수가 같음을 의미하죠.

이제 동전을 100번 던져 보죠. 다음의 결과가 나옵니다.

결과 횟수
앞면 53
뒷면 47

이번에도 각 면이 나온 횟수가 상이하네요. 하지만 53:47은 첫 번째 결과와 동일하다고 봐도 무방합니다. 앞면과 뒷면이 골고루 나온 것이죠.

이제 반대로 해보겠습니다. 어느 쪽으로 떨어질지 모르는 동전이 있다고 생각합시다. 앞면과 뒷면이 나올 확률이 같은지 판단하는 것이 우리의 목표입니다.

첫 번째 실험의 데이터를 이용할게요. 각 면이 나온 수를 전체 결과 수로 나눕니다. 다음의 확률이 나옵니다.

결과 확률
앞면 0.8
뒷면 0.2

첫 번째 실험으로 앞면과 뒷면이 나올 확률이 동일하다고 결론을 내리기는 힘들겠네요. 두 번째 실험을 해봅시다.

결과 횟수
앞면 0.53
뒷면 0.47


높은 정확도로 앞면과 뒷면이 나올 확률이 같다고 말할 수 있습니다.

위의 예시에서 실험 횟수가 많을수록 객체의 특성이 보다 정확하게 통계에 반영된다는 결론을 얻을 수 있죠.

따라서 통계와 확률은 아주 밀접하게 연결되어 있습니다. 통계는 한 객체에 대한 실험의 결과이며 해당 객체의 상태를 나타내는 확률에 따라 달라집니다. 반대로, 해당 객체의 상태에 대한 확률은 통계를 통해 측정할 수 있습니다. 이를 이용한 투자자의 주 목표는 일정 기간 동안 이루어진 거래에 대한 데이터를 가지고(통계), 미래의 일정 기간 동안의 가격 움직임(확률)을 예측하여 매매에 대한 결정을 내리는 것입니다 .

따라서 통계와 확률 간의 관계이해하고, 위험 평가 및 위험 상황에 대한 인식을 갖는 것이 중요합니다. 마지막 두 주제는 이번 글에서 다루지 않습니다.


기본 통계 변수 

이제 기본 통계 변수를 살펴보겠습니다. 10명으로 이루어진 그룹 내 각 구성원의 키에 대한 데이터가 있다고 가정하죠.


1 2 3 4 5 6 7 8 9 10
173 162 194 181 186 159 173 178 168 171

 

위 표의 데이터는 표본, 데이터의 수는 표본 크기가 됩니다. 해당 표본에 대한 매개 변수를 살펴볼게요. 모든 매개 변수는 임의의 데이터가 아닌 표본 데이터의 결과이므로 표본 변수가 됩니다.

1. 표본 평균

표본 평균은 표본의 평균입니다. 우리의 경우 그룹에 속한 사람들의 평균 키가 되겠죠?

평균은 다음과 같이 계산합니다.

  1. 우선 표본 값을 모두 더합니다.
  2. 그렇게 나온 결과 값을 표본의 개수로 나눕니다. 

공식 


 읽는 법

  • 표본 평균 M
  • 표본 요소 a[i]
  • 표본 크기 n

연산을 통해 평균값 174.5cm를 얻습니다.

 

 

2. 표본 편차

표본 편차는 표본 평균에서 표본 값이 얼마나 떨어져 있는지를 나타냅니다. 값이 클수록 데이터가 넓게 분산되죠.

다음의 방법으로 편차를 계산합니다.

  1. 우선 표본 평균을 계산합니다.
  2. 각 표본 요소에서 평균을 뺀 값을 제곱합니다.
  3. 제곱된 편차를 모두 더합니다.
  4. 제곱된 편차의 합을 표본 집단의 자료 개수에서 하나를 뺀 값으로 나눕니다.

공식  

 

읽는 법 

  • 표본 편차 D
  • 표본 평균 M
  • 표본 요소 a[i]
  • 표본 크기 n

우리의 경우 표본 편차는 113.611이 됩니다.

 


위 그림에는 3개의 값이 평균에서 크게 떨어져 편차 값을 올립니다.

3. 표본 왜도

표본 왜도는 표본 변수 분포의 비대칭도를 나타냅니다. 왜도의 값이 0에 가까울수록 표본의 분포가 대칭을 이룹니다.

다음의 방법으로 왜도를 계산합니다.

  1. 우선 표본 평균을 계산합니다.
  2. 표본 편차를 계산합니다.
  3. 각 표본과 평균의 차이의 3 제곱을 모두 더합니다.
  4. 결과 값을 편차*3/2으로 나눕니다.
  5. 결과 값을 표본 개수를 (표본 개수-1)*(표본 개수-2)로 나눕니다.

공식  

읽는 법 

  • 표본 왜도 A 
  • 표본 편차 D
  • 표본 평균 M
  • 표본 요소 a[i]
  • 표본 크기 n

해당 표본의 왜도는 0.372981로 꽤 작은 편입니다. 발산 값이 서로 상쇄되기 때문입니다.


 

분포의 비대칭도가 클수록 왜도 값이 증가합니다. 예를 들어 아래 그림의 데이터에 대한 왜도 값은 1.384651입니다.

 

4. 표본 첨도

표본 첨도는 표본 분포의 뾰족한 정도를 나타냅니다.

다음의 방법으로 첨도를 계산합니다.

  1. 우선 표본 평균을 계산합니다.
  2. 표본 편차를 계산합니다.
  3. 각 표본과 평균의 차이의 4 제곱을 모두 더합니다.
  4. 편차의 제곱으로 나눕니다.
  5. (표본 개수)*(표본 개수+1)/(표본 개수-1)*(표본 개수-2)*(표본 개수-3)을 곱합니다.
  6. 3*(표본 개수-1)^2/(표본 개수-2)(표본 개수-3)을 뺍니다.

공식  

읽는 법 

  • 표본 첨도 E
  • 표본 편차 D
  • 표본 평균 M
  • 표본 요소 a[i]
  • 표본 크기 n

해당 키 데이터를 이용하면 -0.1442285가 나옵니다.


다음의 경우 첨도 값은 10이 됩니다.

5. 표본 공분산

표본 공분산은 2개의 표본 변수 사이의 선형 관계를 나타냅니다. 두 변수의 선형 관계가 없는 경우 공분산은 0이 됩니다.

설명을 위해 10명에 대한 몸무게 데이터를 추가하겠습니다.


1 2 3 4 5 6 7 8 9 10
몸무게 65 70 83 60 105 58 69 90 78 65

 

다음의 방법으로 두 표본의 공분산을 계산합니다.

  1. 첫 번째 표본의 평균을 계산합니다.
  2. 두 번째 표본의 평균을 계산합니다.
  3. 두 값의 차이를 곱한 값을 모두 더합니다. (첫 번째 표본 요소1-첫 번째 표본 평균)(두 번째 표본 요소1-두 번째 표본 평균)+(첫 번째 표본 요소2-첫 번째 표본 평균)(두 번째 표본 요소2-두 번째 표본평균)+...식으로 반복합니다.
  4. (표본 개수-1)로 나눕니다.

공식  


읽는 법 

  • 표본 공분산 Cov
  • 첫 번째 표본 요소 a[i]
  • 두 번째 표본 요소 b[i] 
  • 첫 번째 표본 평균 M1 
  • 두 번째 표본 평균 M2 
  • 표본 크기 n 

두 표본으로 공분산을 계산하면 91.2778이 나오네요. 아래 차트에서 두 표본의 의존성을 확인할 수 있습니다.


키가 클수록 몸무게가 감소하고 몸무게가 증가할수록 키가 작아지죠.

 6. 표본 상관 계수

표본 상관 계수 또한 두 표본 변수 사이의 선형 관계의 정도를 나타냅니다. 상관 계수 값의 범위는 -1부터 +1까지입니다.

다음의 방법으로 두 표본의 상관 계수를 계산합니다.

  1. 첫 번째 표본의 편차를 계산합니다.
  2. 두 번째 표본의 편차를 계산합니다.
  3. 두 표본의 공분산을 계산합니다.
  4. 공분산을 두 편차의 곱의 제곱근으로 나눕니다.

공식 

읽는 법 

  • 표본 상관 계수 Corr
  • 표본 공분산 Cov
  • 첫 번째 표본의 표본 편차 D1 
  • 두 번째 표본의 표본 편차 D2  

위의 키와 몸무게 데이터에 대한 상관 계수는 0.579098이 됩니다.


거래에 통계 적용하기

거래에 적용된 통계 변수를 나타내는 가장 간단한 예는 MovingAverage 인디케이터입니다. 일정 기간에 대한 데이터를 가지고 가격의 산술적 평균을 계산하기 때문이죠.

 

읽는 법 

  • 인디케이터 값 MA
  • 가격 P[i]
  • MA 측정 기간 n

표본 변수와 동일한 방법으로 작동하죠. 간단하긴 하지만 해당 인디케이터는 이동 평균 지수(EMA)를 계산할 때 사용되며 추세 강도와 가격 변동의 방향을 예측하는 대표적 인디케이터인 MACD 인디케이터의 기본 요소가 됩니다.

이동 평균 및 MACD 

MQL5 통계

앞서 설명한 기본 통계 변수를 MQL5로 구현해 보겠습니다. 통계 함수 라이브러리인 statistics.mqh 파일에 위의 통계 분석 방법을 포함해 여러가지 통계 분석 방법이 들어 있습니다.코드를 한번 살펴보죠.

1. 표본 평균

 표본 평균을 구하는 라이브러리 함수의 이름은 Average입니다.

표본 평균

인풋: 데이터 표본 아웃풋: 평균

2. 표본 편차

표본 편차를 구하는 라이브러리 함수의 이름은 Variance입니다.

표본 편차

 인풋: 데이터 표본 및 표본 평균 아웃풋: 편차

3. 표본 왜도

표본 왜도를 구하는 라이브러리 함수의 이름은 Asymmetry입니다.

표본 왜도
 

 인풋: 데이터 표본, 표본 평균 및 표본 편차/아웃풋: 왜도

4. 표본 첨도

표본 첨도를 구하는 라이브러리 함수의 이름은 Excess(Excess2)입니다.

표본 첨도

인풋: 데이터 표본, 표본 평균 및 표본 편차/아웃풋: 첨도

5. 표본 공분산

표본 공분산을 구하는 라이브러리 함수의 이름은 Cov입니다. 

표본 공분산

인풋: 두 개의 데이터 표본 및 각 데이터 표본 평균/아웃풋: 표본 공분산

6. 표본 상관 계수

표본 상관 계수를 구하는 라이브러리 함수의 이름은 Corr입니다. 

표본 상관 계수
 

인풋: 두 개의 표본에 대한 공분산, 첫 번째 표본 변수 및 두 번째 표본 변수 아웃풋: 상관 계수

키와 몸무게로 나타난 표본 데이터를 적용해 라이브러리를 실행해 보겠습니다.
#include <Statistics.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- specify two data samples.
   double arrX[10]={173,162,194,181,186,159,173,178,168,171};
   double arrY[10]={65,70,83,60,105,58,69,90,78,65};
//--- calculate the mean
   double mx=Average(arrX);
   double my=Average(arrY);
//--- to calculate the variance, use the mean value
   double dx=Variance(arrX,mx);
   double dy=Variance(arrY,my);
//--- skewness and kurtosis values
   double as=Asymmetry(arrX,mx,dx);
   double exc=Excess(arrX,mx,dx);
//--- covariance and correlation values
   double cov=Cov(arrX,arrY,mx,my);
   double corr=Corr(cov,dx,dy);
//--- print results in the log file
   PrintFormat("mx=%.6e",mx);
   PrintFormat("dx=%.6e",dx);
   PrintFormat("as=%.6e",as);
   PrintFormat("exc=%.6e",exc);
   PrintFormat("cov=%.6e",cov);
   PrintFormat("corr=%.6e",corr);
  }

스크립트를 실행하면 터미널에 다음과 같은 결과가 나타납니다.


해당 라이브러리에 포함된 함수에 대한 설명은 코드베이스 https://www.mql5.com/ko/code/866에서 찾아볼 수 있습니다.


결론

통계와 확률에 대해 배웠습니다. 통계학은 기초부터 배워야 한다는 걸 추가로 알려드리고 싶네요. 아주 기본적인 요소도 투자에 필요한 복잡한 메커니즘이나 패턴을 이해하는 데에 도움을 줄 수 있거든요. 

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

미지의 확률 밀도 함수에 대한 커널 밀도 추정 미지의 확률 밀도 함수에 대한 커널 밀도 추정
이 글은 미지의 확률 밀도 함수에 대한 커널 밀도를 추정하는 프로그램 작성 방법을 다룹니다. 커널 밀도 추정 방법을 이용할 겁니다. 소프트웨어 구현 소스 코드 및 사용 예시와 설명이 포함되어 있습니다.
MQL5.community 회원 활동 기록 MQL5.community 회원 활동 기록
MQL5.com은 여러분 한 분 한 분을 기억하고 있답니다. 어떤 글을 썼는지, 게시글의 조회수는 얼마인지, 코드 베이스의 프로그램 다운로드 수는 몇 회인지까지도 모두 알고 있죠. 게다가 이건 일부일 뿐이랍니다. 개인 활동 기록은 프로필에서 확인 가능하지만 전체 회원의 활동 기록은 어떻게 확인할 수 있을까요? 이번에는 MQL5.community 회원 활동에 대해 알아보겠습니다.
알고리즘 트레이딩 기사를 작성하고 200달러를 받으세요! 알고리즘 트레이딩 기사를 작성하고 200달러를 받으세요!
기사를 작성하고 알고리즘 트레이딩이 발전하도록 기여해 보세요. 여러분의 트레이딩 및 프로그래밍 경험을 공유해 주시면 $200를 지급해 드립니다. 또한 인기 있는 MQL5.com 웹사이트에 글을 게시하면 전문적인 커뮤니티에서 여러분의 브랜드를 홍보할 수 있는 좋은 기회가 됩니다. 수천 명의 트레이더들이 여러분의 작품을 읽어 볼 것입니다. 비슷한 생각을 가진 사람들과 아이디어를 논의하고 새로운 경험을 쌓고 여러분이 가진 지식을 수익화할 수 있습니다.
DLL 생성이 불필요한 이유 DLL 생성이 불필요한 이유
MQL5 기능이 부족하다고 느껴지면 개발자는 추가 도구를 이용하게 됩니다. 다른 프로그램 언어를 이용해 중간 DLL을 만들어야 하죠. MQL5로 다양한 형식의 데이터를 만들어 API로 전송할 수는 있지만 수락된 포인터에 대한 데이터 추출 과정에서 발생하는 문제는 해결할 수 없습니다. 이 글에서는 복합 데이터 유형을 다루고 교환하는 간단한 메커니즘에 대해 자세히 알아보겠습니다.