2017-11-25 9 views
1

これは私の最初の投稿です。それはテキストの壁のように見える場合は申し訳ありません。 誰かが私の質問を理解し、これを行うことができるサンプルモジュールや、試してみるべきいくつかのコードを提供することができます。 私は時系列CSVデータ、以下の例の行で働いて、列がある(日時、O、H、L、C)可能な限り多くの点を交差する線を調整するPython最適化アルゴリズム

1999-10-26 21:00:00 68.81 68.83 68.07 68.19 
1999-10-27 21:00:00 68.19 68.2 66.83 67.43 
1999-10-28 21:00:00 67.43 68.06 66.91 68.06 
1999-10-29 21:00:00 68.06 68.11 66.31 66.66 
1999-01-11 22:00:00 66.66 67.15 66.09 66.63 
1999-02-11 22:00:00 66.63 67.38 66.42 66.58 
1999-03-11 22:00:00 66.58 67.73 66.42 67.48 
1999-04-11 22:00:00 67.48 67.81 66.54 66.76 
1999-05-11 22:00:00 66.76 68.2 66.54 67.87 

財務価格データに燭台として知られているものであると表現することができます視覚的にそのように:指定された許容範囲を超えて横断ずに今

enter image description here

、私は何を達成しようとしていることは、自動的に、できるだけ多くのウィック(ローソク足の垂直線)を横断するだろうラインをプロットすることですキャンドル本体の数(緑色または赤色の領域)

これは意味をなさないでしょう。 例。多くのウィック(この場合はキャンドルの下)を横切る線は、66.4周りの4番地から始まり、66.55周りの位置9まで上り坂があります。

私は、

上の写真は、私は開始位置を提供する場合、これを行うことができますモジュールはありますか? 基本的に、ベストフィットのラインのようなものですが、赤と緑の領域を横切ることを避けながら、実際にはすべての点を横切っています(ポイントは縦線ですのでx軸上の範囲です)

行が斜めであるためにこれが複雑すぎる場合は、同じ行を行う水平線(x軸から1つのみの値)を指定することもできます。たとえば、最後の2つのレコードのデータL(4番目の列)に見られるように、値66.54も機能します(すべての芯を交差し、最後の2つをタッチします) 黄色の線を参照するか、すべての低芯に触れます

この場合

開始位置キャンドルの値(X軸)は問題ではない、あまりにも

ラインは、例えば、私は5位を選択することができる事前定義された点(にて開始され調整されました最下点である画像)、最良の結果が得られるまで続き、どこでも停止することができます。私はこの2つの点に基づいて角度値を使ってこの線を延長することを計画しています。

私が探している出力は実際には線の終わりの位置(対角線の傾向線ならば(x、y)または単にx軸の値(水平線))です。開始点は、線ができる限りキャンドルの垂直線と交差するアルゴリズムの最適化に基づいて選択され(A)、終了点は(開始点の右側のみを見て)交差する回数を維持するより良い解決策が見いだせなくなるまで、受け入れられた閾値許容差以下の蝋燭のボディ領域を選択する。 (B)

私はBresenhamのラインアルゴリズムと他のものを見てきましたが、このようなtimeseriesデータのpythonでこれをどのように正確に実装するかはわかりません。私はそれがfbprophetを使用するように簡単だったといいです

実際のcsvファイルの重量は最大500MBで最大600万行までです 私は遺伝子とは対照的に網羅的なアルゴリズムを好むでしょう。

私はその間にこれを実行しようとする方法についていくつかのアイデアをしましたが、これはまだ不明である場合、プロセス

をスピードアップする例を持つ任意の適切なモジュールを見つけることができませんでした...私は最大限にしたいですキャンドルの中央に見られるようにラインが垂直線を横切る回数(写真上の白い線)、緑色/赤色の領域を横切って選択された値に制限される回数を保持する回数。

私はプロットを作るためにvisuallisation 例のコードのためにpyqtgraphを使用: http://www.pyqtgraph.org/downloads/0.10.0/pyqtgraph-0.10.0-deb/pyqtgraph-0.10.0/examples/customGraphicsItem.py

答えて

0

私が正しく理解し、あなたが等間隔の縦線セグメントのセットと斜線の交点の数を最大化したい場合(交差する燭台の余裕/不許可は質問を少しあいまいにする)。

私も正しく理解すれば、一度に百万のセグメントが存在する可能性があります。

線の傾きが一定である場合、mせて、次の行が水平になり、エンドポイントが(単位間隔を想定)セグメントiため量m.iによって垂直に平行移動されるように空間を剪断することができます。

次に、縦軸を増加させて端点をソートすると、線を平行移動するときに水平に重なり合うセグメントの数を簡単に取得できます。これはソートのために操作をN Log N、そしてカウント機能を構築するために操作をNとします。

ここで、任意の勾配について、交差の可能な最大数を得ることができます。この関数が十分に滑らかである場合、黄金比法などでこの関数の最大値を検索できます。

+0

私は正しい方向で提案してくれてありがとう。さらなる研究の後、私が探しているのは、2より多くの要素を持つ+1または-1ピアソン相関係数のすべての可能性を返すアルゴリズムだと考えています。 – Cactus

関連する問題