Esempio n. 1
0
File: test.py Progetto: bynoud/stonk
def getAllSymbols(dayNum: int = 365 * 2 + 50, exchange: str = 'HOSE HNX'):
    import StockAPI, Symbol
    tickets = StockAPI.getAllTickets(exchange)
    print("Getting price history of %d Stocks ..." % len(tickets),
          end="",
          flush=True)
    syms = {}
    cnt = 10
    for tic in tickets:
        if len(tic) != 3:
            continue
        symbol = Symbol.SymbolHistory(tic, dayNum=dayNum)
        if symbol.len < 50 or symbol.sma(src='volumn',
                                         window=50).iloc[-1] < 200000:
            continue
        syms[tic] = symbol
        cnt -= 1
        if cnt == 0:
            print(".", end="", flush=True)
            cnt = 10
    print(" Done")
    return syms
Esempio n. 2
0
File: test.py Progetto: bynoud/stonk
def intradayRecheck():
    import re, os, pickle
    from datetime import datetime
    import StockAPI, Symbol

    folderName = 'data/intras'
    folderName2 = 'data/intras_new'
    folderName3 = 'data/intras_fixed'
    fnre = re.compile(r'^(...)_(........)\.pkl$')
    fileList = os.listdir(folderName)
    symbols = {}

    dates = StockAPI.getTradingDate(365 * 2)
    dateIdx = {}
    for i, v in enumerate(dates):
        dateIdx[v] = i

    srv = StockAPI.IntraServer('vdsc', folderName2)
    errCnt = 0
    fixCnt = 0
    chkCnt = 20

    print('Checking %d ... ' % len(fileList))

    for fname in fileList:
        chkCnt -= 1
        if chkCnt == 0:
            # print('. ', end='', flush=True)
            chkCnt = 20

        x = fnre.match(fname)
        if not x:
            continue
        ticket, dateStr = x.groups()
        date = int(datetime.strptime(dateStr + ' 07', '%Y%m%d %H').timestamp())
        intra = pickle.load(open(folderName + '/' + fname, 'rb'))
        intra2 = srv.intraday(ticket, date)
        if ticket not in symbols:
            symbols[ticket] = Symbol.SymbolHistory(
                ticket, StockAPI.getPriceHistory(ticket, 365 * 2))

        daily = symbols[ticket].atDate(date)
        if daily is None:
            # print("??? %s %s" % (ticket, dateStr))
            os.remove(folderName + '/' + fname)
            continue

        def totalVol(df):
            dfm = StockAPI.intraMatchedOnly(df)
            return dfm['mv'].sum()

        vol0 = daily.volumn
        vol1 = -1 if intra is None else totalVol(intra)
        volMt1 = -1 if intra is None else intra.iloc[-1]['mt']
        vol2 = -1 if intra2 is None else totalVol(intra2)
        volMt2 = -1 if intra2 is None else intra2.iloc[-1]['mt']

        def volOk(v1, v0):
            if 0.98 < (v1 / v0) < 1.02:
                return True
            return False

        if vol0 == 0:
            if vol2 == 0:
                pickle.dump(intra2, open(folderName3 + '/' + fname, 'wb'))
            elif vol1 == 0:
                pickle.dump(intra, open(folderName3 + '/' + fname, 'wb'))
            else:
                print("Error: [%s] %s: vol1 %d (%d) vol2 %d (%d) vol0 %d" %
                      (ticket, dateStr, vol1, volMt1, vol2, volMt2, vol0))

        elif volOk(vol2, vol0):
            pickle.dump(intra2, open(folderName3 + '/' + fname, 'wb'))
        elif volOk(vol1, vol0):
            pickle.dump(intra, open(folderName3 + '/' + fname, 'wb'))
        elif volOk(volMt2, vol0):
            intra2['mv'] = intra2['mt'].diff()
            pickle.dump(intra2, open(folderName3 + '/' + fname, 'wb'))
        elif volOk(volMt1, vol0):
            intra['mv'] = intra['mt'].diff()
            pickle.dump(intra, open(folderName3 + '/' + fname, 'wb'))
        elif vol1 != 0 and vol1 == volMt1 and (vol0 / vol1) == 10:
            # VCSC sometime got this wrong in 10 folds...
            intra['mv'] = intra['mv'] * 10
            intra['mt'] = intra['mt'] * 10
            pickle.dump(intra, open(folderName3 + '/' + fname, 'wb'))
        else:
            print("Error: [%s] %s: vol1 %d (%d) vol2 %d (%d) vol0 %d" %
                  (ticket, dateStr, vol1, volMt1, vol2, volMt2, vol0))
            pickle.dump(None, open(folderName3 + '/' + fname, 'wb'))