大規模な編集:タイムズ・イテレーションを一度に繰り返す
わかりましたので、私は分レベルでtimeseriesデータフレームを持っています。たとえば、このデータフレームは1年間のデータです。私は、このデータを毎日繰り返す分析モデルを作成しようとしています。
機能: 1)1日分のデータをデータフレームからスライスします。 2)毎日のスライスの30分(1日の最初の30分)のサブスライスを作成します。 3)両方のスライスのデータを関数の解析部分に渡します。 4)新しいデータフレームに追加します。 5)完了するまで反復を続けます。
データフレームのフォーマットは次のとおりです。
open_price high low close_price volume price
2015-01-06 14:31:00+00:00 46.3800 46.440 46.29 46.380 560221.0 46.380
2015-01-06 14:32:00+00:00 46.3800 46.400 46.30 46.390 52959.0 46.390
2015-01-06 14:33:00+00:00 46.3900 46.495 46.36 46.470 100100.0 46.470
2015-01-06 14:34:00+00:00 46.4751 46.580 46.41 46.575 85615.0 46.575
2015-01-06 14:35:00+00:00 46.5800 46.610 46.53 46.537 78175.0 46.537
datetimeindex機能は、この作業に取り掛かるための最良の方法ですが、私はどこから始めれば見当がつかないパンダように私には思えます。
(1)df開始日時から始まる.rollforward機能を使用して、各繰り返しで1日ずつロールフォワードするように見えます。
(2)サブスライスを作成するには、df.loc [mask]を使用します。
私はかなり(2)の後でそれを理解することができますが、もう一度私はtimeseries分析やpandas datetimeindex機能に詳しくはわかりません。
最終データフレーム:
high low retrace time
2015-01-06 46.440 46.29 True 47
2015-01-07 46.400 46.30 True 138
2015-01-08 46.495 46.36 False NaN
2015-01-09 46.580 46.41 True 95
2015-01-10 46.610 46.53 False NaN
ハイ=
低日の最初の30分のハイ=当日の30分の最初の低
リトレース=ブール、価格はオープンに戻った場合最初の30分後のある日のある時点での価格。
時間=リトレースに要した時間(分)。
ここで動作しているように私のコードです(あなたの助けのためにすべての感謝を!):
sample = msft_prices.ix[s_date:e_date]
sample = sample.resample('D').mean()
sample = sample.dropna()
sample = sample.index.strftime('%Y-%m-%d')
ORTDF = pd.DataFrame()
ORDF = pd.DataFrame()
list1 = []
list2 = []
def hi_lo(prices):
for i in sample:
list1 = []
if i in prices.index:
ORTDF = prices[i+' 14:30':i+' 15:00']
ORH = max(ORTDF['high']) #integer value
ORHK = ORTDF['high'].idxmax()
ORL = min(ORTDF['low']) #integer value
ORLK = ORTDF['low'].idxmin()
list1.append(ORH)
list1.append(ORL)
if ORHK < ORLK:
dailydf = prices[i+' 14:30':i+' 21:00']
if max(dailydf['high']) > ORH:
ORDH = max(dailydf['high'])
ORDHK = dailydf['high'].idxmax()
touched = 1
time_to_touch = ORDHK - ORHK
time_to_touch = time_to_touch.total_seconds()/60
list1.append(touched)
list1.append(time_to_touch)
list2.append(list1)
else:
touched = 0
list1.append(touched)
list1.append('NaN')
list2.append(list1)
elif ORHK > ORLK:
dailydf = prices[i+' 14:30':i+' 21:00']
if min(dailydf['low']) < ORL:
ORDL = min(dailydf['low'])
ORDLK = dailydf['low'].idxmin()
touched = 1
time_to_touch = ORDLK - ORLK
time_to_touch = time_to_touch.total_seconds()/60
list1.append(touched)
list1.append(time_to_touch)
list2.append(list1)
else:
touched = 0
list1.append(touched)
list1.append('NaN')
list2.append(list1)
else:
pass
ORDF = pd.DataFrame(list2, columns=['High', 'Low', 'Retraced', 'Time']).set_index([sample])
return ORDF
これはおそらく、それについて移動するための最もエレガントな方法はありませんが、ちょっと、それは働きます!一般的な参照用
ヒント:専門用語を使用しないでください!ここのほとんどの人は財務用語を理解しません。あなたの問題が本当に明確ではありません。 –
あなたは、提供された最小限の、完全な、そして実証された例を提供するほうがずっと良いでしょう。 http://stackoverflow.com/help/mcve – piRSquared
うーん...最初から再起動する必要がありますか? – supernoob