Created
March 10, 2020 01:54
-
-
Save slapglif/203285daccb69406611436f2e544a13b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests, talib | |
import numpy as np | |
import matplotlib.pyplot as plt | |
import pandas as pd | |
from mpl_finance import candlestick_ohlc as candles | |
import csv | |
import matplotlib.dates as mdates | |
import time | |
from db import Session, Signals | |
from flask import Flask, request, url_for, jsonify | |
import timing | |
import threading | |
from flask_sqlalchemy_session import flask_scoped_session | |
app = Flask(__name__) | |
db = flask_scoped_session(Session, app) | |
symbols = [] | |
api = "https://api.binance.com/api/v3/ticker/price" | |
api2 = "https://api.binance.com/api/v1/ticker/24hr?symbol=" | |
sList = requests.get(api).json() | |
expected = "" | |
for x in range(len(sList)): | |
if("BTC" in sList[x]['symbol']): # Create list with cryptocurrencies that we can buy with BTC | |
if sList[x]['symbol'] in expected: | |
symbols.append(sList[x]['symbol']) | |
if expected == "": | |
symbols.append(sList[x]['symbol']) | |
date_list = [] | |
open_list = [] | |
high_list = [] | |
low_list = [] | |
close_list = [] | |
volume_list = [] | |
short_window = 9 | |
long_window = 26 | |
RSI_window = 14 | |
timeFrame = "15m" | |
def gen_signals(): | |
print("Generating signals...") | |
while True: | |
for symbol in symbols: | |
data = requests.get(api2 + symbol).json() | |
openTime = str(data['openTime']) | |
closeTime = str(data['closeTime']) | |
candle_data = requests.get("https://api.binance.com/api/v1/klines?symbol=" + data['symbol'] | |
+ "&interval=" + timeFrame + "&startTime=" + openTime + "&endTime=" + closeTime).json() | |
with open("data\\" + symbol + '.csv', 'wt', newline='') as file: | |
header = ['Date', 'Open', 'High', 'Low', 'Close'] | |
writer = csv.writer(file, delimiter=',') | |
writer.writerow(i for i in header) | |
for frame in candle_data: | |
writer.writerow(frame[:5]) | |
# build DataFrame | |
df = pd.read_csv("data\\" + symbol + '.csv', header=0) | |
df['Date'] = pd.to_datetime(df['Date'], unit='ms') | |
# Use TA Lib to generate moving averages | |
signals = pd.DataFrame(index=df.index) | |
signals['signal'] = 0.0 | |
signals['short_ema'] = talib.EMA(df['Close'], short_window) | |
signals['long_ema'] = talib.EMA(df['Close'], long_window) | |
signals['RSI'] = talib.RSI(df['Close'], RSI_window) | |
signals['signal'][short_window:] = np.where(signals['short_ema'][short_window:] | |
> signals['long_ema'][short_window:], 1.0, 0.0) | |
signals['positions'] = signals['signal'].diff() | |
print(float(signals['positions'].iloc[-1:].values), float(signals['signal'].iloc[-1:].values), | |
float(signals['RSI'].iloc[-1:].values), symbol) | |
close_value = float(df['Close'].iloc[-1:].values) | |
close = str('{:.8f}'.format(close_value)) | |
# Generate Signals | |
setup = Signals.find(symbol) | |
if setup is None: | |
setup = Signals.get_or_create(symbol) | |
setup.price = str(close) | |
setup.signal = float(signals.iloc[-1:]['signal'].values) | |
if setup.signal == 1.0 and float(signals['RSI'].iloc[-1:].values) >= 50.0 \ | |
and float(signals['positions'].iloc[-1:].values) != -1.0: | |
setup.direction = "Buy" | |
if setup.signal == 0.0 and float(signals['RSI'].iloc[-1:].values) <= 50.0 \ | |
and float(signals['positions'].iloc[-1:].values) == -1.0: | |
setup.direction = "Sell" | |
db.commit() | |
print("Finished generating output, waiting 900 seconds...") | |
time.sleep(900) | |
threading.Thread(target=gen_signals).start() | |
timing.log("Finished") | |
@app.route("/regen") | |
def regen(): | |
threading.Thread(target=gen_signals).start() | |
return "Finished Generating Signals." | |
@app.route('/output', methods=['GET', 'POST']) | |
def output(): | |
try: | |
response = [] | |
setup = db.query(Signals).all() | |
for pair in setup: | |
if pair.direction is None: | |
pair.direction = "Neutral" | |
response.append({ | |
"pair": pair.pair, | |
"price": pair.price, | |
'signal': pair.direction | |
}) | |
return jsonify(response) | |
except Exception as e: | |
print(e) | |
return "DB Query Fail" | |
if __name__ == '__main__': | |
app.run(debug=True, host="0.0.0.0", use_reloader=False) |
I can't seem to import this package.
Thanks a lot for sharing 🙌 💯 🥇
Hello,
could you tell me what is that package ?
from db import Session, Signals
Thank you
getting this error =================================================================
__warnings.warn('\n\n ================================================================='+
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
what is import db?