使用python中的熊猫将实时Websocket滴答声重新采样到蜡烛

问题描述 投票:1回答:1

我正在尝试使用熊猫将来自KiteTicker Websocket的实时价格变动重新采样到OHLC蜡烛中,这是我编写的代码,它可以在单个乐器上正常运行(第9行中注释过的trd_portfolio),但不适用于多个乐器(第9行) 8)因为它混合了不同仪器的数据。

有什么方法可以将最终的蜡烛df与工具代币相关联?或使这项工作与多个仪器配合?

我想同时在多种乐器上运行算法,请提出是否有更好的解决方法。

from kiteconnect import KiteTicker;
from kiteconnect import KiteConnect;
import logging
import time,os,datetime,math;
import winsound
import pandas as pd

trd_portfolio = {954883:"USDINR19MARFUT",4632577:"JUBLFOOD"} 
# trd_portfolio = {954883:"USDINR19MARFUT"}

trd_tkn1 = [];

for x in trd_portfolio:
    trd_tkn1.append(x)


c_id = '****************'
ak = '************'
asecret = '*************************'

kite = KiteConnect(api_key=ak)
print('[*] Generate access Token : ',kite.login_url())
request_tkn = input('[*] Enter Your Request Token Here : ')[-32:];
data = kite.generate_session(request_tkn, api_secret=asecret)
kite.set_access_token(data['access_token'])
kws = KiteTicker(ak, data['access_token'])

#columns in data frame
df_cols = ["Timestamp", "Token", "LTP"]

data_frame = pd.DataFrame(data=[],columns=df_cols, index=[])

def on_ticks(ws, ticks):

    global data_frame, df_cols

    data = dict() 

    for company_data in ticks:
        token = company_data["instrument_token"]
        ltp = company_data["last_price"]
        timestamp = company_data['timestamp']

        data[timestamp] = [timestamp, token, ltp]

    tick_df = pd.DataFrame(data.values(), columns=df_cols, index=data.keys()) #
    data_frame = data_frame.append(tick_df)

    ggframe=data_frame.set_index(['Timestamp'],['Token'])
    print ggframe
    gticks=ggframe.ix[:,['LTP']]
    candles=gticks['LTP'].resample('1min').ohlc().dropna()
    print candles

def on_connect(kws , response):
    print('Connected')
    kws.subscribe(trd_tkn1)
    kws.set_mode(kws.MODE_FULL, trd_tkn1)

def on_close(ws, code, reason):
    print('Connection Error')


kws.on_ticks = on_ticks
kws.on_connect = on_connect
kws.on_close = on_close

kws.connect()
python pandas resampling
1个回答
0
投票
我没有访问Kite API的权限,但是我一直在查看一些使用它的代码段,试图找出与Websocket相关的另一个问题。我遇到了一个悬而未决的问题,尽管我无法真正测试此解决方案,但我想我可以提供帮助。

而不是将索引设置为['Timestamp','Token'],您可能想尝试采用另一种方法,因此,每个'Token'都会被集中在一起,然后重新采样并计算每分钟的ohlc。另外,您可能希望首先按这些列进行排序。但是随着数据帧的增长,这将变得昂贵……肯定有一种更有效的方法。但是,如果每天都从一个新的数据帧开始,则可能是可管理的。

© www.soinside.com 2019 - 2024. All rights reserved.