From 725ad73240a3dedd46ec1a69d64fd92508c8c411 Mon Sep 17 00:00:00 2001 From: JosueNina <36119850+JosueNina@users.noreply.github.com> Date: Fri, 15 Nov 2024 09:19:55 -0500 Subject: [PATCH] Implement Average Range (AR) Indicator (#8404) * Add Average Daily Range indicator and tests - Implemented AverageDailyRange indicator - The indicator uses a Simple Moving Average (SMA) - Created unit tests for the indicator - Includes example input data and test file (spy_adr.csv) * Refactor AverageDailyRange Indicator - Renamed AverageDailyRange to AverageRage for a more generic approach - Replaced explicit types with 'var' - Updated method name in test cases - Placed AR method in the correct alphabetical order * Solving minor issues with AR indicator - Replace TradeBar with IBaseDataBar - Remove unnecessary override methods --- Algorithm/QCAlgorithm.Indicators.cs | 18 + Indicators/AverageRange.cs | 81 ++++ Tests/Indicators/AverageRangeTests.cs | 80 ++++ Tests/QuantConnect.Tests.csproj | 3 + Tests/TestData/spy_adr.csv | 526 ++++++++++++++++++++++++++ 5 files changed, 708 insertions(+) create mode 100644 Indicators/AverageRange.cs create mode 100644 Tests/Indicators/AverageRangeTests.cs create mode 100644 Tests/TestData/spy_adr.csv diff --git a/Algorithm/QCAlgorithm.Indicators.cs b/Algorithm/QCAlgorithm.Indicators.cs index 3da6baf8db9b..8ba5d84b20e7 100644 --- a/Algorithm/QCAlgorithm.Indicators.cs +++ b/Algorithm/QCAlgorithm.Indicators.cs @@ -145,6 +145,23 @@ public Alpha A(Symbol target, Symbol reference, int alphaPeriod = 1, int betaPer return alpha; } + /// + /// Creates a new Average Range (AR) indicator. + /// + /// The symbol whose Average Range we want to calculate + /// The period over which to compute the Average Range + /// The resolution + /// Selects a value from the BaseData to send into the indicator. If null, defaults to the Value property of BaseData (x => x.Value). + /// The Average Range indicator for the requested symbol over the specified period + [DocumentationAttribute(Indicators)] + public AverageRange AR(Symbol symbol, int period, Resolution? resolution = null, Func selector = null) + { + var name = CreateIndicatorName(symbol, $"AR({period})", resolution); + var averageRange = new AverageRange(name, period); + InitializeIndicator(averageRange, resolution, selector, symbol); + return averageRange; + } + /// /// Creates a new ARIMA indicator. /// @@ -1894,6 +1911,7 @@ public SimpleMovingAverage SMA(Symbol symbol, int period, Resolution? resolution return simpleMovingAverage; } + /// /// Creates a new Schaff Trend Cycle indicator /// diff --git a/Indicators/AverageRange.cs b/Indicators/AverageRange.cs new file mode 100644 index 000000000000..f498feaefc6b --- /dev/null +++ b/Indicators/AverageRange.cs @@ -0,0 +1,81 @@ +/* + * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. + * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +using QuantConnect.Data.Market; + +namespace QuantConnect.Indicators +{ + /// + /// Represents the Average Range (AR) indicator, which calculates the average price range + /// + public class AverageRange : BarIndicator, IIndicatorWarmUpPeriodProvider + { + /// + /// The Simple Moving Average (SMA) used to calculate the average of the price ranges. + /// + private readonly SimpleMovingAverage _sma; + + /// + /// Initializes a new instance of the AverageRange class with the specified name and period. + /// + /// The name of the AR indicator. + /// The number of periods over which to compute the average range. + public AverageRange(string name, int period) : base(name) + { + _sma = new SimpleMovingAverage(name + "_SMA", period); + } + + /// + /// Initializes the AR indicator with the default name format and period. + /// + public AverageRange(int period) + : this($"AR({period})", period) + { + } + + /// + /// Indicates whether the indicator has enough data to start producing valid results. + /// + public override bool IsReady => _sma.IsReady; + + /// + /// The number of periods needed to fully initialize the AR indicator. + /// + public int WarmUpPeriod => _sma.WarmUpPeriod; + + /// + /// Resets the indicator and clears the internal state, including the SMA. + /// + public override void Reset() + { + _sma.Reset(); + base.Reset(); + } + + /// + /// Computes the next value of the Average Range (AR) by calculating the price range (high - low) + /// and passing it to the SMA to get the smoothed value. + /// + /// The input data for the current bar, including open, high, low, close values. + /// The computed AR value, which is the smoothed average of price ranges. + protected override decimal ComputeNextValue(IBaseDataBar input) + { + var priceRange = input.High - input.Low; + // Update the SMA with the price range + _sma.Update(new IndicatorDataPoint(input.EndTime, priceRange)); + return _sma.Current.Value; + } + } +} \ No newline at end of file diff --git a/Tests/Indicators/AverageRangeTests.cs b/Tests/Indicators/AverageRangeTests.cs new file mode 100644 index 000000000000..1fb652027b7c --- /dev/null +++ b/Tests/Indicators/AverageRangeTests.cs @@ -0,0 +1,80 @@ +/* + * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. + * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using QuantConnect.Data.Market; +using QuantConnect.Indicators; + +namespace QuantConnect.Tests.Indicators +{ + [TestFixture] + public class AverageRangeTests : CommonIndicatorTests + { + protected override IndicatorBase CreateIndicator() + { + RenkoBarSize = 1m; + VolumeRenkoBarSize = 0.5m; + return new AverageRange(20); + } + protected override string TestFileName => "spy_adr.csv"; + + protected override string TestColumnName => "adr"; + + [Test] + public void ComputesCorrectly() + { + var period = 20; + var adr = new AverageRange(period); + var values = new List(); + for (int i = 0; i < period; i++) + { + var value = new TradeBar + { + Symbol = Symbol.Empty, + Time = DateTime.Now.AddSeconds(i), + High = 2 * i, + Low = i + }; + adr.Update(value); + values.Add(value); + } + var expected = values.Average(x => x.High - x.Low); + Assert.AreEqual(expected, adr.Current.Value); + } + + [Test] + public void IsReadyAfterPeriodUpdates() + { + var period = 5; + var adr = new AverageRange(period); + for (int i = 0; i < period; i++) + { + Assert.IsFalse(adr.IsReady); + var value = new TradeBar + { + Symbol = Symbol.Empty, + Time = DateTime.Now.AddSeconds(i), + High = 2 * i, + Low = i + }; + adr.Update(value); + } + Assert.IsTrue(adr.IsReady); + } + } +} \ No newline at end of file diff --git a/Tests/QuantConnect.Tests.csproj b/Tests/QuantConnect.Tests.csproj index d1c2ea7653f4..dc23d19d0296 100644 --- a/Tests/QuantConnect.Tests.csproj +++ b/Tests/QuantConnect.Tests.csproj @@ -603,6 +603,9 @@ PreserveNewest + + PreserveNewest + diff --git a/Tests/TestData/spy_adr.csv b/Tests/TestData/spy_adr.csv new file mode 100644 index 000000000000..fc4ff551cfa6 --- /dev/null +++ b/Tests/TestData/spy_adr.csv @@ -0,0 +1,526 @@ +date,open,high,low,close,adr +19980102 00:00,973100,975300,965300,973600, +19980105 00:00,978400,984400,967800,977500, +19980106 00:00,972500,972800,961900,966300, +19980107 00:00,960900,965000,952200,964700, +19980108 00:00,963100,963100,955000,957800, +19980109 00:00,952500,955000,919100,924700, +19980112 00:00,911300,941900,909100,940600, +19980113 00:00,946300,956300,942200,952200, +19980114 00:00,956900,959700,947200,958100, +19980115 00:00,955000,957500,948100,949400, +19980116 00:00,962500,966900,956600,962300, +19980120 00:00,966900,980000,965000,980000, +19980121 00:00,972200,976900,961600,971600, +19980122 00:00,961600,968800,958800,963000, +19980123 00:00,965000,967800,950000,956600, +19980126 00:00,963800,967300,937500,957500, +19980127 00:00,958100,980000,956600,970000, +19980128 00:00,974100,981100,971700,978800, +19980129 00:00,978400,995600,975600,987500, +19980130 00:00,987800,989700,980000,983100,16190.0 +19980202 00:00,999100,1005000,997500,1002500,16065.0 +19980203 00:00,1000000,1008100,997200,1006900,15780.0 +19980204 00:00,1002800,1011600,998800,1005900,15875.0 +19980205 00:00,1013100,1015900,1000300,1003800,16015.0 +19980206 00:00,1010000,1015000,1006900,1012800,16015.0 +19980209 00:00,1017200,1017500,1007200,1011400,14735.0 +19980210 00:00,1014400,1024700,1011900,1020500,13735.0 +19980211 00:00,1020900,1031900,1017000,1021300,13775.0 +19980212 00:00,1017200,1029400,1008800,1026600,14180.0 +19980213 00:00,1021900,1029400,1018800,1021600,14240.0 +19980217 00:00,1028100,1030900,1021600,1023400,14190.0 +19980218 00:00,1023100,1034700,1022800,1034100,14035.0 +19980219 00:00,1032500,1034100,1027500,1030000,13600.0 +19980220 00:00,1030800,1037500,1023800,1035600,13785.0 +19980223 00:00,1042500,1042500,1033400,1040000,13350.0 +19980224 00:00,1039100,1040900,1029400,1031900,12435.0 +19980225 00:00,1037500,1048800,1036300,1044800,11890.0 +19980226 00:00,1044400,1051600,1041900,1050600,11905.0 +19980227 00:00,1049700,1055300,1043100,1052000,11515.0 +19980302 00:00,1052500,1057500,1046300,1048100,11590.0 +19980303 00:00,1045300,1054700,1045000,1054100,11700.0 +19980304 00:00,1050900,1054100,1040600,1049700,11830.0 +19980305 00:00,1035000,1044400,1031600,1037500,11830.0 +19980306 00:00,1045600,1058800,1044400,1057500,11770.0 +19980309 00:00,1055300,1062200,1052500,1054400,11850.0 +19980310 00:00,1062200,1068400,1053800,1066600,12065.0 +19980311 00:00,1069700,1073100,1067300,1072500,11715.0 +19980312 00:00,1070900,1075900,1065000,1072500,11515.0 +19980313 00:00,1078400,1080000,1068800,1072200,11045.0 +19980316 00:00,1078400,1082800,1075300,1082500,10890.0 +19980317 00:00,1083100,1085000,1076600,1084700,10845.0 +19980318 00:00,1082500,1089400,1080000,1087800,10720.0 +19980319 00:00,1089700,1093800,1086600,1093400,10750.0 +19980320 00:00,1095600,1101900,1088800,1100000,10720.0 +19980323 00:00,1097200,1103100,1094100,1095000,10715.0 +19980324 00:00,1100600,1108100,1099400,1105900,10575.0 +19980325 00:00,1114100,1115300,1091900,1101900,11120.0 +19980326 00:00,1098800,1107500,1096300,1101300,11195.0 +19980327 00:00,1107500,1107800,1090000,1095300,11475.0 +19980330 00:00,1096300,1100900,1089700,1093400,11475.0 +19980331 00:00,1101600,1111900,1097500,1100900,11710.0 +19980401 00:00,1103100,1110800,1094100,1109800,11870.0 +19980402 00:00,1109400,1122500,1107500,1120300,11980.0 +19980403 00:00,1123400,1128100,1118400,1121900,11745.0 +19980406 00:00,1132500,1133800,1120600,1122500,11920.0 +19980407 00:00,1117500,1119400,1101600,1110000,12080.0 +19980408 00:00,1112200,1112800,1097500,1101300,12555.0 +19980409 00:00,1105600,1112800,1105300,1110000,12385.0 +19980413 00:00,1113800,1113800,1100000,1110000,12515.0 +19980414 00:00,1111300,1117200,1109100,1116900,12545.0 +19980415 00:00,1119700,1121300,1111600,1120200,12610.0 +19980416 00:00,1113100,1115000,1105000,1109100,12640.0 +19980417 00:00,1107200,1124100,1104400,1122200,13265.0 +19980420 00:00,1120000,1125600,1118800,1124100,12950.0 +19980421 00:00,1124400,1131600,1119100,1126300,13125.0 +19980422 00:00,1128800,1134400,1128100,1130000,13005.0 +19980423 00:00,1126300,1130000,1117500,1120900,12460.0 +19980424 00:00,1117500,1124700,1103400,1108800,12965.0 +19980427 00:00,1093800,1106600,1076300,1085900,13590.0 +19980428 00:00,1097800,1098100,1081300,1086300,13870.0 +19980429 00:00,1090300,1099700,1084400,1095300,13915.0 +19980430 00:00,1105600,1119200,1104100,1114400,13835.0 +19980501 00:00,1117500,1123100,1113100,1121900,13585.0 +19980504 00:00,1127200,1133100,1121600,1122500,13675.0 +19980505 00:00,1120000,1121600,1111300,1116600,13530.0 +19980506 00:00,1121300,1121300,1104700,1105000,13470.0 +19980507 00:00,1105000,1105600,1094100,1095900,13280.0 +19980508 00:00,1100000,1113800,1100000,1110000,13595.0 +19980511 00:00,1115600,1122200,1103800,1108600,13825.0 +19980512 00:00,1108100,1118800,1102500,1116400,14235.0 +19980513 00:00,1120600,1125600,1115900,1120600,14235.0 +19980514 00:00,1115300,1126900,1113400,1119700,14410.0 +19980515 00:00,1120000,1122200,1108100,1110000,14130.0 +19980518 00:00,1107200,1115900,1098300,1108400,14670.0 +19980519 00:00,1110000,1116900,1107800,1110600,14500.0 +19980520 00:00,1120900,1125000,1108800,1122800,14995.0 +19980521 00:00,1123800,1127800,1113100,1116900,15105.0 +19980522 00:00,1117500,1120600,1109400,1111600,14600.0 +19980526 00:00,1120900,1120900,1094400,1095300,14410.0 +19980527 00:00,1093100,1099100,1075800,1096300,14735.0 +19980528 00:00,1098800,1103800,1087300,1100000,14795.0 +19980529 00:00,1106300,1108100,1093800,1093800,14755.0 +19980601 00:00,1089700,1102200,1085600,1095000,15085.0 +19980602 00:00,1100000,1103400,1091600,1095900,15100.0 +19980603 00:00,1098800,1101900,1082200,1085000,15570.0 +19980604 00:00,1082500,1100600,1080600,1099100,15740.0 +19980605 00:00,1103800,1118800,1098800,1118100,16165.0 +19980608 00:00,1119400,1124700,1116600,1118800,15880.0 +19980609 00:00,1117200,1124200,1114100,1122800,15465.0 +19980610 00:00,1116300,1130600,1112500,1113800,15555.0 +19980611 00:00,1114400,1118800,1092800,1096600,16370.0 +19980612 00:00,1098800,1104400,1082500,1102500,16790.0 +19980615 00:00,1088100,1099100,1078800,1080000,17100.0 +19980616 00:00,1084100,1091600,1077500,1090600,16925.0 +19980617 00:00,1101600,1117800,1099400,1112500,17390.0 +19980618 00:00,1111900,1114400,1107500,1111600,16925.0 +19980619 00:00,1110600,1112300,1096300,1100300,16990.0 +19980622 00:00,1102500,1110600,1100600,1103800,16930.0 +19980623 00:00,1110900,1121900,1110000,1119700,16200.0 +19980624 00:00,1121600,1136900,1116100,1134700,16075.0 +19980625 00:00,1139100,1144700,1128100,1130000,16080.0 +19980626 00:00,1133100,1138400,1131300,1134100,15720.0 +19980629 00:00,1142500,1146900,1138000,1138900,15335.0 +19980630 00:00,1139100,1141900,1130600,1133600,15310.0 +19980701 00:00,1140600,1149400,1136300,1149400,14980.0 +19980702 00:00,1147200,1148800,1142500,1146300,14295.0 +19980706 00:00,1147800,1158400,1145600,1157800,13935.0 +19980707 00:00,1159800,1161300,1152800,1155600,13955.0 +19980708 00:00,1158800,1169400,1157500,1168100,14045.0 +19980709 00:00,1162800,1167200,1156300,1160000,13685.0 +19980710 00:00,1160300,1169100,1150600,1165300,13310.0 +19980713 00:00,1165600,1168400,1160600,1167500,12605.0 +19980714 00:00,1169400,1181600,1169400,1178100,12200.0 +19980715 00:00,1180600,1182800,1174400,1175600,11915.0 +19980716 00:00,1176900,1185900,1170600,1184400,11760.0 +19980717 00:00,1186300,1190000,1183100,1187500,11760.0 +19980720 00:00,1187500,1192300,1179400,1185000,11605.0 +19980721 00:00,1190000,1190000,1162800,1165300,12465.0 +19980722 00:00,1163400,1195900,1155300,1166300,13900.0 +19980723 00:00,1163100,1168400,1138800,1141900,14340.0 +19980724 00:00,1149700,1150900,1128800,1141600,14615.0 +19980727 00:00,1136300,1150000,1128400,1149800,15340.0 +19980728 00:00,1144400,1146600,1118800,1133100,16285.0 +19980729 00:00,1137200,1141300,1122500,1126600,16660.0 +19980730 00:00,1136300,1145900,1134100,1143400,16595.0 +19980731 00:00,1143400,1145000,1113100,1120600,17875.0 +19980803 00:00,1117800,1124200,1110300,1113800,17930.0 +19980804 00:00,1122200,1122200,1072500,1076100,19990.0 +19980805 00:00,1079400,1088800,1055900,1081600,21040.0 +19980806 00:00,1081300,1095200,1075600,1090900,21475.0 +19980807 00:00,1096900,1105900,1084700,1090300,21610.0 +19980810 00:00,1087500,1096600,1081900,1085900,21955.0 +19980811 00:00,1067800,1074400,1055000,1070600,22315.0 +19980812 00:00,1077500,1088100,1075000,1085000,22550.0 +19980813 00:00,1088100,1096600,1076300,1076400,22800.0 +19980814 00:00,1083400,1087200,1057800,1064800,23925.0 +19980817 00:00,1060000,1089400,1055000,1085000,25000.0 +19980818 00:00,1090000,1105900,1087800,1102500,24545.0 +19980819 00:00,1110900,1110900,1096300,1100000,23245.0 +19980820 00:00,1096900,1104100,1091600,1092500,22390.0 +19980821 00:00,1081900,1087200,1055000,1083800,22895.0 +19980824 00:00,1092500,1099400,1083100,1090600,22630.0 +19980825 00:00,1103800,1112500,1086400,1095000,22545.0 +19980826 00:00,1082800,1096300,1077500,1085000,22545.0 +19980827 00:00,1070000,1078400,1038900,1042500,23930.0 +19980828 00:00,1049700,1057200,1021600,1030000,24115.0 +19980831 00:00,1037500,1040200,950000,962500,27930.0 +19980901 00:00,960600,1005600,936300,996900,28910.0 +19980902 00:00,998100,1017500,987800,990000,28750.0 +19980903 00:00,976300,993800,966900,985200,29115.0 +19980904 00:00,994400,998100,957800,976300,30070.0 +19980908 00:00,1008800,1029700,998100,1025900,30915.0 +19980909 00:00,1027500,1031300,1004800,1007500,31270.0 +19980910 00:00,984400,993400,968100,982500,31880.0 +19980911 00:00,981900,1015000,970000,1012500,33115.0 +19980914 00:00,1028800,1044500,1020900,1031600,32825.0 +19980915 00:00,1028800,1043100,1022800,1042000,32120.0 +19980916 00:00,1047500,1052500,1031600,1050000,32260.0 +19980917 00:00,1022500,1030300,1017800,1022300,32155.0 +19980918 00:00,1023800,1024100,1010900,1019700,32190.0 +19980921 00:00,996300,1034100,989400,1021900,32815.0 +19980922 00:00,1035000,1036600,1021600,1030000,32750.0 +19980923 00:00,1038800,1070000,1037800,1066300,33055.0 +19980924 00:00,1063100,1068100,1032500,1043800,33895.0 +19980925 00:00,1031300,1054200,1026300,1043000,33315.0 +19980928 00:00,1053100,1063100,1042500,1049100,32565.0 +19980929 00:00,1053800,1059400,1033800,1049400,29335.0 +19980930 00:00,1035000,1043100,1013800,1018400,27335.0 +19981001 00:00,1000300,1015500,980900,986300,27580.0 +19981002 00:00,988800,1008800,972200,1003100,28065.0 +19981005 00:00,995900,1000000,963400,990000,27880.0 +19981006 00:00,1007500,1012800,975300,985300,28175.0 +19981007 00:00,986300,1000300,957500,972200,28990.0 +19981008 00:00,945600,967500,922200,962200,29990.0 +19981009 00:00,970000,995600,940600,986300,30490.0 +19981012 00:00,1006300,1014400,996900,997800,30185.0 +19981013 00:00,995600,1004100,987500,995300,30000.0 +19981014 00:00,989400,1018100,988400,1005000,30440.0 +19981015 00:00,1001300,1072500,999400,1050300,33470.0 +19981016 00:00,1061300,1067500,1050000,1056600,33685.0 +19981019 00:00,1056900,1068100,1055000,1063400,32105.0 +19981020 00:00,1075600,1088000,1060900,1065000,32710.0 +19981021 00:00,1068800,1076300,1058800,1071300,31975.0 +19981022 00:00,1067800,1084700,1061600,1080000,31350.0 +19981023 00:00,1079700,1080000,1067800,1071300,30565.0 +19981026 00:00,1077200,1085600,1067800,1075500,30425.0 +19981027 00:00,1084400,1089700,1062800,1066300,30490.0 +19981028 00:00,1065600,1078100,1060300,1067800,29915.0 +19981029 00:00,1070900,1089700,1066300,1089700,29355.0 +19981030 00:00,1101300,1109100,1095000,1100000,28230.0 +19981102 00:00,1108100,1117500,1101900,1114800,27180.0 +19981103 00:00,1115900,1118100,1107500,1111300,25835.0 +19981104 00:00,1124700,1130900,1110900,1118400,24695.0 +19981105 00:00,1115300,1138100,1111300,1137300,23770.0 +19981106 00:00,1134700,1145000,1133100,1142800,21615.0 +19981109 00:00,1139400,1142500,1125000,1131400,21615.0 +19981110 00:00,1130000,1139400,1125000,1126900,21505.0 +19981111 00:00,1138100,1140600,1118900,1123800,21105.0 +19981112 00:00,1123100,1131300,1116900,1120300,18170.0 +19981113 00:00,1122200,1130600,1121300,1127700,17760.0 +19981116 00:00,1142200,1143600,1128900,1138400,17840.0 +19981117 00:00,1136600,1156300,1130000,1143400,17800.0 +19981118 00:00,1143100,1149400,1135000,1147500,17645.0 +19981119 00:00,1152800,1159100,1146300,1155000,17130.0 +19981120 00:00,1163600,1167500,1158400,1166300,16975.0 +19981123 00:00,1174700,1192200,1171600,1191600,17115.0 +19981124 00:00,1190000,1196600,1184500,1186900,16375.0 +19981125 00:00,1189400,1191900,1181600,1188800,16000.0 +19981127 00:00,1194700,1197200,1190000,1195000,15190.0 +19981130 00:00,1190200,1193800,1166600,1166900,15845.0 +19981201 00:00,1161300,1180300,1152200,1178100,16470.0 +19981202 00:00,1172200,1179100,1160000,1175000,16895.0 +19981203 00:00,1172500,1183100,1151900,1152800,17455.0 +19981204 00:00,1166300,1188800,1155900,1179700,17760.0 +19981207 00:00,1180600,1195300,1180000,1192500,17930.0 +19981208 00:00,1185300,1197500,1175000,1184700,18180.0 +19981209 00:00,1186900,1189700,1178800,1188100,18005.0 +19981210 00:00,1188400,1188400,1167200,1168100,17980.0 +19981211 00:00,1164400,1173400,1155600,1170600,18150.0 +19981214 00:00,1161600,1164100,1139100,1144700,18935.0 +19981215 00:00,1146900,1167500,1145300,1166300,19310.0 +19981216 00:00,1171300,1171300,1157500,1164100,18685.0 +19981217 00:00,1172200,1185600,1170200,1185000,18735.0 +19981218 00:00,1183100,1191300,1178800,1190200,18720.0 +19981221 00:00,1192500,1213400,1190000,1203100,19435.0 +19981222 00:00,1204100,1212200,1191900,1205300,19420.0 +19981223 00:00,1211900,1231900,1208100,1228100,20005.0 +19981224 00:00,1231600,1238800,1222800,1226900,20290.0 +19981228 00:00,1232500,1233100,1220000,1226300,20585.0 +19981229 00:00,1227200,1244400,1221300,1243100,20380.0 +19981230 00:00,1239400,1247500,1230300,1233800,19835.0 +19981231 00:00,1233100,1239400,1224700,1228800,19615.0 +19990104 00:00,1233800,1252200,1217200,1228800,19805.0 +19990105 00:00,1229400,1248800,1229400,1244400,19130.0 +19990106 00:00,1258100,1276300,1257500,1275000,19305.0 +19990107 00:00,1263800,1272200,1257800,1269400,18900.0 +19990108 00:00,1281900,1285000,1259700,1275000,19620.0 +19990111 00:00,1276900,1276900,1252200,1262800,19795.0 +19990112 00:00,1262200,1262200,1238100,1240000,20110.0 +19990113 00:00,1204100,1251300,1203800,1233100,21235.0 +19990114 00:00,1236300,1239100,1209100,1211600,21625.0 +19990115 00:00,1223800,1247800,1220300,1243100,22310.0 +19990119 00:00,1253000,1274700,1235000,1252800,23525.0 +19990120 00:00,1260900,1279400,1250300,1256300,24355.0 +19990121 00:00,1255800,1258400,1232200,1235900,24495.0 +19990122 00:00,1221300,1238400,1217800,1225600,24510.0 +19990125 00:00,1232800,1240000,1219100,1236300,24365.0 +19990126 00:00,1241300,1257200,1236300,1255000,24610.0 +19990127 00:00,1263800,1266300,1244100,1244700,25065.0 +19990128 00:00,1252500,1269700,1251900,1266600,24800.0 +19990129 00:00,1273400,1283000,1254100,1278800,25385.0 +19990201 00:00,1286900,1286900,1270000,1270900,25495.0 +19990202 00:00,1270800,1272200,1247700,1262800,24970.0 +19990203 00:00,1256900,1279400,1256600,1271900,25140.0 +19990204 00:00,1273800,1275000,1248100,1248400,25545.0 +19990205 00:00,1256600,1256600,1232200,1240000,26045.0 +19990208 00:00,1250900,1250900,1233400,1243800,25655.0 +19990209 00:00,1243800,1245000,1215600,1218600,25890.0 +19990210 00:00,1221300,1230000,1213300,1226900,25520.0 +19990211 00:00,1230600,1256900,1225000,1256900,24740.0 +19990212 00:00,1248100,1255000,1226300,1235000,24675.0 +19990216 00:00,1247500,1256300,1233800,1243800,24425.0 +19990217 00:00,1231900,1253600,1222500,1227500,23995.0 +19990218 00:00,1231900,1243800,1222200,1239400,23620.0 +19990219 00:00,1240000,1257500,1233800,1239400,23495.0 +19990222 00:00,1244400,1277200,1242800,1276900,24185.0 +19990223 00:00,1275900,1285000,1265900,1275000,24095.0 +19990224 00:00,1278400,1288400,1254100,1254100,24765.0 +19990225 00:00,1245300,1252800,1225900,1247500,25000.0 +19990226 00:00,1247500,1248400,1228100,1239100,25125.0 +19990301 00:00,1236600,1243100,1208800,1237800,25395.0 +19990302 00:00,1245000,1253100,1223100,1228100,26050.0 +19990303 00:00,1230900,1235600,1217800,1231300,25715.0 +19990304 00:00,1240600,1252300,1232700,1250000,25555.0 +19990305 00:00,1275000,1281300,1259200,1278100,25315.0 +19990308 00:00,1282800,1288000,1272500,1285200,24870.0 +19990309 00:00,1281300,1299400,1274400,1282500,25245.0 +19990310 00:00,1284700,1292200,1277800,1290300,24495.0 +19990311 00:00,1296900,1311900,1288800,1302200,24815.0 +19990312 00:00,1310000,1310300,1292200,1295300,24125.0 +19990315 00:00,1299400,1311900,1295000,1311600,23535.0 +19990316 00:00,1311300,1316600,1304700,1309800,23005.0 +19990317 00:00,1306900,1309400,1296300,1302500,22105.0 +19990318 00:00,1297800,1323400,1297500,1321600,22320.0 +19990319 00:00,1323100,1326300,1298400,1300600,22530.0 +19990322 00:00,1300600,1305900,1294200,1299100,21395.0 +19990323 00:00,1293100,1296300,1257000,1264100,22405.0 +19990324 00:00,1268400,1271600,1256300,1269400,21455.0 +19990325 00:00,1280600,1292500,1277500,1291300,20860.0 +19990326 00:00,1286300,1291300,1277200,1284700,20550.0 +19990329 00:00,1291600,1314400,1291600,1312200,19975.0 +19990330 00:00,1299400,1312200,1295600,1303400,19305.0 +19990331 00:00,1311600,1316100,1284400,1286300,20000.0 +19990401 00:00,1296900,1296900,1281300,1293800,19800.0 +19990405 00:00,1309400,1323800,1302500,1323800,19760.0 +19990406 00:00,1321900,1329800,1311600,1319400,19895.0 +19990407 00:00,1326900,1333800,1313800,1328800,19645.0 +19990408 00:00,1331900,1347800,1322800,1345300,20175.0 +19990409 00:00,1344400,1356900,1335900,1348800,20070.0 +19990412 00:00,1334700,1362500,1332200,1360600,20680.0 +19990413 00:00,1362500,1364700,1340300,1351900,21055.0 +19990414 00:00,1360600,1360600,1326900,1330300,22145.0 +19990415 00:00,1334400,1335600,1310000,1326300,22770.0 +19990416 00:00,1329100,1329100,1311900,1321300,22335.0 +19990419 00:00,1326900,1345300,1283800,1289100,24015.0 +19990420 00:00,1298100,1310300,1288800,1306300,24505.0 +19990421 00:00,1310600,1337800,1257800,1336900,26540.0 +19990422 00:00,1351300,1362500,1343900,1359700,26705.0 +19990423 00:00,1358800,1367500,1350000,1357500,26830.0 +19990426 00:00,1365000,1368100,1354700,1361300,26795.0 +19990427 00:00,1371300,1375000,1358400,1365600,26485.0 +19990428 00:00,1364400,1372500,1350000,1353400,26780.0 +19990429 00:00,1355600,1360600,1338100,1345600,26320.0 +19990430 00:00,1350900,1356300,1315000,1334700,27605.0 +19990503 00:00,1334400,1357200,1330300,1356300,27885.0 +19990504 00:00,1351300,1358100,1331300,1333100,28315.0 +19990505 00:00,1339400,1350000,1318400,1349700,28895.0 +19990506 00:00,1344400,1351300,1323800,1335000,29020.0 +19990507 00:00,1345000,1349800,1334400,1346300,28740.0 +19990510 00:00,1348400,1357200,1335300,1342200,28320.0 +19990511 00:00,1353100,1368800,1257800,1357200,32650.0 +19990512 00:00,1357500,1372200,1315000,1366300,33825.0 +19990513 00:00,1372500,1380000,1368100,1370200,33140.0 +19990514 00:00,1345600,1362500,1333100,1343000,33750.0 +19990517 00:00,1336300,1344800,1323100,1343100,31760.0 +19990518 00:00,1345300,1349800,1326300,1336300,31860.0 +19990519 00:00,1344700,1348800,1332500,1348100,28675.0 +19990520 00:00,1351300,1355900,1300600,1343100,30510.0 +19990521 00:00,1341300,1346900,1195800,1334200,37190.0 +19990524 00:00,1338400,1338400,1303900,1310900,38245.0 +19990525 00:00,1313800,1323400,1286900,1288400,39240.0 +19990526 00:00,1293100,1310000,1280900,1306600,39570.0 +19990527 00:00,1298400,1302800,1280000,1284400,39585.0 +19990528 00:00,1290000,1307500,1285900,1305900,38600.0 +19990601 00:00,1301300,1301600,1283800,1298800,38145.0 +19990602 00:00,1297500,1301900,1206300,1297800,41585.0 +19990603 00:00,1306900,1309100,1297800,1302800,40570.0 +19990604 00:00,1314700,1331900,1309400,1319400,40320.0 +19990607 00:00,1334400,1341900,1329100,1337500,40190.0 +19990608 00:00,1333800,1338000,1315900,1321600,40200.0 +19990609 00:00,1324100,1330900,1318100,1321600,35290.0 +19990610 00:00,1314400,1315000,1295900,1309100,33385.0 +19990611 00:00,1312200,1322200,1290900,1298100,34355.0 +19990614 00:00,1306900,1307500,1295500,1297800,33485.0 +19990615 00:00,1304700,1316600,1300800,1305900,33190.0 +19990616 00:00,1323800,1338800,1321600,1334800,32875.0 +19990617 00:00,1328800,1355600,1326300,1346600,33525.0 +19990618 00:00,1340600,1346900,1333800,1343100,31415.0 +19990621 00:00,1344700,1350000,1336600,1349400,24530.0 +19990622 00:00,1340000,1351900,1333400,1337000,23730.0 +19990623 00:00,1330000,1336300,1321300,1332800,22655.0 +19990624 00:00,1328800,1338100,1306600,1316900,22775.0 +19990625 00:00,1325900,1330200,1312500,1316600,22520.0 +19990628 00:00,1326900,1336300,1324700,1333800,22020.0 +19990629 00:00,1330000,1351300,1327800,1351300,22305.0 +19990630 00:00,1346300,1375000,1338400,1367500,19355.0 +19990701 00:00,1370000,1385000,1360600,1380600,20010.0 +19990702 00:00,1381300,1393000,1379100,1391900,19580.0 +19990706 00:00,1392500,1407500,1385900,1387200,20020.0 +19990707 00:00,1390600,1397200,1385200,1395600,19515.0 +19990708 00:00,1390600,1406300,1387500,1395600,19815.0 +19990709 00:00,1400000,1404700,1393800,1402200,19405.0 +19990712 00:00,1409400,1409400,1395000,1400600,18560.0 +19990713 00:00,1393800,1399200,1386600,1395000,18590.0 +19990714 00:00,1400000,1402200,1387500,1398400,18535.0 +19990715 00:00,1407800,1488800,1403100,1411300,21960.0 +19990716 00:00,1412500,1421600,1407500,1420000,21200.0 +19990719 00:00,1421900,1422500,1405600,1410000,21390.0 +19990720 00:00,1401300,1404100,1375300,1378000,22160.0 +19990721 00:00,1380900,1389100,1370000,1378800,22190.0 +19990722 00:00,1374400,1380000,1354700,1361400,22705.0 +19990723 00:00,1366600,1370000,1351300,1357500,22065.0 +19990726 00:00,1348800,1361300,1346300,1350000,21930.0 +19990727 00:00,1360000,1372000,1353800,1365000,22260.0 +19990728 00:00,1362500,1373100,1355900,1367300,21945.0 +19990729 00:00,1349400,1352500,1333100,1343800,21085.0 +19990730 00:00,1348100,1353400,1328800,1330900,21095.0 +19990802 00:00,1327500,1347500,1325000,1329400,21525.0 +19990803 00:00,1337200,1338400,1313800,1323600,21675.0 +19990804 00:00,1327200,1338800,1305300,1306900,22750.0 +19990805 00:00,1308800,1317200,1288400,1315600,23250.0 +19990806 00:00,1312200,1320000,1295000,1300600,23955.0 +19990809 00:00,1305900,1318000,1297200,1300500,24275.0 +19990810 00:00,1298800,1301600,1270000,1282200,25225.0 +19990811 00:00,1296900,1305300,1286300,1305300,25440.0 +19990812 00:00,1306900,1318100,1300000,1300200,22060.0 +19990813 00:00,1316300,1332500,1311300,1331900,22415.0 +19990816 00:00,1331300,1339700,1322500,1333800,22430.0 +19990817 00:00,1344400,1351600,1331300,1347000,22005.0 +19990818 00:00,1342000,1343800,1334100,1335600,21535.0 +19990819 00:00,1323800,1332300,1316900,1328800,21040.0 +19990820 00:00,1330600,1339100,1326900,1338800,20715.0 +19990823 00:00,1348100,1364500,1346600,1363900,20860.0 +19990824 00:00,1360600,1379700,1353800,1365000,21245.0 +19990825 00:00,1371900,1387800,1279100,1384400,25820.0 +19990826 00:00,1382800,1384200,1365000,1365000,25810.0 +19990827 00:00,1368800,1370600,1351300,1351600,25545.0 +19990830 00:00,1353400,1355000,1323900,1326600,25975.0 +19990831 00:00,1329400,1337500,1307500,1325000,26245.0 +19990901 00:00,1329400,1335600,1323100,1335600,25195.0 +19990902 00:00,1321300,1326700,1306600,1322500,24760.0 +19990903 00:00,1348800,1362800,1346900,1361900,24305.0 +19990907 00:00,1360600,1366300,1342800,1355200,24440.0 +19990908 00:00,1348400,1360600,1335000,1349100,24140.0 +19990909 00:00,1347500,1352500,1336900,1351300,23970.0 +19990910 00:00,1362500,1363600,1349400,1354500,23775.0 +19990913 00:00,1351300,1354700,1345000,1348100,23200.0 +19990914 00:00,1340600,1345600,1333800,1340600,22930.0 +19990915 00:00,1354400,1354400,1320600,1320800,23605.0 +19990916 00:00,1325000,1328100,1303100,1323800,24370.0 +19990917 00:00,1326300,1339400,1321600,1337200,24490.0 +19990920 00:00,1339400,1340000,1330900,1336300,24335.0 +19990921 00:00,1322500,1324700,1301600,1309100,24595.0 +19990922 00:00,1312500,1318400,1297500,1311600,24345.0 +19990923 00:00,1318100,1342500,1237800,1280000,24145.0 +19990924 00:00,1277500,1283800,1263100,1280600,24220.0 +19990927 00:00,1287500,1297500,1282800,1282800,23990.0 +19990928 00:00,1279400,1288100,1255600,1281900,24060.0 +19990929 00:00,1284400,1291300,1267800,1267800,23735.0 +19990930 00:00,1274400,1294400,1269700,1283800,24345.0 +19991001 00:00,1279400,1285600,1266300,1283400,24305.0 +19991004 00:00,1291900,1306300,1287500,1306300,24450.0 +19991005 00:00,1307200,1319700,1286900,1301900,24915.0 +19991006 00:00,1307500,1328100,1306900,1326300,24695.0 +19991007 00:00,1328600,1330000,1315000,1320000,24665.0 +19991008 00:00,1317500,1338800,1312300,1337200,25280.0 +19991011 00:00,1335900,1341300,1333100,1338100,25205.0 +19991012 00:00,1331300,1333100,1311900,1314100,25675.0 +19991013 00:00,1306900,1313100,1282500,1286600,25515.0 +19991014 00:00,1284800,1291900,1267500,1284100,25485.0 +19991015 00:00,1260000,1267500,1245000,1248100,25720.0 +19991018 00:00,1249400,1257500,1234400,1255600,26420.0 +19991019 00:00,1271900,1282500,1259400,1260800,26420.0 +19991020 00:00,1277500,1292500,1271300,1292200,26435.0 +19991021 00:00,1272200,1288800,1266300,1286300,22325.0 +19991022 00:00,1297500,1312200,1295600,1303400,22120.0 +19991025 00:00,1293100,1304700,1287500,1295000,22245.0 +19991026 00:00,1301900,1306900,1281900,1282500,21870.0 +19991027 00:00,1283800,1303100,1282500,1301300,21725.0 +19991028 00:00,1324400,1345000,1321900,1345000,21645.0 +19991029 00:00,1358400,1376900,1357200,1365600,21665.0 +19991101 00:00,1365000,1370000,1356300,1359400,21410.0 +19991102 00:00,1359700,1372500,1347500,1348100,21020.0 +19991103 00:00,1360000,1363800,1351300,1356900,20585.0 +19991104 00:00,1367500,1373600,1357700,1364700,20630.0 +19991105 00:00,1386300,1391100,1367800,1372200,20470.0 +19991108 00:00,1370000,1383800,1367500,1379400,20875.0 +19991109 00:00,1385000,1386900,1362800,1367200,21020.0 +19991110 00:00,1362500,1383900,1360800,1377500,20645.0 +19991111 00:00,1381900,1385600,1374700,1383800,19970.0 +19991112 00:00,1392500,1399700,1371300,1397500,20265.0 +19991115 00:00,1398400,1402500,1394100,1398100,19530.0 +19991116 00:00,1405600,1426300,1400900,1424400,19645.0 +19991117 00:00,1422500,1429400,1413100,1415600,19400.0 +19991118 00:00,1424400,1430000,1416300,1428100,18960.0 +19991119 00:00,1424100,1429700,1420000,1425000,18615.0 +19991122 00:00,1424400,1430000,1415000,1424700,18505.0 +19991123 00:00,1428400,1428400,1400600,1408800,18645.0 +19991124 00:00,1407500,1424400,1400000,1420600,18835.0 +19991126 00:00,1424700,1428800,1412500,1414400,18495.0 +19991129 00:00,1408800,1419200,1404400,1410000,18250.0 +19991130 00:00,1407500,1423100,1390000,1392500,19220.0 +19991201 00:00,1393100,1405000,1390000,1401300,18720.0 +19991202 00:00,1406300,1413600,1403800,1411300,18585.0 +19991203 00:00,1430300,1454100,1430300,1436900,18980.0 +19991206 00:00,1435300,1437200,1422500,1427500,18550.0 +19991207 00:00,1432800,1433100,1413800,1419400,18700.0 +19991208 00:00,1413400,1420600,1406300,1406300,18210.0 +19991209 00:00,1418100,1422200,1393800,1410000,18475.0 +19991210 00:00,1422800,1428100,1408800,1420000,18895.0 +19991213 00:00,1414400,1427200,1412800,1421300,18195.0 +19991214 00:00,1416300,1424800,1406300,1408100,18700.0 +19991215 00:00,1403800,1422000,1400000,1418000,18530.0 +19991216 00:00,1421900,1426600,1411600,1423800,18465.0 +19991217 00:00,1430000,1433100,1420600,1423800,18405.0 +19991220 00:00,1425600,1431900,1410900,1416900,18970.0 +19991221 00:00,1415900,1440600,1413400,1433400,19580.0 +19991222 00:00,1436300,1441900,1429700,1437500,18800.0 +19991223 00:00,1450200,1464400,1449700,1460900,18315.0 +19991227 00:00,1465000,1467800,1450600,1458100,18360.0 +19991228 00:00,1458800,1465000,1454800,1461400,18130.0 +19991229 00:00,1463100,1468100,1452500,1463400,17255.0 +19991230 00:00,1471300,1478800,1461900,1466300,17350.0 +19991231 00:00,1468400,1475000,1462500,1468800,17485.0 +20000103 00:00,1482500,1482500,1438800,1455600,18480.0 +20000104 00:00,1435300,1440600,1396400,1400600,19955.0 +20000105 00:00,1399400,1415300,1372500,1402800,21130.0 +20000106 00:00,1396300,1415000,1392500,1403400,21540.0 +20000107 00:00,1403100,1444400,1400600,1444400,22310.0 +20000110 00:00,1462500,1469100,1450300,1458100,22285.0 +20000111 00:00,1458100,1460900,1435000,1440900,22860.0 +20000112 00:00,1445900,1446300,1428800,1433400,22810.0 +20000113 00:00,1444700,1457500,1432800,1451300,22945.0 +20000114 00:00,1465300,1474700,1459700,1465000,22945.0 +20000118 00:00,1453400,1466300,1451900,1456300,23040.0 +20000119 00:00,1453100,1464700,1450000,1456900,22725.0 +20000120 00:00,1469700,1469700,1438100,1445000,22945.0 +20000121 00:00,1455000,1455000,1440900,1441300,23040.0 +20000124 00:00,1456600,1458400,1394100,1400600,25520.0 +20000125 00:00,1405200,1420000,1390000,1410000,26160.0 +20000126 00:00,1410000,1415500,1400900,1406700,26380.0 +20000127 00:00,1418400,1422200,1381300,1400000,27645.0 +20000128 00:00,1394400,1400600,1355300,1364700,29065.0 +20000131 00:00,1358100,1394400,1350000,1394400,30660.0 +20000201 00:00,1397500,1416900,1385300,1401900,30055.0 \ No newline at end of file