2012-09-07 3 views
5

에 틱 데이터에 의해 체크에서 나는이 외환 쌍에 대한 틱 데이터로 체크 한 다음 은 촛대

http://dl.free.fr/k4vVF7aOD

여기에서 다운로드 할 수 있습니다 EURUSD/EURUSD-2012-06.csv

EUR/USD,20120601 00:00:00.207,1.23618,1.2363 
EUR/USD,20120601 00:00:00.209,1.23618,1.23631 
EUR/USD,20120601 00:00:00.210,1.23618,1.23631 
EUR/USD,20120601 00:00:00.211,1.23623,1.23631 
EUR/USD,20120601 00:00:00.240,1.23623,1.23627 
EUR/USD,20120601 00:00:00.423,1.23622,1.23627 
EUR/USD,20120601 00:00:00.457,1.2362,1.23626 
EUR/USD,20120601 00:00:01.537,1.2362,1.23625 
EUR/USD,20120601 00:00:03.010,1.2362,1.23624 
EUR/USD,20120601 00:00:03.012,1.2362,1.23625 

전체 틱 데이터의 샘플입니다 열은 다음과 같습니다.

Symbol,Datetime,Bid,Ask 

나는 촛대 데이터 틱 데이터에 의해이 틱을 변환하고 싶은 (도 OHLC 열기 (High) 저 (Low) 닫기라고도 함) 내가

싶습니다 예로서 M15의 기간 (15 분)을 얻고 싶은 것을 말할 것이다 이 작업을 수행하기 위해 Python과 Pandas 라이브러리를 사용합니다.

내가 틱 데이터 파일 여기에

하여 진드기를 읽고 ... 작업의 작은 부분을 수행 한 코드

#!/usr/bin/env python 

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.finance import candlestick 
from datetime import * 

def conv_str_to_datetime(x): 
    return(datetime.strptime(x, '%Y%m%d %H:%M:%S.%f')) 

df = pd.read_csv('test_EURUSD/EURUSD-2012-07.csv', names=['Symbol', 'Date_Time', 'Bid', 'Ask'], converters={'Date_Time': conv_str_to_datetime}) 

PipPosition = 4 
df['Spread'] = (df['Ask'] - df['Bid']) * 10**PipPosition 

print(df) 

print("="*10) 

print(df.ix[0]) 

하지만 지금은 나머지를 시작하는 방법을 모른다 작업의 ...

내가 촛불

Symbol,Datetime_open_candle,open_price,high_price,low_price,close_price 

가격과 같은 데이터를 얻을 싶어 기반으로합니다 O n 입찰 열.

문제의 첫 번째 부분은 첫 번째 Datetime_open_candle (원하는 시간 프레임과 호환 됨, 변수 이름이 dt1이라고 말할 수 있음)과 마지막 Datetime_open_candle (이 변수의 이름 dt2).

아마 DT1과 DT2 원하는 기간을 알고

(DT2 DT1 전후 데이터를하지) dt2를 위해 DT1에서 데이터를 얻을해야합니다 후 나는 것입니다 촛불의 수를 알 수 ...

나는 각 촛불에 대해 열림/높음/낮음/닫음 가격을 "알기"위해 노력했습니다.

틱 데이터가 매우 커질 수 있으므로 가능하면 벡터화 된 알고리즘 (가능한 경우)이 가능한 경우 매우 빠른 알고리즘을 찾고 있습니다.

+0

올바른 경로에 있습니다. numpy와 scipy는 원하는 작업을 수행 할 수 있도록 해주는 빠른 벡터화 된 통계 함수를 포함합니다. –

+0

또한 numpy에서 추상화 레이어를 제공하고 주파수 변환을 허용하는 Pandas (http://pandas.pydata.org/)를 사용할 수 있습니다. 시간별 데이터에서 또한 OHLC로 진드기 데이터를보다 쉽게 ​​(그리고 여전히 효율적으로) 처리 할 수 ​​있어야합니다. – kgr

+0

내가 갈 길을 가고 있다고 (당신이 내 태그를 발견했음을) 말해주는 것이 좋다 ...하지만 나는 확실히 붙어있다. 나는 df2 = df.resample ('1Min')을 tryed했지만 TypeError를 얻습니다 : DatetimeIndex 또는 PeriodIndex에서만 유효합니다. –

답변

11
In [59]: df 
Out[59]: 
          Symbol  Bid  Ask 
Datetime 
2012-06-01 00:00:00.207000 EUR/USD 1.23618 1.23630 
2012-06-01 00:00:00.209000 EUR/USD 1.23618 1.23631 
2012-06-01 00:00:00.210000 EUR/USD 1.23618 1.23631 
2012-06-01 00:00:00.211000 EUR/USD 1.23623 1.23631 
2012-06-01 00:00:00.240000 EUR/USD 1.23623 1.23627 
2012-06-01 00:00:00.423000 EUR/USD 1.23622 1.23627 
2012-06-01 00:00:00.457000 EUR/USD 1.23620 1.23626 
2012-06-01 00:00:01.537000 EUR/USD 1.23620 1.23625 
2012-06-01 00:00:03.010000 EUR/USD 1.23620 1.23624 
2012-06-01 00:00:03.012000 EUR/USD 1.23620 1.23625 

In [60]: grouped = df.groupby('Symbol') 

In [61]: ask = grouped['Ask'].resample('15Min', how='ohlc') 

In [62]: bid = grouped['Bid'].resample('15Min', how='ohlc') 

In [63]: pandas.concat([ask, bid], axis=1, keys=['Ask', 'Bid']) 
Out[63]: 
           Ask         Bid 
           open  high  low close  open  high  low close 
Symbol Datetime 
EUR/USD 2012-06-01 00:15:00 1.2363 1.23631 1.23624 1.23625 1.23618 1.23623 1.23618 1.2362 
+0

woah! 그것은 매우 인상적이다! 하지만 여전히 TypeError : DatetimeIndex 또는 PeriodIndex에만 유효합니다.이 df = pd.read_csv ('test_EURUSD/EURUSD-2012-07.csv', 이름 = [ 'Symbol', 'Date_Time', 'Bid', 'Ask '], index_col = 1)하지만 작동하지 않습니다. –

+0

parse_dates = True를 추가하십시오. 그렇지 않으면 인덱스가 일반 문자열이되며 resample은이를 좋아하지 않습니다. df = pd.read_csv ('test_EURUSD/EURUSD-2012-07.csv ', names = ['Symbol ','Date_Time ','Bid ','Ask '], index_col = 1, parse_dates = True) –

+0

고마워요 !!! 그것은 잘 작동합니다. –