started pattern based analysis
--HG-- branch : sandbox
This commit is contained in:
@@ -30,6 +30,8 @@ from matplotlib.dates import date2num
|
||||
|
||||
# local imports
|
||||
|
||||
from globals import *
|
||||
|
||||
# constants
|
||||
|
||||
ONE_MINUTE = 60. / 86400.
|
||||
@@ -52,7 +54,7 @@ def tdl(tick_date):
|
||||
year = tick_date.strftime("%Y")
|
||||
yyyymmdd = tick_date.strftime("%Y%m%d")
|
||||
filename = "%s.csv" % (fiid)
|
||||
filepath = os.path.join("d:\\rttrd-prd-var\\consors-mdf\\data", year, yyyymmdd, filename)
|
||||
filepath = os.path.join(RTTRD_VAR, "consors-mdf\\data", year, yyyymmdd, filename)
|
||||
x = [ ]
|
||||
y = [ ]
|
||||
v = [ ]
|
||||
@@ -240,9 +242,12 @@ class DelayedAcp:
|
||||
class Main:
|
||||
def __init__(self):
|
||||
warnings.simplefilter("default", np.RankWarning)
|
||||
self.advance_count = 1
|
||||
self.ylow = None
|
||||
self.yhigh = None
|
||||
self.advance_count = 1
|
||||
self.fiblo = None
|
||||
self.fibhi = None
|
||||
self.fibs = None
|
||||
|
||||
self.root = Tk.Tk()
|
||||
self.root.wm_title("Embedding in TK")
|
||||
@@ -280,22 +285,23 @@ class Main:
|
||||
|
||||
# create artists
|
||||
LOG.debug("Loading ticks...")
|
||||
self.x, self.y, self.v = tdl(datetime.datetime(2009, 6, 3))
|
||||
self.xs, self.ys, self.vs = tdl(datetime.datetime(2009, 6, 25))
|
||||
LOG.debug("Ticks loaded.")
|
||||
lows, highs = find_lows_highs(self.x, self.y)
|
||||
lows, highs = find_lows_highs(self.xs, self.ys)
|
||||
|
||||
self.mmh = Lohi(10)
|
||||
self.mmh = Lohi(5)
|
||||
|
||||
self.w0 = 0
|
||||
self.wd = 2000
|
||||
self.low_high_crs = 0
|
||||
xr, yr, vr = self.tick_window(self.w0, self.wd)
|
||||
self.fiblo = self.fibhi = (0, self.xs[0], self.ys[0])
|
||||
fit = np.average(yr)
|
||||
|
||||
self.tl, = self.ax1.plot_date(xr, yr, '-')
|
||||
self.fl, = self.ax1.plot_date(xr, (fit,) * len(xr), 'k--')
|
||||
self.mh, = self.ax1.plot_date(xr, (yr[0],) * len(xr), 'g:')
|
||||
self.ml, = self.ax1.plot_date(xr, (yr[0],) * len(xr), 'r:')
|
||||
self.mh, = self.ax1.plot_date(xr, (yr[0],) * len(xr), 'k-')
|
||||
self.ml, = self.ax1.plot_date(xr, (yr[0],) * len(xr), 'k-')
|
||||
# Acp markers
|
||||
self.him, = self.ax1.plot_date([x for n, x, y in lows], [y for n, x, y in lows], 'go')
|
||||
self.lom, = self.ax1.plot_date([x for n, x, y in highs], [y for n, x, y in highs], 'ro')
|
||||
@@ -316,7 +322,6 @@ class Main:
|
||||
fr1 = Tk.Frame(master=self.root)
|
||||
bu1 = Tk.Button(master=fr1, text='Quit', command=self.root.quit)
|
||||
bu2 = Tk.Button(master=fr1, text='Stop', command=self.stop)
|
||||
bu3 = Tk.Button(master=fr1, text='Resume', command=self.resume)
|
||||
bu4 = Tk.Button(master=fr1, text='1x', command=self.times_one)
|
||||
bu5 = Tk.Button(master=fr1, text='5x', command=self.times_five)
|
||||
bu6 = Tk.Button(master=fr1, text='10x', command=self.times_ten)
|
||||
@@ -325,7 +330,6 @@ class Main:
|
||||
bu5.pack(side=Tk.RIGHT, padx=5, pady=5)
|
||||
bu4.pack(side=Tk.RIGHT, padx=5, pady=5)
|
||||
bu2.pack(side=Tk.RIGHT, padx=5, pady=5)
|
||||
bu3.pack(side=Tk.RIGHT, padx=5, pady=5)
|
||||
fr1.pack(side=Tk.BOTTOM)
|
||||
|
||||
|
||||
@@ -335,6 +339,7 @@ class Main:
|
||||
xr, yr, vr = self.tick_window(self.w0, self.wd)
|
||||
while self.low_high_crs < self.w0 + self.wd:
|
||||
self.mark_low_high(self.low_high_crs)
|
||||
self.fib_low_high(self.low_high_crs)
|
||||
self.low_high_crs += 1
|
||||
# build polynomial fit
|
||||
lohis = self.mmh.lohis
|
||||
@@ -347,7 +352,7 @@ class Main:
|
||||
# width of trend channel
|
||||
mx = 0
|
||||
for n in range(n0, n1):
|
||||
mx = max(mx, math.fabs(np.polyval(coefs, num2sod(self.x[n])) - self.y[n]))
|
||||
mx = max(mx, math.fabs(np.polyval(coefs, num2sod(self.xs[n])) - self.ys[n]))
|
||||
a, b = coefs
|
||||
self.mh.set_data((x0, x2), [np.polyval((a, b+mx), num2sod(x)) for x in (x0, x2)])
|
||||
self.ml.set_data((x0, x2), [np.polyval((a, b-mx), num2sod(x)) for x in (x0, x2)])
|
||||
@@ -357,7 +362,7 @@ class Main:
|
||||
# update axis
|
||||
self.set_axis(xr, yr)
|
||||
self.canvas.draw()
|
||||
if self.w0 < len(self.x) - self.wd - 1:
|
||||
if self.w0 < len(self.xs) - self.wd - 1:
|
||||
self.after_id = self.root.after(10, self.animate)
|
||||
|
||||
def set_axis(self, xr, yr, bias=50):
|
||||
@@ -375,11 +380,54 @@ class Main:
|
||||
self.ax2.axis([xr[0], xr[-1], 0, 50000])
|
||||
|
||||
def tick_window(self, w0, wd = 1000):
|
||||
return (self.x[w0:w0 + wd], self.y[w0:w0 + wd], self.v[w0:w0 + wd])
|
||||
return (self.xs[w0:w0 + wd], self.ys[w0:w0 + wd], self.vs[w0:w0 + wd])
|
||||
|
||||
def fib_low_high(self, n):
|
||||
tick = (n, self.xs[n], self.ys[n])
|
||||
redraw = False
|
||||
n, x, y = tick
|
||||
hin, hix, hiy = self.fibhi
|
||||
lon, lox, loy = self.fiblo
|
||||
delta = hiy - loy
|
||||
# 61.8, 50.0, 38.2, 23.6 %
|
||||
y61 = loy + delta * 0.618
|
||||
y50 = loy + delta * 0.50
|
||||
y38 = loy + delta * 0.382
|
||||
y23 = loy + delta * 0.236
|
||||
if y < self.fiblo[2]:
|
||||
self.fiblo = tick
|
||||
if y > self.fibhi[2]:
|
||||
self.fibhi = tick
|
||||
if self.fibs is not None:
|
||||
if lox > hix and y > y50:
|
||||
self.fibs = None
|
||||
self.fibhi = tick
|
||||
if lox < hix and y < y50:
|
||||
self.fibs = None
|
||||
self.fiblo = tick
|
||||
# create fib lines if lo hi differs more than 10 pts
|
||||
if delta > 10:
|
||||
xr = (min(lox, hix), x)
|
||||
if self.fibs is None:
|
||||
l100, = self.ax1.plot_date(xr, (hiy, hiy), 'r-')
|
||||
l61, = self.ax1.plot_date(xr, (y61, y61), 'r--')
|
||||
l50, = self.ax1.plot_date(xr, (y50, y50), 'r--')
|
||||
l38, = self.ax1.plot_date(xr, (y38, y38), 'r--')
|
||||
l23, = self.ax1.plot_date(xr, (y23, y23), 'r--')
|
||||
l0, = self.ax1.plot_date(xr, (loy, loy), 'r-')
|
||||
self.fibs = (l100, l61, l50, l38, l23, l0)
|
||||
else:
|
||||
l100, l61, l50, l38, l23, l0 = self.fibs
|
||||
l100.set_data(xr, (hiy, hiy))
|
||||
l61.set_data(xr, (y61, y61))
|
||||
l50.set_data(xr, (y50, y50))
|
||||
l38.set_data(xr, (y38, y38))
|
||||
l23.set_data(xr, (y23, y23))
|
||||
l0.set_data(xr, (loy, loy))
|
||||
|
||||
def mark_low_high(self, n):
|
||||
x = self.x
|
||||
y = self.y
|
||||
x = self.xs
|
||||
y = self.ys
|
||||
rc = self.mmh((n, x[n], y[n]))
|
||||
if rc:
|
||||
lohi, tick = rc
|
||||
@@ -412,12 +460,15 @@ class Main:
|
||||
|
||||
def times_one(self):
|
||||
self.advance_count = 1
|
||||
self.resume()
|
||||
|
||||
def times_five(self):
|
||||
self.advance_count = 5
|
||||
self.resume()
|
||||
|
||||
def times_ten(self):
|
||||
self.advance_count = 10
|
||||
self.resume()
|
||||
|
||||
def run(self):
|
||||
self.root.after(500, self.animate)
|
||||
|
||||
Reference in New Issue
Block a user