-
Notifications
You must be signed in to change notification settings - Fork 1
/
ts-adaptive.py
107 lines (80 loc) · 2.41 KB
/
ts-adaptive.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
from __future__ import print_function
import time
import datetime
import os, fnmatch
import psutil
import csv
import sys
import numpy as pynum
import pickle
#import sqlite3
import mysql.connector
from secrets import randbelow
pFile = ""
PriceCol = 0
SignalCol = 1
FdaCol = 2
def write2mysql(ss):
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="xsjhk%123SD==-Ghk11",
database="altreva"
)
mycursor = mydb.cursor()
for s in ss:
sql = "INSERT INTO altreva.testgroup_simple (fn) VALUES ('" + s + "')"
mycursor.execute(sql)
mydb.commit()
mydb.close()
#print('wrote to mysql')
def system_test(arrReports, fda_low):
mmin = 1
mmax = 95
mstep = 1
sql =""
rows = len(arrReports[0])
s = []
# majority voting threshold value
for maj_threshold in pynum.arange(mmin, mmax, mstep):
pips = 0 # p&l in pips, start calculating from row 2
for r in range(rows):
# that's header
if (r<2): # we know the future price only on the next row of a signal, so row 1 has no future price
continue
else:
row_signal = 0 # signal across a row with all models
for model in arrReports:
#print(model)
#exit()
if ((model[r][FdaCol])==""): model[r][FdaCol]=0
if ( float(model[r][FdaCol]) >= fda_low ): # make sure FDA is within needed range, then we count that signal
row_signal += model[r][SignalCol]
model = arrReports[0] # just take first model for calculations
if ( abs(row_signal) >= maj_threshold): # it was a valid signal and we execute it
if (row_signal > 0):
pips += float(model[r][PriceCol]) - float(model[r-1][PriceCol])
elif (row_signal < 0):
pips += float(model[r-1][PriceCol]) - float(model[r][PriceCol])
if (pips != 0):
s.append ( pFile + "," + str(fda_low) + "," + str(maj_threshold) + "," + str(pips) )
write2mysql(s)
def write2sqlite(sql):
con = sqlite3.connect(pFile+'.sqlite3')
print("writing to: " + pFile+'.sqlite3')
cur = con.cursor()
cur.executescript(sql)
con.commit()
con.close()
# print something with timestamp
def ts(s):
now = datetime.datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S") + " // " + s)
if __name__ == "__main__":
pFile = sys.argv[1]
pkl_file = open(pFile, 'rb')
arrReports = pickle.load(pkl_file)
pkl_file.close()
fda_low = float(sys.argv[2])
# system_test(system_id, arrReports, rows, fda_low, fda_high, maj_threshold)
system_test(arrReports, fda_low)