外国為替ペアのティックデータごとにティックしました
ここにのサンプルがあります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
完全なティック データは、ここからダウンロードできます http://dl.free.fr/k4vVF7aOD
列は次のとおりです。
Symbol,Datetime,Bid,Ask
このティックごとのデータをレンコ チャートhttp://www.investopedia.com/terms/r/renkochart.aspに変換したいと思い ます。
チャートのパラメーターはろうそくの高さ (クローズ-オープン) です: それをcandle_heightと呼びましょう
このタスクを達成するために Python と Pandas ライブラリを使用したいと思います。
私は仕事のほんの一部を終えました...ティックごとのデータファイルの読み取り
のようなデータを取得したい
Id,Symbol,open_price,close_price
蓮子を描けるようになる
Id はろうそくの番号です
ろうそくの価格は入札欄に基づきます。
ここにコードがあります
#!/usr/bin/env python
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.finance import candlestick
def candle_price_ref(price, candle_height):
#return(int(price/candle_height)*candle_height)
return(round(price/candle_height)*candle_height)
print("Reading CSV (please wait)")
df = pd.read_csv('test_EURUSD/EURUSD-2012-07.csv', names=['Symbol', 'Date_Time', 'Bid', 'Ask'], index_col=1)
print("End of reading")
df['Bid'] = df['Bid']
#candle_height = 0.0015
#candle_height = 0.0010
#candle_height = 0.0005
candle_height = 0.0001
#candle_height = 0.000001
price = df.ix[0]['Bid']
price_ref = candle_price_ref(price, candle_height)
ID = 0
#print("ID={0} price_ref={1}".format(ID, price_ref))
candle_price_open = []
candle_price_close = []
candle_price_open.append(price) # price ou price_ref
candle_price_close.append(price)
for i in range(len(df)):
price = df.ix[i]['Bid']
candle_price_close[ID] = price
new_price_ref = candle_price_ref(price, candle_height)
if new_price_ref!=price_ref:
candle_price_close[ID]=new_price_ref
price_ref = new_price_ref
ID += 1
candle_price_open.append(price_ref)
candle_price_close.append(price_ref)
IDs=range(ID+1)
volume=np.zeros(ID+1)
a_price_open=np.array(candle_price_open)
a_price_close=np.array(candle_price_close)
b_green_candle = a_price_open < a_price_close
candle_price_low = np.where(b_green_candle, a_price_open, a_price_close)
candle_price_high = np.where(b_green_candle, a_price_close, a_price_open)
DOCHLV=zip(IDs, candle_price_open, candle_price_close, candle_price_high, candle_price_low, volume)
#print(DOCHLV)
fig = plt.figure()
fig.subplots_adjust(bottom=0.1)
ax = fig.add_subplot(211)
df['Bid'].plot()
plt.title("Price graph")
ax = fig.add_subplot(212)
plt.title("Renko chart")
candlestick(ax, DOCHLV, width=0.6, colorup='g', colordown='r', alpha=1.0)
plt.show()
私の問題は、私がここでやっていることは、次の 2 つの理由から実際の Renko チャートではないということです。
- Renko チャートでは、始値と終値が同じ緑のローソク足と赤のローソク足を持つことはできません (私のコードではそうではありません)...
- 各ろうそくの高さは固定でなければなりません (私のコードでは、candle_height の 2 倍または 3 倍の高さのろうそくがあります...これは問題です!)
ティックデータが非常に大きくなる可能性があるため、可能であればベクトル化されたもの(可能であれば)、非常に高速なアルゴリズムを探しています。