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

 
mytarmailS:

1) そうかもしれませんが、このネットは意思決定の方法を学ぶことができ、教師のいない通常の分類ではありません。トレード方法は問わないが、1日あたり0.5%のドローダウンのうち1%以上の利益が欲しい、そのためのルールや組み合わせを探し出してくれる。もし私が間違っていて、ここで無意味なことを話していたら、私のために訂正してください)。

なるほど、それは思いつかなかった、その通りです。そこで、シャープレシオ(またはリカバリーファクター)が最大になるようにニューラルネットワークを条件付けし、Rで実際の相場での簡単なFXテスターのようなものを作ってモデルをテストし、進化を評価するのがよいでしょう。しかし、それだけで奇跡が起こるわけではなく、再トレーニングの問題は残りますし、データをトレーニングサンプルとテストサンプルに分け、モデルの進化の過程で最終的に推定するためのクロスバリデーションを行わなければなりません。クロスバリデーションでシャープレシオを扱う方法 私はすぐに考えることができませんでした、私の意見では、それは各バー上の重要な精度ではなく、連続取引自体、すべてのドローダウン、スプレッド、各新しい取引の手数料であるため、テストサンプルでランダムバーを削除することは不可能であろう。

アレクセイ・ブルナコフ

R用のパッケージを準備しているようです。私たちはそれに注目すべきです。

パッケージはすでにあるのですが、何パーセントできているのか、今のところgithabにあります。ここでは、よりシンプルな例として、記事の続きをご紹介します。ネットワークに根こそぎ教えてしまうのです。

http://gekkoquant.com/2016/07/17/rneat-square-root-neural-net-trained-using-augmenting-topologies-simple-example/

後で完成させました。

アヤメの分類を行い、例によってアタッチメントのコード(モデルは分類に失敗したので、回帰のためにすべてのクラスを数字に置き換え、結果を最も近い数字レベルに丸めました。おそらく、もっと簡単にどうにかできたはずだ)。
学習用のデータを50%しか取らなかったのですが、検証では95%成功し、非常に良い結果でした。グラフから判断すると、モデルはそれ自体で最初の予測因子を除去することさえ可能です。

FXはアイリスより複雑です :)しかし、その結果はもっと悪いものになるでしょう。

また、記事のパート3とパート4では、モデルの学習に異なる関数を使用していることに気づきました。
例えば、FXのチャートを観察し、リアルタイムで取引を開始/終了させることができます。
パート4は、用意された例でモデルを学習し、結果を予測するだけです

ファイル:
 
Dr.トレーダー

1)そうか、それは考えなかった、その通りだ。それなら、シャープレシオ(またはリカバリーファクター)が最大になるような条件をニューラルネットワークに与えて、実際の相場での簡単なFXテスターのようなものをRで作ればよいでしょう

2)また、記事のパート3とパート4では、モデルの学習に異なる関数を使用していることに気づきました。
例えば、FXのチャートを観察し、リアルタイムで取引を開始/終了させることができます。
パート4は、用意された例でモデルを学習させ、結果を予測するだけです

1) その通りです!利益/損失はあくまで例として、リカバリーファクターを取ろうと思っていましたが、シャープは基本的に悪くありません。

2) 確かに、4番目の記事で著者はすでにパッケージのようなものを作っています。すべての「R」基準では、それは単なるモデル-ターゲットベクトル-「predict」による予測-ですが、このアプローチは私たちには通用しません。そのため、「理解を助ける」と言ったのですが、「サンプル付きの既製のパッケージ」と比べると、すべてがはるかに複雑です。だから、私たち全員が参加できたら素晴らしいことだと思います。

 
mytarmailS:

1) 全くその通り!損益はあくまで例であり、リカバリーファクターを取ろうと思っていたが、シャープが基本的に悪いということはない

2) 確かに、4番目の記事で著者はすでにパッケージのようなものを作っています。すべての「R」基準では、それは単なるモデル-ターゲットベクトル-「predict」による予測-ですが、このアプローチは私たちには使えません。そのため、「理解を助ける」と言ったのですが、「サンプル付きの既製のパッケージ」と比べると、すべてがはるかに複雑です。だから、私たち全員が参加できたら素晴らしいことだと思います。

自分たち以外に誰が教えるのか?ソースコードを手に入れる勉強してください。あと、関数の微分可能性についても。ネットワークに何らかの円滑な機能を投入する必要があります。そして、私たちに教えてください-そして、私たちはあなたにアドバイスをします。
 
アレクセイ・ブルナコフ
ネットワークに何らかの円滑な機能を投入する必要があります。そして、あなたは私たちに教えてくれ、私たちはあなたに助言をします。

口出しして申し訳ないのですが、スムーズどころかノーマライズされています。

NSが既知の領域を超えることがないように。

こんな感じ。

 

なんでこのネトウヨがいじめられてるのか理解できない。

なんといっても、安っぽいパッケージを超えて、広大なR!しかし、いや、古い罪はどんどん引きずっていく・・・。

例えば、キャレット。150のモデルだけでなく、便利な前処理や予測関数も山ほどある。

だから、ネトウヨもネトウヨも...。

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

なんでこのネトウヨがいじめられてるのか理解できない。

なんといっても、安っぽいパッケージを超えて、広大なR!しかし、いや、古い罪はどんどん引きずっていく・・・。

たとえば、キャレット。150のモデルだけでなく、便利な前処理や予測関数もたくさんあるんですよ。

だから、ネトウヨもネトウヨも...。

では、あなたのカレットと百戦錬磨のモデルを実際に見せてください。:)

 
ヴァディム・シシュキン

だから、早くあなたのカレットと百花繚乱のモデルを見せてください。:)

ちなみに、私自身はカレットを使って、FXで満足のいく結果を出しています。

私自身、キャレットを使用しており、FXで満足のいく結果を得ています。

####
##########
############## start experiment
##########
####

library(caret)
library(gbm)
library(doParallel)

        
# tuning GBM - перебор параметров обучения по сетке
gbmGrid <- expand.grid(interaction.depth = seq(from = 3, to = 9, by = 2)
                  , n.trees = seq(from = 600, to = 1200, by = 300)
                  , shrinkage = seq(from = 0.01, to = 0.02, by = 0.005)
                  , n.minobsinnode = seq(from = 30, to = 60, by = 30))

######################
# start training cycle - ввод основных переменных и массива для результатов

validating_arr <- data.frame()
max_best_models <- 1
counter <- 1
max_inputs <- 15
max_cv_folds <- 5
max_bag_fract <- 1
distributions <- c('gaussian', 'laplace')
start <- Sys.time()
        
for (best_inp_num in seq(from = 3, to = max_inputs, by = 3)){
        
        for (cv_folds in 2:max_cv_folds){
                
                for (bag_frac in seq(from = 0.2, to = max_bag_fract, by = 0.2)){

#########################
# prepare training scheme - параметры caret
                                        gbmControl <- trainControl(method = 'cv'
                                                                      , number = cv_folds
                                                                      , verboseIter = F
                                                                      , returnData = F
                                                                      , returnResamp = 'all'
                                                                      , savePredictions = 'none'
                                                                      , summaryFunction = mymetrics
                                                                      , search = 'grid'
                                                                      , allowParallel = T)

########################
# initiate paralleling
                        cores <- 4 #detectCores()
                        cl <- makePSOCKcluster(cores)
                        registerDoParallel(cl)
                        
                        # train the model - обучение моделей с кроссвалидацией. Используется GBM.
                        best_models <- train(training[, ncol(training)] ~.
                                                , data = training[, 1:(ncol(training) - 1)]
                                                , method = 'gbm'
                                                , distribution = distributions[2]
                                                , bag.fraction = bag_frac
                                                , metric = 'mae_improve'
                                                , maximize = T
                                                , trControl = gbmControl
                                                , tuneGrid = gbmGrid)
                        
                        # stop paralleling
                        stopCluster(cl)
                        
                        # summarize the model - сохранение n лучших моделей
                        best_models_arr <- as.data.frame(cbind(best_models[[4]][1]
                                                                    , best_models[[4]][2]
                                                                    , best_models[[4]][3]
                                                                    , best_models[[4]][4]
                                                                    , best_models[[4]][5]
                                                                    , best_models[[4]][6]
                                                                    , best_models[[4]][7]
                                                                    , best_models[[4]][8]))
                        
                        rm(best_models)
                        
                        best_models_arr_ordered <- best_models_arr[order(best_models_arr$mae_improve, decreasing = T), ]

# далее - обучение лучших моделей и их валидация


 
ありがとうございます。:)
 
SanSanych Fomenko:

なんでこのネトウヨがいじめられてるのか理解できない。

なんといっても、安っぽいパッケージを超えて、広大なR!しかし、いや、古い罪はどんどん引きずっていく・・・。

たとえば、キャレット。150のモデルだけでなく、便利な前処理や予測関数もたくさんあるんですよ。

だから、ネトゲとかネトゲとか...。

通常、図書館は、多くのことができるが平均的か、あるいは、たった一つのことだけを良質なものにすることができます。キャレットは最初のケースですが、何十ものモデルをテストして結果を比較するのは簡単ですが、自分のタスクのために何かを改善するのは難しいです。私のルールに従って予測子を選択 する際に、大きな困難にぶつかりました。caretはシミュレーション・アニーリングで予測子を列挙できますが(そして遺伝学)、私のフィットネス関数を推定に使うことはできません。しかし、caretは独自のルールで学習データとテストデータを制御し、独自のクロスバリデーションを行います。
GAやGenSAパッケージを使って予測変数の列挙を行い、私が必要とするルールに従ってモデルとクロスバリデーションの両方を作成するフィットネス関数を1つだけ記述する方が簡単です。

Neuronkaは森より悪くありません、それとの私の結果は、プラス、または最悪の場合、ちょうど預金を失うことなくです。アルゴリズムが異なるため、neuronkaはforestとは異なる予測子を好みますが、予測子の選択ルールはすべてforestと完全に同じです。

neuroncをmt5 EAに転送するのは数分です(Rからcsvに重みを保存し、EAに読み込ませる)。フォレストをmt5に移行するのはもっと難しいでしょう。

 

RNeatをもう少し実験してみたところ、従来のニューラルネットワークと 同じようには扱えないという結論に達しました。

1) 従来のモデルと異なり、RNeatの学習は入力データを用いない。モデルはランダムに生成され、改良され、最後に生データでテストされるといった感じです。通常、モデルは生データを使用し、その上でロジックを構築します。そして、モデルのロジックが正しいか、あるいは単に生データを学習しただけなのかを確認するために、検証サンプリングを使用します。他のモデルと違って、RNeatは生データを記憶する能力は全くありません。なぜなら、RNeatが知っているのは、要求された結果とそれにどれだけ近いかということだけだからです。

2) クロスバリデーションはフロントテストの結果改善には役立たない。我々は、通常のモデルを訓練し、いくつかのクロスバリデーションを実行し、最終的なモデルの適合度スコアのためにすべてのサンプルの誤差を処理することが可能であるということに同意しているようです。RNeatは生データを知らないので、データがトレーニングサンプルであろうとテストサンプルであろうと関係なく、どのような場合でも望ましい結果になるようにロジックを調整する。理論的には、フィットネス関数に使用されるすべてのサンプルから「学習」(より正確には突然変異 :) します。できることは、モデルを適切な精度に訓練し、過剰訓練にならないことを祈るだけです。FXではかなりリスクの高いアプローチです。クロスバリデーションは、学習の後に、フロントテストの結果の最終的な推定値としてのみ使用することができ、フィットネス関数内でこの検証サンプルを使用することはできません。

理由: