Я получаю данные в реальном времени для нескольких скриптов. Я должен проанализировать это на нескольких таймфреймах (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, а затем создать кадры данных или есть лучший способ?