- buy_BTFD: added params
- stock::fetch: support slice by date if loaded from file git-svn-id: http://moon:8086/svn/projects/Stock@334 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
def buy_BTFD(name, data, range_days, cand_window, marker_key='close_n', thresh_max=-10, thresh_min=1, buy_callback=None):
|
def buy_BTFD(name, data, range_days, params, marker_key='close_n', thresh_max=-5, thresh_min=1, buy_callback=None):
|
||||||
N = len(data['index'])
|
N = len(data['index'])
|
||||||
key = 'BTFD'
|
key = 'BTFD'
|
||||||
buy_list = {'index' : np.array([None]*N), key : np.array([None]*N)}
|
buy_list = {'index' : np.array([None]*N), key : np.array([None]*N)}
|
||||||
@@ -10,20 +10,21 @@ def buy_BTFD(name, data, range_days, cand_window, marker_key='close_n', thresh_m
|
|||||||
for n in range(N-range_days, N):
|
for n in range(N-range_days, N):
|
||||||
vmax = data['Qmax'][n]
|
vmax = data['Qmax'][n]
|
||||||
vmin = data['Qmin'][n]
|
vmin = data['Qmin'][n]
|
||||||
trend = data['macd_fdd'][n]
|
trend = data['macd_fd'][n]
|
||||||
|
trend2 = data['macd_fdd'][n]
|
||||||
index = data['index'][n]
|
index = data['index'][n]
|
||||||
value = data[marker_key][n]
|
value = data[marker_key][n]
|
||||||
if vmin <= thresh_min:
|
if vmin <= params['thresh_min']:
|
||||||
if vmax <= thresh_max:
|
if vmax <= params['thresh_max']:
|
||||||
cand = n
|
cand = n
|
||||||
if trend >= 0:
|
if trend2 >= 0:
|
||||||
do_buy = True
|
do_buy = True
|
||||||
print ("{}: Buy on {} at {:0.2f}".format(name, index, value))
|
print ("{}: Buy on {} at {:0.2f}".format(name, index, value))
|
||||||
cand = None
|
cand = None
|
||||||
|
|
||||||
if cand is not None:
|
if cand is not None:
|
||||||
if n - cand <= cand_window:
|
if n - cand <= params['cand_window']:
|
||||||
if trend >= 0:
|
if trend2 >= 0:
|
||||||
do_buy = True
|
do_buy = True
|
||||||
former = data[marker_key][cand]
|
former = data[marker_key][cand]
|
||||||
print("{}: Delayed buy on {} at {:0.2f} ({:0.2f})".format(name, index, value, former-value))
|
print("{}: Delayed buy on {} at {:0.2f} ({:0.2f})".format(name, index, value, former-value))
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ from stock import Stock
|
|||||||
|
|
||||||
params = {
|
params = {
|
||||||
'show_range_days' : 5,
|
'show_range_days' : 5,
|
||||||
|
'btfd' : {'thresh_max' : -10, 'thresh_min' : 1, 'cand_window' : 5},
|
||||||
'k_euro' : 1 / 1.11,
|
'k_euro' : 1 / 1.11,
|
||||||
'ema_alpha' : 0.75,
|
'ema_alpha' : 0.75,
|
||||||
'sma_days' : 10,
|
'sma_days' : 10,
|
||||||
|
|||||||
@@ -72,11 +72,18 @@ class Stock(object):
|
|||||||
hdf = pd.HDFStore(filename, 'r')
|
hdf = pd.HDFStore(filename, 'r')
|
||||||
|
|
||||||
data = hdf[self.symbol] * self.currency_corr
|
data = hdf[self.symbol] * self.currency_corr
|
||||||
N = len(data.index)
|
start_pos = 0
|
||||||
self.data['index'] = np.array(data.index[0:N])
|
end_pos = 0
|
||||||
self.data['close'] = np.array(data['close'][0:N])
|
|
||||||
self.data['high'] = np.array(data['high'][0:N])
|
for index in data.index:
|
||||||
self.data['low'] = np.array(data['low'][0:N])
|
end_pos += 1
|
||||||
|
if str(end) in index:
|
||||||
|
break
|
||||||
|
|
||||||
|
self.data['index'] = np.array(data.index[start_pos:end_pos])
|
||||||
|
self.data['close'] = np.array(data['close'][start_pos:end_pos])
|
||||||
|
self.data['high'] = np.array(data['high'][start_pos:end_pos])
|
||||||
|
self.data['low'] = np.array(data['low'][start_pos:end_pos])
|
||||||
|
|
||||||
hdf.close()
|
hdf.close()
|
||||||
|
|
||||||
@@ -113,7 +120,7 @@ class Stock(object):
|
|||||||
self.data['macd_fdd'] = np.transpose(yf_dd)
|
self.data['macd_fdd'] = np.transpose(yf_dd)
|
||||||
|
|
||||||
def analyze(self, buy_callback, range_days):
|
def analyze(self, buy_callback, range_days):
|
||||||
return agent.buy_BTFD(self.symbol, self.data, marker_key='close_n', cand_window=5, range_days=range_days, buy_callback=buy_callback)
|
return agent.buy_BTFD(self.symbol, self.data, params=self.params['btfd'], marker_key='close_n', range_days=range_days, buy_callback=buy_callback)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def has_candidate(data, key):
|
def has_candidate(data, key):
|
||||||
|
|||||||
Reference in New Issue
Block a user