项目简介:运行Dollarbar
首先按照100万美金ETH 现货进行Kline合成,然后进行画图。当然要先拿到binance的 eth spot 1s数据,然后进行Kline合成!
class DollarBar:
def __init__(self, mongo_url, database_name, collection_name):
self.client = MongoClient(mongo_url)
self.db = self.client[database_name]
self.collection = self.db[collection_name]
self.dollar_bars = pd.DataFrame()
self.tail_bar = pd.DataFrame()
self.last_processed_time = None
self.remain_data = pd.DataFrame()
self.finanl_bars = pd.DataFrame()
self.threshold = 1000000 # 1 million
def initialize_data(self):
recent_documents = self.collection.find().sort('end_time', -1).limit(5000)
self.init_df = pd.DataFrame(list(recent_documents)).sort_values(by='end_time')
self.init_df['sell_amount'] = self.init_df['amount'] - self.init_df['buy_amount']
self.init_df = self.init_df.set_index('datetime')
self.last_processed_time = self.init_df['end_time'].iloc[-1] #整个tick 最后一个值
def process_data(self, data):
aggregated_data = []
start_index = 0
current_amount = 0
for i in range(len(data)):
current_amount += data.iloc[i]['amount']
if current_amount >= self.threshold:
bar_data = self.create_bar(data, start_index, i, current_amount)
aggregated_data.append(bar_data)
start_index = i + 1
current_amount = 0
# Check if there's any remaining data
remaining_data = data.iloc[start_index:] if start_index < len(data) else pd.DataFrame()
return pd.DataFrame(aggregated_data), remaining_data
def create_bar(self, data, start_index, end_index, amount):
return {
'datetime': data.index[start_index],
'open': data.iloc[start_index]['open'],
'close': data.iloc[end_index]['close'],
'high': data.iloc[start_index:end_index+1]['high'].max(),
'low'

最低0.47元/天 解锁文章
331

被折叠的 条评论
为什么被折叠?



