트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 212

 
레나트 팻쿨린 :

R은 "복잡한 계산을 간단하고 바로 지금"해야 하는 실제 필요성에서 우리가 MetaTrader/MQL에서 얼마나 멀리 떨어져 있는지에 대해 제 눈을 열어준 놀라운 시스템입니다.

우리(C++ 개발자)는 "모든 것을 스스로 할 수 있고 우리는 낮은 수준의 기본 및 계산 속도를 제공합니다"라는 접근 방식을 가지고 있습니다. 우리는 성능에 대해 열광적이며 성공했습니다. 64비트의 MQL5는 훌륭합니다.

개인적으로 R과 함께 앉았을 때 한 줄에 가능한 많은 강력한 기능이 필요하고 일반적으로 연구를 수행할 수 있는 기회를 제공한다는 것을 깨달았습니다.

따라서 우리는 급선회를 하고 MetaTrader 5를 업그레이드하기 시작했습니다.

  • 이전에 재작성된 Alglib 및 Fuzzy 수학 라이브러리를 표준 배포판에 포함하고 단위 테스트로 다룹니다.
  • R에서 통계 기능의 유사체를 개발하고 연구를 수행하고 테스트를 수행했습니다. 작업은 여전히 진행 중이며 라이브러리는 확장 중입니다.
  • R의 플롯과 유사한 그래픽 라이브러리 Graphics의 첫 번째 베타 버전을 개발했습니다. 빠른 출력을 위해 한 줄 함수를 추가했습니다.
  • 터미널의 출력 창에서 인터페이스를 테이블 형식의 데이터로 작동할 수 있도록 변경하기 시작했습니다. 출력 방향 변경, 불필요한 열 비활성화, 전문가 출력 창에서 글꼴을 고정 폭으로 변경
  • 구조를 포함한 배열을 자동으로 인쇄하는 강력한 ArrayPrint 기능 추가
  • 디스크에 어레이를 빠르게 쓰거나 읽기 위한 FileLoadFileSave 기능 추가


물론 우리는 여정의 시작 단계에 있지만 힘을 적용하기 위한 올바른 벡터는 이미 명확합니다.

당신의 동기는 훌륭합니다! 모든 것이 정확히 말하면 닌자를 뼈에 물릴 것입니다. c 멀티 차트))))

그러나 IMHO, 여기서 uv를 작성한 것 외에 근본적으로 새로운 것을 만들어야 합니다. Reshetov 씨, 우리는 시장에서 다운로드한 데이터뿐만 아니라 임의의 데이터 세트로 작업할 연구 스튜디오가 필요합니다. 무슨 일이 일어나고 있는지 이해하기 위해서는 많은 것들이 완전히 사소하고 종합적인 예에서 시도되어야 하기 때문입니다. 음, 이해해야 합니다. 나 프로그래머 프로그래머)) 다른 그래프, 분산형, 히트맵, 분포 등을 그립니다. 일반적으로 메타에디터에서 이러한 도구 세트를 직접 사용할 수 있다면 정말 좋겠지만 솔직히 희망도 없습니다...

그러나 일반적으로 물론 나는 당신의 생각의 경향을 좋아합니다))

 
레나트 파트훌린 :

자세한 내용이나 확인이 없는 정중한 답변이었습니다. 그리고 그 대답이 Wolfram Alpha와 Matlab과 맞지 않아 문제가 되었습니다.

옆으로 갈 필요가 없습니다. 근본 문제가 명확하게 식별되었습니다.

그의 대답이 Wolfram의 대답과 일치하지 않았다는 것은 무엇을 의미합니까? 그 사람의 대답이 "제로"가 아니라는 점에서 일치하지 않습니까? 그 남자는 적분 = 0인 영점에서 밀도가 반드시 0이어야 한다고 생각하지 않는다고 대답했습니다. 그는 정확히 그렇게 말했다. 그리고 어떤 시점의 밀도 값은 관련이 없다고 덧붙였습니다. 이것은 매우 명확한 수학적 진술입니다.

수학은 논의 중인 문제에서 중요합니다.

우리는 이런 저런 함수의 적분을 가지고 있습니다(감마 분포 의 확률 밀도 함수 ). 매개변수가 있는 방정식을 Wolfram에 넣을 수 있다는 사실에 모두가 이미 익숙합니다. 통합 영역과 함수 매개변수를 지정하면 그가 통합하고 답을 줄 것입니다. 그리고 당신은 스스로 앉아서 주어진 영역에서 이 적분을 계산하면 0에서 0, 전체 영역에서 1, 그리고 일부 하위 영역에서 일부 값 [0,1]을 얻을 것이라고 생각했습니다. 방정식을 푸는 것만으로!

극점에서의 감마 분포의 확률밀도함수의 극한이 양의 영역 어딘가로 간다는 것이 이 함수의 속성이다. 이 기능을 통합하여 발생하는 일과 관련이 없습니다. 이 사람은 그것에 대해 썼습니다.

나는 근본적인 질문을 부끄러워하지 않습니다. 나는 우리의 관점이 우리와 무관한 사람에 의해 확인되었다는 것을 다시 한 번 반복할 것입니다. 0에서의 밀도는 중요하지 않습니다(관련 없음).

 
제냐 :

당신의 동기는 훌륭합니다! 모든 것이 정확히 말하면 닌자를 뼈에 물릴 것입니다. c 멀티 차트)))

그러나 IMHO, 여기서 uv를 작성한 것 외에 근본적으로 새로운 것을 만들어야 합니다. Reshetov 씨, 우리는 시장에서 다운로드한 데이터뿐만 아니라 임의의 데이터 세트로 작업할 연구 스튜디오가 필요합니다. 무슨 일이 일어나고 있는지 이해하기 위해서는 많은 것들이 완전히 사소하고 종합적인 예에서 시도되어야 하기 때문입니다. 음, 이해해야 합니다. 나 프로그래머 프로그래머)) 다른 그래프, 분산형, 히트맵, 분포 등을 그립니다. 일반적으로 메타에디터에서 이러한 도구 세트를 직접 사용할 수 있다면 정말 좋겠지만 솔직히 희망도 없습니다...

그러나 일반적으로 물론 나는 당신의 생각의 경향을 좋아합니다))

Reshetov의이 "샷"을 의미합니까 ??

" 어떤 종류의 부패 이 R은 네모난 바퀴가 달린 자전거입니다. 베이스 자체, 즉 R 곡선의 YaP이고 "나쁜 파일"로 심각한 개선이 필요한 경우 패키지 중 일부에 대해 무엇을 말할 수 있습니까? 몇 년 동안 R의 기본 기능이 올바른지 확인하지도 않았습니까?

MetaQuotes가 사실과 오픈 소스 테스트에서 바로 이 R이 실제로 나타내는 것에 대해 일부 사용자의 눈을 열어 모든 사람이 근거가 없는 것이 아니라 스스로 재확인하고 확인할 수 있도록 하는 것이 좋습니다. 물론 모든 사람이 열린 것은 아닙니다. 왜냐하면. 파괴적인 종파 R의 개별 종교 광신자는 제시된 테스트를 참조하고 스스로 재확인하는 대신 비뚤어진 언어와 패키지로 계산의 "무오성"을 계속 맹목적으로 믿게 될 것입니다. "일반적으로 허용되는 표준"으로 R의 곡률.

이제 결과가 더 정확할 것이기 때문에 MQL 기능을 사용하여 거래 전략을 생성하고 곡선과 경사 R을 통해 수행하려고 시도하는 것이 더 낫다는 것이 매우 분명합니다.

건설적인 접근 방식, 테스트 및 소스, 그리고 " 네이키드 킹 - R "을 공개하기 위해 MetaQuotes 개발자에게 특히 감사해야 합니다! "

 
블라디미르 페레르벤코 :

Reshetov의이 "샷"을 의미합니까 ??

아니요, 메시지는 다음과 같습니다.

유리 레셰토프 :

다른 많은 PL과 마찬가지로 R은 배열 형태로 데이터를 처리하는 기능을 분명히 제공한다는 사실 때문에 MQL에 비해 머신 러닝에 훨씬 더 편리합니다. 사실 머신 러닝을 위한 선택은 2차원 데이터 배열인 경우가 대부분이므로 배열을 사용하려면 다음과 같은 기능이 필요합니다.

  1. 행과 열을 다른 배열에 더 작은 배열로 삽입
  2. 배열의 행과 열을 더 작은 배열로 바꾸기
  3. 배열에서 행과 열 제거(예: 샘플에서 "이상치"가 분명한 예 또는 중요하지 않은 예측 변수 제거)
  4. 배열을 여러 부분으로 나눕니다. 결과적으로 원래 배열에서 두 개 이상의 배열을 얻습니다. 이 배열은 해당 부분입니다(샘플을 훈련 및 테스트 부분으로 또는 더 많은 부분으로 나누는 데 필요합니다(예: Wallking Forward의 경우)).
  5. 균일한 분포의 배열에서 행과 열의 무작위 혼합(샘플의 특정 예는 다른 부분으로, 바람직하게는 이러한 부분에 고르게 분포되어야 함).
  6. 개별 행 또는 열의 데이터를 처리하기 위한 다양한 기능(예: 행 또는 열의 산술 평균, 분산 계산 또는 후속 정규화를 위해 행에서 최대값 또는 최소값 찾기).
  7. 등. 등.

한편, 배열 형태의 샘플을 처리하는 데 필요한 위의 기능은 MQL에서 구현되지 않으며, 기계 학습 알고리즘 개발자의 상당 부분은 이 모든 것이 오랫동안 사용 가능했던 다른 PL을 선호할 것입니다. 또는 그는 AlgLib 라이브러리의 소박한 MLP(지난 세기의 60년대 알고리즘)를 사용할 것입니다. 이 라이브러리에서 내 기억이 도움이 되면 편의상 2차원 배열이 1차원으로 표시됩니다.

물론 랜덤 분포의 밀도 함수도 필요한 함수입니다. 그러나 이러한 기능은 기계 학습 작업에 항상 필요한 것은 아니며 일부에서는 전혀 사용되지 않습니다. 그러나 다차원 배열과 마찬가지로 선택 작업은 머신 러닝 알고리즘의 구현이 어떤 작업 없이 수행할 수 없는 작업입니다. 물론 사소한 XOR에서 알려진 정규화된 데이터를 기억하기 위해 그리드를 훈련하는 작업이 아니라면 말입니다.

 
블라디미르 페레르벤코 :

Reshetov의이 "샷"을 의미합니까 ??

" 어떤 종류의 부패 이 R은 네모난 바퀴가 달린 자전거입니다. 베이스 자체, 즉 R 곡선의 YaP이고 "나쁜 파일"로 심각한 개선이 필요한 경우 패키지 중 일부에 대해 무엇을 말할 수 있습니까? 몇 년 동안 R의 기본 기능이 올바른지 확인하지도 않았습니까?

MetaQuotes가 사실과 오픈 소스 테스트에서 바로 이 R이 실제로 나타내는 것에 대해 일부 사용자의 눈을 열어 모든 사람이 근거가 없는 것이 아니라 스스로 재확인하고 확인할 수 있도록 하는 것이 좋습니다. 물론 모든 사람이 열린 것은 아닙니다. 왜냐하면. 파괴적인 종파 R의 개별 종교 광신자는 제시된 테스트를 참조하고 스스로 재확인하는 대신 비뚤어진 언어와 패키지로 계산의 "무오성"을 계속 맹목적으로 믿게 될 것입니다. "일반적으로 허용되는 표준"으로 R의 곡률.

이제 결과가 더 정확할 것이기 때문에 MQL 기능을 사용하여 거래 전략을 생성하고 곡선과 경사 R을 통해 수행하려고 시도하는 것이 더 낫다는 것이 매우 분명합니다.

건설적인 접근 방식, 테스트 및 소스, 그리고 " 네이키드 킹 - R "을 공개하기 위해 MetaQuotes 개발자에게 특히 감사해야 합니다! "

"mink MQL"에 대한 게시물을 이미 삭제하셨습니까? 트럼프가 당선된 후 라도프의 인물들이 페이스북을 문지르는 것과 같은 방식으로 게시물을 문지릅니다.

 

다음은 재미를 위한 Wolfram Alpha의 감마 분포의 예입니다.

약간 단순화된 감마 분포 밀도 함수인 함수가 제공됩니다.

본질은 분모 x에 있습니다. x->0에서 볼 수 있는 것처럼 오른쪽 한계는 Wolfram이 올바르게 평가합니다. inf.

즉, 오른쪽 극한에서 무한대의 0점에서의 밀도입니다(이것이 정확히 dgamma의 답입니다).

이 기능을 대규모 지원에 통합해 보겠습니다.

적분은 1과 같습니다(물론 완전히 지원되지 않았기 때문에 반올림됨).

결론적으로, 함수가 극한 지점에서 무한대로 간다는 사실에도 불구하고, 이 함수의 적분은 그래야만 하는 것처럼 완벽하게 고려됩니다.

 
알렉세이 버나코프 :

다음은 재미를 위한 Wolfram Alpha의 감마 분포의 예입니다.

결론적으로, 함수가 극한 지점에서 무한대로 간다는 사실에도 불구하고, 이 함수의 적분은 그래야만 하는 것처럼 완벽하게 고려됩니다.

예를 들어 주셔서 감사합니다. 맞습니다. 이 적분은 수렴합니다.

x=0 지점의 한계 값은 밀도를 결정하는 데 사용할 수도 있으며 이는 발산으로 이어지지 않습니다.

 
양자 :

예를 들어 주셔서 감사합니다. 맞습니다. 이 적분은 수렴합니다.

x=0 지점의 한계 값은 밀도를 결정하는 데 사용할 수도 있으며 이는 발산으로 이어지지 않습니다.


고맙습니다! 존경합니다.

 

빠른 처리를 위한 패키지가 있는 R 예제.

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

작업 시간: 5초 1000개의 선형 모델을 구축했습니다. 1000번의 관찰에 대해 각각.

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

모든 계수는 정규 분포를 따릅니다.

그리고 시각화를 위한 ggplot-ik.

 

그리고 또 다른 예입니다. 또한 통계를 시뮬레이션하기 위해 큰 샘플을 돌리는 것과도 관련이 있습니다.

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

작동 시간 3.4초.

0을 중심으로 하는 정규 분포 샘플이 생성됩니다.

1000~10,000개의 값 쌍

10,000 x 1,000 값 쌍

100,000 x 100개의 값 쌍

각 샘플에 대한 평균(MO == 0) 간의 차이가 고려됩니다.

표본 평균의 분포 밀도는 다양한 크기의 표본에 대해 파생됩니다.

여기서만 샘플링_100은 샘플 크기를 얻는 데 10,000,000/100이 걸린다는 것을 의미합니다. 즉, 표본이 작을수록 표준 오차가 더 큽니다...