Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062
우리는 수세기 동안 그래프를 봅니다. 둘 다 켜져 있고 "병사 3명"이 표시된 다음 "머리와 어깨"가 표시됩니다. 그러한 수치가 이미 얼마나 많이 보았고 우리는 이 수치를 믿고 거래합니다...
작업이 다음과 같이 설정된 경우:
1. 이러한 수치를 자동으로 찾습니다. 일반적으로 모든 차트가 아니라 특정 통화 쌍에 대해 쌀을 거래할 때 일본인이 최근에(300년 전 아님) 마주한 수치를 찾습니다.
2. 초기 데이터가 우리에게 적합한가요? 그런 수치를 자동으로 찾는 패턴 - 패턴입니다.
첫 번째 질문에 답하기 위해 "랜덤 포레스트"라는 알고리즘을 고려하십시오. 알고리즘은 사람이 작업의 초기 데이터로 생각한 모든 것, 하나 또는 여러 통화, 지표, 가격 증분의 견적을 취합니다. 10-5-100-200 ... 입력 변수. 그런 다음 하나의 막대에 해당하는 한 순간과 관련된 변수의 전체 값 세트를 취하여 과거 데이터에 대해 잘 정의된 결과에 해당하는 이러한 입력 변수의 조합을 찾습니다. 예를 들면, 구매 주문. 그리고 다른 주문에 대한 또 다른 조합 세트 - SELL. 이러한 각 집합은 별도의 트리에 해당합니다. 경험에 따르면 18,000바(약 3년)의 입력 클록 세트에 대해 알고리즘은 200-300개의 트리를 찾습니다. 이것은 "머리와 어깨"와 거의 유사한 패턴 세트 및 전체 군인 회사입니다.
이 알고리즘의 문제는 그러한 트리가 미래에 발생하지 않을 일부 세부 사항을 캡처할 수 있다는 것입니다. 이것은 기계 학습 "과적합"에서 포럼 "과적합"에서 호출됩니다. 초기 변수의 전체 큰 집합은 출력 변수와 관련된 부분과 잡음과 관련되지 않은 부분의 두 부분으로 나눌 수 있는 것으로 알려져 있습니다. 여기에서 Burnakov는 결과와 관련이 없는 것들을 제거하려고 노력하고 있습니다.
추신.
트렌딩 TS(BUY, SELL)를 구축할 때 모든 종류의 자동차는 소음입니다!
당신이 보는 것은 시장의 작은 부분이며 가장 중요한 것이 아닙니다. 피라미드를 거꾸로 세우는 사람은 없습니다.
입력 데이터로 뉴런을 훈련시킨 다음 가중치를 살펴보았습니다. 입력 데이터의 가중치가 작은 경우 필요하지 않을 수 있습니다. SanSanych의 기사 https://www.mql5.com/ru/articles/1165 덕분에 R(Rattle)을 사용하여 이 작업을 수행했습니다.
입력
입력_1
입력_2
입력_3
입력_4
입력_5
입력_6
입력_7
입력_8
입력_9
입력_10
입력_11
입력_12
입력_13
입력_14
입력_15
입력_16
입력_17
입력_18
입력_19
입력_20
무게
-186.905
7.954625
-185.245
14.88457
-206.037
16.03497
190.0939
23.05248
-182.923
4.268967
196.8927
16.43655
5.419367
8.76542
36.8237
5.940322
8.304859
8.176511
17.13691
-0.57317
부분집합
예
예
예
예
예
예
실제로이 접근 방식을 확인하지 않았고 흥미롭지 않은 것으로 나타났습니다. 나는 input_1 input_3 input_5 input_7 input_9 input_11을 취할 것입니다
В статье описано использование пакета Rattle для автоматического поиска паттернов, способных предсказывать "лонги" и "шорты" для валютных пар рынка Форекс. Статья будет полезна как новичкам, так и опытным трейдерам.
입력 데이터로 뉴런을 훈련시킨 다음 가중치를 살펴보았습니다. 입력 데이터의 가중치가 작은 경우 필요하지 않을 수 있습니다. SanSanych의 기사 https://www.mql5.com/en/articles/1165 덕분에 R(Rattle)을 사용하여 이 작업을 수행했습니다.
입력
입력_1
입력_2
입력_3
입력_4
입력_5
입력_6
입력_7
입력_8
입력_9
입력_10
입력_11
입력_12
입력_13
입력_14
입력_15
입력_16
입력_17
입력_18
입력_19
입력_20
무게
-186.905
7.954625
-185.245
14.88457
-206.037
16.03497
190.0939
23.05248
-182.923
4.268967
196.8927
16.43655
5.419367
8.76542
36.8237
5.940322
8.304859
8.176511
17.13691
-0.57317
부분집합
예
예
예
예
예
예
실제로이 접근 방식을 확인하지 않았고 흥미롭지 않은 것으로 나타났습니다. 나는 input_1 input_3 input_5 input_7 input_9 input_11을 취할 것입니다
) 흠. 매우 흥미로운 것으로 밝혀졌습니다.
해명 질문. 그리고 13, 14, 16과 같이 가중치가 작은 입력을 더 켜보는 것은 어떻습니까? 가중치에 따라 정렬된 입력 및 가중치의 다이어그램을 보여줄 수 있습니까?
죄송합니다. 처음에는 이해하지 못했습니다. 예, 이러한 입력은 당연히 그래야 하는 큰 모듈로 가중치를 갖습니다.
상금 수령 조건을 명확히 하겠습니다.
문제를 먼저 해결한 사람에게 5학점이 주어집니다.
결정 심의 마감일: 2016년 6월 30일
거래 전략을 구현하기 위해 정보 기능을 선택하는 알고리즘을 사용하는 예가 있습니다.
Big Experiment에 대한 내 블로그를 읽었을 것입니다. https://www.mql5.com/en/blogs/post/661895
그리고 여기 사진이 있습니다:
5쌍에 대해 하나의 패턴을 찾고 25년 된 검증 샘플에서 올바르게 추측된 거래의 백분율을 감지하려고 했습니다. 그것은 박쥐에서 바로 작동하지 않았습니다. 주어진 기간에 대해 예측이 원하는 정확도를 달성하지 못했습니다.
다음으로, 한 쌍의 eurusd만 가져 가자. 나는 앞으로 3시간 동안의 가격 움직임의 결과가 내 예측 변수의 일부 하위 집합에 달려 있음을 발견했습니다.
예측 변수를 분류하고 중요한 예측 변수 찾기를 실행했습니다. 저는 지금 직장에서 20분 만에 해냈습니다.
[1] "1.51%"
> final_vector <- c((sao$par >= threshold), T)
> names(sampleA)[final_vector]
[1] "lag_diff_45_var" "lag_diff_128_var" "lag_max_diff_8_var" "lag_max_diff_11_var" "lag_max_diff_724_var" "lag_sd_362_var"
[7] "output"
그렇게 빨리 수렴을 이루지는 못했지만 설명력의 1.5% 수준에서 어느 정도 성과를 냈다.
수렴 플롯(최소화).
다음 단계는 모델을 구축하는 것입니다.
몇 가지 범주형 예측 변수가 있습니다. 우리는 "규칙 책" 또는 예측 변수와 출력 사이에 어떤 종류의 관계가 있는지 구축하고 있습니다. 3시간 관점에서 길거나 짧습니다.
결과적으로 어떻게 보이는지:
50/50 분포를 준수하기 위해 이러한 수치에 해당하는 각 라인의 매수 및 매도 수의 왜곡과 카이-제곱 검정의 p-값을 봅니다. 확률이 0.01 미만인 행만 선택합니다.
그리고 입력이 이미 선택된 순간부터 전체 실험의 코드:
dat_test <- sampleA[, c("lag_diff_45_var"
, "lag_diff_128_var"
, "lag_max_diff_8_var"
, "lag_max_diff_11_var"
, "lag_max_diff_724_var"
, "lag_sd_362_var"
, "output")]
dat_test$concat <- do.call(paste0, dat_test[1:(ncol(dat_test) - 1)])
x <- as.data.frame.matrix(table(dat_test$concat
, dat_test$output))
x$pval <- NA
for (i in 1:nrow(x)){
x$pval[i] <- chisq.test(x = c(x$`0`[i], x$`1`[i])
, p = c(0.5, 0.5))$p.value
}
trained_model <- subset(x
, x$pval < 0.01)
trained_model$concat <- rownames(trained_model)
trained_model$direction <- NA
trained_model$direction [trained_model$`1` > trained_model$`0`] <- 1
trained_model$direction [trained_model$`0` > trained_model$`1`] <- 0
### test model
load('C:/Users/aburnakov/Documents/Private/big_experiment/many_test_samples.R')
many_test_samples_eurusd_categorical <- list()
for (j in 1:49){
dat <- many_test_samples[[j]][, c(1:108, 122)]
disc_levels <- 3
for (i in 1:108){
naming <- paste(names(dat[i]), 'var', sep = "_")
dat[, eval(naming)] <- discretize(dat[, eval(names(dat[i]))], disc = "equalfreq", nbins = disc_levels)[,1]
}
dat$output <- NA
dat$output [dat$future_lag_181 > 0] <- 1
dat$output [dat$future_lag_181 < 0] <- 0
many_test_samples_eurusd_categorical[[j]] <- subset(dat
, is.na(dat$output) == F)[, 110:218]
many_test_samples_eurusd_categorical[[j]] <- many_test_samples_eurusd_categorical[[j]][(nrow(dat) / 5):(2 * nrow(dat) / 5), ]
}
correct_validation_results <- data.frame()
for (i in 1:49){
dat_valid <- many_test_samples_eurusd_categorical[[i]][, c("lag_diff_45_var"
, "lag_diff_128_var"
, "lag_max_diff_8_var"
, "lag_max_diff_11_var"
, "lag_max_diff_724_var"
, "lag_sd_362_var"
, "output")]
dat_valid$concat <- do.call(paste0, dat_valid[1:(ncol(dat_valid) - 1)])
y <- as.data.frame.matrix(table(dat_valid$concat
, dat_valid$output))
y$concat <- rownames(y)
valid_result <- merge(x = y, y = trained_model[, 4:5], by.x = 'concat', by.y = 'concat')
correct_sell <- sum(subset(valid_result
, valid_result$direction == 0)[, 2])
correct_buys <- sum(subset(valid_result
, valid_result$direction == 1)[, 3])
correct_validation_results[i, 1] <- correct_sell
correct_validation_results[i, 2] <- correct_buys
correct_validation_results[i, 3] <- sum(correct_sell
, correct_buys)
correct_validation_results[i, 4] <- sum(valid_result[, 2:3])
correct_validation_results[i, 5] <- correct_validation_results[i, 3] / correct_validation_results[i, 4]
}
hist(correct_validation_results$V5, breaks = 10)
plot(correct_validation_results$V5, type = 's')
sum(correct_validation_results$V3) / sum(correct_validation_results$V4)
또한 각각 약 5년에 해당하는 49개의 검증 샘플이 있습니다. 여기에서 모델을 검증하고 올바르게 추측된 거래 방향의 백분율을 계산합니다.
샘플로 정확하게 추측된 거래의 비율과 이 값의 히스토그램을 살펴보겠습니다.
그리고 우리는 거래의 방향을 추측하는 모든 샘플에서 총 몇 개를 계산합니다.
> sum(correct_validation_results$`total correct deals`) / sum(correct_validation_results$`total deals`)
[1] 0.5361318
약 54%. 그러나 Ask & Bid 사이의 거리를 극복해야한다는 사실을 고려하지 않고. 즉, 위 차트에 따른 임계값은 스프레드 = 1pip인 경우 대략 53% 수준입니다.
즉, 예를 들어 터미널에서 하드코딩하기 쉬운 간단한 모델을 30분 만에 만들었습니다. 그리고 위원회도 아닙니다. 그리고 20시간이 아닌 20분 동안 종속성을 찾고 있었습니다. 일반적으로 무언가가 있습니다.
유익한 기능을 올바르게 선택했기 때문입니다.
유효한 각각에 대한 자세한 통계. 견본.
모든 소스 데이터는 블로그의 링크를 통해 사용할 수 있습니다.
그리고 이 모델은 수익성이 거의 없습니다. 반점 수준의 MO. 하지만 나는 그 방향을 고수하고 있다.
우리는 항상 과거로부터 배웁니다.
우리는 수세기 동안 그래프를 봅니다. 둘 다 켜져 있고 "병사 3명"이 표시된 다음 "머리와 어깨"가 표시됩니다. 그러한 수치가 이미 얼마나 많이 보았고 우리는 이 수치를 믿고 거래합니다...
작업이 다음과 같이 설정된 경우:
1. 이러한 수치를 자동으로 찾습니다. 일반적으로 모든 차트가 아니라 특정 통화 쌍에 대해 쌀을 거래할 때 일본인이 최근에(300년 전 아님) 마주한 수치를 찾습니다.
2. 초기 데이터가 우리에게 적합한가요? 그런 수치를 자동으로 찾는 패턴 - 패턴입니다.
첫 번째 질문에 답하기 위해 "랜덤 포레스트"라는 알고리즘을 고려하십시오. 알고리즘은 사람이 작업의 초기 데이터로 생각한 모든 것, 하나 또는 여러 통화, 지표, 가격 증분의 견적을 취합니다. 10-5-100-200 ... 입력 변수. 그런 다음 하나의 막대에 해당하는 한 순간과 관련된 변수의 전체 값 세트를 취하여 과거 데이터에 대해 잘 정의된 결과에 해당하는 이러한 입력 변수의 조합을 찾습니다. 예를 들면, 구매 주문. 그리고 다른 주문에 대한 또 다른 조합 세트 - SELL. 이러한 각 집합은 별도의 트리에 해당합니다. 경험에 따르면 18,000바(약 3년)의 입력 클록 세트에 대해 알고리즘은 200-300개의 트리를 찾습니다. 이것은 "머리와 어깨"와 거의 유사한 패턴 세트 및 전체 군인 회사입니다.
이 알고리즘의 문제는 그러한 트리가 미래에 발생하지 않을 일부 세부 사항을 캡처할 수 있다는 것입니다. 이것은 기계 학습 "과적합"에서 포럼 "과적합"에서 호출됩니다. 초기 변수의 전체 큰 집합은 출력 변수와 관련된 부분과 잡음과 관련되지 않은 부분의 두 부분으로 나눌 수 있는 것으로 알려져 있습니다. 여기에서 Burnakov는 결과와 관련이 없는 것들을 제거하려고 노력하고 있습니다.
추신.
트렌딩 TS(BUY, SELL)를 구축할 때 모든 종류의 자동차는 소음입니다!
당신이 보는 것은 시장의 작은 부분이며 가장 중요한 것이 아닙니다. 피라미드를 거꾸로 세우는 사람은 없습니다.
당신이 보는 것은 시장의 작은 부분이며 가장 중요한 것이 아닙니다. 피라미드를 거꾸로 세우는 사람은 없습니다.
입력 데이터로 뉴런을 훈련시킨 다음 가중치를 살펴보았습니다. 입력 데이터의 가중치가 작은 경우 필요하지 않을 수 있습니다. SanSanych의 기사 https://www.mql5.com/ru/articles/1165 덕분에 R(Rattle)을 사용하여 이 작업을 수행했습니다.
실제로이 접근 방식을 확인하지 않았고 흥미롭지 않은 것으로 나타났습니다. 나는 input_1 input_3 input_5 input_7 input_9 input_11을 취할 것입니다
입력 데이터로 뉴런을 훈련시킨 다음 가중치를 살펴보았습니다. 입력 데이터의 가중치가 작은 경우 필요하지 않을 수 있습니다. SanSanych의 기사 https://www.mql5.com/en/articles/1165 덕분에 R(Rattle)을 사용하여 이 작업을 수행했습니다.
실제로이 접근 방식을 확인하지 않았고 흥미롭지 않은 것으로 나타났습니다. 나는 input_1 input_3 input_5 input_7 input_9 input_11을 취할 것입니다
) 흠. 매우 흥미로운 것으로 밝혀졌습니다.
해명 질문. 그리고 13, 14, 16과 같이 가중치가 작은 입력을 더 켜보는 것은 어떻습니까? 가중치에 따라 정렬된 입력 및 가중치의 다이어그램을 보여줄 수 있습니까?
죄송합니다. 처음에는 이해하지 못했습니다. 예, 이러한 입력은 당연히 그래야 하는 큰 모듈로 가중치를 갖습니다.
시각적으로 모든 가중치는 두 그룹으로 나뉩니다. 중요/중요의 원칙에 따라 구분해야 한다면 5,11,7,1,3,9가 명확하게 구분되는데 이 세트로 충분하다고 생각합니다.