知識ではなく(正しい手順による)練習(本人の努力)あるのみ選んだ銘柄が当たろうが外れようが、つねに勝てる状況を作り出すそのためには、市場がもつ不確実性をかぎりなく排除する必要があります。株式投資は予測するものではなくルールに沿って選ぶものです。機械学習で購入銘柄を選択するという魅惑の物語(4度目の正直)です。「オーバーフィッティング(カーブフィッティング)」とはシステムを過去の相場にぴったり合うように過剰に最適化してしまうことです。次のような理由で発生します。機械学習なので「3」「4」は避けられません。今回は「1」「2」を考えます。重要でない説明変数を削除し、重要そうな騰落レシオを追加、加えて学習させる銘柄数を増やしてみます。銘柄の中には過去20年間で株価調整を行ったものもあります。残念ながら、Protraの出力するCSVファイルは株価調整がされていません。株価調整を考慮しないと、株式分割が行われた日を境に株価が大きく変動したように見え、株価の過去データ分析ができません。このため、SMAなどの値にも大きな影響を与えます。Protraのソースコードを確認すると分割調整のデータを保有している事がわかりました。分割調整したCSVを出力するには「Protra.Lib/Data/PriceData.cs」を次のように修正します。株価データをCSV形式に変換する。開始する銘柄コードを指定する。終了する銘柄コードを指定する。完了したらtrueを中断したらfalseを返す。株価データをCSV形式に変換する。//////開始する銘柄コードを指定する。///終了する銘柄コードを指定する。完了したらtrueを中断したらfalseを返す。null)continue;これでCSVは手に入りました。騰落レシオを説明変数に追加する騰落レシオは、移動平均線、MACD、RSI、RCI等のミクロ的なテクニカル指標とは異なり、マクロ的なテクニカル指標です。具体的には、相場の買われすぎ感(過熱感)、売られすぎ感(割安感)を教えてくれます。そのため、市場の体温計とか、相場の体温計と言われています。RSIなどのテクニカル指標的には下がる理由が見つからなくても、市場全体が下がっているから下落した。いうパターン分析などに有効な指標だと考えています。実装するには東証一部のリストを手に入れる必要があります。DataFrameをインデックスで横方向に結合する複数の銘柄の結合が必要です。動作がそれぞれ異なります。concatが適切です。0、1・・・と振りなおされます。マルチプロセスでpandas.concatで結合する東証一部2161銘柄のCSVファイルを読み込み計算させる必要があります。ファイルの読み込みには並列処理を使います。startprint('csv読み込み時間:{:.3f}s'.format(process_time))結果は次のようになりました。float64困った・・、メモリが足りません。PandasやNumPyの並列処理だったり、メモリに乗り切らないデータを扱う際などにはDaskライブラリが便利です。スピードが落ちるし、毎回計算するのは嫌なので困りました・・・・。Protraで予め騰落レシオを出力させる最後の手段はProtraで「騰落レシオ」を計算させてCSV保存し、利用します。df_train["updown"]出力した騰落レシオCSVと株価は日付のインデックスで結合します。日付フォーマットが異なるのでゼロパディングしています。実際にLightGBMに解かせてfeature_importances_を確認すると、機械学習が「騰落レシオ」の指標を重要視していることが伺えます。複数銘柄で学習データ作って分析する学習データのほとんどが日経平均や、1つの企業の株価データのみです。そこで、ある1社(もしくは日経平均)だけでなく、9社の株価を学習させてみます。銘柄は時価総額の高い順に1000~9000台から一つずつ選びました。業種に対する偏りを排除するためです。"volume"))なお予測データから「3%上がる」と判断したものだけ抽出し、バックテストにかけています。結果は次のようになりました。!"訓練データの精度(Accuracy)は2%で、未学習・・つまり全く学習できていません。バックテスト結果は次のようになりました。1998/01/05~2020/01/24における成績です。9銘柄1998/01/05~2020/01/24における成績です。-6.88%利益曲線は次のとおりです。勝率は気にしないとして、プロフィットファクターが低すぎる。結果は次のようになりました。!"こちらも訓練データの精度(Accuracy)は2%で、未学習・・つまり全く学習できていません。バックテスト結果は次のようになりました。1998/01/05~2020/01/24における成績です。9銘柄1998/01/05~2020/01/24における成績です。-11.10%利益曲線は次のとおりです。グラフを見ると、まだこっちの方が良さそうです。勝率51%、プロフィットファクター1.25で魅力を感じません。まとめ複数銘柄を一つの学習モデルで解くことが無理があったのかな・・・でも、一般的なシステムトレードの手法なんだけどなぁ。データ分析って仮説を検証する作業だと思ってますが、株価予測に関しては全く思ったようにいきません。本職の人も多く、それでも上手く行って無いので、一生無理かも・・時間の無駄かな。分析が足りないので今後も両方の手法でバックテストを確認してみます。ここからがスタートなんだろうなぁ・・。前回、勝率8割、プロフィットファクター7の過学習結果を見ただけに、ショボく見えます。ソースコードあまり曲線がキレイでなく、前回のコードに前述のソースコードを加えるだけなので省略します。なにやら一通のメールが届いてました。...斉藤正章氏の「順張り買い」手法の有効性検証(システムトレード)8月6日です。今日は一日、平和の事を考えて過ごす日です。曲線とAUCで精度65%)日本では5つの要因でサラリーマンの給料は上りません。...アノマリー(曜日)の有効性検証(protraシストレ)バックテスト環境を構築できたら、検証したかった一つに「アノマリー」があります。...「中振連」サイト作成業務をしつつ「名刺」を作ることにしたあ~気まぐれ日記とは言え、書くときは連続で本当に書くなぁ...。...4点チャージ投資法の有効性検証(protraシストレ)3点チャージ投資法というのは下落相場において、多くの銘柄に売買サインが出ます。...機械学習を使った株価予測(pandas-profiling、create_tree_digraphで可視化する)株式投資は、予測するものではなくルールに沿って選ぶものです。...機械学習を使った株価予測(ファンダメンタルズ指標導入でAUC=0.70超え)株式投資は、予測するものではなくルールに沿って選ぶものです。...機械学習を使った株価予測(関連論文・サイトを調査してみる)株式投資は、予測するものではなくルールに沿って選ぶものです。