私は次のことを行うプログラム (いくつかのペア取引戦略) を持っています (または実際に取り組んでいます):
- postgres データベースにある大規模なデータ セット (財務データ: 100 株までの日時インデックスと株価) のサブセットを取得します。
- データを消去し (NaN が 30% を超える銘柄をドロップ)、リターンとインデックスを計算します (各銘柄の最初の観察に関連する)。
- 株式ペアのすべての組み合わせを見つけて、相関関係を計算します (実際にはそれに似た尺度ですが、ここでも重要です)
- 相関が最も高いペアを最低にランク付けするか、相関 > 定義されたしきい値、つまり 0.9 を持つペアのみを選択します。
- 両方の方法で共和分についてこれらのペアのそれぞれをチェックしてください! テスト値に従ってランク付けします
- 上位 n 個、つまり 10 個のペアを選択して取引し、移動平均と標準偏差に基づいてシグナルを計算します。
- 「サンプル外」ウィンドウを取得し、株を取引する
- 日誌に毎日の帰省(つまり 5 日間)を記録する
- いくつかの統計を計算する
これらの 9 つの手順の後、最初からやり直して、別のトレーニング ウィンドウを取得し、分析を実行します...
私のアプローチは次のようになります - より良いものを見つけたら修正してください:
1. プログラムからできるだけ多くの関数を抽出する
2. ステップ 1-9 を複数のトレーニング ウィンドウとトレーディング ウィンドウでループする
そして私の結果の質問(ここフォーラムの多くのスレッドに触発され、つまり、Pythonコードをより高速に実行する方法
- コードのどの部分を並行して実行できるかを特定するにはどうすればよいですか?
- どういうわけか、それは私にはまったく些細なことのように思えます。マルチプロセッシングを使用できるように、コードを「書き直す」ために適用する手法は何ですか?
- また、常に明らかであるとは限りません: ループを関数として書き換えます。常に注目すべき特定の角度はありますか?
numba.jit()
" " すべての関数に意味がありますか?- データのすべての形式を に変更する必要があります
float64
か? どのような不利益が発生する可能性がありますか?(現時点では、それらは「標準」の数値です) - ループをいつベクトル化できるかを確認できるチェックリストはありますか?
多くの - かなり概念的な - 質問をお詫び申し上げますが、上記の「痛み」のポイントをすべて理解できれば、「論理的」理解が本当に向上し、新しい Python ジョイナーにとっても非常に有益になると思います。