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

 
mytarmailS:

えーと、"Y"の最後にNAを付けて、同じ NAを 消すのではなく、SomeDataの最後の行を消すだけなら、同じになりませんか?

本当に違いがわからない、もう完全にオーバーヒートしてしまったのかも((

全く同じです。ただ、私はそのようなやり方をしていないので、あなたの解決策がわからなかっただけです。
 
mytarmailS:
私は申し訳ありませんが、私は方法がわからない、それはちょうど動作しません、私は何回試してみました、あなたはそれをあなたの方法を試して、私はあなたが知っていたターゲット、そしてあなたがそれを行う方法を教えてください。
任意のパッカーですべてを梱包し、ファイルを添付します。
 
サンサニッチ・フォメンコ
任意のパッカーですべてを梱包し、ファイルを添付します。

何度も試しましたが、うまくいかず、フォーラムから放り出されて終わりです...。

最初のコードは特徴の作成で、2番目はモデルのトレーニングです。

 
mytarmailS:

何度も試しましたが、うまくいかず、フォーラムから放り出されて終わりです...。

最初のコードは特徴の作成で、2番目はモデルのトレーニングです。

オッケーです。ありのままでいい。私もやってみます。明日
 
mytarmailS:

微分する場合、系列が1要素短くなると自動的にシフトするので、あとはサンプル(観測値のある表)を最後の要素だけ短くすればいいだけです

コードの中で不安になることが2つあります。

1) 予測にohlcを使うので、一番最後のバーは予測に使えない。なぜなら、予測はバーの始めに行い、hlcはバー全体の寿命の間に変化するからである。そこで、完全に形成された最後のバーを使ってモデルを教え、形成されていないものを使って予測します。ターゲットを1小節ではなく、2小節ずらす必要があります。
高値、安値、終値を無視して始値のみで予測するのであれば、ターゲットを1本ずらすことは許容範囲です。

2)ターゲットにOpenではなくCloseを使用している。ある種の戦略上重要なのか、それとも単なる遊びなのか。結局のところ、私たちは通常、バーの最初に取引を開始し、次の新しいバーで 反転するか、離れるか、終了します。そして、学習されたモデルは、現在のオープンから次のオープンまでの価格上昇を予測することが重要である。
現在のバーの終値は、次のバーの始値と必ずしも一致しません。つまり、終値をターゲットとすることで、最初のエラーは回避できますが、代わりに間違った増分が発生する可能性があります。今調べてみると、通常、価格テーブルのクローズは次のバーのオープンと一致しないので、あなたの目標値は非常に疑わしいです。

ローソク足が過剰に描画されている場合、それを回避する必要があります。
移動窓、最初の100バー(100は単なる乱数であり、あなたのコードのためのバーの最小数= 23、そしてそれ未満であればローソク足はエラーになります)、指標の値を見つけ、それらの最新のものだけを残し、関連するターゲットを見つけ、最終テーブルにそれをすべて追加してください。ウィンドウを1小節分前にずらし、それを繰り返す。一度に全部を数えるより何十倍も遅いですが、安全です。そして、両方の結果を比較して、ロールオーバーの有無を結論づけることができるのです。

スライディングウィンドウの大きさを変えて、結果が変わるかどうか見てみるのもいいと思います。この場合、ウィンドウの幅は、インジケータ自体の内部で一種の指数関数として機能することになります。結果が変わるようであれば、結果が変わらなくなるまでウィンドウ幅を大きくする必要があります。例えば、mt5のzigzagはこの値を100本としており、100本以上の幅があっても結果には影響しません。

まず、このコードでtraining/testテーブルを作成してみてください。テーブルと比較して、100%一致する場合は、オーバーレイを見ることはありません。
そして、indicatorDepth-スライドウィンドウ幅を大きくして、結果が変わるかどうか、また、indicatorDepthを大きくしても結果に影響がない場合、そのような値を見つけることができるかどうか、試してみてください。

if(!require(quantmod)){ install.packages("quantmod", dependencies = TRUE); library(quantmod) }
if(!require(rusquant)){ install.packages("rusquant", repos="http://r-forge.r-project.org", dependencies = TRUE); library(rusquant) }
if(!require(candlesticks)){ install.packages("candlesticks", repos="http://r-forge.r-project.org", dependencies = TRUE); library(candlesticks) }


tryCatch({
  load("SPFB.RTS.rdata")
}, error = function(e){
  getSymbols("SPFB.RTS", src = "Finam", period="5min", from = Sys.Date()-500)
  save(SPFB.RTS, finam.stock.list, file = "SPFB.RTS.rdata")
  SPFB.RTS <<- SPFB.RTS
  finam.stock.list <<- finam.stock.list
})

chart_Series(tail(SPFB.RTS, 100))


indicatorDepth <- 23

tryCatch({
  load("trainData.rdata")
}, error=function(e){
  trainData <<- matrix(NA, ncol=60, nrow = nrow(SPFB.RTS)-2)
  for(i in (indicatorDepth+1):(nrow(SPFB.RTS)-2)){
    X1  <- as.numeric(tail(CandleBodyLength(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X2  <- as.numeric(tail(CandleLength(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X3  <- as.numeric(tail(CSPDarkCloudCover(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X4  <- as.numeric(tail(CSPDoji(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X5  <- as.numeric(tail(CSPEngulfing(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X6  <- as.numeric(tail(CSPGap(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X7  <- as.numeric(tail(CSPHammer(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X8  <- as.numeric(tail(CSPHarami(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X9  <- as.numeric(tail(CSPInsideDay(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X10 <- as.numeric(tail(CSPInvertedHammer(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X11 <- as.numeric(tail(CSPKicking(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X12 <- as.numeric(tail(CSPLongCandle(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X13 <- as.numeric(tail(CSPLongCandleBody(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X14 <- as.numeric(tail(CSPMarubozu(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X15 <- as.numeric(tail(CSPNHigherClose(SPFB.RTS[max(1, i-indicatorDepth):i,],N = 3), 1))
    X16 <- as.numeric(tail(CSPNLowerClose(SPFB.RTS[max(1, i-indicatorDepth):i,],N = 3), 1))
    X17 <- as.numeric(tail(CSPOutsideDay(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X18 <- as.numeric(tail(CSPPiercingPattern(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X19 <- as.numeric(tail(CSPShortCandle(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X20 <- as.numeric(tail(CSPShortCandleBody(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X21 <- as.numeric(tail(CSPStar(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X22 <- as.numeric(tail(CSPStomach(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X23 <- as.numeric(tail(CSPTasukiGap(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X24 <- as.numeric(tail(CSPThreeInside(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X25 <- as.numeric(tail(CSPThreeMethods(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X26 <- as.numeric(tail(CSPThreeOutside(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X27 <- as.numeric(head(tail(nextCandlePosition(SPFB.RTS[max(1, i-indicatorDepth):i,]), 2), 1))
    X28 <- as.numeric(tail(TrendDetectionChannel(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    X29 <- as.numeric(tail(TrendDetectionSMA(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
    target <- as.numeric(SPFB.RTS[i+2,"SPFB.RTS.Open"]) - as.numeric(SPFB.RTS[i+1,"SPFB.RTS.Open"])
    trainData[i,] <<- c(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16,X17,X18,X19,X20,X21,X22,X23,X24,X25,X26,X27,X28,X29,target)
    cat(i, "/", nrow(SPFB.RTS)-2, "\n")
  }
  colnames(trainData)[-ncol(trainData)] <- paste0("pred",1:(ncol(trainData)-1))
  colnames(trainData)[ncol(trainData)] <- "target"
  save(trainData, file="trainData.rdata")
})

# trainData <- trainData[-(1:indicatorDepth),]
 
Dr.トレーダー

私は、コードの中で2つのことが気になっています。

1) 予測にはohlcを使うので、バーの先頭で予測を行い、バーの寿命の間にhlcが変化するため、最新のバーは予測に使用することができない。そこで、完全に形成された最後のバーを使ってモデルを教え、形成されていないものを使って予測します。ターゲットを1小節ではなく、2小節ずらす必要があります。
ターゲットを1小節にした場合、高値、安値、終値を無視し、始値のみで予測することができます。

私は問題を理解していない:我々は、前回の終値に対する現在の終値の位置を予測し、我々は現在のろうそくを知らない、我々はそれがすでに閉じているので、それは前のものであることを知っている、その後、すべてのOHLC価格はすでに形成されている、私は慎重に、何が間違っているのか理解できない

2)ターゲットにOpenではなくCloseを使用している。何らかの戦略上重要なのか、それとも単なる遊びなのか.........。

スピードと利便性のために、まったく無意味に撮影される

ローソク足が引きすぎたら、それを回避するために.........。

SPFB.RTS.rdataとは 何ですか?

どこから来るの?とか、なぜ上書きされるのかとか、全く手がかりがありません(


tryCatch({
  load("SPFB.RTS.rdata")
}, error = function(e){
  getSymbols("SPFB.RTS", src = "Finam", period="5min", from = Sys.Date()-500)
  save(SPFB.RTS, finam.stock.list, file = "SPFB.RTS.rdata")
  SPFB.RTS <<- SPFB.RTS
  finam.stock.list <<- finam.stock.list
})

そして最も重要なことは、確かにデータを使って何かを教えようとしたことがあるのに、なぜそのことに触れないのか、ということです。

 
mytarmailS:

そして何より、データを使って何かを教えようとしたはずなのに、なぜそのことに触れないのでしょうか。

トレーニングテーブルの進捗は、55857人中16527人。作成されたら、すぐに教えてあげようと思っています。

mytarmailS:

前クローズに対する現クローズの位置の予測

それはあなた次第です。いつものストラテジーが新しいバーの 始まりで判断してトレードを開始するのが不思議なくらいです。
そして、ちょうどバーが終わるタイミングで予測し、トレードを開始する必要があるのです。ちょっと不便、ターミナルにある新しいバーなら簡単に捕まえられる。しかし、「現在のバーの終わり、新しいバーが開く1秒前に、現在の終値がすでに確定していることを期待して、取引を開始する」というのは、私には漠然としすぎているように思います。

mytarmailS:

SPFB.RTS.rdataとは 何ですか?

ダウンロードした名言ダウンロードされ、このスクリプトを実行するたびにゴミにならないようにrdataに保存され、それらがダウンロードされるまで秒単位で待機しない。もし、先にダウンロードしてrdataファイルに保存されていた場合は、そこから取得されます。

 
Dr.トレーダー

ありがとうございました。

 
Dr.トレーダー

コードの中で不安になることが2つあります。

1) 予測にohlcを使うので、最新のバーを予測に使うことはできない。なぜなら、バーの先頭で予測することになり、hlcはバーの寿命の間に変化してしまうからだ。そこで、完全に形成された最後のバーを使ってモデルを教え、形成されていないものを使って予測します。ターゲットを1小節ではなく、2小節ずらす必要があります。
高値、安値、終値を無視して始値のみで予測するのであれば、ターゲットを1本ずらすことは許容範囲です。

2)ターゲットにOpenではなくCloseを使用している。ある種の戦略上重要なのか、それとも単なる遊びなのか。結局のところ、私たちは通常、バーの最初に取引を開始し、次の新しいバーで 反転するか、離れるか、終了します。そして、学習されたモデルは、現在のオープンから次のオープンまでの価格上昇を予測することが重要である。
現在のバーの終値は次のバーの始値と必ずしも一致しません。終値をターゲットとすることで、最初のエラーは回避できますが、代わりに誤った増分が発生する可能性があります。今調べてみると、通常プライステーブルのクローズは次のバーのオープンと一致しないので、目標値は非常に怪しいです。

物事を複雑にしているように思えます。

1.1つ目の問題は、2つ目の問題と密接に関係しています。Closeをターゲットとした場合、他の3つの価格はすべて形成され、変化しない。一歩先を予測する場合、目標を1ポジションずらす必要があります。

2.また、クローズとオープンの価格差の議論も納得がいきません。何TFか何曜日かである。H1を例にとると、3種類のバリエーションがあることになります。

  • これらの値が一致する場合、または数ピップス異なる場合が正常なケースです。これは、利益の何パーセントを取ろうとしているのか?
  • 100点満点になりやすいギャップのケース。クローズとオープンの間でなければならないのでしょうか?10月7日、終業時刻の数分前に必死の動きがあった。
  • 金曜日から月曜日までのケース。だから、それはまったく別のケースなんです。

それが頭に浮かぶだけです。そして、もっといろいろな状況が考えられます。実際の取引は模型とは全く違うというのが彼らの言い分です。現時点では、ある程度理想的なものに絞って、それ以外のドラえもんなどは別途プログラムする方が便利です。

3.入札のやり過ぎについて。

TAの聖なる牛。それは、古くから不変の真理とされている。

根拠は?

アナリシスの実務家にとって、過去に関する画期的な結論を導き出すためのデータを変えることは許されないことです。もう一度:過去は受け入れられないため。

私たちは予測の仕事をしており、新たに入手したデータに基づいて過去の見解を変えることができるだけでなく、変えなければなりません。再描画しないデータには、ラグという代償があるのです。

ここで、相場反転の前触れである新バーが登場する。しかし、私たちは、聖なる牛に餌をやり続けながら、「分析」のセクションから取り出した何らかのアイデアのために、歴史観を変えることはしないのです。

指標変化を恐れてはいけない。

新しいバーが登場しました。そして、その到着後、私たちはこの新しいバーが作り出した条件のもとで意思決定をしなければならない。次の予測まで、最小限の誤差で未来を予測する必要があるのです。歴史上、予測誤差の大きさと指標の種類の変化を関連づけた出版物を見たことがないのですが。

これはすべて机上の空論です。モデルを構築し、その推定値を取得する必要があります。それが、私の仕事です。

 

5000の価格からなる小さなデータセットを作成

スクリプトが正しく動作しなかった。

すべて集計したところ、警告が出た。

....
....
....
5677 / 5688
5678 / 5688
5679 / 5688
5680 / 5688
5681 / 5688
5682 / 5688
5683 / 5688
5684 / 5688
5685 / 5688
5686 / 5688
5687 / 5688
5688 / 5688
Warning message:
In readChar(con, 5L, useBytes = TRUE) :
  cannot open compressed file 'trainData.rdata', probable reason 'No such file or directory'

データ自体

head(trainData)
     <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[2,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[3,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
     <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[2,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[3,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
     <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[2,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[3,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
     <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> target
[1,]   NA   NA   NA   NA   NA   NA   NA   NA     NA
[2,]   NA   NA   NA   NA   NA   NA   NA   NA     NA
[3,]   NA   NA   NA   NA   NA   NA   NA   NA     NA
[4,]   NA   NA   NA   NA   NA   NA   NA   NA     NA
[5,]   NA   NA   NA   NA   NA   NA   NA   NA     NA
[6,]   NA   NA   NA   NA   NA   NA   NA   NA     NA


tail(trainData)
                <NA> <NA>         <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[5683,] 8.621061e-05   10 0.0016378604  190    0    1    0    0    0    0    0    0    0
[5684,] 6.036304e-04   70 0.0010346611  120    0    0    0    0    0    1    0    0    0
[5685,] 1.208355e-03  140 0.0018122977  210    0    0    0    0    0    0    0    0    0
[5686,] 6.911447e-04   80 0.0019009764  220    0    0    0    0    0    0    0    0    0
[5687,] 2.592577e-04   30 0.0007778402   90    0    0    0    0    0    0    0    0    0
[5688,] 9.501188e-04  110 0.0016415396  190    0    0    0    0    0    0    0    0    0
        <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[5683,]    0    0    0    0    0    0    1    0    0    0    0    0    0    0    0    0
[5684,]    0    0    1    0    0    0    0    0    0    1    0    0    0    0    0    0
[5685,]    0    0    0    0    0    0    0    1    0    1    0    0    0    0    0    0
[5686,]    0    0    0    0    0    0    0    1    0    1    0    0    0    1    0    0
[5687,]    0    0    1    0    0    0    0    0    0    0    0    0    0    0    0    0
[5688,]    0    0    0    0    0    0    1    0    1    0    0    0    0    0    1    0
        <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[5683,]    0    0    1    0    0    0    0    0    0    0    0    0    0    0    0    0
[5684,]    0    1    0    0    0    0    0    0    0    0    0    0    0    0    0    0
[5685,]    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    1
[5686,]    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
[5687,]    1    0    1    0    0    0    0    0    0    0    0    0    0    0    0    0
[5688,]    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0    0
        <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> target
[5683,]   NA   NA   NA   NA   NA   NA    0    1    0    0    0    0    1   -1    -70
[5684,]   NA   NA   NA   NA   NA   NA    0    1    0    0    0    0    1   -1   -140
[5685,]   NA   NA   NA   NA   NA   NA    0    0    1   -1    0    0    1   -1    -90
[5686,]   NA   NA   NA   NA   NA   NA    0    0    1   -1    0    0    1   -1     20
[5687,]   NA   NA   NA   NA   NA   NA    0    0    1   -1    0    0    1   -1    100
[5688,]   NA   NA   NA   NA   NA   NA    0    0    1   -1    0    0    1   -1     50

データには必ずNAがあり、自分でやったということは除外しないが