Browse Source

Better bar synchronization

master
Denis Tereshkin 7 years ago
parent
commit
fc66b39e51
  1. 1
      src/naiback/indicators/__init__.py
  2. 18
      src/naiback/indicators/bollinger.py
  3. 31
      src/naiback/strategy/strategy.py

1
src/naiback/indicators/__init__.py

@ -6,3 +6,4 @@ from .intradaybarnumber import IntradayBarNumber @@ -6,3 +6,4 @@ from .intradaybarnumber import IntradayBarNumber
from .highest import Highest,HighestValue
from .lowest import Lowest,LowestValue
from .atr import ATR
from .bollinger import BollingerBands

18
src/naiback/indicators/bollinger.py

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
import numpy as np
from .sma import SMA
def BollingerBands(values, period, stddevs):
lower = np.zeros(len(values))
higher = np.zeros(len(values))
ma = SMA(values, period)
diffs = ma - np.array(values)
for i in range(period, len(values)):
sigma = np.std(diffs[i-period+1:i+1])
lower[i] = ma[i] - stddevs * sigma
higher[i] = ma[i] + stddevs * sigma
return (lower, higher)

31
src/naiback/strategy/strategy.py

@ -92,15 +92,32 @@ class Strategy: @@ -92,15 +92,32 @@ class Strategy:
def _synchronize_bars(self, bars, all_dates):
bar_pos = 0
open_ = 0
high = 0
low = 0
close = 0
volume = bars.volume[bar_pos]
for dt in all_dates:
if bars.timestamp[bar_pos] > dt:
open_ = bars.open[bar_pos]
high = bars.high[bar_pos]
low = bars.low[bar_pos]
close = bars.close[bar_pos]
volume = bars.volume[bar_pos]
if len(bars.timestamp) > bar_pos:
print("new close: {} ({})".format(close, dt))
if bars.timestamp[bar_pos] > dt:
print("Inserting at {}: {}".format(dt, close))
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt)
else:
open_ = bars.open[bar_pos]
high = bars.high[bar_pos]
low = bars.low[bar_pos]
close = bars.close[bar_pos]
volume = bars.volume[bar_pos]
if bars.timestamp[bar_pos] > dt:
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt)
print("new close: {} ({})".format(close, dt))
else:
bars.insert_bar(bar_pos, open_, high, low, close, volume, dt)
print("Inserting[2] at {}: {}".format(dt, close))
bar_pos += 1
def _combine_dates(self):

Loading…
Cancel
Save