Пример #1
0
def populate(df):
    for index, item in df.iterrows():
        # only do the PSEi for now_ts
        if(not item.psei):
            continue

        # retrieve history
        symbol = item.name
        item = client.get_history(symbol, days=400)

        # calculate the indicators
        item = indicators.relative_strength_index(item, n=14)
        item = indicators.ema_rsi(item, n=30)

        # normalize and smoothen
        item['norm_ema_rsi'] = (item['ema_rsi'] - 0.5) * 200
        item['norm_close'] = ((item['close'] - item['close'].min()) /
            (item['close'].max() - item['close'].min())) * 100
        item['smoothed_close'] = item['norm_close'].rolling(
            window=5,
            win_type='gaussian',
            center=True).mean(std=3).shift(2)

        # remove all NA -- cleanup
        # not really neccessary...
        # item = item.dropna()
        # just take last 200 rows
        # item = item.tail(200)
        # item.reset_index(drop=True, inplace=True)

        # add to df dataframe
        df.loc[symbol,'strength_index'] = item['norm_ema_rsi'].tail(1).values
        df.loc[symbol,'price'] = item['close'].tail(1).values
        df.loc[symbol,'norm_close'] = item['norm_close'].tail(1).values

    df.reset_index(inplace=True)
    df = df.dropna()
    return df
Пример #2
0
import client
import indicators
import pandas as pd

df = pd.read_csv('equities.csv', index_col='symbol')
df['price'] = pd.Series()
df['average_volatility'] = pd.Series()
df['average_volume'] = pd.Series()

for index, item in df.iterrows():
    symbol = item.name
    equity = client.get_history(symbol)
    equity = indicators.day_range_pct(equity)
    equity = indicators.ema(equity, 'volume', 'ema_volume')
    equity = equity.join(
        pd.Series(equity['ema_volume'] / 1000000, name="vol(M)"))
    equity = indicators.ema(equity, 'day_range_pct', 'ema_day_range_pct')
    if len(equity) > 0:
        df.loc[symbol, 'price'] = equity['close'].tail(1).values
        df.loc[symbol,
               'average_volatility'] = equity['ema_day_range_pct'].tail(
                   1).values
        df.loc[symbol, 'average_volume'] = equity['vol(M)'].tail(1).values

df.to_pickle('./equities.pkl')
Пример #3
0
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# %%
# Read JSON file for

# %%
stocks = [
    "AC", "AEV", "AGI", "ALI", "AP", "BDO", "BPI", "DMC", "EDC", "EMP", "FGEN",
    "GLO", "GTCAP", "ICT", "JFC", "LTG", "MBT", "MEG", "MER", "MPI", "PCOR",
    "RLC", "SCC", "SECB", "SM", "SMC", "SMPH", "TEL", "URC"
]
scatter = pd.DataFrame(index=stocks, columns=["strength", "price", "range"])

for stock in stocks:
    df = client.get_history(stock, days=365)
    df = indicators.relative_strength_index(df, n=14)
    df = indicators.ema_rsi(df, n=5)

    df_norm = df[["ema_rsi", "rsi"]]
    # df_norm = (df_norm - 0.50) * 2 * 100
    ema_rsi = df_norm[
        "ema_rsi"]  # .rolling(window=5, win_type="gaussian", center=True).mean(std=3)
    ema_rsi = (ema_rsi - 0.5)
    ema_rsi = ema_rsi * 200
    # ema_rsi = ema_rsi.rolling(window=5, win_type="gaussian", center=True).mean(std=3)
    # ema_rsi = ema_rsi.shift(2)

    rsi = df["rsi"]
    rsi = (rsi - 0.5) * 200
Пример #4
0
                                      figsize=(10, 6),
                                      grid=True,
                                      ax=ax)
    ax.set_axisbelow(True)
    ax.minorticks_on()
    ax.grid(which='major', linestyle='-', linewidth='0.4', color='black')
    ax.grid(which='minor', linestyle=':', linewidth='0.4', color='black')
    plt.axhline(y=0, color='black', linestyle='--', alpha=0.2)
    plt.xlim(xlimit)
    plt.show()


# %%
# retrieve history
symbol = "SECB"
df = client.get_history(symbol, days=800)
df2 = client.get_history("GLO", days=800)
# %%
df = indicators.heiken_ashi(df)
df['ha_strength'] = (df['ha_high'] - df['ha_open']) - (df['ha_close'] -
                                                       df['ha_low'])
df['ha_cd'] = (df['ha_close'] - df['ha_open'])
df['ha_cd_s'] = (df['ha_strength'] + df['ha_cd'])

# calculate the indicators
df.set_index('date', inplace=True)

# %%
xlimit = [200, 800]
ylimit = [0, 270]
plot(df, xlim=xlimit, ylim=ylimit)
Пример #5
0
    def __init__(self):
        super().__init__()
        self.title = "Main window"
        self.top = 55
        self.left = 7
        w = data.scale[0]
        h = data.scale[1]

        data.reso[0] = App.primaryScreen().size().width()
        data.reso[1] = App.primaryScreen().size().height()
        self.width = App.primaryScreen().size().width() / w
        self.height = App.primaryScreen().size().height() / h
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        data.graphResolution = [
            self.width / data.scale[2], self.height / data.scale[3]
        ]
        self.setWindowIcon(QtGui.QIcon('icon1.ico'))
        self.formLayout0 = QFormLayout()
        self.groupBox0 = QGroupBox("Available Asks")

        self.groupBox0.setLayout(self.formLayout0)
        scroll0 = QScrollArea()
        scroll0.setWidget(self.groupBox0)
        scroll0.setWidgetResizable(True)

        self.formLayout = QFormLayout()
        self.groupBox = QGroupBox("Available Bids")

        customTheme()

        data.pref_prd = list(client.get_stars(data.username,
                                              data.password))  # TODO UNCOMMENT
        #print(client.get_stars(data.username, data.password))

        self.groupBox.setLayout(self.formLayout)
        scroll = QScrollArea()
        scroll.setWidget(self.groupBox)
        scroll.setWidgetResizable(True)

        self.formLayout3 = QFormLayout()
        self.groupBox3 = QGroupBox("Your orders")

        self.groupBox3.setLayout(self.formLayout3)
        scroll3 = QScrollArea()
        scroll3.setWidget(self.groupBox3)
        scroll3.setWidgetResizable(True)

        self.formLayout1 = QFormLayout()
        self.groupBox1 = QGroupBox("Orders' History")

        history = client.get_history(data.username, data.password)
        print("HERE WE GO AGAIN")
        for r in history:
            #print(r)
            if len(r):
                Order = QtWidgets.QPushButton()
                if r[-1] == "sell":
                    sign = func.sellOrder(
                        r[0], r[1], r[2],
                        r[3])  # ordertype, product, amount, price
                    Order.setStyleSheet(styles.sellbutton)
                else:
                    sign = func.buyOrder(r[0], r[1], r[2], r[3])
                    Order.setStyleSheet(styles.buybutton)
                Order.setText(sign)
                Order.setDisabled(True)
                # formLayout1.addWidget(Order)
                self.formLayout1.insertRow(0, Order)

        self.groupBox1.setLayout(self.formLayout1)
        scroll2 = QScrollArea()
        scroll2.setWidget(self.groupBox1)
        scroll2.setWidgetResizable(True)

        rightArea = QVBoxLayout()

        threeScrolls = QHBoxLayout()
        threeScrolls.addWidget(scroll)
        threeScrolls.addWidget(scroll0)
        Column = QVBoxLayout()
        Column.addWidget(scroll3)
        Column.addWidget(scroll2)
        threeScrolls.addLayout(Column)
        rightArea.addLayout(threeScrolls)

        leftArea = QVBoxLayout()

        BuySell = QHBoxLayout()
        buyButton = QtWidgets.QPushButton("BUY")
        buyButton.setStyleSheet(
            styles.buybuttonFus.replace("text-align: left;", ""))

        BuySell.addWidget(buyButton)
        sellButton = QtWidgets.QPushButton("SELL")
        sellButton.setStyleSheet(
            styles.sellbuttonFus.replace("text-align: left;", ""))

        BuySell.addWidget(sellButton)

        settingsButton = QtWidgets.QPushButton("configuring".upper())
        BuySell.addWidget(settingsButton)
        self.MainProduct = QComboBox()
        self.MainProduct.currentIndexChanged.connect(
            self.prdChanged, self.MainProduct.currentIndex())

        self.MainProduct.addItem("No filter")
        for prd in data.pref_prd:
            self.MainProduct.addItem(prd)
        BuySell.addWidget(self.MainProduct)

        buy_shortcut = QShortcut(QtGui.QKeySequence("B"), self)
        buy_shortcut.activated.connect(lambda: callOrderWindow("Buy"))

        sell_shortcut = QShortcut(QtGui.QKeySequence("S"), self)
        sell_shortcut.activated.connect(lambda: callOrderWindow("Sell"))

        conf_shortcut = QShortcut(QtGui.QKeySequence("C"), self)
        conf_shortcut.activated.connect(lambda: callConfigWindow())

        my_assets = QShortcut(QtGui.QKeySequence("A"), self)
        my_assets.activated.connect(lambda: call_my_assets())

        buyButton.clicked.connect(lambda: callOrderWindow("Buy"))
        sellButton.clicked.connect(lambda: callOrderWindow("Sell"))
        settingsButton.clicked.connect(lambda: callConfigWindow())

        shortcut1 = QShortcut(QtGui.QKeySequence("1"), self)
        shortcut1.activated.connect(lambda: change_prd_keyboard(1))
        shortcut2 = QShortcut(QtGui.QKeySequence("2"), self)
        shortcut2.activated.connect(lambda: change_prd_keyboard(2))
        shortcut3 = QShortcut(QtGui.QKeySequence("3"), self)
        shortcut3.activated.connect(lambda: change_prd_keyboard(3))
        shortcut4 = QShortcut(QtGui.QKeySequence("4"), self)
        shortcut4.activated.connect(lambda: change_prd_keyboard(4))
        shortcut5 = QShortcut(QtGui.QKeySequence("5"), self)
        shortcut5.activated.connect(lambda: change_prd_keyboard(5))
        shortcut6 = QShortcut(QtGui.QKeySequence("6"), self)
        shortcut6.activated.connect(lambda: change_prd_keyboard(6))
        shortcut7 = QShortcut(QtGui.QKeySequence("7"), self)
        shortcut7.activated.connect(lambda: change_prd_keyboard(7))
        shortcut8 = QShortcut(QtGui.QKeySequence("8"), self)
        shortcut8.activated.connect(lambda: change_prd_keyboard(8))
        shortcut9 = QShortcut(QtGui.QKeySequence("9"), self)
        shortcut9.activated.connect(lambda: change_prd_keyboard(9))
        shortcut0 = QShortcut(QtGui.QKeySequence("0"), self)
        shortcut0.activated.connect(lambda: change_prd_keyboard(0))

        shortcutR = QShortcut(QtGui.QKeySequence("F5"), self)
        shortcutR.activated.connect(lambda: self.F5_EVENT())

        leftArea.addLayout(BuySell)

        graphsArea = QVBoxLayout()

        self.graph1 = CanvasUp()

        self.graph2 = CanvasLow()

        self.sliderUP = QSlider(Qt.Horizontal)

        self.sliderUP.setTickInterval(10)
        self.sliderUP.setSingleStep(30)

        self.sliderUP.valueChanged.connect(lambda: self.sliderChanged1())

        self.sliderDOWN = QSlider(Qt.Horizontal)

        self.sliderDOWN.setTickInterval(10)
        self.sliderDOWN.setSingleStep(30)
        self.sliderDOWN.valueChanged.connect(lambda: self.sliderChanged2())

        self.load = QtWidgets.QLabel()
        self.load1 = QtWidgets.QLabel()

        self.tabs = QTabWidget()
        self.graphUP = QWidget()
        self.graphUP.layout = QVBoxLayout(self.graphUP)
        self.graphUP.layout.addWidget(self.graph1)
        self.graphUP.layout.addWidget(self.sliderUP)
        self.tabs.setFixedHeight(data.graphResolution[0])
        self.tabs.setFixedWidth(data.graphResolution[1])
        self.tabs.addTab(self.graphUP, "Graph1")

        graphsArea.addWidget(self.tabs)

        self.tabs1 = QTabWidget()
        self.graphLOW = QWidget()
        self.graphLOW.layout = QVBoxLayout(self.graphLOW)
        self.graphLOW.layout.addWidget(self.graph2)
        self.graphLOW.layout.addWidget(self.sliderDOWN)
        self.tabs1.setFixedHeight(data.graphResolution[0])
        self.tabs1.setFixedWidth(data.graphResolution[1])

        self.tabs1.addTab(self.graphLOW, "Graph2")

        graphsArea.addWidget(self.tabs1)

        leftArea.addLayout(graphsArea)

        global bar
        bar = QPushButton(func.barInfo())
        bar.setStyleSheet(styles.barstyle1)
        bar.clicked.connect(lambda: call_my_assets())

        lowBar = QPushButton("NEWS:  " +
                             data.news[randrange(0, len(data.news))])
        lowBar.setStyleSheet(styles.news)
        lowBar.setDisabled(True)

        Mainlayout = QVBoxLayout(self)
        ContentArea = QHBoxLayout()
        ContentArea.addLayout(leftArea)
        ContentArea.addLayout(rightArea)
        Mainlayout.addWidget(bar)
        Mainlayout.addLayout(ContentArea)
        Mainlayout.addWidget(lowBar)

        self.show()

        self.thread = MyThread()  #time
        self.thread.timeToSleep = 0.3
        self.thread.change_value.connect(lambda: setProgressVal())
        self.thread.start()

        self.thread1 = MyThread()  # add possible orders
        self.thread1.timeToSleep = 2.5
        self.thread1.change_value.connect(lambda: self.getUpdate())
        self.thread1.start()

        self.thread2 = MyThread()  # update graphs
        self.thread2.timeToSleep = 4
        self.thread2.change_value.connect(lambda: self.updateGraphs())
        self.thread2.start()

        self.thread3 = MyThread()  # update news
        self.thread3.timeToSleep = 7
        self.thread3.change_value.connect(lambda: printNews())
        self.thread3.start()

        def setProgressVal():
            bar.setText(func.barInfo())

        def change_prd_keyboard(i):
            try:
                if i == 0:
                    self.MainProduct.setCurrentIndex(0)
                elif len(data.pref_prd) > i - 1:
                    self.MainProduct.setCurrentIndex(i)
                else:
                    self.MainProduct.setCurrentIndex(0)
            except:
                print("error in change_prd_keyboard")

        def callConfigWindow():

            data.orderResolution[0], data.orderResolution[
                1] = self.width / 2.3, self.height / 1.7
            Dialog = QtWidgets.QDialog()
            ui = cfg.Ui_DialogConfig()
            ui.setupUi(Dialog)
            Dialog.exec_()
            if data.mode == "Dark":
                switchDark()
                bar.setStyleSheet(styles.barstyle2)
            else:
                QtWidgets.QApplication.instance().setPalette(
                    self.style().standardPalette())
                switchLight()
                bar.setStyleSheet(styles.barstyle1)
            if data.clearHis == True:
                try:
                    for i in reversed(range(self.formLayout1.count())):
                        self.formLayout1.itemAt(i).widget().deleteLater()
                except:
                    pass
            data.clearHis = False

            if data.addToBox[0]:
                self.MainProduct.clear()
                self.MainProduct.addItem("No filter")
                for prd in data.pref_prd:
                    self.MainProduct.addItem(prd)
            data.addToBox = [False, []]

            if data.joinG[0] == True and data.joinG[1] == True:
                self.updateGraphs()

            self.graph1.upd()
            self.graph2.upd()

            if self.MainProduct.currentText() == "No filter":
                self.graph1.clear()
                self.graph1.no_data()
                self.graph2.clear()
                self.graph2.no_data()

            if data.joinG[0] == True and data.joinG[1] == True:
                data.zoom1 = data.zoom
                tm = time.time()
                step = 3600
                tm_ = tm - 60 * 60 * 24
                inp = [[x, x + step]
                       for x in range(int(tm_), int(tm), int(step))]
                prd = self.MainProduct.currentText()
                data.bx = client.box_graph(prd, inp)
                #data.bx1 = client.box_graph(prd, inp)
                data.bx_lab = inp
                #print("Box", inp)

            data.box_reload = 0

        def call_my_assets():
            data.orderResolution[0], data.orderResolution[
                1] = self.width / data.scale_[0], self.height / data.scale_[1]
            Dialog = QtWidgets.QDialog()
            ui = assets.Ui_DialogAssets()
            ui.setupUi(Dialog)
            Dialog.exec_()

        def callOrderWindow(type):
            data.orderWinIsON = True
            data.orderResolution[0], data.orderResolution[
                1] = self.width / data.scale_[2], self.height / data.scale_[3]
            data.orderType = str(type)
            if self.MainProduct.currentText() != "No filter":
                try:
                    amtN = 0  # для средневзвешенного
                    wcc = 0
                    # computing autocomplete prices
                    if str(type) == "Buy":

                        for i in reversed(range(self.formLayout0.count())):
                            try:
                                #print("=>",func.getPrice(self.formLayout0.itemAt(i).widget().text()))
                                amtN += float(
                                    func.getAmt(
                                        self.formLayout0.itemAt(
                                            i).widget().text()))

                                wcc += float(
                                    func.getAmt(
                                        self.formLayout0.itemAt(
                                            i).widget().text())) * float(
                                                func.getPrice(
                                                    self.formLayout0.itemAt(
                                                        i).widget().text()))
                            except:
                                pass

                        data.acPrice = func.getPrice(
                            self.formLayout0.itemAt(0).widget().text())
                        #print("wcc1",wcc, amtN)
                        data.acPriceFOK = (wcc / (amtN))

                    else:
                        for i in reversed(range(self.formLayout.count())):
                            try:
                                amtN += float(
                                    func.getAmt(
                                        self.formLayout.itemAt(
                                            i).widget().text()))
                                wcc += float(
                                    func.getAmt(
                                        self.formLayout.itemAt(
                                            i).widget().text())) * float(
                                                func.getPrice(
                                                    self.formLayout.itemAt(
                                                        i).widget().text()))
                            except:
                                pass
                        #print("wcc2", wcc, amtN)
                        data.acPrice = func.getPrice(
                            self.formLayout.itemAt(self.formLayout.count() -
                                                   1).widget().text())
                        data.acPriceFOK = wcc / (amtN)
                except:
                    pass

            data.autocomplete = self.MainProduct.currentText()
            Dialog = QtWidgets.QDialog()
            ui = ord.Ui_DialogOrder()
            ui.setupUi(Dialog)
            Dialog.exec_()

            if data.addToHis[0]:  ### ALSO CHECKS FOR SUCCESS
                sign = func.Order(data.addToHis[1][0], data.addToHis[1][1],
                                  data.addToHis[1][2], data.addToHis[1][3],
                                  data.addToHis[1][4])
                newOrder = QtWidgets.QPushButton()
                newOrder.setStyleSheet(styles.buybutton)
                if data.addToHis[1][0].lower() == "sell":
                    newOrder.setStyleSheet(styles.sellbutton)
                newOrder.setDisabled(True)
                newOrder.setText(sign)
                self.formLayout1.insertRow(0, newOrder)

                bar.setText(func.barInfo())  #CHEANGE BALANCE
                #RELOADING AVALIABLE ORDERS

                self.reloadData()

            elif data.addToOrd[0]:
                self.reloadData()

            if len(data.system_ord) != 0:
                self.reloadSystemOrders("")

            data.addToHis = (False, [])
            data.addToOrd = (False, "Buy", "")
            data.acPrice = ""
            bal = client.get_balance(data.username)
            data.balance = (bal, "$")
            func.putPersonalData()
            bar.setText(func.barInfo())
            data.orderWinIsON = False

        def printNews():
            i = randrange(0, len(data.news))
            lowBar.setText("NEWS:  " + data.news[i])
Пример #6
0
import client
import indicators
from datetime import datetime, timedelta
import pandas as pd
import matplotlib.pyplot as plt

# retrieve history
symbol = "AC"
df = client.get_history(symbol, days=800)
df
# %%
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
date_ago = (datetime.now() - timedelta(days=365)).strftime('%Y-%m-%d')
# %%
dd = indicators.ema(df, "close", "ema_close", n=200)
dd = dd[date_ago:]

fw_low = dd[date_ago:]['close'].min()
fw_high = dd[date_ago:]['close'].max()

# normalize
dd


# %%
dd[['close','ema_close']].plot()
plt.show()