トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 2

 

賞金の条件をはっきりさせる。

最初に 問題を解いた人に5クレジットプレゼント

ソリューションの締切2016年6月30日(木

 

情報量の多い特徴を選択するアルゴリズムを適用して、取引戦略を実行する例もある。

皆さんは、私のブログで「大きな実験」(https://www.mql5.com/ru/blogs/post/661895)をご覧になったことがあると思います。

そして、こんな写真もあります。

5つのペアで1つのパターンを見つけ、25年程度の検証サンプルで正しく推測された取引の割合を検出することを試みました。すぐにはうまくいかなかった。どの予測地平においても、望ましい精度に達しなかった。

次に、1ペアだけ、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時間の時間軸でロングかショートかという「ルールブック」を構築するのです。

その結果、どのような姿になるのか。

уровни предикторов
sell
buy
pval
concat
direction
121121
11
31
2.03E-03
121121
1
211112
3
15
4.68E-03
211112
1
222222
19
4
1.76E-03
222222
0
222311
8
0
4.68E-03
222311
0
321113
7
0
8.15E-03
321113
0
333332
53
19
6.15E-05
333332
0

各行の買い数と売り数の歪度と、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)

次に、検証用サンプルは49個あり、それぞれおよそ5年分である。その上でモデルを検証し、トレードの方向を正しく推測した割合を数えてみましょう。

サンプル別の正しく推測された取引の割合と、この値のヒストグラムを見てみましょう。

そして、すべてのサンプルについて、合計でどれだけ取引の方向を推測したかをカウントします。

> sum(correct_validation_results$`total correct deals`) / sum(correct_validation_results$`total deals`)

[1] 0.5361318

約54%です。しかし、AskとBidの間の距離を克服する必要があることを考慮に入れずに。つまり、スプレッド=1pipと仮定した場合、上記チャートによる閾値は約53%です。

つまり、例えば端末でチャージしやすいシンプルなモデルを30分で練り上げたのです。しかも、委員会でもない。そして、20時間どころか20分も依存関係を探しているのです。全てに於いて、何かがある。

そして、そのすべては、情報量の多い属性を適切に選択したおかげです。

そして、有効なサンプルごとの詳細な統計情報。

sample
correct sell correct buy total correct deals total deals share correct
1 37 10 47 85 0.5529412
2 26 7 33 65 0.5076923
3 30 9 39 80 0.4875
4 36 11 47 88 0.5340909
5 33 12 45 90 0.5
6 28 10 38 78 0.4871795
7 30 9 39 75 0.52
8 34 8 42 81 0.5185185
9 24 11 35 67 0.5223881
10 23 14 37 74 0.5
11 28 13 41 88 0.4659091
12 31 13 44 82 0.5365854
13 33 9 42 80 0.525
14 23 7 30 63 0.4761905
15 28 12 40 78 0.5128205
16 23 16 39 72 0.5416667
17 30 13 43 74 0.5810811
18 38 8 46 82 0.5609756
19 26 8 34 72 0.4722222
20 35 12 47 79 0.5949367
21 32 11 43 76 0.5657895
22 30 10 40 75 0.5333333
23 28 8 36 70 0.5142857
24 21 8 29 70 0.4142857
25 24 8 32 62 0.516129
26 34 15 49 83 0.5903614
27 24 9 33 63 0.5238095
28 26 14 40 66 0.6060606
29 35 6 41 84 0.4880952
30 28 8 36 74 0.4864865
31 26 14 40 79 0.5063291
32 31 15 46 88 0.5227273
33 35 14 49 93 0.5268817
34 35 19 54 85 0.6352941
35 27 8 35 64 0.546875
36 30 10 40 83 0.4819277
37 36 9 45 79 0.5696203
38 25 8 33 73 0.4520548
39 39 12 51 85 0.6
40 37 9 46 79 0.5822785
41 41 12 53 90 0.5888889
42 29 7 36 59 0.6101695
43 36 14 50 77 0.6493506
44 36 15 51 88 0.5795455
45 34 7 41 67 0.6119403
46 28 12 40 75 0.5333333
47 27 11 38 69 0.5507246
48 28 16 44 83 0.5301205
49 29 10 39 72 0.5416667
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: доказательство значимости предсказаний
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: доказательство значимости предсказаний
  • 2016.03.02
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: 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
 

すべての生データは、ブログのリンク先でご覧いただけます。

そしてこのモデルは、ほとんど利益を生まない。MOは半減期レベル。でも、それが私の方向性なんです。

 
サンサニッチ・フォメンコ

常に過去から学ぶ

私たちは何世紀も前からグラフを見ています。両オンで「三兵」、次に「頭肩」を見る。これらの数字のうち、いくつを私たちはすでに見ており、これらの数字を信じ、取引しているのか...。

そして、このようにタスクが設定されている場合。

1.すべてのチャートではなく、特定の通貨ペア、日本の米の取引で3世紀前ではなく、最近発生したものに、自動的にそのような数字を見つけることです。

2)そのような図形-パターンを自動的に探索するための初期データ。

最初の質問に対しては、「ランダムフォレスト」と呼ばれるアルゴリズムを考えてみよう。 このアルゴリズムは、1つまたは複数の通貨の相場、指標、価格の増分など、人間が発明したあらゆるものを入力データとして動作させるものである。10-5-100-200 ...の入力変数です。そして、1本のバーに対応するある時点の値を参照する変数の全セットを取り、これらの入力変数の組み合わせが、履歴データ上でかなり特定の結果、例えばBUYオーダーに対応するようなものを探します。そして、別の注文のための別の組み合わせである「SELL」。このような集合には、それぞれ別の木が対応する。経験上、18000本のバー(約3年分)の入力セットに対して、200~300本の木を見つけることができる。これは、「頭と肩」、「口全体」のほぼ相似形のパターンのセットです。

このアルゴリズムの問題点は、このようなツリーでは、将来遭遇しないような仕様も拾ってしまうことである。これをこのフォーラムでは「スーパーフィッティング」、機械学習では「オーバーフィッティング」と呼んでいます。大きな入力変数の集合全体は、出力変数に関係するものとノイズに関係しないものに分けられることが分かっている。そこでブルナコフは、アウトプットに無関係なものを排除しようとする。

PS.

トレンドTS(BUY、SELL)を構築する場合、どのような種類のワゴンもノイズに関係します

あなたが見ているものは、市場のごく一部であり、最も重要なものではありません。ピラミッドを逆さまに建てる人はいません。
 
イェルラン・イマンゲルディノフ
あなたが見ているものは、市場のごく一部であり、最も重要なものではありません。誰も逆さまにピラミッドを作っているわけではありません。
そして具体的に、何が見えないのか?
 
イェルラン・イマンゲルディノフ
あなたが見ているものは、市場のごく一部であり、最も重要なものではありません。誰も逆さまにピラミッドを作っているわけではありません。
価格履歴とは別に、情報を追加することができます。でも、やはり歴史の中で鍛えなければならない。あるいは、「フレア」。
 

入力データでニューロンを学習させてみて、重みを見る。入力データの重みが小さい場合は、不要と思われます。R(ラトル)でやりました。SanSanychさんの記事https://www.mql5.com/ru/articles/1165 に感謝します。

入力 input_1 input_2 input_3 input_4 input_5 input_6 input_7 input_8 input_9 input_10 input_11 input_12 input_13 input_14 input_15 input_16 input_17 input_18 input_19 input_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 を取る。

Случайные леса предсказывают тренды
Случайные леса предсказывают тренды
  • 2014.09.29
  • СанСаныч Фоменко
  • www.mql5.com
В статье описано использование пакета Rattle для автоматического поиска паттернов, способных предсказывать "лонги" и "шорты" для валютных пар рынка Форекс. Статья будет полезна как новичкам, так и опытным трейдерам.
 
Dr.トレーダー

入力データでニューロンを学習させてみて、重みを見る。入力データの重みが小さい場合は、不要と思われます。R(ラトル)でやりました。SanSanychさんの記事https://www.mql5.com/ru/articles/1165 に感謝します。

入力 input_1 input_2 input_3 input_4 input_5 input_6 input_7 input_8 input_9 input_10 input_11 input_12 input_13 input_14 input_15 input_16 input_17 input_18 input_19 input_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のように、ウェイトが小さい入力をもう少し入れてはどうでしょうか。インプットとウェイトを重量順に並べた図を示してもらえますか?

すみません、最初分かりませんでした。はい、指定された入力は、当然のように大きなモジュロ・ウエイトを持っています。

 

目視では、すべてのウェイトが2つのグループに分かれています。意義があるかないかで分けるなら、5、11、7、1、3、9が明らかに目立つので、このセットで十分だと思います。

理由: