Skip to content

Instantly share code, notes, and snippets.

@slapglif
Created March 10, 2020 01:54
Show Gist options
  • Save slapglif/203285daccb69406611436f2e544a13b to your computer and use it in GitHub Desktop.
Save slapglif/203285daccb69406611436f2e544a13b to your computer and use it in GitHub Desktop.
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)
@khazaddim
Copy link

what is import db?

@khazaddim
Copy link

I can't seem to import this package.

@qkum
Copy link

qkum commented Jun 11, 2021

Thanks a lot for sharing 🙌 💯 🥇

@777Bridges
Copy link

Hello,
could you tell me what is that package ?
from db import Session, Signals
Thank you

@fspxz
Copy link

fspxz commented Dec 10, 2021

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