English Русский 中文 Español Deutsch 日本語 Português Français Italiano Türkçe
preview
조합과 트레이딩을 위한 확률(5부): 곡선 분석

조합과 트레이딩을 위한 확률(5부): 곡선 분석

MetaTrader 5트레이딩 | 13 5월 2024, 16:56
119 0
Evgeniy Ilin
Evgeniy Ilin

콘텐츠

소개

저는 여러 상태 및 확장 가능한 거래 시스템을 구축하기 위한 기반을 계속 준비하고 있습니다. 이 글에서 저는 이전 글에서 설명한 내용을 바탕으로 트레이딩 프로세스를 설명할 수 있는 더 넓은 가능성에 더욱 가까이 다가갈 수 있는 방법을 보여드리고자 합니다. 이는 다른 분석 방식에서는 다루지 않는 측면의 전략을 평가하는 데 도움이 됩니다. 이 글에서 저는 복잡한 다중 상태 샘플을 간단한 이중 상태 샘플로 변환할 수 있는 가능성을 살펴보았습니다. 분석은 리서치 스타일로 수행되었습니다.


데이터를 간단하게 하는 유용한 양식

겹치지 않고 차례로 진행되는 거래가 많은 전략, 즉 이전 주문이 마감된 후에 새 주문이 개시되는 전략이 있다고 가정해 보겠습니다. 만약 우리가 승패의 확률을 평가하고 손익을 달성하는 데 필요한 평균 시간을 측정해야 하는 경우 우리는 주문이 매우 다양한 상태(다른 결과로 청산됨)를 가질 수 있음을 알 수 있습니다.

이러한 전략에 프랙탈 공식을 적용하기 위해서는 우리는 먼저 이러한 전략을 프랙탈의 틀 안에서 생각해 볼 수 있는 경우로 변환해야 합니다. 이를 구현하려면 우리는 프랙탈에서와 같이 스톱 레벨이 등거리인 주문으로 전략을 표현해야 하며 이는 스텝 업과 스텝 다운의 확률을 갖습니다. 그런 다음 프랙탈 공식을 적용할 수 있습니다. 또한 스텝 업과 스텝 다운은 수명이 다를 수 있습니다.

이전 글에서 살펴본 프랙탈 공식의 틀에서 설명할 수 있는 유형 중 하나로 전략을 축소하려면 우리는 먼저 프랙탈 공식을 적용하기 위해 어떤 값을 알아야 하는지를 결정해야 합니다. 여기서는 모든 것이 매우 간단합니다:

  • P[1] - 스텝업 확률
  • T[1] - 평균 업스텝 형성 시간
  • T[2] - 평균 다운 스텝 형성 시간

먼저 우리는 스텝 수가 무한대가 되는 경향을 보이는 경우의 한계값을 고려해야 합니다:

  1. (P[1] * T[1] + (1 -P[1])*T[2]) * n = T(n)
  2. (P[1] * Pr - (1 -P[1])*Pr) * n = P(n)

위의 표현식을 더 잘 이해하려면 우리는 두 가지의 제한을 작성해야 합니다:

  • Lim(n --> + infinity)[P/P0(n)] = 1
  • Lim(n --> + infinity)[T/T0(n)] = 1

한계가 말해주는 것은 만약 우리가 "n" 혹은 거래의 양으로 동일한 실험을 수행하면 우리는 모든 기본 실험이 주요 일반 실험에 포함된 서로 다른 총 시간을 얻게 됩니다. 또한 최종 거래 잔액의 포지션이 항상 달라집니다. 반면에 실험 횟수가 무한대로 늘어나면 실제 값은 한계에 도달하는 경향이 있다는 것은 직관적으로 분명합니다.  우리는 난수 생성기를 사용하여 이 사실을 증명할 수 있습니다.

  • n - 에뮬레이트된 스텝 수
  • 1-P[1] - 스텝다운 확률
  • T0(n) - "n" 스텝에 소요된 실제 시간
  • P0(n) - "n" 스텝에 대한 잔액 또는 가격의 실제 이동
  • T(n) - "n" 스텝에 소요되는 제한 시간
  • P(n) - "n" 스텝에 대한 한계 시프트

이 논리는 두 개의 방정식으로 이어지지만 알려지지 않은 요소가 너무 많습니다. 이것은 시작에 불과하므로 놀라운 일이 아닙니다. 그러나 이 방정식은 파생된 시스템(우리가 만들 시스템)만을 설명합니다. 소스 시스템의 방정식의 경우도 비슷합니다:

  1. (p*[1] * t[1] + p*[2])*t*[2] + ... + p*[n])*t*[n] ) * m = T(m)
  2. (P*[1] * Pr*[1] + P*[2]*Pr*[2] + ... + P*[N1]*Pr*[N1]) * m - (P*[N2] * Pr*[N1] + P*[N1+1]*Pr*[N1+1] + ... + P*[N2]*Pr*[N2]) * m = P(m)

  • P*[1] + P[*2] + ... + P*[N2] = 1 - 확률은 완전한 그룹을 형성합니다.

한도도 동일하며 동일한 값을 표시합니다:

  • Lim(m --> + infinity)[P/P0(m)] = 1
  • Lim(m --> + infinity)[T/T0(m)] = 1

여기서 사용되는 변수는 아래에 설명되어 있습니다:

  • m - 에뮬레이트된 스텝 수
  • T0(m) - "m" 스텝에 소요된 실제 시간
  • P0(m) - "m" 스텝에 대한 잔액 또는 가격의 실제 이동
  • T(m) - "m" 스텝에 소요된 실제 시간
  • P(m) - "m" 스텝에 대한 실제 시프트
  • T = Lim(m --> + infinity) [ T(m) ] - 제한 시간
  • N1 - 수익이 양수인 거래 결과의 수와 그 카운터
  • N2 - N1 + 1 - 마이너스 수익이 발생한 거래 결과 수(N2는 카운터)

소스 시스템을 기반으로 우리는 더 복잡한 시스템으로 구성된 더 간단한 시스템을 새로 만들어야 합니다. 유일한 차이점은 우리가 원래 시스템의 모든 매개변수를 알고 있다는 점입니다. 알려진 값은 별표 * 후미 기호와 함께 표시됩니다.

두 시스템에서 두 번째 방정식과 첫 번째 방정식을 동일시하면 변수 P와 T를 제거할 수 있습니다:

  • (P[1] * T[1] + (1 -P[1])*T[2]) * n = (P*[1] * T[1] + P*[2])*T*[2] + ... + P*[N])*T*[N] ) * m
  • (P[1] * Pr - (1 -P[1])*Pr) * n = (P*[1] * Pr*[1] + P*[2]*Pr*[2] + ... + P*[N1]*Pr*[N1]) * m - (P*[N2] * Pr*[N1] + P*[N1+1]*Pr*[N1+1] + ... + P*[N2]*Pr*[N2]) * m

그 결과 우리는 두 개의 방정식을 잃었지만 동시에 불필요한 두 개의 미지수를 제거했습니다. 이러한 변환의 결과로 다음과 같이 수량을 알 수 없는 하나의 방정식을 얻게 됩니다:

  • P[1] - 스텝업(스탑) 확률
  • T[1] - 스텝업의 평균 수명
  • T[2] - 스텝다운의 평균 수명

이 두 방정식의 구조는 비슷합니다:

  1. A1*n = A2*m
  2. B1*n = B2*m

이 구조는 변수 중 하나인 'n' 또는 'm'을 제외하여 방정식 중 하나를 제거할 수 있음을 나타냅니다. 이를 위해서는 예를 들어 첫 번째 방정식의 값 중 하나를 표현해야 합니다:

  • m = ( (P[1] * T[1] + (1 -P[1])*T[2]) / (P*[1] * T[1] + P*[2])*T*[2] + ... + P*[N])*T*[N] ) )* n

그런 다음 이제 식을 두 번째 방정식으로 대입하여 결과를 확인해 보겠습니다:

  • (P[1] * Pr - (1 -P[1])*Pr) * n = (P*[1] * Pr*[1] + P*[2]*Pr*[2] + ... + P*[N1]*Pr*[N1]) * ( (P[1] * T[1] + (1 -P[1])*T[2]) / (P*[1] * T[1] + P*[2])*T*[2] + ... + P*[N])*T[N] ) ) ) * n - (P*[N2] * Pr*[N1] + P*[N1+1]*Pr*[N1+1] + ... + P*[N2]*Pr*[N2]) * ( (P[1] * T[1] + (1 -P[1])*T[2]) / (P*[1] * T[1] + P*[2])*T*[2] + ... + P*[N])*T*[N] ) ) * n

이제 방정식의 두 부분 모두에 "n"을 곱합니다. 따라서 이를 'n'으로 나누면 우리는 필요한 값에 따른 방정식을 얻을 수 있습니다:

  • (P[1] * Pr - (1 -P[1])*Pr) = (P*[1] * Pr*[1] + P*[2]*Pr*[2] + ... + P*[N1]*Pr*[N1]) * ( (P[1] * T[1] + (1 -P[1])*T[2]) / (P*[1] * T[1] + P*[2])*T*[2] + ... + P*[N])*T[N] ) ) ) - (P*[N2] * Pr*[N1] + P*[N1+1]*Pr*[N1+1] + ... + P*[N2]*Pr*[N2]) * ( (P[1] * T[1] + (1 -P[1])*T[2]) / (P*[1] * T[1] + P*[2])*T*[2] + .... + P*[N])*T*[N] ) )

값 "Pr"은 모두 축소할 수 있는 시스템의 수가 무한대이므로 자유로운 것으로 간주합니다. 스텝 업과 스텝 다운의 절대값이 같다면 우리는 어떤 스텝 사이즈를 어떤 크기로도 설정할 수 있습니다. 다른 값들은 방정식 시스템을 풀어서 결정됩니다. 지금까지 시스템에는 하나의 방정식만 있습니다. 이전 우리는 섹션에서 얻은 방정식을 사용하여 얻을 수 있는 두 개의 방정식이 더 필요합니다.

우선 시스템은 복도 상부 경계와 하부 경계가 교차할 확률이 동일해야 합니다. 또한 경계 중 하나를 통과하는 데 걸리는 평균 시간이 동일해야 합니다. 이 두 가지 요구 사항은 우리에게 두 가지 누락된 방정식을 알려줍니다. 그럼 복도 경계의 횡단까지 평균 시간을 결정하는 것부터 시작하겠습니다. 경계 중 하나를 넘을 때까지의 평균 시간은 우 아래 평균 스텝 수에 따라 결정됩니다. 이전 글의 결과를 고려하여 우리는 다음과 같이 작성할 수 있습니다:

  • T[U,D] = (S[U,u] * T[1] + S[U,d] * T[2]) * P[U] + (S[D,u] * T[1] + S[D,d] * T[2]) * ( 1 - P[U] )

이 방정식은 경계 중 하나를 통과하는 평균 시간은 경계 중 하나를 통과할 때의 평균 스텝 수와 통과 확률에 따라 달라진다는 것을 나타냅니다. 이 기준은 복잡한 거래 시스템을 더 간단한 거래 시스템으로 변환할 수 있는 방정식 시스템을 만들 수 있는 또 다른 가능한 방정식을 제공합니다. 이 방정식은 두 개의 다른 방정식으로 나뉠 수 있습니다:

  • T[U] = S[U,u] * T[1] + S[U,d] * T[2]
  • T[D] = S[D,u] * T[1] + S[D,d] * T[2]

우리는 이 방정식이 나중에 필요합니다. 이 모든 값은 이전 기사에서 얻은 수학적 모델을 기반으로 계산됩니다:

  • S[U,u], S[U,d], S[D,u], S[D,d], P[U] = f(n,m,p) - 이 모든 값은 "n,m,p"의 함수입니다.
  • n = B[U]/ Pr - 차례로, "n"은 상단 경계까지의 거리와 단계 "Pr"로 표현될 수 있습니다.
  • m = B[D]/ Pr - 차례로, "m"은 상단 경계까지의 거리와 단계 "Pr"로 표현될 수 있습니다.
  • Pr - 선택한 스텝
  • B[U] - 상단 경계까지의 거리
  • B[D] - 하단 경계까지의 거리

결과 변환 메서드의 기본

예를 들어 우리는 임의의 전략을 가져와서 우리에게 필요한 전략으로 변환할 수 있습니다. 저는 복잡한 다차원 시스템을 보다 단순한 2차원 시스템으로 변환하는 변형 중 하나를 만들었습니다. 이제 이 프로세스에 대한 단계별 설명을 제공하려고 합니다. 설명을 진행하기 전에 저는 아이디어를 구현하고 메서드 성능을 테스트했습니다. 이 프로그램은 문서에 첨부되어 있습니다. 저의 프로그램에서는 약간은 다르지만 똑같이 효과적인 공식을 사용했습니다. 이 공식은 이전 기사에서 얻은 수학적 모델을 기반으로 합니다. 이를 사용하여 우리는 다음과 같은 값을 얻을 수 있습니다:

  • P[U], S[U,u], S[U,d], S[D,u], S[D,d]

우리는 평균 스텝 수에서 위쪽 또는 아래쪽 경계를 넘기까지의 평균 시간을 구할 수 있습니다. 현재로서는 그 목적이 명확하지 않을 수 있습니다. 추가적인 설명을 통해 이 부분은 더 명확해져야 합니다. 다중 상태 전략을 더 간단한 전략으로 변환하려면 우리는 먼저 관련 전략을 생성해야 합니다. 저는 난수 기반의 전략 생성기를 만들었습니다. 편의상 무작위로 생성된 5가지 전략을 사용했습니다. 그 내용은 다음과 같습니다:

5가지 무작위 전략

이러한 전략은 서로 다른 기대 수익 지표, 거래 수 및 매개 변수를 가지고 있습니다. 일부 곡선은 손실을 보고 있지만 매개변수가 좋지 않아서 일수도 있는 것이고 곡선이기 때문에 변화가 있을 수도 있는 것입니다.

이제 본론으로 들어가겠습니다. 그림은 전략 테스터 그래프와 유사하게 거래 수에 따른 잔고 그래프를 보여줍니다. 이에 따르면 각 곡선에는 특정 잔고의 배열이 있습니다:

  • B[i] , i = 0...N
  • N - 거래 횟수

이 배열은 주문 매개변수를 사용하여 배열에서 얻을 수 있습니다. 주문 데이터가 있는 컨테이너에는 주문 수익 또는 손실 값과 그 수명만 포함되어 있다고 가정합니다:

  • Pr[i], T[i]

다른 매개 변수를 사용할 수 없다고 가정해 보겠습니다. 저는 이것이 맞다고 생각합니다. 왜냐하면 백테스트나 신호를 분석하고 싶을 때 일반적으로는 아무도 이 데이터를 저장하지 않고 그래서 이 데이터를 사용할 수 없는 경우가 많기 때문입니다. 사용자는 복구 계수, 최대 인출액 및 이와 유사한 지표를 확인하는 경우가 더 많습니다. 항상 저장되는 유일한 거래 데이터는 다음과 같습니다:

  1. 수익
  2. 주문 진입 시간
  3. 주문 청산 시간

물론 일부 데이터를 사용할 수 없다는 점이 정확도에 영향을 미칠 수 있지만 이와는 아무런 관련이 없습니다. 이제 수익이 있는 배열에서 잔액이 있는 배열을 가져오는 방법을 살펴보겠습니다:

  • B[i] = B[i-1] + Pr[i] 만약 i > 0
  • B[i] = 0 else

얻은 전략을 시간에 따라 분석할 수 있도록 하려면 비슷한 시간 배열을 만들어야 합니다:

  • TL[i] = TL[i-1] + T[i] 만약 i > 0
  • TL[i] = 0 그렇지 않을 경우

이러한 모든 곡선의 횡좌표와 좌표를 결정한 후 곡선을 그릴 수 있습니다. 여러분은 이 함수들이 거래 번호가 아닌 시간에 의존하는 함수이기 때문에 차이점을 확인할 수 있을 것입니다:

시간 인수로 축소된 5가지 전략

환원성 기준 정의

우리는 확보한 데이터로 추가 작업을 진행할 수 있습니다. 이제 우리는 곡선들이 두 수익 상태와 일치하는지 확인할 기준을 결정할 수 있습니다. 시간 대비 표현의 관점에서 보면 세 가지로 충분합니다:

  1. P[U] - 상한 경계를 넘을 확률
  2. T[U] - 상한 경계에 도달할 때까지의 평균 시간
  3. T[D] - 하한 경계에 도달하게 될 때까지의 평균 시간

두 번째 및 세 번째 값은 다음과 같이 계산할 수 있습니다:

  • T[U] = S[U,u] * T[u] + S[U,d] * T[d]
  • T[D] = S[D,u] * T[u] + S[D,d] * T[d]

P[U]의 경우 이 값은 이전 글에서 얻은 수학적 모델에 의해 제공되며 기억하시겠지만 "P[D] = 1 - P[U]"입니다. 따라서 수학적 모델에서 제공하는 다섯 가지 값을 기반으로 우리는 위에서 설명한 세 가지 값을 구할 수 있습니다. 앞에서 얻은 이 두 방정식에 대해서 저는 여기서는 편의상 시간 표기를 변경했습니다.

이러한 값은 계산될 수 있습니다. 그것들을 무언가로 환원하기 위해서는 우리가 가진 것을 바탕으로 어떻게든 실제 값을 얻어야 합니다. 그런 다음 세 매개 변수들이 모두 실제 값과 매우 유사하도록 원하는 등가 두-상태 곡선의 매개 변수를 찾아야 합니다. 기준은 다음과 같습니다. 먼저 알려진 값에 대한 표기법을 소개하겠습니다:

  • P*[U] - 선택한 복도의 경계를 넘을 실제 확률
  • T*[U] - 상한 경계를 넘을 때까지의 실제 평균 시간
  • T*[D] - 하한 경계를 넘을 때까지의 실제 평균 시간

실제 값과 계산된 값의 편차는 상대적인 값 또는 백분율로 측정할 수 있습니다. 백분율로 측정하는 경우 기준은 다음과 같습니다:

  • KPU = ( | P[U] - P*[U] | / ( P[U] + P*[U] ) ) * 100 %
  • KTU = ( | T[U] - T*[U] | / ( T[U] + T*[U] ) ) * 100 %
  • KTD = ( | T[D] - T*[D] | / ( T[D] + T*[D] ) ) * 100 %

소스 시스템과 비교하기 위한 기준 정의


가장 좋은 시스템은 이 모든 값을 최소한으로 갖춘 시스템입니다. 이제 계산된 값을 얻으려면 먼저 통로의 크기를 결정해야 하며 이에 따라 실제 확률과 돌파까지의 실시간 시간을 결정할 수 있습니다. 이 아이디어는 다음과 같이 시각화 될 수 있습니다:

최소 통로 값 결정하기

그림은 수익성 있는 전략을 위해 이러한 통로를 결정하는 예를 보여줍니다. 보라색 삼각형은 위아래로 움직일 수 있는 또 다른 체크 포인트를 상징합니다. 원하는 최소 이동 범위는 검은색 점들 사이입니다. 사용 가능한 기간에 발생한 최대 이동을 기준으로 하면 확률 P[U]는 1이 됩니다. 분명히 이것은 가장 잘못된 선택입니다. 왜냐하면 우리에게 필요한 것은 하한값과 상한값의 교차를 보장하는 최소값이기 때문입니다.

필요한 값을 계산하기 위한 가능한 통로 평가하기

하지만 이것만으로는 충분하지 않습니다. 이 값을 기준으로 사용하면 하한선을 한 번만 터치하게 되는데 이 역시 정확하지 않습니다. 개인적으로 저는 주어진 최소값보다 세 배 적은 통로 값을 사용했습니다. 경계를 터치하는 샘플이 충분하다면 이 값이면 충분합니다. 이제 통로의 크기를 결정했으니 우리는 이 통로를 분할할 수 있습니다. 통로 자체를 스텝이라고 가정하면 다음과 같습니다:

  • n, m = 1
  • p = P[U]
  • Pr * n = Pr * m = 1/3 * MinD - 통로 폭의 절반
  • Pr = (1/3 * MinD ) / n = ( 1/3 * MinD ) / m - step module
  • T[U,u] = T[U]
  • T[D,d] = T[D]
  • T[U,d] = 0
  • T[D,u] = 0

이 변형은 여러분의 거래 샘플이 매우 큰 경우에도 사용할 수 있습니다. 이 접근 방식의 장점은 통로 전체를 한 스텝으로 나누기 때문에 통로를 분할하는 데 수학적 모델을 사용할 필요가 없다는 것입니다. 하지만 제 계산에서는 수학적 모델을 예로 사용했습니다. 이 접근 방식을 사용할 때는 다음과 같은 선택을 위한 매개변수의 범위를 찾아야 합니다:

  • p = p1 ... p2
  • N = m = nm1 .... nm2

저의 예에서는 다음과 같은 범위를 사용했습니다:

  • P1 = 0.4, P2 = 0.6, NM1 = 1, NM2 = 3

물론 여러분은 더 넓은 범위를 사용할 수도 있습니다. 선택적으로 범위 중 하나는 더 넓게 다른 하나는 그대로 사용할 수도 있습니다. 예를 들어 'nm2'를 늘리면 이 방법은 더 넓은 범위의 다양한 전략을 포괄할 수 있습니다. 수학적 모델이 다음 변형을 처리할 수 없는 경우 우리는 수학적 모델이 없는 모델로 전환할 수 있습니다.

통로 위쪽 경계를 넘을 확률과 평균 시간 정의하기

위의 모든 값을 성공적으로 찾은 후에는 우리는 한 스텝 올라가기 위한 확률 'p'만 얻게 됩니다. 그런 다음 이 값을 평균 경계 통과 시간을 구하는 기준으로 사용할 수 있습니다. 위의 이미지를 약간 변형하여 이를 시각화 할 수 있습니다:

통로 통과 확률 및 평균 시간 결정하기

그림은 이전 변환의 결과로 크기가 결정된 통로의 위쪽과 아래쪽의 교차점을 합산하는 과정을 보여줍니다. 이러한 교차점들의 합과 함께 교차에 필요한 시간을 계산합니다. 한 번의 작업으로 우리에게 필요한 모든 수량을 별표로 확인할 수 있습니다:

  • N[U] - 통로 상단 경계의 교차점 수입니다.
  • N[D] - 통로 아래쪽 경계의 교차점 수입니다.
  • T[U][i] - 위쪽 경계를 넘을 때까지의 시간이 포함된 배열입니다.
  • T[D][i] - 아래쪽 경계를 넘을 때까지의 시간이 포함된 배열입니다.

이 데이터를 사용하여 위쪽 경계를 넘을 확률과 위쪽 및 아래쪽 경계를 넘을 평균 시간을 계산해 보겠습니다:

  • P*[U] = N[U]/ ( N[U] + N[D] )
  • T*[U] = Summ( 0...i ) [ T[U][i] ] / N[U]
  • T*[D] = Summ( 0...i ) [ T[D][i] ] / N[D]

이제 우리는 2차원으로 환원해야 하는 모든 값을 찾았습니다. 이제 검색을 시작할 위치를 정의해야 합니다. 이를 위해서는 이러한 값 중 정확도 측면에서 우선순위가 가장 높은 값을 결정해야 합니다. 저는 위쪽 경계를 넘을 확률을 예로 선택했습니다. 이 접근 방식은 분석에 필요한 컴퓨터의 계산 능력 요구치를 줄여줍니다. 만약 세 개의 간격으로 세 개의 값을 선택하게 되면 우리는 세 개의 자유도를 얻게 되므로 계산 시간이 늘어납니다. 때로는 계산 시간이 비현실적일 수도 있습니다. 대신 저는 한 스텝 올라갈 확률로 시작한 다음 한 스텝 올라가고 내려가는 평균 시간으로 진행했습니다.

통로에는 스텝이 많고 건너는 시간이 스텝에 걸리는 시간이 아니라는 점을 상기시켜 드리고 싶습니다. 또한 특정 방향으로 한 스텝 내디딜 확률은 경계 교차 확률이 아닙니다. 유일한 예외는 처음에 설명한 n=m=1 상황입니다.

결과적으로 우리는 다음과 같은 스텝 특성을 얻게 됩니다:

  1. P - 스텝업 확률
  2. T[u] - 스텝업의 평균 지속 시간
  3. T[d] - 스텝 다운의 평균 지속 시간
  4. Pr - 수익 값의 스텝 계수

간단한 변환의 효율성 예측하기

우리가 스텝의 모든 매개 변수를 찾았다고 가정해 보겠습니다. 이러한 변환 작업의 일반적인 효율성을 평가하는 방법은 무엇일까요? 효율성을 평가하기 위해 우리는 전략이 줄어드는 직선을 그릴 수 있습니다. 선의 기울기는 다음과 같이 정의할 수 있습니다:

  • K = EndProfit / EndTime - 라인 기울기 계수
  • P0 = K * t - 선 방정식

그러면 이렇게 표시됩니다:

이상적인 사례

2차원 곡선의 매개변수가 이상적이라면 유사한 직선은 정확히 동일한 기울기를 가지며 끝점에서 균형 곡선에 닿게 됩니다. 그런 우연은 절대 있을 수 없는 일이라는 것은 분명합니다. 이 등가의 기울기 계수를 구하려면 스텝에 대해 찾은 데이터를 사용하면 됩니다:

  • MP = p * Pr - (1-p) * Pr - 모든 스텝의 상향 이동시의 수학 기대치
  • MT = p * T[u] + (1-p) * T[d] - 모든 스텝의 형성에 소요되는 시간에 대한 수학 예상치 입니다.
  • K = MP / MT - 라인 기울기 계수.

저는 계산을 위해 같은 프로그램을 사용했는데 매번 비슷한 결과가 나왔습니다:

실제 사례에 가깝게

모든 전략을 2차원으로 정확하게 변환할 수 있는 것은 아닙니다. 그 중 일부는 분명한 편차가 있습니다. 편차는 다음과 같은 이유와 관련이 있습니다:

  1. 별표가 있는 값 계산에서의 오류
  2. 2차원 모델의 불완전성(유연성이 떨어지는 모델)
  3. 가능한 검색 시도 횟수의 유한성(및 제한된 컴퓨팅 성능)

우리는 이러한 모든 사실을 고려하여 평균 스텝 시간을 조정하여 최소한 원본 모델과 파생 모델의 기울기 계수가 동일하도록 할 수 있습니다. 물론 이러한 변화는 우리가 줄이고자 하는 기준의 편차에 영향을 미치겠지만 다른 특별한 해결책은 없습니다. 제 생각으로는 거래 횟수가 무한대가 되는 경향이 있으면 원래 전략과 파생 전략이 하나의 선으로 합쳐져야 하기 때문에 주요 기준은 선 기울기 계수라고 생각합니다. 이런 일이 일어나지 않는다면 그러한 변화는 큰 의미가 없습니다. 아마도 이 모든 것은 변환의 방법이 아니라 지금은 명확하지 않은 숨겨진 가능성과 관련이 있을 것입니다.

최종 조정 및 시뮬레이션

이러한 변환을 위해 우리는 비율을 사용할 수 있습니다. 곡선을 만들기 전에 곡선의 시작부터 분석된 순서 또는 세그먼트가 되는 시간에 해당하는 배열 TL[i], B[i]가 있으므로 배열의 마지막 요소를 가져와 다음과 같이 작성할 수 있습니다:

  • K = B[n] / TL[n]
  • N - 잔액 배열의 마지막 요소의 인덱스(최종 잔액)

이전 스텝에서 얻은 직선의 경우 이러한 계수를 계산할 수도 있습니다. 이미 앞서 계산된 값입니다:

  • K1 = MP / MT

이 계수들은 동일하지 않으므로 보정이 필요합니다. 이 작업은 다음과 같이 수행할 수 있습니다:

  • K = MP / ( KT * MT )
  • KT - 보정 계수

이제 수학적 기대치 안에 이 계수를 추가하여 수학적 기대치의 의미가 바뀌지 않도록 해야 합니다. 이렇게 하면 됩니다:

  • MTK = MT * KT = p * (T[u]* KT) + (1-p) * (T[d]* KT)

보시다시피 이제 수정된 새로운 시간 값이 괄호 안에 포함됩니다. 이 값들은 다음과 같이 계산할 수 있습니다:

  1. Tn[u] = T[u]* KT
  2. Tn[d] = T[d]* KT

이것은 한 스텝 올라가고 한 스텝 내려가는 수정된 시간입니다. 보정 계수를 계산하기 위해 계수 계산 식을 고르게 합니다:

  • B[n] / TL[n] = MP / ( KT * MT )

KT를 기준으로 방정식을 풀면 이 값을 계산하는 식을 구할 수 있습니다:

  • KT = ( MP / MT ) / ( B[n] / TL[n] ) = ( MP * TL[n] ) / ( MT * B[n] )

우리가 해야 할 일은 스텝 업과 스텝 다운의 평균 시간을 조정하는 것뿐입니다. 그 후에는 전환 프로세스가 완료된 것으로 간주할 수 있습니다. 결과적으로 두 개 이상의 상태를 설명하는 거대한 배열 대신 전략을 완벽하게 설명하는 네 가지 값의 집합을 얻게 됩니다:

  1. P - 스텝업 확률
  2. 홍보 - 스텝 모듈
  3. T[u] - 평균 업 스텝 형성 시간
  4. T[d] - 평균 다운 스텝 형성 시간

이 네 가지 매개변수만으로도 우리는 시뮬레이션을 통해 전략을 재현할 수 있습니다. 이제 이 소프트웨어는 시장과 시간에 구애 받지 않고 사용할 수 있습니다. 다섯 가지 전략에 대한 시뮬레이션은 다음과 같습니다:

시뮬레이션

여기서는 첫 번째 스텝부터 직선을 사용합니다. 이 선은 0에서 실제 거래 곡선의 끝까지 그려집니다. 보시다시피 시뮬레이션은 선에 매우 가깝기 때문에 변환의 정확성을 확인할 수 있습니다. 유일한 예외는 파란색 선입니다. 제 알고리즘에 약간의 결함이 있는 것 같은데, 시간이 조금만 있으면 고칠 수 있을 것 같습니다.

요약

모델을 연구하는 과정에서 저는 흥미로운 아이디어가 떠올랐습니다. 원래 저는 2차원 체계와 다중 상태 체계를 공부할 때는 복잡한 시스템에 대한 단순화된 설명만 얻고 싶었습니다. 그러나 이 분석의 결과 훨씬 더 가치 있고 간단한 결론을 얻었습니다. 자세한 내용은 너무 많은 기술적 뉘앙스를 내포하고 있기 때문에 이 글에서 설명하기 어렵습니다. 이 연구의 결과를 요약하면 다음과 같습니다:

리서치 차트

모든 이점을 목록으로 표시할 수 있습니다:

  • 많은 다중 상태 시스템이 두 상태 시스템으로 변환될 수 있습니다(따라서 n에서 m 상태로 변환하는 과정도 가능합니다).
  • 변환 프로세스는 거래 데이터 압축 메커니즘으로 사용될 수 있습니다.
  • 변환된 데이터는 시뮬레이션을 통해 피드백 될 수 있으므로 시뮬레이션도 단순화됩니다(두 가지 상태만 시뮬레이션 하면 되므로).
  • 가격 책정 내의 확률적 프로세스를 더 깊이 이해하면 개별적으로 유용한 결론을 내릴 수 있습니다.
  • 우리는 받은 정보를 바탕으로 거래 프로세스에 대한 심층 분석을 진행할 수 있습니다.
  • 우리는 거래에 유용한 몇 가지 기능을 얻었습니다 - 지금은 역설로 분류합니다.

물론 이 시리즈의 주요 아이디어는 확률 이론을 기반으로 매우 안정적이면서 다중 통화 시스템을 직접 만들 수 있는 간단하고 유용한 수학을 만드는 것입니다. 지금까지 얻은 정보는 모놀리스 솔루션을 구축하는 데 좋은 토대가 됩니다.

또한 저는 연구 과정에서 밝혀낸 역설에 대해서도 언급하고 싶습니다. 첫 번째 변환 단계에서 우리는 등가 직선의 다른 기울기로 표현되는 불일치를 얻었습니다. 이러한 불일치는 랜덤 트레이딩을 비랜덤 트레이딩으로 전환하거나 다양한 트레이딩 신호를 만드는데 사용될 수 있다고 생각합니다.

즉 다중 상태 시스템을 두 상태 시스템으로 변환하기 위한 변환을 적용하면 일부 제로 전략을 양의 PF를 갖는 전략으로 변환하기에 유용할 수 있으며 이는 품질을 개선하기 위한 목적으로 또 다른 방법을 사용하여 추가로 처리할 수 있습니다. 지금까지는 이러한 생각들이 너무 막연했지만 궁극적으로는 아이디어를 만들 수 있을 것입니다. 저는 이것이 연구의 주요 결과라고 생각하며 나중에 EA를 만들 때 사용할 것입니다.

결론

이 글에서는 너무 자세히 다루지 않으려고 했습니다. 물론 이 주제는 수학과 관련이 있습니다. 하지만 이전 기사의 내용을 고려해 보면 저는 세부적인 정보보다는 일반화된 정보가 더 유용하다고 생각합니다. 마약 여러분이 이 방법에 대한 모든 세부 사항을 연구해 보려면 아래에 첨부된 프로그램을 사용해 보세요 - 제가 연구를 수행한 프로그램입니다. 기본적으로 데이터 배열 및 행렬과 관련된 많은 지루한 수학을 다루기 때문에 사용된 모든 알고리즘을 설명하지는 않았습니다. 제 이견으로는 비슷한 것을 만들고자 하는 사람이 있다면 자신만의 논리를 고수하되 제시된 프로그램을 출발점으로 삼을 수 있다고 생각합니다.

더 깊이 분석하고 싶지 않다면 다양한 전략을 테스트하여 전략들이 어떻게 전환되는지 확인하는 것이 좋습니다. 앞으로의 아이디어는 품질과 안정성 측면에서 신경망을 능가할 수 있는 건전한 자가 적응 알고리즘을 만드는 방향으로 점차 나아가는 것이 좋을 것이라고 생각합니다. 저는 이미 몇 가지 아이디어가 있습니다. 하지만 우리는 먼저 기초를 완성해야 합니다.

참조


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

파일 첨부됨 |
Research_program.zip (1145.88 KB)
시장 수학: 수익, 손실 및 비용 시장 수학: 수익, 손실 및 비용
이 글에서는 수수료와 스왑을 포함한 모든 거래의 총 손익을 계산하는 방법을 보여드리겠습니다. 저는 가장 정확한 수학적 모델을 제공하고 이를 사용하여 코드를 작성하고 표준과 비교할 것입니다. 또한 수익을 계산하고 종목 사양의 모든 값에 접근하고 활용하기 위해 주요 MQL5 함수의 내부에 들어갈 것입니다.
조합론과 트레이딩 확률(4부): 베르누이 논리 조합론과 트레이딩 확률(4부): 베르누이 논리
이 글에서는 잘 알려진 베르누이 기법을 알아보고 이를 트레이딩과 관련한 데이터 배열을 설명하는 데 어떻게 사용할 수 있는지 보여드리겠습니다. 그런 다음 이 모든 것이 스스로 적응하는 트레이딩 시스템을 만드는 데에 사용될 것입니다. 우리는 또한 베르누이 공식의 특별한 경우인 보다 일반적인 알고리즘을 찾아보고 관련된 응용 프로그램을 찾아볼 것입니다.
새 MetaTrader 와 MQL5를 소개해드립니다 새 MetaTrader 와 MQL5를 소개해드립니다
본 문서는 MetaTrader5의 간략 리뷰입니다. 짧은 시간 내에 시스템의 모든 세부 사항을 안내해드리기는 어렵습니다 - 테스트는 2009.09.09에 시작되었습니다. 이는 상징적인 일자로, 전 이것이 행운의 숫자가 될거라 믿어 의심치않습니다. 제가 새 MetaTrader 5 터미널과 MQL5 베타버전을 받은지 며칠이 지났습니다. 아직 모든 기능을 사용해본 것은 아니지만, 벌써부터 감명깊네요.
시장과 시장이 보여 주는 글로벌 패턴의 물리학 시장과 시장이 보여 주는 글로벌 패턴의 물리학
이 글에서는 시장에 대한 이해가 조금이라도 있는 시스템이라면 글로벌 규모로 운영 가능하다는 가정을 테스트해 보려고 합니다. 저는 어떤 이론이나 패턴을 발명하지 않을 것이고 알려진 사실만을 사용하며 이러한 사실을 점차 수학적인 분석 언어로 번역할 것입니다.