Пример #1
0
def get_rsi_value(symbol, time_frame):
    try:
        k_lines = json.loads(DATABASE.get(symbol + time_frame.upper()))
        res = rsi(list(float(x[4]) for x in k_lines), RSI_PERIOD)
        return round(float(res[-1]), 2)
    except (TypeError, KeyError):
        to_err_log(symbol, f'{time_frame}', traceback.format_exc())
Пример #2
0
def get_ma_value(symbol, time_frame, period):
    try:
        k_lines = json.loads(DATABASE.get(symbol + time_frame.upper()))
        res = list(sma(list(float(x[4]) for x in k_lines), period))
        return round(float(res[-1]), 8)
    except (TypeError, KeyError):
        to_err_log(symbol, f'{time_frame} {period}', traceback.format_exc())
Пример #3
0
def get_balance2(asset):
    balances = DATABASE.get(BALANCE)
    if balances is not None:
        balances = json.loads(balances)
        # print(balances)
        for balance in balances:
            if balance['asset'] == asset:
                return float(balance['free'])
Пример #4
0
def get_test_data():
    bid1 = random.randrange(9600, 9700)
    ask1 = random.randrange(9700, 9800)
    bid2 = random.randrange(12000, 12400)
    ask2 = random.randrange(12450, 12800)
    bid3 = random.randrange(309000, 310000)
    ask3 = random.randrange(310000, 311000)
    bid4 = random.randrange(12000, 12400)
    ask4 = random.randrange(12450, 12800)
    bid_amount1 = round(random.uniform(0, 1), 2)
    ask_amount1 = round(random.uniform(0, 1), 2)
    bid_amount2 = round(random.uniform(0, 1), 2)
    ask_amount2 = round(random.uniform(0, 1), 2)
    bid_amount3 = round(random.uniform(0, 1), 2)
    ask_amount3 = round(random.uniform(0, 1), 2)
    bid_amount4 = round(random.uniform(0, 1), 2)
    ask_amount4 = round(random.uniform(0, 1), 2)

    bank_rate = float(str(DATABASE.get(BANK_RATE)))

    return [{
        "exchange": "ITBIT",
        "symbol": "XBT_USD",
        "bid": str(bid1),
        "bid_amount": str(bid_amount1),
        "ask": str(ask1),
        "ask_amount": str(ask_amount1),
        "bank_rate": str(bank_rate),
        "diff": str(round(bid3 / bank_rate / ask1 * 100 - 100, 2))
    }, {
        "exchange": "ITBIT",
        "symbol": "ETH_USD",
        "bid": str(bid2),
        "bid_amount": str(bid_amount2),
        "ask": str(ask2),
        "ask_amount": str(ask_amount2),
        "bank_rate": str(bank_rate),
        "diff": str(round(bid4 / bank_rate / ask2 * 100 - 100, 2))
    }, {
        "exchange": "BXIN",
        "symbol": "THB_BTC",
        "bid": str(bid3),
        "bid_amount": str(bid_amount3),
        "ask": str(ask3),
        "ask_amount": str(ask_amount3),
        "bank_rate": str(bank_rate),
        "diff": str(round(bid1 / bank_rate / ask3 * 100 - 100, 2))
    }, {
        "exchange": "BXIN",
        "symbol": "THB_ETH",
        "bid": str(bid4),
        "bid_amount": str(bid_amount4),
        "ask": str(ask4),
        "ask_amount": str(ask_amount4),
        "bank_rate": str(bank_rate),
        "diff": str(round(bid2 / bank_rate / ask4 * 100 - 100, 2))
    }]
Пример #5
0
def get_pip(symbol):
    exchange_info = DATABASE.get(EXCHANGE_INFO)
    if exchange_info is None:
        return
    exchange_info = json.loads(exchange_info)
    symbols = exchange_info['symbols']
    for symbol_info in symbols:
        if symbol_info['symbol'] == symbol:
            return float(symbol_info['filters'][0]['tickSize'])
Пример #6
0
def normalize_symbol(asset1, asset2):
    exchange_info = DATABASE.get(EXCHANGE_INFO)
    if exchange_info is None:
        return
    exchange_info = json.loads(exchange_info)
    symbols = list(x['symbol'] for x in exchange_info['symbols'])
    if asset1 + asset2 in symbols:
        return asset1 + asset2
    if asset2 + asset1 in symbols:
        return asset2 + asset1
Пример #7
0
def get_24_volume(symbol):
    tickers = DATABASE.get(TICKERS)
    if tickers is None:
        return
    tickers = json.loads(tickers)
    for ticker in tickers:
        if ticker['symbol'] == symbol:
            if split_symbol(symbol)['base'] == PREF_WALL:
                return float(ticker['volume'])
            return float(ticker['quoteVolume'])
Пример #8
0
def split_symbol(symbol):
    exchange_info = DATABASE.get(EXCHANGE_INFO)
    if exchange_info is not None:
        symbols_info = json.loads(exchange_info)['symbols']
        for symbol_info in symbols_info:
            if symbol_info['symbol'] == symbol:
                return {
                    'base': symbol_info['baseAsset'],
                    'quote': symbol_info['quoteAsset']
                }
Пример #9
0
def get_min_notional(symbol):
    exchange_info = DATABASE.get(EXCHANGE_INFO)
    if exchange_info is None:
        return
    exchange_info = json.loads(exchange_info)
    symbols = exchange_info['symbols']
    for s in symbols:
        if s['symbol'] == symbol:
            for f in s['filters']:
                if f['filterType'] == 'MIN_NOTIONAL':
                    return float(f['minNotional'])
def generate():
    log = DATABASE.get(GENERAL_LOG)
    if log is not None:
        log = json.loads(log)
        f = open(LOG_PATH + 'general.log', "w")
        for text in log:
            f.write(text + '\n')
            print(text)
        f.close()
        print('Done\nCheck {}'.format(LOG_PATH + 'general.log'))
    else:
        print('Log is empty')
Пример #11
0
def to_general_log(symbol, text):
    log = DATABASE.get(GENERAL_LOG)
    if log is None:
        log = '[]'
    log = json.loads(log)
    if len(log) > LOG_LENGTH:
        log = log[-(len(log) - 1):]

    dt = datetime.now().replace(microsecond=0).isoformat().replace('T', ' ')
    log.append(dt + ' ' + symbol + ': ' + text)
    DATABASE.set(GENERAL_LOG, json.dumps(log))
    print(dt + ' ' + symbol + ': ' + text)
Пример #12
0
def get_precision(symbol):
    exchange_info = DATABASE.get(EXCHANGE_INFO)
    if exchange_info is None:
        return
    exchange_info = json.loads(exchange_info)
    symbols = exchange_info['symbols']
    for s in symbols:
        if s['symbol'] == symbol:
            for f in s['filters']:
                if f['filterType'] == 'LOT_SIZE':
                    step_size = Decimal(f['stepSize']).normalize()
                    return len(str(step_size).split('.')[1]) if '.' in str(
                        step_size) else 0
Пример #13
0
def update_price_change_percent(symbol, value):
    price_change_percents = json.loads(
        DATABASE.get(symbol + ':' + PRICE_CHANGE_PERCENT))
    remove = []
    for price_change_percent in price_change_percents:
        if int(price_change_percent
               ) + PRICE_CHANGE_PERCENT_DIFFERENCE_TIME_RANGE < int(
                   time.time()):
            remove.append(price_change_percent)

    for x in remove:
        price_change_percents.pop(x)

    price_change_percents.update({int(time.time()): value})
    set_price_change_percent(symbol, price_change_percents)
Пример #14
0
def db_engine():
    engine = DATABASE.get('ENGINE')
    name = DATABASE.get('NAME')
    if engine == 'sqlite':
        return create_engine(f'{engine}:///{name}')
    else:
        host = DATABASE.get('HOST')
        user = DATABASE.get('USER')
        passwd = DATABASE.get('PASSWORD')
        charset = DATABASE.get('CHARSET') or 'utf8'
        return create_engine(f'{engine}://{user}:{passwd}@{host}/{name}',
                             encoding=charset)
Пример #15
0
def update_history(symbol, time_frame, kline):
    try:
        time_now = datetime.datetime.utcfromtimestamp(time.time()).strftime('%H:%M:%S')
        history = DATABASE.get(symbol + time_frame.upper())
        if history is not None:
            history = json.loads(history)
            history.pop(0)

            kline = [kline['t'], kline['o'], kline['h'],
                     kline['l'], kline['c'], kline['v'],
                     kline['T'], kline['q'], kline['n'],
                     kline['V'], kline['Q'], kline['B']]

            history.append(kline)

            print(symbol, time_now, time_frame.upper())
            DATABASE.set(symbol + time_frame.upper(), json.dumps(history))
    except:
        to_general_log(symbol, 'Connect timeout. Reconnection...')
Пример #16
0
def get_data():
    bidask1 = json.loads(DATABASE.get('itbit_XBT_USD'))
    bidask2 = json.loads(DATABASE.get('itbit_ETH_USD'))
    bidask3 = json.loads(DATABASE.get('bxin_THB_BTC'))
    bidask4 = json.loads(DATABASE.get('bxin_THB_ETH'))

    bank_rate = float(str(DATABASE.get(BANK_RATE)))

    return [{
        "exchange":
        "ITBIT",
        "symbol":
        "XBT_USD",
        "bid":
        str(bidask1['bid']),
        "bid_amount":
        '{0:.8f}'.format(bidask1['bid_amount']),
        "ask":
        str(bidask1['ask']),
        "ask_amount":
        '{0:.8f}'.format(bidask1['ask_amount']),
        "bank_rate":
        str(bank_rate),
        "diff":
        str(round(bidask3['bid'] / bank_rate / bidask1['ask'] * 100 - 100, 2))
    }, {
        "exchange": "BXIN",
        "symbol": "THB_BTC",
        "bid": str(bidask3['bid']),
        "bid_amount": str(bidask3['bid_amount']),
        "ask": str(bidask3['ask']),
        "ask_amount": str(bidask3['ask_amount']),
        "bank_rate": str(bank_rate),
        "diff": ""
    }, {
        "exchange":
        "ITBIT",
        "symbol":
        "ETH_USD",
        "bid":
        str(bidask2['bid']),
        "bid_amount":
        str(bidask2['bid_amount']),
        "ask":
        str(bidask2['ask']),
        "ask_amount":
        str(bidask2['ask_amount']),
        "bank_rate":
        str(bank_rate),
        "diff":
        str(round(bidask4['bid'] / bank_rate / bidask2['ask'] * 100 - 100, 2))
    }, {
        "exchange": "BXIN",
        "symbol": "THB_ETH",
        "bid": str(bidask4['bid']),
        "bid_amount": str(bidask4['bid_amount']),
        "ask": str(bidask4['ask']),
        "ask_amount": str(bidask4['ask_amount']),
        "bank_rate": str(bank_rate),
        "diff": ""
    }]
Пример #17
0
from flask import Flask

app = Flask(__name__, instance_relative_config=True)

from config import (
    DATABASE,
    SECRET_KEY,
    DEBUG,
    CSRF_ENABLED,
    UPLOAD_IMAGES_FOLDER,
    UPLOAD_FILES_FOLDER,
)

app.secret_key = SECRET_KEY
app.config["SQLALCHEMY_DATABASE_URI"] = DATABASE.get("SQLALCHEMY_DATABASE_URI")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = DATABASE.get(
    "SQLALCHEMY_TRACK_MODIFICATIONS")
app.config["DEBUG"] = DEBUG
app.config["CSRF_ENABLED"] = CSRF_ENABLED
app.config["UPLOAD_IMAGES_FOLDER"] = UPLOAD_IMAGES_FOLDER
app.config["UPLOAD_FILES_FOLDER"] = UPLOAD_FILES_FOLDER
# Load the views
import db
from app import views, models
Пример #18
0
from datetime import datetime
from peewee import *
from playhouse.db_url import connect
from config import Engine, DATABASE

db_engine = DATABASE.get('DB_ENGINE')
db_name = DATABASE.get('DB_NAME')
db_user = DATABASE.get('DB_USER')
db_password = DATABASE.get('DB_PASSWORD')
db_host = DATABASE.get('DB_HOST')
db_port = DATABASE.get('DB_PORT')

print('db_engine: %s\nEngine.SQLITE: %s\n' % (db_engine, Engine.SQLITE))

if db_engine == Engine.SQLITE:
    db = connect('%s:///%s' % (db_engine.value, db_name))
elif db_engine in (Engine.MYSQL, Engine.POSTGRESQL):
    db = connect(
        '%s:///%s:%s@%s:%d/%d' %
        (db_engine.value, db_user, db_password, db_host, db_port, db_name))


class BaseModel(Model):
    class Meta:
        database = db


class User(BaseModel):
    username = CharField(unique=True)

Пример #19
0
def get_current_price(symbol, s):
    price = DATABASE.get(symbol)
    return float(json.loads(price)[s])
Пример #20
0
def get_candles(symbol, time_frame):
    try:
        return json.loads(DATABASE.get(symbol + time_frame))
    except (TypeError, KeyError):
        to_err_log(symbol, f'{time_frame}', traceback.format_exc())
Пример #21
0
def get_price_change_percent(symbol):
    return json.loads(DATABASE.get(symbol + ':' + PRICE_CHANGE_PERCENT))
Пример #22
0
def get_orders_info(exchange):
    return json.loads(DATABASE.get(exchange + ':' + ORDERS_INFO))