2012-09-07 36 views
5

Tôi đã đánh dấu bởi các dữ liệu đánh dấu cho cặp ngoại hốiTừ đánh dấu bởi các dữ liệu đánh dấu để nến

Dưới đây là một mẫu của 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 

dữ liệu đầy đủ đánh dấu có thể được tải về tại đây http://dl.free.fr/k4vVF7aOD

Các cột là:

Symbol,Datetime,Bid,Ask 

Tôi muốn chuyển đổi dấu tích này bằng cách đánh dấu dữ liệu sang dữ liệu nến (còn gọi là OHLC Mở Cao Thấp Đóng) Tôi sẽ nói rằng tôi muốn có khung thời gian M15 (15 phút) làm ví dụ

Tôi muốn để sử dụng thư viện Python và Pandas để đạt được nhiệm vụ này.

tôi đã thực hiện một phần nhỏ của công việc ... đọc đánh dấu bởi đánh dấu tập tin dữ liệu

Đây là mã

#!/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]) 

nhưng bây giờ tôi không biết làm thế nào để bắt đầu phần còn lại o của công việc ...

tôi muốn lấy dữ liệu như

Symbol,Datetime_open_candle,open_price,high_price,low_price,close_price 

Giá trên ngọn nến sẽ được dựa n Cột giá thầu. Phần đầu tiên của vấn đề là trong tâm trí của tôi để có được datetime_open_candle đầu tiên (tương thích với khung thời gian mong muốn, cho phép nói rằng tên của biến là dt1) và Datetime_open_candle cuối cùng (giả sử rằng tên của biến này là dt2).

Sau khi tôi có lẽ sẽ cần phải nhận được dữ liệu từ dt1 để DT2 (và không phải dữ liệu trước khi dt1 và sau DT2)

Biết dt1 và DT2 và khung thời gian mong muốn tôi có thể biết số lượng nến tôi sẽ có ...

Tôi đã "chỉ để" biết, với mỗi ngọn nến, giá mở/cao/thấp/giá đóng là bao nhiêu.

Tôi đang tìm một thuật toán khá nhanh, nếu có thể, một thuật toán được vector hóa (nếu có thể) vì dữ liệu đánh dấu có thể rất lớn.

+0

bạn đang đi đúng đường: có nhiều vần và scipy chứa hàm số liệu thống kê vectơ nhanh chóng cho phép bạn làm những gì bạn muốn. –

+0

Bạn cũng có thể sử dụng Pandas - http://pandas.pydata.org/, lớp này cung cấp lớp trừu tượng trên mặt gờ và cho phép chuyển đổi tần số, ví dụ: từ dữ liệu tối thiểu đến hàng giờ. Nó cũng sẽ cho phép bạn xử lý dữ liệu đánh dấu vào OHLC dễ dàng hơn (và vẫn hiệu quả). – kgr

+0

Thật tuyệt khi nói với tôi rằng tôi đang đi đúng hướng (bạn đã chú ý đến các thẻ của tôi) ... nhưng tôi chắc chắn bị mắc kẹt. Tôi đã thử df2 = df.resample ('1Min') nhưng tôi nhận được TypeError: Chỉ hợp lệ với DatetimeIndex hoặc PeriodIndex –

Trả lời

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! điều đó rất ấn tượng! nhưng tôi vẫn có TypeError: Chỉ hợp lệ với DatetimeIndex hoặc PeriodIndex tôi đã thử df = pd.read_csv ('test_EURUSD/EURUSD-2012-07.csv', names = ['Symbol', 'Date_Time', 'Bid', 'Ask '], index_col = 1) nhưng nó không hoạt động –

+0

Thêm parse_dates = True, nếu không chỉ mục của bạn sẽ là các chuỗi đơn giản và resample không thích điều đó. df = pd.read_csv ('test_EURUSD/EURUSD-2012-07.csv ', names = [' Symbol ',' Date_Time ',' Bid ',' Ask '], index_col = 1, parse_dates = True) –

+0

Cảm ơn rất nhiều !!! Nó hoạt động tốt –

Các vấn đề liên quan