2017-09-20 8 views
0

signalsは、売買シグナルを保存するパンダのデータフレームです。 getbuySignal機能を使用すると、買い信号が生成された日付を取得し、これらの日付をvector_buy配列に格納することができます。その後、get_close機能を使用して、それぞれの「購入日」の前に20日間の(sh600004データフレームから)近い価格を入手し、vector_closeに保存したいと考えています。インデックスなしのパンダデータフレーム出力が得られません

vector_closeを印刷して、自分のコードが正しいかどうかを確認しました。しかし、私は非常に奇妙な結果を得ました。 get_close関数のif i<20部分の出力は、配列にはclose pricesのみが含まれています。しかし、else部分の出力にはclose princedatetime indexの両方が含まれています。下の写真に示されているように。

vector_buy = [] 
vector_close = [] 
def get_buySignal(): 
    list_buy = [] 
    for i in range(0, len(signals.index)): 
     global vector_buy 
     if signals['positions'][i]==1.0: 
      list_buy.append(i) 
      vector_buy = np.array(list_buy) 
def get_close(): 
    close_list = [] 
    for i in vector_buy: 
     global vector_close 
     if i < 20: 
      close_list.append(sh600004['close'][range(0,i)]) 
      vector_close = np.array(close_list) 
      print vector_close 
     else: 
      close_list.append(sh600004['close'][range(i-19,i)]) 
      vector_close = np.array(close_list) 
      print vector_close 

get_buySignals() 
get_close() 

ここbuy_vector

array([ 10, 37, 47, 57, 82, 94, 102, 148, 165, 179, 188, 
    201, 248, 260, 270, 272, 290, 299, 331, 350, 361, 373, 
    409, 417, 435, 449, 457, 465, 491, 511, 527, 536, 555, 
    571, 592, 609, 634, 661, 672, 706, 718, 735, 776, 794, 
    807, 838, 854, 870, 890, 907, 915, 934, 969, 1004, 1013, 
    1020, 1032, 1034, 1039, 1050, 1099, 1116, 1140, 1157, 1202, 1214, 
    1228, 1238, 1257, 1276, 1297, 1311, 1319, 1347, 1376, 1379, 1389, 
    1406, 1425, 1455, 1460, 1478, 1492, 1518, 1533, 1545, 1559, 1574, 
    1590, 1615, 1627, 1657, 1683, 1692, 1704, 1731, 1742, 1758, 1775, 
    1795, 1824, 1836, 1852, 1864, 1905, 1913, 1950, 1966, 1986, 1999, 
    2005, 2020, 2046, 2079, 2088, 2108, 2113, 2124, 2145, 2154, 2166, 
    2178, 2218, 2234, 2244, 2251, 2302, 2309, 2311, 2324, 2339, 2351, 
    2372, 2387, 2397, 2408, 2422, 2446, 2462]) 

enter image description here

+0

これが終了されます問題が何であるかは不明です。スクリーンショットは正確に何を示していますか?少なくとも2つのものが印刷されているようです。何が起こると思いますか?あなたのコードとそれが何を意味するのかについての説明も整列していないようですが、一度実際の問題が何であるか把握すると助けになります。 –

+0

最初の印刷出力は 'if i <20'から' vector_close'を印刷したときのものです。 2番目の出力は、 'get_close'関数の' else'部分からの出力です。私は出力の日時インデックスを取り除きたい。 – Kann7

+0

2つのものを印刷する方法を示すためにコードを更新できますか?現在、ループ内にprintステートメントが1つしかありません。 –

答えて

0

の出力には、たぶん、あなたがあなたのコードを最適化し、あなたの問題を解決するためにパンダの電源を使用することができます。もし私が正しいとすれば、信号['positions'] == 1のすべてのIndizes of Signalsを取得したいと思います。ですから、forループを使用しますが、この試すshould'nt:np.arrayでこれを変換

list_buy = signal[signal['positions'] == 1].index 

するのは簡単です:vector_closeで最後の20の項目を取得するための

vector_buy = list_buy.as_matrix() 

は、のようなものを試してみてくださいこの:

vector_close = sh600004['close'].tail(20) 

または

vector_close = sh600004['close'].head(20) 
+0

返信いただきありがとうございます。それはとても役に立ちます。 'signals'のインデックスはpd.datetimeインデックスです。したがって、 'vector buy 'の各要素は' numpy.datetime64'です。私は各要素間の就業日数を数えたいと思う。私は 'np.busday_count(datetime.datetime.strptime(vector_buy [0]、 '%Y /%m /%d'))、(datetime.datetime.strptime(vector_buy [i]、 '%Y /%d' m /%d '))) 'となる。しかし、 'strptime'は' string'引数を必要とします。私もそれで私を助けることができますか? – Kann7

+0

私はpandas.Datetimeindexに慣れることをお勧めします:https://pandas.pydata.org/pandas-docs/stable/api.html#datetimeindex 私はあなたがパンダだけであなたの仕事を解決することができるかなりshureです。ですから、パンダの方法にnumpyと混合するのではなく、それを守る方がより快適でなければなりません。 –

+0

numpy。 np.busday_count(list_buy [0] .index.to_datetime()、list_buy [i] .index.to_datetime())が動作する可能性があります... –

関連する問題