English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
랜덤 워크와 추세 표시기

랜덤 워크와 추세 표시기

MetaTrader 5트레이딩 | 4 8월 2021, 17:06
147 0
Гребенев Вячеслав
Гребенев Вячеслав


소개

동전 던지기 게임은 오래전부터 있었습니다. FOREX 시장에서 기술 거래의 메커니즘을 시도하고 이해하려는 의도로 이 게임을 해봅시다. 우리는 동전을 손에 넣은 최초의 사람이 아닙니다. 확률 이론에 대해 더 알고 싶은 분은 William Feller의 An Introduction to Probability Theory and Its Applications 책을 참조하십시오. 우리의 목표는 거래 메커니즘을 이해하는 것입니다.


랜덤 워크와 그 속성

먼저 난수 생성기를 사용하여 동전 던지기 게임의 결과를 시뮬레이션해 보겠습니다. 따라서 머리를 +1로 하고 꼬리를 -1로 둡니다. i번째 동전 던지기의 결과는 x(i) = p(1/2)입니다. 여기서 p(1/2)는 1/2의 확률로 값 +1을 취하는 함수이며 -1도 동일한 확률 1/2을 갖게 됩니다.

그러면 랜덤 워크는 단순히 x(i)의 합이 됩니다. 간단하게 0부터 시작합니다.

동전의 과정입니다. 세로 축을 따라 - 코스의 값, 가로 축을 따라 - 동전 던지기 수.

그림 1. 랜덤 워크: (수직 축 - 라인의 현재 위치, 수평 축 - 시간 단계)

랜덤 워크는 잘 연구되었으며 몇 가지 놀라운 속성을 가지고 있습니다. 우리에게 유용한 것들을 요약해 보겠습니다.

  1. 아크사인 법칙. 더 오래 동전을 던지면 랜덤 워크 위치가 0을 통과하는 횟수가 줄어듭니다.
  2. 랜덤 워크의 약 90%는 0의 한 쪽에 위치합니다. 사실, 이 두 가지 정리는 실제 거래에서 쓸모가 없습니다. 그리고 기본적으로 실제 환율과 랜덤 워크 간의 차이를 강조하기 위해서만 필요합니다.
  3. 랜덤 워크 차트는 프랙탈입니다. 즉, 척도의 변화에 ​​따라 그 자체와 유사하게 유지됩니다. 프랙탈은 프랙탈의 이미지와 마찬가지로 아름다운 단어입니다. 랜덤 워크의 통계적 매개변수는 scale-invariant인 것이 유용합니다.
  4. 술 취한 선원 (The drunken sailor) 정리. 랜덤 워크(Random Walk)는 술 취한 선원의 흔적으로, 돈을 쓴 후 걸음 수(또는 동전 던지기)의 제곱근에 비례하는 평균 속도로 선술집을 떠나는 모습을 그립니다. 이는 사건의 무작위성 또는 비무작위성을 평가할 수 있게 해주기 때문에 매우 유용한 정리라고 볼 수 있습니다. 우리가 어떻게든 100번의 던지기 중 65번의 앞면을 기적적으로 얻는다면 우리는 그저 운이 좋은 것 뿐일까요, 아니면 그러한 기적의 유용성에 대한 대가로 상금의 일부를 공유라도 해야 하는 걸까요?

랜덤 워크는 거래에 사용할 수 있습니다. 음, 사실, 학생들은 이를 오래전에 알아차리 수업 후 휴식 시간에 "동전 뒤집기" 놀이를 해왔습니다. 랜덤워크는 놀이시장을 조직하는데 사용될 수 있다. 현재 시장의 모든 거래 규칙이 적용되지만 환율을 사용하는 대신 랜덤 워크 환율을 사용합니다. 늘 그렇듯이 스프레드, 수수료 및 세금을 가져가는 중개자가 있을 것입니다. 그러나 우리는 그들에게 지금은 아무 것도 가져 가지 말고 우리 게임을 망치지 않도록 친절하게 요청할 것입니다.

거래에 대한 몇 가지 논평:

  1. 랜덤 워크를 사용하면 다음 순간에 RW 위치가 어디로 이동할지 추측할 수 없습니다.
  2. 위치는 충분히 많은 시간 단계에 걸쳐 플러스 또는 마이너스와 같이 임의의 거리에서 0에서 멀어질 수 있습니다.
  3. 어떤 거래 시스템도 랜덤 워크 요율에서 평균적으로 이기거나 질 수 없습니다. 여기가 플레이 마켓이지만 거래 시스템의 균형이 마이너스가 될 수 있다는 점에 유의할 가치가 있습니다. 우리는 제한된 수의 시간 단계를 거래합니다. 마지막 던지기에서 모든 거래가 종료됩니다. "평균적으로" 키워드는 "가능한 모든 값 집합에 대해 평균을 낼 때"라는 문구로 대체할 수 있습니다.
    거래 시스템의 예치금이 제한되어 음수로 전환할 수 없는 경우 다음 진술이 사실이 됩니다. 랜덤 워크 데이터에서 활발하게 거래되는 모든 거래 시스템은 모두 사라질 때까지 계속 돈을 잃게 됩니다.
  4. 중개자가 각 거래에서 약간의 스프레드를 가져가도록 허용하면 자금은 거래 수에 비례하는 비율로 감소합니다. 중개자 와 거래할 때 최적의 전략은 전혀 플레이하지 않는 것입니다. 정말로 거래를 하고 싶다면 최선의 방법은 모든 것을 하나의 거래에 넣는 것입니다. 이 경우 당첨 확률은 최대이지만 여전히 0.5 미만입니다.
  5. 대부분의 지표와 Expert Advisors는 랜덤 워크 데이터에서 작동합니다. 그들 중 많은 사람들이 매수 또는 매도 신호를 줄 것입니다. 그러나 그들의 신호는 절대적으로 무의미합니다. 중개자가 있는 랜덤 워크 데이터를 사용하는 거래의 경우 올바른 Expert Advisor 는 "시장에 진입하지 마십시오"라는 한 가지 권장 사항만 제공해야 합니다.
  6. 랜덤 워크 데이터를 기반으로 하는 모든 거래 전략에 대한 Z 계정 값은 일반적으로 0 부근에서 분포합니다. 일부 RW 데이터에 대한 Z-계정의 특정 값은 거래 전략을 특징짓지 않습니다. 랜덤 워크 데이터를 사용할 때 모든 거래 전략이 동일하다는 의미에서 모든 고양이는 회색, 즉 다 비슷하다고 할 수 있겠습니다. 거래 전략은 미래의 변화를 추측하는 방식이 다르며, 랜덤워크의 위치는 예측이 불가능합니다.
  7. 랜덤 워크 데이터에서 추세, 주기, 반전 패턴, 채널 및 기타 기술적 분석 속성을 관찰할 수 있습니다. 이들은 모두 가상의 패턴이며 거래에 도움이 되지 않습니다. 한 방울의 정보도 찾을 수 없는 사막에서 오아시스를 보는 것이 트레이더의 심리입니다.
  8. 제한된 수의 동전을 가진 두 사람이 "앞으로 또는 뒤에서" 모두를 플레이할 경우, 다른 사람의 돈이 떨어지면 게임이 자동으로 종료되기 때문에 평균적으로 더 많은 동전을 가진 사람이 승자가 됩니다. 거래자와 시장이 "동전 뒤집기"를 하는 경우, 평균적으로 거래자의 승리 확률은 시장 규모에 대한 거래자의 자본 비율에 비례합니다. 간단히 말해서 거래자에게는 기회가 없습니다. 중재자가 없는 경우에도 마찬가지입니다.
  9. 랜덤워크 데이터로 챔피언십을 개최할 수 있습니다. 가상 보증금은 각 참가자에게 주어집니다. 후원자는 가상 화폐를 가장 많이 받는 사람에게 실제 화폐를 약속합니다. 이익에 대한 수학적 기대치가 상당히 긍정적이 됩니다. 문제는 챔피언십에 최적화된 마틴게일 전략의 구현에서 발생합니다. 가장 공격적인 플레이어는 게임이 끝나기 훨씬 전에 보증금을 모두 소진하는 반면, 신중한 플레이어는 충분한 자금을 모으지 못할 것입니다. 중간에 위치한 플레이어들 중 추첨을 통해 랜덤 워크가 진행됩니다. 흥미롭게도, 전략은 동전 던지기 횟수와 초기 입금뿐만 아니라 공격적인 참가자 및 기타 유형의 참가자 수도 최적화되어야 합니다. 그러나 이런 부분은 다른 글에서 다루도록 하겠습니다. 랜덤 워크의 장점은 시뮬레이션 중 수치적 문제와 같은 최적화 문제를 해석적으로 해결할 수 있다는 것입니다. 그리고 문제가 해결되고 이해되면 실생활에서 사용할 수 있습니다.

실제 통화 시세와 랜덤 워크 데이터의 차이점

1-8의 진술은 다소 비관적입니다. 그들은 랜덤 워크 시장의 모든 거래자에 대한 무조건적인 보증금 손실을 예측합니다. 그러나 통화쌍의 시세는 랜덤 워크 데이터와 다릅니다. 이러한 차이점은 수익성 있는(평균적으로!) 거래 전략을 구축하는 열쇠입니다. 실제 환율과 랜덤 워크 데이터의 주요 차이점을 나열해 보겠습니다.

  1. 실질환율은 근본적인 경제요인에 의해 제한을 받으며 일정한 기본수평채널 내에 위치합니다. 예를 들어 이 사실을 기반으로 우리는 큰 기간의 "변동성"에 기반한 거래 전략을 구성할 수 있습니다.
  2. 예를 들어 현재 뉴스를 기반으로 실제 환율의 변화를 예측할 수 있습니다.
  3. 실질환율의 매개변수와 랜덤워크의 매개변수의 통계적 분포에는 차이가 있습니다. 이 매우 일반적인 진술은 대다수의 거래 전략의 핵심입니다. 실질 환율이나 랜덤 워크는 일련의 숫자로 간주됩니다. 작업은 시리즈에서 통계적 규칙성을 찾고 이를 기반으로 추가 값을 예측하는 것입니다.   

랜덤 워크의 여러 변경 사항은 일련의 무작위로 +1 및 -1을 취한 것입니다. 그렇다면 이 시리즈에서 통계적 추세를 찾는 방법은 무엇입니까? 이 문제는 임의성에 대한 시퀀스를 확인하는 작업과 일치합니다. 많은 무작위 테스트가 개발되었습니다. 테스트가 시리즈에서 "임의성"을 나타내면 이를 기반으로 거래 전략을 구축할 수 있습니다.


추세의 개념

가장 쉬운 테스트는 다음과 같습니다. 시퀀스에서 +1과 -1의 숫자는 거의 같아야 합니다. 술취한 선원 정리에 따르면 +1의 수는 -1의 수와 일반적으로 시퀀스 데이터 수의 제곱근 이하로 다를 수 있습니다. 실제 비율의 경우 이 무작위성 테스트는 기본 채널에 의한 실제 비율의 제한으로 인해 간단히 수행됩니다. 여기서 우리는 거래 전략을 구성할 수 없습니다.

다른 테스트가 훨씬 더 흥미롭습니다. "+1,+1", "+1,-1", "-1,+1" 및 "-1,-1" 체인의 수를 계산해 보겠습니다. 무작위 순서에서 그들의 수는 거의 같아야 합니다(다시 말하지만, 술 취한 선원에 대한 정리와 유사함). "++" 체인("+1+1"의 변경된 이름)의 수가 갑자기 "+-"("+1,-1") 체인의 수를 크게 초과하면 전략을 구성합니다. 각 "+" 뒤에 , 우리는 "+"에 입찰합니다. 통계에 따르면 우리는 케이스의 절반 이상을 이겨야 합니다.

마지막 단락을 거래자의 언어로 번역해 보겠습니다. 가장 인기 있는 거래 전략은 추세 추종 전략입니다. 시간의 추세를 인식하고 시간에 따라 점프하는 것이 이러한 전략의 주요 목표입니다. 그러나 랜덤 워크(Random Walks)와 같은 잘못된 추세-신기루가 있습니다. 위에서 설명한 체인 수를 테스트하면 잘못된 추세와 실제 추세를 구별하는 데 도움이 됩니다. "++" 및 "--" 체인의 수가 "+-" 및 "-+"의 수보다 크면 RW에 추세가 있고 추세 추종 전략이 작동합니다. 그렇지 않다면 추세 추종 전략을 기반으로 신호에 따라 시장에 진입해서는 안됩니다. 

이항 체인(++,+-,-+,--)뿐만 아니라 3항 체인(+++, ++-, +-+, ...), 더 긴 체인도 고려할 수 있습니다. 추세(+++, ---, ++++) 및 반추세(-+-, +-+, +-+-) 체인의 수를 계산하거나 각 체인에 추세 계수를 할당하고 계산할 수 있습니다. 계수를 사용하여 합계합니다. 궁극적으로 이러한 활동을 통해 Z 점수를 계산할 수 있습니다. 그러나 여기서 Z 점수는 거래자들에게 익숙한 일련의 승-패 전략이 아니라 비율 변화의 관점에서 계산됩니다. 음수 Z 점수는 추세 계열이 있음을 나타내고 양수 Z 점수는 추세 없는 계열을 나타냅니다.

긴 체인을 고려하고 Z 점수를 계산하려면 충분히 긴 시리즈(30부터 시작)가 필요합니다. 우리의 목표는 추세 지표를 구성하는 것이며 긴 시리즈를 고려하면 지표가 지연됩니다. 이항 체인의 고려는 일련의 8개 요소로 시작할 수 있습니다. 따라서 지표를 구성하기 위해 이항 체인을 고려합시다. 랜덤 워크에 대한 진지한 연구(예: RW 시뮬레이터 구축)를 위해서는 Z 점수를 사용해야 합니다.


랜덤 워크의 추세를 보여주는 그림

랜덤 워크에서 추세 개념을 설명하겠습니다.

추세의 정의 중 하나는 다음과 같습니다. 추세 - 이전 변경 사항에 대한 기억 랜덤 워크는 이력을 기억하지 않습니다. 음, 메모리를 추가해 보겠습니다. i 번째 동전 던지기의 결과를 x(i) = p(1/2 + a*x(i-1))라고 합시다. 여기서 a-추세 (a-trending) 매개변수는 -1/2 그리고 +1/2 사이가 됩니다. 함수 P(...)는 1/2+a*x(i-1)의 확률로 +1을 생성하고 1/2-a* x(i-1)의 확률로 -1을 생성합니다.

а<0이면 랜덤 워크는 반추세입니다. а>0이면 추세입니다. а=0이면 랜덤 워크에는 추세가 없습니다.

동일한 난수 시퀀스에서 생성된 랜덤 워크가 그림에 나와 있습니다.

추세가 있는 동전 코스

그림 2. 생성된 랜덤 워크: 추세(빨간색, a = 0.2), 추세가 없는(파란색, a = 0) 및 반 추세(노란색, a =- 0.2) )

우리가 보는 바와 같이, 추세적인 랜덤 워크는 상대적으로 높은 변동성, 즉 기울어진 채널을 형성하는 경향이 특징입니다. 반추세 랜덤 워크는 상대적으로 변동성이 낮고 수평 채널에서 말리는 경향이 있습니다.

실제 시장에서, 특히 추세가 약한 경우 추세 및 반거래 RW를 구별하는 것은 그리 쉽지 않습니다. 추세의 지표는 절대적으로 중요합니다. 위에서 언급했듯이 추세 추종 전략을 사용하여 추세가 없고 추세가 없는 RW에서 거래하는 것은 보증금을 잃을 수 있는 확실한 방법입니다.

추세 RW일 때 추세 추종 전략을 사용하여 거래할 수 있습니다. 추세를 포착하고 추세 반전 지점을 조사하는 기술은 수학의 통계적 방법으로 대체될 수 있습니다. 그러나 문제는 여전히 열려 있습니다. 중개자 에게 지불하고 여전히 이익을 유지하기에 충분한 무작위가 아닌 이익이 있습니까? 대략적인 답을 얻으려면 이 글의 끝 부분에 제공되는 추세 지표로 전환해야합니다.

추세가 반대인 RW일 때 변동성을 거래할 수 있습니다. 반추세 RW는 기울어진 추세를 무너뜨리고 수평 채널로 이동하는 것을 목표로 합니다. 현재 추세에 관계없이 수평 채널의 모든 위치에서 이익 실현 및 채널 경계를 넘어 손절매를 설정할 수 있습니다. 채널의 어디에서 가격이 떠돌아도 결국 이익 실현과 맞닿게 됩니다.

추세가 없는 RW일 때 추세 추종 전략으로 거래할 수 없습니다. 우리는 자전거 타기와 같은 다른 아이디어를 사용해야 합니다.


랜덤 워크 시뮬레이터 제안

추세가 있는 랜덤 워크는 거래 전략을 테스트하는 데에도 유용합니다. 다음 기능을 기반으로 RW 시뮬레이터를 만들 수 있습니다.


어디에:

  • 앰프 - 진폭,
  • P(...) - 확률 함수,
  • 추세 - 추세, 이전 변경 사항의 기능,
  • 주기 - 주기, 시간의 함수,
  • 한도 - 랜덤 워크의 기능,
  • 기대 - 기대치, 미래 변화의 기능.

이러한 함수의 매개변수는 실제 비율의 통계 매개변수에 적합합니다.

랜덤 워크에 의한 실질 요금 시뮬레이션은 인간의 지각의 약점을 보여주는 것보다 훨씬 더 깊은 의미가 있습니다. 비율 데이터의 RW 시뮬레이션을 통해 전체 가능한 비율 세트(또는 적어도 전체 세트의 합리적인 샘플)에 대해 모든 Expert Advisor를 테스트할 수 있습니다. 그러면 주어진 Expert Advisor의 수단에 대한 확률 분포 함수를 구축할 수 있습니다. 이 분포 기능은 EA의 수익성, 공격성 및 기타 매개변수를 고유하게 특성화합니다.

세트의 완전성의 정의:

  1. 완전한 과거 환율 데이터 세트는 다음을 의미합니다. 실제 시장 호가의 경우 매우 유사한 RW 패턴이 있습니다. 세트의 비율 수가 증가함에 따라 유사성은 절대적이 됩니다(실제 비율과 가장 가까운 시뮬레이션 비율 사이의 비율(함수) 공간에서 거리(표준)은 0에 가까워짐).
  2. 더미 전략 - 거래가 임의로 이루어지지만 과거 및 현재 요율에 대한 지식이 없는 전략입니다. 이전 거래의 결과도 알려지지 않았습니다. 우리는 처음부터 동전 던지기 횟수나 시간만 알았습니다. 더미는 그러한 캐릭터에게 일반적으로 스프레드, 수수료 및 세금을 지불하지 않습니다. 더미는 부정적인 의미를 가질 수도 있습니다.
    비율 집합은 수학적으로 완전합니다. - 집합에서 더미 전략의 확률 분포 함수가 정규 분포에 접근하는 경우.
  3. 세트는 완전합니다 - 수학적으로나 역사적으로 완전한 경우.

과거 데이터에 대한 테스트는 확실히 없는 것보다 낫습니다. 그러나 과거 데이터가 부족하고 구식입니다. 또한 과거 데이터가 최적화의 형태로 EA 설계에 포함될 수 있습니다. 그렇다면 어떻게 테스트할 수 있습니까? 따라서 과거 데이터에서 EA의 주식 곡선은 역사적으로 발생한 비율의 구현에 대한 주식의 확률 분포 함수의 한 부분일 뿐입니다. 그리고 그것은 Expert Advisor의 충분히 완전한 특성이 될 수 없습니다.

물론 실제 비율의 모든 미묘함과 뉘앙스를 시뮬레이션된 비율에 통합할 수는 없습니다. 실질 요금의 시뮬레이션은 별도의 글과 연구에 대한 끝없는 주제입니다. 그러나 먼저 추세 추종 시스템을 테스트하기 위해 추세가 있는 랜덤 워크를 기반으로 하는 매우 간단한 시뮬레이터를 사용할 수 있습니다.

분포 함수를 결정할 수 있는 기능이 있는 간단한 시뮬레이터는 전략 테스터 (Strategy Tester)에 연결하기만 하면 됩니다. 시뮬레이터 요금이 필요한 또 다른 장소는 EA의 매장입니다. 그렇지 않으면 우리가 구매하는 것이 무엇인지 확인하기 어려울 것입니다. 근본적으로 다른 여러 시뮬레이터와 과거 데이터에서 테스트한 후에만 거래 EA를 구입했을 것입니다. 판매되는 각 EA에 대해 가격 옆에 펀드의 확률 분포 함수와 이를 얻은 시뮬레이터가 첨부되어야 합니다.

Expert Advisor의 확률 분포 함수 - EA의 기술 여권 및 생산자의 보증입니다. 러시아 연방의 소비자 권리 보호법은 다른 제품과 마찬가지로 EA에도 적용됩니다. 그러나 여기서는 먼저 시뮬레이터에 대한 인증 시스템을 구축해야 합니다.


추세 지표

비율의 추세라는 아이디어를 사용하여 가장 간단한 추세 지표를 구성할 수 있습니다. 랜덤 워크와 달리 실제 요금은 바로 표시됩니다. 실제 요금을 랜덤 워크 요금으로 교체해 보겠습니다. 각 바는 단일 평균 값(높음 + 낮음)/2로 대체됩니다(문서 끝부분의 질문 참조). 변화의 진폭은 버리고 기호만 남겨둡시다. ++-+---+-+-- 와 같은 일련의 플러스와 마이너스를 얻습니다.... 마지막 N개의 바에 대해 "++" 및 "--" 추세 체인 및 "+-" 및 "-+" 반추세 체인의 수를 계산합니다. 지표로 "++" + "--" - "-+" - "+-" 값을 사용합니다.

편의를 위해 추세의 강도를 평가할 지표에 선을 그리는데, 이는 + 또는 - N의 제곱근입니다.

MQL5의 표시기 코드는 이 글(TrendingHL.mq5)의 끝부분에 나와 있습니다.

EURUSD의 추세 지표

그림 3. 추세 표시기, EURUSD, 월간 기간. 비율은 거의 항상 추세(0 이상)이고 절반의 시간은 강한 추세(상단 녹색 선 이상)입니다. 추세를 평가하는 바의 수 N=30

EURUSD 환율에 대한 추세 표시기를 사용한 후 다음 사항을 확인합니다.

  1. 대부분의 경우 지표는 0보다 큽니다. 즉, 금리가 추세입니다. 금리의 약한 경향은 이미 논의되었습니다. 그러나 그림이 천 마디 말보다 가치가 있죠.

  2. 실질 금리가 항상 추세는 아닙니다.

  3. 추세 표시기는 다른 모든 표시기와 마찬가지로 지연됩니다.

  4. 추세 지표를 통해 이 차트의 추세 거래 전략으로 얻을 수 있는 비임의 이익의 크기를 추정할 수 있습니다. 그림에서 지표의 평균값은 약 7입니다. 한 바에 대한 비율의 평균 변화는 0.01 미국입니다. (약). 0.01*7=0.07. 따라서 1달러를 투자하면 매달 약 7센트의 이익을 얻을 수 있습니다. 이것은 대략적인 평가이지만 우리에게 상당한 수준을 제공합니다. 우리는 중개자, 마진 거래, 시장 진입 및 출구 지점을 깜빡했습니다.

    좋은 소식은 랜덤 워크 요금과 달리 실제 요금이 추세이며 이는 우리가 돈을 벌 수 있다는 것입니다.
    냉정한 사실은 자본의 이자가 매우 낮고 다른 투자 수단과 비교될 수 있다는 것입니다.

  5. 수년간 평균적으로 추세가 긍정적이라는 사실은 지표에 예측력을 제공합니다. 요금의 추세적 성격이 계속되기를 바랄 수도 있겠죠.

  6. 추세는 큰 시간 프레임에서 가장 잘 볼 수 있습니다.

  7. 반추세는 드물게 나타납니다.

  8. 실질환율이 프랙탈이라는 사실에도 불구하고 척도(기간)의 변화에 ​​따른 추세 불변의 개념은 확실하게 말할 수 없습니다.
    올바른 가설은 아마도 다음과 같을 것입니다. 상대 이익은 규모의 변화에 ​​따라 변하지 않습니다.


    어디에:

    • 추세 - 트렌드 (trend),
    • AverChangePerBar - 바에 대한 비율의 평균 절대 변화,
    • TimeInBar - 시간 바의 지속 시간(시간 프레임).


    한편, 이익은 다양한 기간뿐만 아니라 다양한 실질 금리 및 다양한 투자 상품에 대한 다양한 거래 아이디어(주기적, 변동성)에서도 보존됩니다. 수익성은 투기꾼과 투자자의 무리에 의해 위에서부터 제한됩니다. 아래에서 보면, 모든 수단의 총 이윤은 자본의 총량의 증가 또는 일반화하면 인류의 발전에 의해 제한됩니다.

    마지막 단락을 기반으로 비율의 추세 이익의 지표를 구성할 수 있으며 다른 아이디어와 지표의 참여로 총 이익을 구성할 수 있습니다. 다른 상품에 대한 유사한 지표를 구축함으로써 시장 전반에 걸친 자본의 움직임을 조사하게 될 것이며, 그러면 아마도 더 정확하게 비율을 예측할 수 있을 것입니다.

마지막 단락을 더 자세히 설명하겠습니다. 요금 예측에는 두 가지 종류가 있습니다.

  1. 우리는 랜덤 워크 요금을 사용하여 수익을 내는 것이 불가능하다는 것을 알고 있습니다. 우리는 실질 요율을 조사하고 실질 요율에 추세가 있음을 확인했으며, 이는 현재 오랫동안 존재합니다. 글쎄요, 추세는 몇 년 동안 존재했기 때문에 내일도 있을 것이라고 가정할 수 있습니다. 그리고 그건 다 예측입니다. 비무작위의 한 유형 - 추세. 비율의 비임의성은 자본의 총액의 증가에 의해 생성됩니다. 자본의 축적은 연간 몇 퍼센트에 달합니다. 음, 자본의 이 비율은 기본적으로 이 비-임의성에 대한 우리의 도박에서 얻게 될 것입니다.
  2. 우리는 환율의 역사뿐만 아니라 주변 시장의 움직임도 알고 있습니다. 모든 시장에서 자본의 합은 거의 일정한 가치입니다. 우리는 시장 간의 자본 움직임을 연구하고 추세를 찾고 이를 사용하여 환율을 예측합니다. 여기서의 이익은 시장 간의 비무작위 자본 흐름에 비례합니다. 그러나 MetaTrader 5에서 이러한 예측을 구현하는 것은 현재로서는 통화 시장의 한계 내에서만 가능합니다. 

지표로 계산한 추세 수익성의 7%("비무작위 추세" 참조)는 위에서 고려한 두 가지 비무작위와 내가 하지 않는 기타 비무작위의 합입니다 (저는 이에 대해 알고 있지도 못합니다).

여기서 시장은 유입과 유출이 있는 비폐쇄(개방) 시스템으로 간주됩니다. 증가 = 유입 - 유출. 유입이 유출보다 크면 시장(시장 환율)이 추세입니다. 유입이 유출과 같으면 시장은 추세가 없습니다. 유입이 유출보다 적으면 시장은 반추세입니다.

이 글에는 심각한 모순이 하나 포함되어 있습니다. 한편으로 우리는 추세 지표를 사용하여 실질 환율이 추세적이라는 것을 설정했습니다. 그러나 다른 한편으로 우리는 실질금리가 수평적 펀더멘털 채널의 한계 내에서 변동한다고 주장합니다. 그리고 수평 채널은 반추세의 매우 강력한 표시입니다.

결국, 실질 금리는 추세인가 아니면 반추세인가? 조화의 감각은 비율이 추세이고 근본적인 수평 채널이 존재하지 않는다는 것을 제게 암시합니다. 이는 역사적 최대값과 최소값이 지속적으로 업데이트됨을 의미합니다. 그리고 그에 상응하는 위기는 다음 위기가 시스템을 파괴할 때까지 점점 더 강해질 것입니다. 일반적으로 이것은 이해할 수 있는 추세이며 시스템에서 일부 매개변수(자본)가 누적되고 증가한다는 신호입니다. 시스템을 계속 로드하면 결국 고장날 것입니다. 누적된 매개변수의 재설정이 발생하고 새로운 개발 주기가 시작됩니다.


결론

다음은 FOREX 시장에 대해 작성된 또 다른 글입니다. 이러한 글은 인터넷에서 수백 개에 달하며 평균 가격은 개당 1달러입니다. 그리고 무료 글의 수는 셀 수도 없습니다. 이 특정 글의 새로운 점은 무엇입니까?

  1. 트레이더의 편의를 위해 랜덤 워크의 속성을 제시하고 표시기를 생성하여 랜덤 워크 데이터에서 추세가 있는 실제 환율을 구별할 수 있습니다.
  2. 지표를 사용하여 추세 추종 전략으로 얻을 수 있는 이익을 평가할 수 있습니다.
  3. 우리는 MetaTrader 5 거래 플랫폼에 환율 시뮬레이터를 추가할 것을 제안했습니다. 우리는 이 시뮬레이터의 아이디어를 제안했습니다.  


질문

질문: 지표(높음 + 낮음)/2에 대해 평균을 취하는 이유는 무엇입니까? 이 가격으로 거래할 수 없다는 점을 고려하면. 그리고 평균을 취하는 것은 위험합니다. 평균(부드러운) 랜덤 워크 비율이 추세를 보일 것입니다. 또한 평균화(평활화)가 많을수록 추세가 커집니다.

답변: 확인해보겠습니다. 이를 확인하기 위해 평균 없이 가격을 취할 수 있습니다. 예를 들어 단순히 시가 또는 종가와 같이 추세는 계속 유지되지만 잘 볼 수는 없습니다.


추세 지표(EURUSD, 월간 기간)의 평균화 효과를 고려해 보겠습니다. 하위 지표는 평균(High + Low)/2(trendinghl.mq5)로 계산됩니다. 중간 지표는 Open(trendingopen.mq5)의 가격으로 계산됩니다. 상위 지표는 종가(Trendingclose.mq5)의 가격으로 계산됩니다. 모든 지표가 긍정적이고 비율에 추세가 있음이 분명합니다. 그러나 Open 및 Close에 대한 표시기의 평균 값은 (High + Low)/2의 경우와 마찬가지로 7이 아니며 대략 2입니다. 이 글에서 추정한 정밀도의 경우 그 차이는 중요하지 않습니다. 평균화가 인위적으로 비율의 추세를 증가시켰다는 것을 인정해야 합니다.

추세, 지속성, 허스트 지수, ...라는 키워드를 사용하여 검색에서 비율 추세에 대한 더 강력하고 정확하며 권위 있고 도전적인 증거(측정값)를 쉽게 찾을 수 있습니다.

'결국 이 가격에 거래가 안 된다'는 부분은 비현실적인 노하우이지만요. 상대방은 신호를 눈으로 보고 의도적으로 손으로 거래할 수 있지만 표시기를 기대하고 무의식적으로 찾습니다. 고로 저는 당신을 실망시킬 수 밖에 없게 됩니다. 컴퓨터는 수동 거래를 죽입니다.

글에서 평가한 바와 같이 비율에 대한 비임의성은 연간 자본의 10% 동안 지속됩니다(순서대로). 이러한 요금의 값은 눈으로 볼 수 없고 손으로 잡을 수 없습니다. 자동화된 Expert Advisor이 필요합니다. EA는 1년 안에 자본의 몇 퍼센트, 가까운 장래에 100분의 1퍼센트를 차지하기 위해 싸울 것입니다. 이것이 우리가 이익의 비율을 추적하고 최적화하기 위해 시뮬레이터가 필요한 이유입니다. 

실제 비율로 테스트할 때 연간 이익의 일부 또는 전체 비율을 감지하는 것은 불가능합니다.

이것이 시뮬레이터의 수학 엔진에 대한 요구 사항이 매우 높은 이유입니다.

//+------------------------------------------------------------------+
//|                                                     Trending.mq5 |
//|                                      Copyright 2010, Grebenev V. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, Grebenev V."
#property description "Trending Indicator"
#property version   "1.00"
#property indicator_separate_window
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
#property indicator_type1   DRAW_LINE
#property indicator_type2   DRAW_SECTION
#property indicator_type3   DRAW_SECTION
#property indicator_color1  LightSeaGreen
#property indicator_color2  DarkGreen
#property indicator_color3  DarkGreen
#property indicator_label1  "Trending"

//--- input parameters N – number of bars, by which the trend is calculated
input int      N=30;

double ExtTRbuffer[];   // array for the indicator
double ExtTRbufferP[];  // array for the upper estimation of the trend
double ExtTRbufferM[];  // array for the lower estimation of the trend
double average[150000];  // array for the average values of the rates

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator digits
//   IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- indicator short name
   IndicatorSetString(INDICATOR_SHORTNAME,"Trending");
//---- index buffer
   SetIndexBuffer(0,ExtTRbuffer);
   SetIndexBuffer(1,ExtTRbufferP);
   SetIndexBuffer(2,ExtTRbufferM);
//--- set index draw begin
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,1);
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,1);
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,1);
//---- Array Initialization
   ArrayInitialize(ExtTRbuffer,0);
   ArrayInitialize(ExtTRbufferP,0);
   ArrayInitialize(ExtTRbufferM,0);
   ArrayInitialize(average,0);
   return(0);
  }


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   double pp=0,pm=0,mp=0,mm=0; // pp - number of «++» chains, pm  - number of «+-», mp – «-+», mm – «- -»

   / Fill the array of the average values of the rate with average values (high+low) /2
   for(int i=prev_calculated;i<rates_total;i++) average[i]=(high[i]+low[i])/2;

   for(int i=prev_calculated;i<rates_total;i++)
     {
      pp=0; pm=0; mp=0; mm=0;

      for(int j=0;j<N;j++)
        {
         if(i-j-2>=0) // check that the index of the array did not exceed the border 0
           {
            if((average[i-j-1]-average[i-j-2])>0 && (average[i-j]-average[i-j-1])>0) pp++;
            if((average[i-j-1]-average[i-j-2])>0 && (average[i-j]-average[i-j-1])<0) pm++;
            if((average[i-j-1]-average[i-j-2])<0 && (average[i-j]-average[i-j-1])>0) mp++;
            if((average[i-j-1]-average[i-j-2])<0 && (average[i-j]-average[i-j-1])<0) mm++;
            // chain containing "0" omitted
           }
        }
      // fill indicator arrays
      ExtTRbuffer[i]=pp+mm-pm-mp;
      ExtTRbufferP[i]=sqrt(N);
      ExtTRbufferM[i]=-sqrt(N);
     }
   return(rates_total);
  }

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

파일 첨부됨 |
trendingclose.mq5 (3.69 KB)
trendinghl.mq5 (3.67 KB)
trendingopen.mq5 (3.69 KB)
관리되지 않는 내보내기를 사용하여 MQL5에 C# 코드 노출 관리되지 않는 내보내기를 사용하여 MQL5에 C# 코드 노출
이 글에서는 MQL5 코드와 관리되는 C# 코드 간의 다양한 상호 작용 방법을 제시했습니다. 또한 C#에 대해 MQL5 구조를 마샬링하는 방법과 MQL5 스크립트에서 내보낸 DLL 함수를 호출하는 방법에 대한 몇 가지 예를 제공했습니다. 제공된 예제가 관리 코드에서 DLL을 작성하는 향후 연구의 기초가 될 수 있다고 생각합니다. 이 글은 또한 MetaTrader가 C#에서 이미 구현된 많은 라이브러리를 사용할 수 있는 기회를 제공합니다.
지그재그 및 ATR의 예에 의한 지표의 클래스 구현 지그재그 및 ATR의 예에 의한 지표의 클래스 구현
지표를 계산하는 최적의 방법에 대한 논쟁은 끝이 없습니다. 지표 자체에서 지표 값을 계산하거나 이를 사용하는 Expert Advisor에 전체 논리를 포함시켜야 하는 곳은 어디입니까? 이 글에서는 계산을 최적화하고 prev_calculated 값을 모델링하여 Expert Advisor 또는 스크립트의 코드에서 사용자 지정 지표 iCustom의 소스 코드를 바로 이동하는 변형 중 하나를 설명합니다.
시장 가격 예측을 위한 범용 회귀 모델 시장 가격 예측을 위한 범용 회귀 모델
시장 가격은 다양한 경제적, 정치적, 심리적 요인에 따라 달라지는 수요와 공급 간의 안정적인 균형에서 형성됩니다. 이러한 요인들의 영향 요인과 성격의 차이로 인해 모든 구성 요소를 직접적으로 고려하기가 어렵습니다. 이 글은 정교한 회귀 모델을 기반으로 시장 가격을 예측하려는 시도를 설명합니다.
HTML의 차트 및 다이어그램 HTML의 차트 및 다이어그램
오늘날에는 웹 브라우저가 설치되어 있지 않은 컴퓨터를 찾기가 어렵습니다. 오랫동안 브라우저는 진화하고 개선되어 왔습니다. 이 문서에서는 브라우저에 표시하기 위해 MetaTrader 5 클라이언트 터미널에서 얻은 정보를 기반으로 차트와 다이어그램을 만드는 간단하고 안전한 방법에 대해 설명합니다.