Refactored stdev transform to be applied to multiple fields, not just price

UnitTest for transforms refactored to account for changed stdev transform, introduced AssertAlmostEqual
This commit is contained in:
Elektra58
2013-01-16 10:33:38 -05:00
committed by Thomas Wiecki
parent a2b1b1b71e
commit d0640d56c8
2 changed files with 99 additions and 45 deletions
+28 -16
View File
@@ -13,12 +13,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from collections import deque
import pytz
import numpy as np
import pandas as pd
from collections import deque
from datetime import timedelta, datetime
from unittest import TestCase
@@ -273,44 +272,57 @@ class TestFinanceTransforms(TestCase):
assert tnfm_volumes == expected_volumes
def test_moving_stddev(self):
stddev = MovingStandardDev(
fields=['price', 'volume'],
market_aware=False,
delta=timedelta(days=3),
)
trade_history = factory.create_trade_history(
133,
[10.0, 15.0, 13.0, 12.0],
[100, 100, 100, 100],
timedelta(hours=1),
[100, 200, 100, 200],
timedelta(days=1),
self.trading_environment
)
stddev = MovingStandardDev(
market_aware=False,
delta=timedelta(minutes=150),
)
self.source = SpecificEquityTrades(event_list=trade_history)
transformed = list(stddev.transform(self.source))
# Output values
tnfm_prices = [message.tnfm_value.price for message in transformed]
tnfm_volumes = [message.tnfm_value.volume for message in transformed]
vals = [message.tnfm_value for message in transformed]
expected = [
expected_prices = [
None,
np.std([10.0, 15.0], ddof=1),
np.std([10.0, 15.0, 13.0], ddof=1),
np.std([15.0, 13.0, 12.0], ddof=1),
]
# np has odd rounding behavior, cf.
# http://docs.scipy.org/doc/np/reference/generated/np.std.html
for v1, v2 in zip(vals, expected):
expected_volumes = [
None,
np.std([100, 200], ddof=1),
np.std([100, 200, 100], ddof=1),
np.std([200, 100, 200], ddof=1),
]
for v1, v2 in zip(tnfm_prices, expected_prices):
if v1 is None:
assert v2 is None
continue
assert round(v1, 5) == round(v2, 5)
self.assertAlmostEqual(v1, v2)
for v1, v2 in zip(tnfm_volumes, expected_volumes):
if v1 is None:
assert v2 is None
continue
self.assertAlmostEqual(v1, v2)
############################################################
# Test BatchTransform
class TestBatchTransform(TestCase):
def setUp(self):
setup_logger(self)