Friday, September 18, 2020

mplfinance and Alpaca charting working copy

#D:\test\p4\t4.py

import websocket

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from pyxtension.Json import Json

import numpy as np  

from datetime import datetime

import mplfinance as mpf

from matplotlib import style



def on_message(ws, message):

    #message = message.replace('[','').replace(']','')

    x = message.replace('[','').replace(']','')

    if x.find("sym") > 0:

        x = x.replace('[','').replace(']','')

        print (x)

        y = Json(x)

        #print(y.sym)

        open  = y.o

        print("open: ", open)

        close = y.c

        high = y.h

        low = y.l

        vw = y.vw

        volume = y.v

        timestamp = str(y.s)

        timestamp = timestamp[0:10]

        timestampEnd = str(y.e)

        timestampEnd = timestampEnd[0:10]

        dateBeg =  datetime.fromtimestamp(int(timestamp))

        dateEnd =  datetime.fromtimestamp(int(timestampEnd))

        global dfObj

        dfObj = dfObj.append({'Open':open, 'High':high, 'Low':low, 'Close':close, 'Volume':volume,'VW':vw,'DateBeg': dateBeg, 'Date': dateEnd }, ignore_index=True)

           

        print("close:",dfObj.Close)

        trows = len(dfObj.index)

        noRows = 9

        print("cnt:", trows)

        if trows > noRows:

            print (dfObj)

            dfObj = dfObj.set_index(pd.DatetimeIndex(dfObj['Date']))

            ax1.clear()

            ax2.clear()

            mpf.plot(dfObj,type='candle', ax=ax1,volume=ax2, block=False, mav=(9,21,50,200))

            plt.pause(3)

            print("passed fig ****************ROW > NO *******************************")

        elif trows == noRows:

            dfObj = dfObj.set_index(pd.DatetimeIndex(dfObj['Date']))

            print(dfObj)

            mpf.plot(dfObj,type='candle', ax=ax1,volume=ax2, block=False, mav=(9,21,50,200))

            plt.pause(3)

            print("passed fig ************** ROW = NO *********************************")


def on_error(ws, error):

    print(error)


def on_close(ws):

    print("### closed ###")

    #f.close


def on_open(ws):

    ws.send('{"action":"auth","params":"XXXX"}')

    ws.send('{"action":"subscribe","params":"A.AAPL"}')

    


#f = open("demofile.txt", "a")


#Set up plot

#fig = mpf.figure(figsize=(10,9))

fig = mpf.figure()

ax1 = fig.add_subplot(2,1,1,style='yahoo')

ax1 = fig.add_subplot(2,1,1)

ax2 = fig.add_subplot(3,1,3)


#ax1 = fig.add_subplot(1, 1, 1)

#fig, ax = plt.subplots()

#lines, = ax.plot([],[], 'o')

#Autoscale on unknown axis and known lims on the other

ax1.set_autoscaley_on(True)

#ax.set_xlim(self.min_x, self.max_x)

##Other stuff

ax1.grid()

#lt.tight_layout()

dfObj = pd.DataFrame(columns=['Open', 'High', 'Low','Close', 'Volume', 'VW', 'DateBeg', 'Date'])

#print("Empty Dataframe ", dfObj, sep='\n')

dfObj = dfObj.set_index(pd.DatetimeIndex(dfObj['Date']))


if __name__ == "__main__":

    # websocket.enableTrace(True)

    

    ws = websocket.WebSocketApp("wss://socket.polygon.io/stocks",

                              on_message = on_message,

                              on_error = on_error,

                              on_close = on_close)

    ws.on_open = on_open


    ws.run_forever()

No comments:

Post a Comment