Как хранить и обрабатывать рыночные данные в режиме реального времени в PYTHON - PullRequest
0 голосов
/ 05 февраля 2020

Я получаю данные в реальном времени для нескольких скриптов. Я должен проанализировать это на нескольких таймфреймах (30 секунд -1 минута). В настоящее время я добавляю данные в список для каждого скрипта поверх потока с 1-секундным сном.

def GetQuoteUpdate():
    numofplotObj=len(Bcast.BcastList)
    fig, plotObj = plt.subplots(numofplotObj, sharex=True)
    while(Bcast.keepSpinning==True ):
        time.sleep(2)
        for i in range(0, len(Bcast.BroadcastObj)):  
            scripname=Bcast.BroadcastObj[i].name
            url='http://127.0.0.1:8178/getquote/dispname=' + scripname
            resp=requests.get(url)
            data=resp.text
            datasplit=data.split('\r\n')
            datasplitlen=len(datasplit)
            if datasplitlen>=17:
                ltp=datasplit[1].split('=')[1]
                volume=datasplit[9].split('=')[1]
                openvl=datasplit[10].split('=')[1]
                high=datasplit[11].split('=')[1]
                low=datasplit[12].split('=')[1]
                close=datasplit[13].split('=')[1]
                top5BVolume=datasplit[15].split('=')[1]
                top5AVolume=datasplit[16].split('=')[1]
                Bcast.BroadcastObj[i].ScripInfo.TradedVolume=int(float(volume) )
                Bcast.BroadcastObj[i].ScripInfo.top5AskVolume=int(float(top5AVolume))
                Bcast.BroadcastObj[i].ScripInfo.top5BidVolume=int(float(top5BVolume))
                LTP=(float(ltp))
                Open=(float(openvl))
                High=(float(high))
                Low=(float(low))
                Close=(float(close))
                lastIDX=len(Bcast.BroadcastObj[i].ScripInfo.Ltp)
                if lastIDX!=0: 
                    if LTP != Bcast.BroadcastObj[i].ScripInfo.Ltp[lastIDX-1]:
                        Bcast.BroadcastObj[i].ScripInfo.Ltp.append(LTP) 
                        Bcast.BroadcastObj[i].ScripInfo.Open.append(Open)
                        Bcast.BroadcastObj[i].ScripInfo.High.append(High)
                        Bcast.BroadcastObj[i].ScripInfo.Low.append(Low)
                        Bcast.BroadcastObj[i].ScripInfo.Close.append(Close)
                        #DateTime
                        x = datetime.datetime.now()
                        Bcast.BroadcastObj[i].ScripInfo.DTime.append(x)
                        #RSI                                             
                        rsi=RSI((np.array(Bcast.BroadcastObj[i].ScripInfo.Ltp)), timeperiod=6)
                        rsi[np.isnan(rsi)] = 0
                        Bcast.BroadcastObj[i].ScripInfo.RSI=(rsi)
                        #sma10
                        sma=SMA( (np.array(Bcast.BroadcastObj[i].ScripInfo.Ltp)), timeperiod=5)
                        sma[np.isnan(sma)] = 0
                        Bcast.BroadcastObj[i].ScripInfo.SMA10=(sma)                            
                        #sma15
                        sma15=SMA( (np.array(Bcast.BroadcastObj[i].ScripInfo.Ltp)), timeperiod=7)
                        sma15[np.isnan(sma15)] = 0
                        Bcast.BroadcastObj[i].ScripInfo.SMA15=(sma15)
                        #plotObj[i].plot(x, Bcast.BroadcastObj[i].ScripInfo.SMA[-1])
                        #plotObj[i].draw()
                else:    
                    Bcast.BroadcastObj[i].ScripInfo.Ltp.append(LTP) 
                    Bcast.BroadcastObj[i].ScripInfo.Open.append(Open)
                    Bcast.BroadcastObj[i].ScripInfo.High.append(High)
                    Bcast.BroadcastObj[i].ScripInfo.Low.append(Low)
                    Bcast.BroadcastObj[i].ScripInfo.Close.append(Close)  
                    #DateTime
                    x = datetime.datetime.now()
                    Bcast.BroadcastObj[i].ScripInfo.DTime.append(x)
                    #RSI                                             
                    rsi=RSI((np.array(Bcast.BroadcastObj[i].ScripInfo.Ltp)), timeperiod=6)
                    rsi[np.isnan(rsi)] = 0
                    Bcast.BroadcastObj[i].ScripInfo.RSI=(rsi)
                    #sma10
                    sma=SMA( (np.array(Bcast.BroadcastObj[i].ScripInfo.Ltp)), timeperiod=10)
                    sma[np.isnan(sma)] = 0
                    Bcast.BroadcastObj[i].ScripInfo.SMA10=(sma)                       
                    #sma15
                    sma15=SMA( (np.array(Bcast.BroadcastObj[i].ScripInfo.Ltp)), timeperiod=15)
                    sma15[np.isnan(sma15)] = 0
                    Bcast.BroadcastObj[i].ScripInfo.SMA15=(sma15)

                    #plotObj[i].plot(x, Bcast.BroadcastObj[i].ScripInfo.SMA[-1])
                    #plotObj[i].show()
                #print(Bcast.BroadcastObj[i].ScripInfo.DTime)
                #print(Bcast.BroadcastObj[i].ScripInfo.Ltp)
                #print(Bcast.BroadcastObj[i].ScripInfo.Open)
                #print(Bcast.BroadcastObj[i].ScripInfo.High)
                #print(Bcast.BroadcastObj[i].ScripInfo.Low)
                #print(Bcast.BroadcastObj[i].ScripInfo.Close)
                #print(Bcast.BroadcastObj[i].ScripInfo.RSI)
                if(i==0):
                    print(Bcast.BroadcastObj[i].ScripInfo.SMA10)
                    print(Bcast.BroadcastObj[i].ScripInfo.SMA15)
                #plt.plot_date(Bcast.BroadcastObj[i].ScripInfo.DTime, Bcast.BroadcastObj[i].ScripInfo.RSI) 
                #plt.show()

    print('Exiting3')

Здесь ScripInfo.Ltp представляет собой список классов данных. Я хочу сохранить эти данные в формате CSV, сохранить их в формате OHL C на нескольких таймфреймах и принимать решения в режиме реального времени. Должен ли я начать отправку данных в нескольких CSV, а затем создать кадры данных или есть лучший способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...