대용량 편집 :시간대를 통해 반복하기
좋아요, 그래서 분 수준의 timeseries 데이터 프레임이 있습니다. 예를 들어,이 데이터 프레임은 1 년간의 데이터입니다. 이 데이터를 매일 반복하는 분석 모델을 만들려고합니다.
기능은 다음과 같습니다. 1) 데이터 프레임에서 하루 동안의 데이터 조각을 만듭니다. 2) 매일 조각의 30 분 (하루 30 분 30 분) 하위 조각을 만듭니다. 3) 두 조각의 데이터를 함수의 분석 부분으로 전달합니다. 4) 새 데이터 프레임에 추가하십시오. 5) 완료 될 때까지 반복을 계속하십시오.
dataframe의 형식은 다음과 같습니다
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 기능을 사용할 수있는 것처럼 보입니다. 각 반복을 통해 하루를 롤 포워드합니다.
(2) dl.loc [마스크]를 사용하여 서브 슬라이스를 만듭니다.
필자는 (2) 이후에 알아낼 수 있다고 확신하지만, 다시 한번 timeseries 분석 또는 pandas datetimeindex 기능에 익숙하지 않습니다.
최종 dataframe :
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