52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
"""
|
|
script that runs continuously and collects pricing and technical indicators data,
|
|
entering the data into instrument/window data tables.
|
|
"""
|
|
import sqlite3
|
|
import sqlalchemy
|
|
import pandas as pd
|
|
from datetime import datetime
|
|
from backend.pricing import history
|
|
from backend.config import currencies
|
|
from backend.indicators import sma, stoch, pivotPoints, bollBands
|
|
|
|
|
|
windows = ['M5', 'M15', 'H1', 'H4', 'D']
|
|
for instr in currencies:
|
|
for w in windows:
|
|
LiteCurrencyDB(instr, w)
|
|
|
|
def LiteCurrencyDB(instr, w):
|
|
# connect to the DB
|
|
db = sqlite3.connect('liteDB/currencies.db')
|
|
c = db.cursor()
|
|
table_name = "%s_%s" % (instr, w)
|
|
# get last 500 data points
|
|
df = history(instr, w)
|
|
prices = df['Close']
|
|
# set the dataframe with our technical indicators
|
|
df['fast_sma'] = sma(prices, 6)
|
|
df['slow_sma'] = sma(prices, 10)
|
|
df = stoch(df, 6, 3)
|
|
df = bollBands(df, 5, 0.5)
|
|
pp = pd.DataFrame(data=pivotPoints(df))
|
|
df = pd.concat([df,pp], axis=1, join_axes=[df.index])
|
|
inputs = list(tuple(row for idx, row in df.iterrows()))
|
|
# insert them into the dedicated table for this currency and timeframe
|
|
c.execute('''CREATE TABLE IF NOT EXISTS {}(
|
|
dt TEXT, Open REAL, High REAL, Low REAL, Close REAL,
|
|
Volume INTEGER, fast_sma REAL, slow_sma REAL, Lstoch REAL,
|
|
Hstoch REAL, K REAL, D REAL, rolling_mean REAL, boll_high REAL,
|
|
boll_low REAL, PP REAL, R1 REAL, R2 REAL, R3 REAL, S1 REAL,
|
|
S2 REAL, S3 REAL
|
|
)'''.format(table_name))
|
|
c.executemany('''INSERT INTO {}(
|
|
dt, Open, High, Low, Close, Volume, fast_sma, slow_sma, Lstoch,
|
|
Hstoch, K, D, rolling_mean, boll_high, boll_low, PP, R1, R2, R3,
|
|
S1, S2, S3
|
|
) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'''
|
|
.format(table_name), inputs)
|
|
db.commit()
|
|
print('table created successfully')
|
|
return db, df
|