0

n株について、特定の時間内(午前11時から最初の5分など)に発生したすべての取引を(リストに)収集したとします(簡単にするためにn = 2にし、後で適応させます)。堅固な AAA と堅固な BBB があるとします (それが役立つ場合は、liststocks=['AAA', 'BBB'])。リストは次のようになります。

    trades=[['AAA', '2011-01-03', '11:03:51', 21.5],['BBB', '2011-01-03','11:03:57', 31.5],
['AAA', '2011-01-03', '11:04:20', 21.55],
['BBB', '2011-01-03','11:04:19', 32.01], ['BBB', '2011-01-03','11:04:52', 31.7]]

つまり、AAA 株の 2 回の取引と BBB 株の 3 回の取引です。各銘柄の最後の取引を選択すると、シンクロニシティの問題が発生します。アイデアは、各株式の最後の取引を選択し、最も早いものを見つけることです (['AAA', '2011-01-03', '11:04:20', 21.55])。次に、「11:04:20」にできるだけ近い時間の他のすべての株式の取引を選択します。これにより、[「BBB」、「2011-01-03」、「11:04:19」、32.01 が選択されます。 ]。出力は次のようなリストになります。

    C=[['AAA', '2011-01-03', '11:04:20', 21.55],['BBB', '2011-01-03','11:04:19', 32.01]]

どうもありがとう!

4

2 に答える 2

1

パラメータsortedを使用すればそれほど難しくありません。key

読みたくない場合のコードは次のとおりです。後で説明します。

from datetime import datetime

trades=[['AAA', '2011-01-03', '11:03:51', 21.5],['BBB', '2011-01-03','11:03:57', 31.5],
['AAA', '2011-01-03', '11:04:20', 21.55],
['BBB', '2011-01-03','11:04:19', 32.01], ['BBB', '2011-01-03','11:04:52', 31.7]]

trades=[[i[0], datetime.strptime(i[1]+" "+i[2], "%Y-%m-%d %H:%M:%S"), i[3]] for i in trades]

most_liquid, *others, least_liquid = sorted(set(i[0] for i in trades), key=trades.count)

A=sorted((i for i in trades if i[0]==least_liquid), key=lambda n: n[1])[-1]
B=sorted((i for i in trades if i[0]==most_liquid), key=lambda n: abs(n[1]-A[1]))[0]

これが行うことは、最初に各取引を時間の文字列表現から日時オブジェクトに変換することです。datetime.strptimeクラスメソッドでこれを行います。次に、取引をソートして株式の流動性を計算します。は株式*othersに一般化されます。n次に、取引をフィルタリングless_liquidし、時間パラメーターで並べ替えます。次に、名前でフィルタリングし、それと取引more_liquidの絶対差で並べ替えます。A

したがって、必要なオブジェクトはABです。文字列の代わりに日時が含まれるため、指定したとおりにはなりませんが、datetime.strftime関数で簡単に修正できるはずです。

于 2015-06-08T02:55:01.047 に答える