Execution layer for algorithmic trading
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
7.0 KiB

{-# LANGUAGE OverloadedStrings #-}
module Test.RoboCom.Utils
(
unitTests
) where
import Test.Tasty
import Test.Tasty.HUnit
import Test.Tasty.QuickCheck as QC
import Test.Tasty.SmallCheck as SC
import ATrade.Types
import qualified Data.Text as T
import Data.Time.Calendar
import Data.Time.Clock
import ATrade.RoboCom.Utils
unitTests = testGroup "RoboCom.Indicators" [
testRescaleToDaily,
testRescaleToDaily2
]
testRescaleToDaily = testCase "Rescale to daily" $ assertEqual "Incorrect rescale" dailyBars $ rescaleToDaily min15Bars
where
dailyBars = reverse [ yesterdayBar, todayBar ]
min15Bars = reverse [
Bar {
barSecurity = "foo",
barTimestamp = UTCTime (fromGregorian 2017 2 28) (18 * 3600),
barOpen = 10,
barHigh = 12,
barLow = 9,
barClose = 11,
barVolume = 100
},
Bar {
barSecurity = "foo",
barTimestamp = UTCTime (fromGregorian 2017 2 28) (18 * 3600 + 15 * 60),
barOpen = 10.95,
barHigh = 12,
barLow = 9,
barClose = 11.3,
barVolume = 200
},
Bar {
barSecurity = "foo",
barTimestamp = UTCTime (fromGregorian 2017 3 1) (10 * 3600 + 0.1),
barOpen = 15,
barHigh = 15,
barLow = 14,
barClose = 14.2,
barVolume = 40
} ]
yesterdayBar = Bar {
barSecurity = "foo",
barTimestamp = UTCTime (fromGregorian 2017 2 28) (18 * 3600 + 15 * 60),
barOpen = 10,
barHigh = 12,
barLow = 9,
barClose = 11.3,
barVolume = 300
}
todayBar = Bar {
barSecurity = "foo",
barTimestamp = UTCTime (fromGregorian 2017 3 1) (10 * 3600 + 0.1),
barOpen = 15,
barHigh = 15,
barLow = 14,
barClose = 14.2,
barVolume = 40
}
testRescaleToDaily2 = testCase "Rescale to daily 2" $ assertEqual "Incorrect rescale" dailyBars $ rescaleToDaily min30Bars
where
dailyBars = reverse [
ibar 1 17 3.6065000 3.6740000 3.5670000 3.6740000 47398000,
ibar 2 17 3.6760000 3.6980000 3.6350000 3.6980000 32643000,
ibar 3 17 3.7000000 3.7090000 3.6545000 3.6800000 35727000,
ibar 4 17 3.6800000 3.6865000 3.5950000 3.6855000 117477000 ]
min30Bars = reverse [
ibar 1 0 3.6065000 3.6065000 3.5670000 3.5985000 2058000,
ibar 1 1 3.5995000 3.6275000 3.5990000 3.6200000 2208000,
ibar 1 2 3.6200000 3.6300000 3.6130000 3.6300000 3132000,
ibar 1 3 3.6290000 3.6300000 3.6215000 3.6285000 1296000,
ibar 1 4 3.6280000 3.6365000 3.6205000 3.6365000 1956000,
ibar 1 5 3.6350000 3.6500000 3.6350000 3.6470000 4126000,
ibar 1 6 3.6460000 3.6560000 3.6440000 3.6555000 3656000,
ibar 1 7 3.6555000 3.6570000 3.6485000 3.6560000 2076000,
ibar 1 8 3.6565000 3.6590000 3.6530000 3.6590000 1891000,
ibar 1 9 3.6585000 3.6695000 3.6580000 3.6695000 1951000,
ibar 1 10 3.6680000 3.6700000 3.6620000 3.6690000 2220000,
ibar 1 11 3.6690000 3.6695000 3.6470000 3.6485000 5865000,
ibar 1 12 3.6485000 3.6600000 3.6485000 3.6585000 2692000,
ibar 1 13 3.6585000 3.6670000 3.6565000 3.6650000 1348000,
ibar 1 14 3.6645000 3.6695000 3.6625000 3.6675000 1259000,
ibar 1 15 3.6675000 3.6695000 3.6490000 3.6520000 2554000,
ibar 1 16 3.6525000 3.6660000 3.6375000 3.6655000 4529000,
ibar 1 17 3.6655000 3.6740000 3.6595000 3.6740000 2581000,
ibar 2 0 3.6760000 3.6790000 3.6450000 3.6455000 3248000,
ibar 2 1 3.6450000 3.6510000 3.6400000 3.6510000 1357000,
ibar 2 2 3.6505000 3.6530000 3.6400000 3.6400000 1458000,
ibar 2 3 3.6410000 3.6435000 3.6350000 3.6365000 1667000,
ibar 2 4 3.6365000 3.6425000 3.6350000 3.6405000 1889000,
ibar 2 5 3.6395000 3.6440000 3.6390000 3.6410000 579000,
ibar 2 6 3.6425000 3.6445000 3.6400000 3.6420000 414000,
ibar 2 7 3.6420000 3.6420000 3.6380000 3.6385000 301000,
ibar 2 8 3.6385000 3.6430000 3.6360000 3.6415000 402000,
ibar 2 9 3.6425000 3.6500000 3.6405000 3.6500000 1855000,
ibar 2 10 3.6500000 3.6500000 3.6390000 3.6440000 1286000,
ibar 2 11 3.6435000 3.6465000 3.6400000 3.6410000 1260000,
ibar 2 12 3.6410000 3.6840000 3.6410000 3.6795000 5554000,
ibar 2 13 3.6800000 3.6825000 3.6700000 3.6790000 1980000,
ibar 2 14 3.6790000 3.6825000 3.6720000 3.6795000 1782000,
ibar 2 15 3.6775000 3.6795000 3.6720000 3.6720000 693000,
ibar 2 16 3.6720000 3.6825000 3.6710000 3.6810000 2432000,
ibar 2 17 3.6810000 3.6980000 3.6800000 3.6980000 4486000,
ibar 3 0 3.7000000 3.7050000 3.6810000 3.6845000 2517000,
ibar 3 1 3.6860000 3.7090000 3.6840000 3.7025000 3201000,
ibar 3 2 3.7035000 3.7040000 3.6945000 3.6975000 947000,
ibar 3 3 3.6975000 3.7000000 3.6870000 3.6910000 1272000,
ibar 3 4 3.6885000 3.6965000 3.6805000 3.6920000 2710000,
ibar 3 5 3.6885000 3.6985000 3.6885000 3.6935000 932000,
ibar 3 6 3.6920000 3.6930000 3.6630000 3.6690000 4562000,
ibar 3 7 3.6690000 3.6740000 3.6640000 3.6670000 663000,
ibar 3 8 3.6670000 3.6715000 3.6600000 3.6690000 2189000,
ibar 3 9 3.6700000 3.6745000 3.6605000 3.6725000 880000,
ibar 3 10 3.6725000 3.6775000 3.6695000 3.6740000 1544000,
ibar 3 11 3.6755000 3.6790000 3.6640000 3.6660000 1264000,
ibar 3 12 3.6655000 3.6710000 3.6655000 3.6680000 484000,
ibar 3 13 3.6680000 3.6780000 3.6680000 3.6740000 1178000,
ibar 3 14 3.6735000 3.6800000 3.6735000 3.6770000 919000,
ibar 3 15 3.6785000 3.6830000 3.6600000 3.6655000 3961000,
ibar 3 16 3.6655000 3.6805000 3.6545000 3.6795000 4080000,
ibar 3 17 3.6795000 3.6840000 3.6685000 3.6800000 2424000,
ibar 4 0 3.6800000 3.6865000 3.6610000 3.6665000 1406000,
ibar 4 1 3.6635000 3.6770000 3.6550000 3.6660000 1184000,
ibar 4 2 3.6650000 3.6800000 3.6600000 3.6685000 3210000,
ibar 4 3 3.6685000 3.6710000 3.6610000 3.6610000 1525000,
ibar 4 4 3.6610000 3.6720000 3.6600000 3.6650000 2849000,
ibar 4 5 3.6615000 3.6650000 3.6535000 3.6540000 2027000,
ibar 4 6 3.6535000 3.6670000 3.6420000 3.6500000 3892000,
ibar 4 7 3.6465000 3.6600000 3.6350000 3.6520000 4267000,
ibar 4 8 3.6515000 3.6720000 3.6500000 3.6535000 5878000,
ibar 4 9 3.6535000 3.6640000 3.6435000 3.6435000 3047000,
ibar 4 10 3.6435000 3.6490000 3.6395000 3.6395000 2217000,
ibar 4 11 3.6395000 3.6395000 3.6105000 3.6255000 4354000,
ibar 4 12 3.6260000 3.6400000 3.5950000 3.6135000 6811000,
ibar 4 13 3.6145000 3.6600000 3.6140000 3.6550000 5101000,
ibar 4 14 3.6550000 3.6600000 3.6380000 3.6570000 2624000,
ibar 4 15 3.6570000 3.6595000 3.6305000 3.6400000 4906000,
ibar 4 16 3.6400000 3.6435000 3.6195000 3.6400000 8638000,
ibar 4 17 3.6435000 3.6855000 3.6275000 3.6855000 53541000 ]
ibar d ibn o h l c v = Bar { barSecurity = "", barTimestamp = UTCTime (fromGregorian 2017 2 d) (10 * 3600 + ibn * 30 * 60), barOpen = o, barHigh = h, barLow = l, barClose = c, barVolume = v}