Login     Register

        Contact Us     Search

XLeratorDB/windowing Documentation

SQL Server moving INTERCEPT function


MovingINTERCEPT

Updated: 31 Oct 2012


Use the MovingINTERCEPT function to calculate the intercept of a series of x- and y-values within a resultant table or partition, without the need for a self-join. The intercept value is calculated for each value from the first value in the window to the last value in the window. If the column values are presented to the functions out of order, an error message will be generated.
Syntax
SELECT [Example].[wct].[MovingINTERCEPT](
  <@y, float,>
 ,<@x, float,>
 ,<@Offset, int,>
 ,<@RowNum, int,>
 ,<@Id, tinyint,>)
GO
Arguments
@Y
the y-value passed into the function. @Y is an expression of type float or of a type that can be implicitly converted to float.
@X
the x-value passed into the function. @X is an expression of type float or of a type that can be implicitly converted to float.
@Offset
specifies the window size. @Offset is an expression of type int or of a type that can be implicitly converted to int.
@RowNum
the number of the row within the group for which the sum is being calculated. If @RowNum for the current row in a set is less than or equal to the previous @RowNum and @RowNum is not equal to 1, an error message will be generated. @RowNum is an expression of type int or of a type that can be implicitly converted to int.
@Id
a unique identifier for the MovingINTERCEPT calculation. @Id allows you to specify multiple MovingINTERCEPT calculations within a resultant table. @Id is an expression of type tinyint or of a type that can be implicitly converted to tinyint.
Remarks
·         If @Id is NULL then @Id = 0.
·         @RowNum must be in ascending order.
·         To calculate the intercept from the first row in a data set or partition use the RunningINTERCEPT function.
·         If @RowNum = 1 then MovingINTERCEPT is NULL.
·         Set @X to NULL to have the function maintain a constant set of x-values in the range 1 to window-size.
·         To calculate a single intercept value for a set of data use the INTERCEPT function.
·         There may be cases where the order in which the data are returned to the function and the order in which the results are returned are different, generally due to parallelism. You can use OPTION(MAXDOP 1) or OPTION(MAXDOP 1,FORCE ORDER) to help eliminate this problem.
Example
In this example we will calculate the intercept, over time, in the closing prices for some stock indices, with the offset set to 9, meaning that the intercept will be calculated using the current row and the nine preceding rows. We will create a temporary table, #p, populate it with some data and then run the SELECT.
--Create the temporary table
CREATE TABLE #p(
      ticker                  varchar(4),
      date_trade              datetime,
      price_open              money,
      price_high              money,
      price_low               money,
      price_close             money,
      volume                        bigint,
      price_adj_close   money,
      PRIMARY KEY (ticker, date_trade)
      )
--Populate the table with some data
INSERT INTO #p VALUES ('GSPC', '2012-10-26', 1412.97, 1417.09, 1403.28, 1411.94, 3284910000, 1411.94)
INSERT INTO #p VALUES ('GSPC', '2012-10-25', 1409.74, 1421.12, 1405.14, 1412.97, 3512640000, 1412.97)
INSERT INTO #p VALUES ('GSPC', '2012-10-24', 1413.2, 1420.04, 1407.1, 1408.75, 3385970000, 1408.75)
INSERT INTO #p VALUES ('GSPC', '2012-10-23', 1433.74, 1433.74, 1407.56, 1413.11, 3587670000, 1413.11)
INSERT INTO #p VALUES ('GSPC', '2012-10-22', 1433.21, 1435.46, 1422.06, 1433.81, 3216220000, 1433.81)
INSERT INTO #p VALUES ('GSPC', '2012-10-19', 1457.34, 1457.34, 1429.85, 1433.19, 3875170000, 1433.19)
INSERT INTO #p VALUES ('GSPC', '2012-10-18', 1460.94, 1464.02, 1452.63, 1457.34, 3880030000, 1457.34)
INSERT INTO #p VALUES ('GSPC', '2012-10-17', 1454.22, 1462.2, 1453.35, 1460.91, 3655320000, 1460.91)
INSERT INTO #p VALUES ('GSPC', '2012-10-16', 1440.31, 1455.51, 1440.31, 1454.92, 3568770000, 1454.92)
INSERT INTO #p VALUES ('GSPC', '2012-10-15', 1428.75, 1441.31, 1427.24, 1440.13, 3483810000, 1440.13)
INSERT INTO #p VALUES ('GSPC', '2012-10-12', 1432.84, 1438.43, 1425.53, 1428.59, 3134750000, 1428.59)
INSERT INTO #p VALUES ('GSPC', '2012-10-11', 1432.82, 1443.9, 1432.82, 1432.84, 3672540000, 1432.84)
INSERT INTO #p VALUES ('GSPC', '2012-10-10', 1441.48, 1442.52, 1430.64, 1432.56, 3225060000, 1432.56)
INSERT INTO #p VALUES ('GSPC', '2012-10-09', 1455.9, 1455.9, 1441.18, 1441.48, 3216320000, 1441.48)
INSERT INTO #p VALUES ('GSPC', '2012-10-08', 1460.93, 1460.93, 1453.1, 1455.88, 2328720000, 1455.88)
INSERT INTO #p VALUES ('GSPC', '2012-10-05', 1461.4, 1470.96, 1456.89, 1460.93, 3172940000, 1460.93)
INSERT INTO #p VALUES ('GSPC', '2012-10-04', 1451.08, 1463.14, 1451.08, 1461.4, 3615860000, 1461.4)
INSERT INTO #p VALUES ('GSPC', '2012-10-03', 1446.05, 1454.3, 1441.99, 1450.99, 3531640000, 1450.99)
INSERT INTO #p VALUES ('GSPC', '2012-10-02', 1444.99, 1451.52, 1439.01, 1445.75, 3321790000, 1445.75)
INSERT INTO #p VALUES ('GSPC', '2012-10-01', 1440.9, 1457.14, 1440.9, 1444.49, 3505080000, 1444.49)
INSERT INTO #p VALUES ('GSPC', '2012-09-28', 1447.13, 1447.13, 1435.6, 1440.67, 3509230000, 1440.67)
INSERT INTO #p VALUES ('GSPC', '2012-09-27', 1433.36, 1450.2, 1433.36, 1447.15, 3150330000, 1447.15)
INSERT INTO #p VALUES ('GSPC', '2012-09-26', 1441.6, 1441.6, 1430.53, 1433.32, 3565380000, 1433.32)
INSERT INTO #p VALUES ('GSPC', '2012-09-25', 1456.94, 1463.24, 1441.59, 1441.59, 3739900000, 1441.59)
INSERT INTO #p VALUES ('GSPC', '2012-09-24', 1459.76, 1460.72, 1452.06, 1456.89, 3008920000, 1456.89)
INSERT INTO #p VALUES ('GSPC', '2012-09-21', 1460.34, 1467.07, 1459.51, 1460.15, 4833870000, 1460.15)
INSERT INTO #p VALUES ('GSPC', '2012-09-20', 1461.05, 1461.23, 1449.98, 1460.26, 3382520000, 1460.26)
INSERT INTO #p VALUES ('GSPC', '2012-09-19', 1459.5, 1465.15, 1457.88, 1461.05, 3451360000, 1461.05)
INSERT INTO #p VALUES ('GSPC', '2012-09-18', 1461.19, 1461.47, 1456.13, 1459.32, 3377390000, 1459.32)
INSERT INTO #p VALUES ('GSPC', '2012-09-17', 1465.42, 1465.63, 1457.55, 1461.19, 3482430000, 1461.19)
INSERT INTO #p VALUES ('GSPC', '2012-09-14', 1460.07, 1474.51, 1460.07, 1465.77, 5041990000, 1465.77)
INSERT INTO #p VALUES ('GSPC', '2012-09-13', 1436.56, 1463.76, 1435.34, 1459.99, 4606550000, 1459.99)
INSERT INTO #p VALUES ('GSPC', '2012-09-12', 1433.56, 1439.15, 1432.99, 1436.56, 3641200000, 1436.56)
INSERT INTO #p VALUES ('GSPC', '2012-09-11', 1429.13, 1437.76, 1429.13, 1433.56, 3509630000, 1433.56)
INSERT INTO #p VALUES ('GSPC', '2012-09-10', 1437.92, 1438.74, 1428.98, 1429.08, 3223670000, 1429.08)
INSERT INTO #p VALUES ('GSPC', '2012-09-07', 1432.12, 1437.92, 1431.45, 1437.92, 3717620000, 1437.92)
INSERT INTO #p VALUES ('GSPC', '2012-09-06', 1403.74, 1432.12, 1403.74, 1432.12, 3952870000, 1432.12)
INSERT INTO #p VALUES ('GSPC', '2012-09-05', 1404.94, 1408.81, 1401.25, 1403.44, 3389110000, 1403.44)
INSERT INTO #p VALUES ('GSPC', '2012-09-04', 1406.54, 1409.31, 1396.56, 1404.94, 3200310000, 1404.94)
INSERT INTO #p VALUES ('GSPC', '2012-08-31', 1400.07, 1413.09, 1398.96, 1406.58, 2938250000, 1406.58)
INSERT INTO #p VALUES ('GSPC', '2012-08-30', 1410.08, 1410.08, 1397.01, 1399.48, 2530280000, 1399.48)
INSERT INTO #p VALUES ('GSPC', '2012-08-29', 1409.32, 1413.95, 1406.57, 1410.49, 2571220000, 1410.49)
INSERT INTO #p VALUES ('GSPC', '2012-08-28', 1410.44, 1413.63, 1405.59, 1409.3, 2629090000, 1409.3)
INSERT INTO #p VALUES ('GSPC', '2012-08-27', 1411.13, 1416.17, 1409.11, 1410.44, 2472500000, 1410.44)
INSERT INTO #p VALUES ('GSPC', '2012-08-24', 1401.99, 1413.46, 1398.04, 1411.13, 2598790000, 1411.13)
INSERT INTO #p VALUES ('DJI', '2012-10-26', 13104.22, 13151.72, 13040.17, 13107.21, 1346400, 13107.21)
INSERT INTO #p VALUES ('DJI', '2012-10-25', 13079.64, 13214.11, 13017.37, 13103.68, 1145900, 13103.68)
INSERT INTO #p VALUES ('DJI', '2012-10-24', 13103.53, 13155.21, 13063.63, 13077.34, 1106700, 13077.34)
INSERT INTO #p VALUES ('DJI', '2012-10-23', 13344.9, 13344.9, 13083.28, 13102.53, 1222200, 13102.53)
INSERT INTO #p VALUES ('DJI', '2012-10-22', 13344.28, 13368.55, 13235.15, 13345.89, 1218800, 13345.89)
INSERT INTO #p VALUES ('DJI', '2012-10-19', 13545.33, 13545.49, 13312.22, 13343.51, 2390800, 13343.51)
INSERT INTO #p VALUES ('DJI', '2012-10-18', 13553.24, 13588.73, 13510.93, 13548.94, 1284100, 13548.94)
INSERT INTO #p VALUES ('DJI', '2012-10-17', 13539.63, 13561.65, 13468.9, 13557, 1355700, 13557)
INSERT INTO #p VALUES ('DJI', '2012-10-16', 13423.84, 13556.37, 13423.76, 13551.78, 1134500, 13551.78)
INSERT INTO #p VALUES ('DJI', '2012-10-15', 13329.54, 13437.66, 13325.93, 13424.23, 1148800, 13424.23)
INSERT INTO #p VALUES ('DJI', '2012-10-12', 13325.62, 13401.32, 13296.43, 13328.85, 1137400, 13328.85)
INSERT INTO #p VALUES ('DJI', '2012-10-11', 13346.28, 13428.49, 13326.12, 13326.39, 866300, 13326.39)
INSERT INTO #p VALUES ('DJI', '2012-10-10', 13473.53, 13478.83, 13327.62, 13344.97, 1011200, 13344.97)
INSERT INTO #p VALUES ('DJI', '2012-10-09', 13582.88, 13592.33, 13473.31, 13473.53, 1036300, 13473.53)
INSERT INTO #p VALUES ('DJI', '2012-10-08', 13589.26, 13610.38, 13552.09, 13583.65, 713000, 13583.65)
INSERT INTO #p VALUES ('DJI', '2012-10-05', 13569.18, 13661.87, 13568.75, 13610.15, 1155000, 13610.15)
INSERT INTO #p VALUES ('DJI', '2012-10-04', 13495.18, 13594.33, 13495.18, 13575.36, 1063900, 13575.36)
INSERT INTO #p VALUES ('DJI', '2012-10-03', 13479.21, 13536.27, 13439.12, 13494.61, 1038900, 13494.61)
INSERT INTO #p VALUES ('DJI', '2012-10-02', 13515.3, 13567.06, 13424.92, 13482.36, 907300, 13482.36)
INSERT INTO #p VALUES ('DJI', '2012-10-01', 13437.66, 13598.25, 13437.66, 13515.11, 1061200, 13515.11)
INSERT INTO #p VALUES ('DJI', '2012-09-28', 13485.89, 13487.66, 13367.27, 13437.13, 1469500, 13437.13)
INSERT INTO #p VALUES ('DJI', '2012-09-27', 13413.47, 13522.83, 13413.47, 13485.97, 1139900, 13485.97)
INSERT INTO #p VALUES ('DJI', '2012-09-26', 13458.63, 13480.37, 13406.91, 13413.51, 1243500, 13413.51)
INSERT INTO #p VALUES ('DJI', '2012-09-25', 13559.92, 13620.21, 13457.25, 13457.55, 1386300, 13457.55)
INSERT INTO #p VALUES ('DJI', '2012-09-24', 13577.85, 13601.9, 13521.68, 13558.92, 1203700, 13558.92)
INSERT INTO #p VALUES ('DJI', '2012-09-21', 13597.24, 13647.1, 13571.53, 13579.47, 4296100, 13579.47)
INSERT INTO #p VALUES ('DJI', '2012-09-20', 13575.17, 13599.02, 13503, 13596.93, 1179100, 13596.93)
INSERT INTO #p VALUES ('DJI', '2012-09-19', 13565.41, 13626.48, 13556.74, 13577.96, 1162100, 13577.96)
INSERT INTO #p VALUES ('DJI', '2012-09-18', 13552.33, 13582.12, 13517.81, 13564.64, 1207200, 13564.64)
INSERT INTO #p VALUES ('DJI', '2012-09-17', 13588.57, 13593.15, 13526.67, 13553.1, 1280200, 13553.1)
INSERT INTO #p VALUES ('DJI', '2012-09-14', 13540.4, 13653.24, 13533.94, 13593.37, 1851600, 13593.37)
INSERT INTO #p VALUES ('DJI', '2012-09-13', 13329.71, 13573.33, 13325.11, 13539.86, 1517700, 13539.86)
INSERT INTO #p VALUES ('DJI', '2012-09-12', 13321.62, 13373.62, 13317.52, 13333.35, 1115200, 13333.35)
INSERT INTO #p VALUES ('DJI', '2012-09-11', 13254.6, 13354.34, 13253.21, 13323.36, 1049200, 13323.36)
INSERT INTO #p VALUES ('DJI', '2012-09-10', 13308.56, 13324.1, 13251.39, 13254.29, 1238100, 13254.29)
INSERT INTO #p VALUES ('DJI', '2012-09-07', 13289.53, 13320.27, 13266.22, 13306.64, 1422100, 13306.64)
INSERT INTO #p VALUES ('DJI', '2012-09-06', 13045.23, 13294.13, 13045.08, 13292, 1286500, 13292)
INSERT INTO #p VALUES ('DJI', '2012-09-05', 13036.09, 13095.91, 13018.74, 13047.48, 925500, 13047.48)
INSERT INTO #p VALUES ('DJI', '2012-09-04', 13092.15, 13092.39, 12977.09, 13035.94, 1039200, 13035.94)
INSERT INTO #p VALUES ('DJI', '2012-08-31', 13002.72, 13151.87, 13002.64, 13090.84, 1197800, 13090.84)
INSERT INTO #p VALUES ('DJI', '2012-08-30', 13101.29, 13101.37, 12978.91, 13000.71, 899800, 13000.71)
INSERT INTO #p VALUES ('DJI', '2012-08-29', 13103.46, 13144.81, 13081.27, 13107.48, 915300, 13107.48)
INSERT INTO #p VALUES ('DJI', '2012-08-28', 13122.74, 13147.32, 13081.12, 13102.99, 816300, 13102.99)
INSERT INTO #p VALUES ('DJI', '2012-08-27', 13157.74, 13176.17, 13115.46, 13124.67, 960700, 13124.67)
INSERT INTO #p VALUES ('DJI', '2012-08-24', 13052.82, 13175.51, 13027.2, 13157.97, 880300, 13157.97)
INSERT INTO #p VALUES ('IXIC', '2012-10-26', 2986.05, 2999.14, 2961.16, 2987.95, 1839700000, 2987.95)
INSERT INTO #p VALUES ('IXIC', '2012-10-25', 3005.04, 3007.71, 2975.98, 2986.12, 1922660000, 2986.12)
INSERT INTO #p VALUES ('IXIC', '2012-10-24', 3011.82, 3012.95, 2978.73, 2981.7, 1967000000, 2981.7)
INSERT INTO #p VALUES ('IXIC', '2012-10-23', 2989.44, 3006.59, 2974.07, 2990.46, 1830840000, 2990.46)
INSERT INTO #p VALUES ('IXIC', '2012-10-22', 3005.92, 3020.61, 2995.78, 3016.96, 1654130000, 3016.96)
INSERT INTO #p VALUES ('IXIC', '2012-10-19', 3066.56, 3066.56, 3000.27, 3005.62, 2225580000, 3005.62)
INSERT INTO #p VALUES ('IXIC', '2012-10-18', 3097.77, 3102.56, 3065.24, 3072.87, 2043290000, 3072.87)
INSERT INTO #p VALUES ('IXIC', '2012-10-17', 3091.38, 3112.45, 3088.05, 3104.12, 1770920000, 3104.12)
INSERT INTO #p VALUES ('IXIC', '2012-10-16', 3073.21, 3102.97, 3070.25, 3101.17, 1736930000, 3101.17)
INSERT INTO #p VALUES ('IXIC', '2012-10-15', 3053.21, 3066.31, 3037.27, 3064.18, 1563440000, 3064.18)
INSERT INTO #p VALUES ('IXIC', '2012-10-12', 3049.08, 3061.77, 3039.58, 3044.11, 1524840000, 3044.11)
INSERT INTO #p VALUES ('IXIC', '2012-10-11', 3075.89, 3078.08, 3047.14, 3049.41, 1595020000, 3049.41)
INSERT INTO #p VALUES ('IXIC', '2012-10-10', 3066.25, 3071.57, 3046.78, 3051.78, 1788970000, 3051.78)
INSERT INTO #p VALUES ('IXIC', '2012-10-09', 3108.01, 3108.01, 3062.52, 3065.02, 1645740000, 3065.02)
INSERT INTO #p VALUES ('IXIC', '2012-10-08', 3121.33, 3125.49, 3107.57, 3112.35, 1186260000, 3112.35)
INSERT INTO #p VALUES ('IXIC', '2012-10-05', 3161.21, 3171.46, 3130.76, 3136.19, 1607940000, 3136.19)
INSERT INTO #p VALUES ('IXIC', '2012-10-04', 3142.38, 3153.48, 3132.56, 3149.46, 1585190000, 3149.46)
INSERT INTO #p VALUES ('IXIC', '2012-10-03', 3130.85, 3142.36, 3115.04, 3135.23, 1704050000, 3135.23)
INSERT INTO #p VALUES ('IXIC', '2012-10-02', 3127.73, 3131.64, 3101.64, 3120.04, 1609570000, 3120.04)
INSERT INTO #p VALUES ('IXIC', '2012-10-01', 3130.31, 3146.99, 3103.89, 3113.53, 1758170000, 3113.53)
INSERT INTO #p VALUES ('IXIC', '2012-09-28', 3125.31, 3132.51, 3109.91, 3116.23, 1864640000, 3116.23)
INSERT INTO #p VALUES ('IXIC', '2012-09-27', 3105.87, 3142.02, 3098.46, 3136.6, 1691800000, 3136.6)
INSERT INTO #p VALUES ('IXIC', '2012-09-26', 3113.4, 3114.54, 3080.28, 3093.7, 1738010000, 3093.7)
INSERT INTO #p VALUES ('IXIC', '2012-09-25', 3170.37, 3176.3, 3117.73, 3117.73, 1975470000, 3117.73)
INSERT INTO #p VALUES ('IXIC', '2012-09-24', 3155.35, 3167.74, 3150.71, 3160.78, 1704860000, 3160.78)
INSERT INTO #p VALUES ('IXIC', '2012-09-21', 3194.86, 3196.93, 3178.09, 3179.96, 2526250000, 3179.96)
INSERT INTO #p VALUES ('IXIC', '2012-09-20', 3166.84, 3178.45, 3156.46, 3175.96, 1809130000, 3175.96)
INSERT INTO #p VALUES ('IXIC', '2012-09-19', 3179.04, 3189.35, 3170.29, 3182.62, 1850920000, 3182.62)
INSERT INTO #p VALUES ('IXIC', '2012-09-18', 3173.62, 3179.37, 3169.41, 3177.8, 1707200000, 3177.8)
INSERT INTO #p VALUES ('IXIC', '2012-09-17', 3183.4, 3183.4, 3168.63, 3178.67, 1485390000, 3178.67)
INSERT INTO #p VALUES ('IXIC', '2012-09-14', 3166.24, 3195.67, 3164.26, 3183.95, 1984720000, 3183.95)
INSERT INTO #p VALUES ('IXIC', '2012-09-13', 3117.66, 3167.63, 3112.62, 3155.83, 1870050000, 3155.83)
INSERT INTO #p VALUES ('IXIC', '2012-09-12', 3115.33, 3120.12, 3098.82, 3114.31, 1689140000, 3114.31)
INSERT INTO #p VALUES ('IXIC', '2012-09-11', 3105.02, 3117.86, 3099.1, 3104.53, 1586250000, 3104.53)
INSERT INTO #p VALUES ('IXIC', '2012-09-10', 3131.34, 3133.89, 3102.76, 3104.02, 1575370000, 3104.02)
INSERT INTO #p VALUES ('IXIC', '2012-09-07', 3133.22, 3139.61, 3128.17, 3136.42, 1740640000, 3136.42)
INSERT INTO #p VALUES ('IXIC', '2012-09-06', 3087.94, 3135.81, 3087.67, 3135.81, 1918900000, 3135.81)
INSERT INTO #p VALUES ('IXIC', '2012-09-05', 3072.58, 3082.75, 3062.54, 3069.27, 1495030000, 3069.27)
INSERT INTO #p VALUES ('IXIC', '2012-09-04', 3063.25, 3082.26, 3040.24, 3075.06, 1505960000, 3075.06)
INSERT INTO #p VALUES ('IXIC', '2012-08-31', 3069.64, 3078.52, 3040.59, 3066.96, 1394760000, 3066.96)
INSERT INTO #p VALUES ('IXIC', '2012-08-30', 3066.73, 3067.54, 3045.92, 3048.71, 1216640000, 3048.71)
INSERT INTO #p VALUES ('IXIC', '2012-08-29', 3078.05, 3087.24, 3067.62, 3081.19, 1282900000, 3081.19)
INSERT INTO #p VALUES ('IXIC', '2012-08-28', 3069.4, 3083.19, 3063.65, 3077.14, 1364740000, 3077.14)
INSERT INTO #p VALUES ('IXIC', '2012-08-27', 3083.62, 3085.81, 3068.13, 3073.19, 1383530000, 3073.19)
INSERT INTO #p VALUES ('IXIC', '2012-08-24', 3045.22, 3076.8, 3042.22, 3069.79, 1349740000, 3069.79)
--Calculate the INTERCEPT for DJI
SELECT ticker
,cast(date_trade as date) as [trade date]
,price_close as [Closing Price]
,wct.MovingINTERCEPT(price_close,convert(float, date_trade),9,ROW_NUMBER() over (ORDER BY date_trade ASC),NULL) as [INTERCEPT]
FROM #p
WHERE ticker = 'DJI'
ORDER BY date_trade ASC
--Clean up
DROP TABLE #p
This produces the following result.
ticker trade date         Closing Price              INTERCEPT
------ ---------- --------------------- ----------------------
DJI    2012-08-24              13157.97                   NULL
DJI    2012-08-27              13124.67       469845.270435983
DJI    2012-08-28              13102.99        553556.67002926
DJI    2012-08-29              13107.48       471489.717612114
DJI    2012-08-30              13000.71       886730.362595414
DJI    2012-08-31              13090.84       643747.834434902
DJI    2012-09-04              13035.94       496716.219783845
DJI    2012-09-05              13047.48        409829.67629724
DJI    2012-09-06              13292.00      -44403.3721036542
DJI    2012-09-07              13306.64       -295181.00258685
DJI    2012-09-10              13254.29      -542008.459971776
DJI    2012-09-11              13323.36      -735444.321404394
DJI    2012-09-12              13333.35      -870702.046392294
DJI    2012-09-13              13539.86      -1246747.13725805
DJI    2012-09-14              13593.37       -1467291.2763445
DJI    2012-09-17              13553.10      -1644499.73058225
DJI    2012-09-18              13564.64      -1411511.43672222
DJI    2012-09-19              13577.96      -1101890.88743121
DJI    2012-09-20              13596.93      -1130994.98631007
DJI    2012-09-21              13579.47      -1106566.73528378
DJI    2012-09-24              13558.92      -664847.003184797
DJI    2012-09-25              13457.55      -181452.843235763
DJI    2012-09-26              13413.51       362171.402174615
DJI    2012-09-27              13485.97       478072.986026638
DJI    2012-09-28              13437.13       575982.207032812
DJI    2012-10-01              13515.11       460034.807496188
DJI    2012-10-02              13482.36       410220.359750334
DJI    2012-10-03              13494.61       312144.764872803
DJI    2012-10-04              13575.36       32885.1692340084
DJI    2012-10-05              13610.15      -334342.337812188
DJI    2012-10-08              13583.65      -526223.972706134
DJI    2012-10-09              13473.53      -359831.342292858
DJI    2012-10-10              13344.97       47681.5850020345
DJI    2012-10-11              13326.39       335191.656204434
DJI    2012-10-12              13328.85       748864.957925944
DJI    2012-10-15              13424.23        664637.86480042
DJI    2012-10-16              13551.78       455683.512050535
DJI    2012-10-17              13557.00       287604.388866922
DJI    2012-10-18              13548.94       3250.36464128776
DJI    2012-10-19              13343.51      -121615.807152873
DJI    2012-10-22              13345.89      -155012.169428583
DJI    2012-10-23              13102.53       276605.564481351
DJI    2012-10-24              13077.34        810032.45704968
DJI    2012-10-25              13103.68       1312260.55141121
DJI    2012-10-26              13107.21       1907476.67090713
Notice that in the previous example that the interval between dates is unequal because there are no prices for the weekends and holidays. Additionally, since we start so far away from the origin, the intercept value is misleading. To eliminate both problems, we can set @X to NULL which will have the effect of equally spacing the x-values and starting almost at the point of origin.
SELECT ticker
,cast(date_trade as date) as [trade date]
,price_close as [Closing Price]
,wct.MovingINTERCEPT(price_close,NULL,9,ROW_NUMBER() over (ORDER BY date_trade ASC),NULL) as [INTERCEPT]
FROM #p
WHERE ticker = 'DJI'
ORDER BY date_trade ASC
This produces the folowing result.
ticker trade date         Closing Price              INTERCEPT
------ ---------- --------------------- ----------------------
DJI    2012-08-24              13157.97                   NULL
DJI    2012-08-27              13124.67               13191.27
DJI    2012-08-28              13102.99       13183.5233333333
DJI    2012-08-29              13107.48              13166.565
DJI    2012-08-30              13000.71              13198.277
DJI    2012-08-31              13090.84       13167.7473333333
DJI    2012-09-04              13035.94       13165.2328571429
DJI    2012-09-05              13047.48       13156.3832142857
DJI    2012-09-06              13292.00       13093.8580555555
DJI    2012-09-07              13306.64       13056.4286666667
DJI    2012-09-10              13254.29       13016.2993333333
DJI    2012-09-11              13323.36       12984.3173333333
DJI    2012-09-12              13333.35       12973.7006666667
DJI    2012-09-13              13539.86              12935.044
DJI    2012-09-14              13593.37       12964.3366666667
DJI    2012-09-17              13553.10       12999.1333333333
DJI    2012-09-18              13564.64       13088.0593333333
DJI    2012-09-19              13577.96       13204.1826666667
DJI    2012-09-20              13596.93              13237.768
DJI    2012-09-21              13579.47              13288.342
DJI    2012-09-24              13558.92       13385.6446666667
DJI    2012-09-25              13457.55       13491.2973333334
DJI    2012-09-26              13413.51              13610.042
DJI    2012-09-27              13485.97       13623.2673333334
DJI    2012-09-28              13437.13       13617.6966666667
DJI    2012-10-01              13515.11       13604.9066666667
DJI    2012-10-02              13482.36       13590.7486666667
DJI    2012-10-03              13494.61       13562.4393333334
DJI    2012-10-04              13575.36       13503.5706666667
DJI    2012-10-05              13610.15              13444.454
DJI    2012-10-08              13583.65       13402.2726666667
DJI    2012-10-09              13473.53               13431.07
DJI    2012-10-10              13344.97       13507.1966666667
DJI    2012-10-11              13326.39       13548.6553333334
DJI    2012-10-12              13328.85       13601.7753333334
DJI    2012-10-15              13424.23               13592.21
DJI    2012-10-16              13551.78       13566.3593333334
DJI    2012-10-17              13557.00              13538.376
DJI    2012-10-18              13548.94       13478.4806666667
DJI    2012-10-19              13343.51       13441.6746666667
DJI    2012-10-22              13345.89       13398.9833333334
DJI    2012-10-23              13102.53       13440.5026666667
DJI    2012-10-24              13077.34       13522.3213333334
DJI    2012-10-25              13103.68       13589.7006666667
DJI    2012-10-26              13107.21       13640.3786666667
 
In this example, we calculate the intercept for each of the three indices and compare them side-by-side.
SELECT cast(convert(varchar,p1.date_trade, 106) as char(11)) as [trade date]
,p1.price_close as [S&P]
,ROUND(wct.MovingINTERCEPT(p1.price_close,NULL, 9, ROW_NUMBER() over (ORDER BY p1.date_trade ASC),1), 2) as [INTERCEPT]
,p2.price_close as [DJIA]
,ROUND(wct.MovingINTERCEPT(p2.price_close,NULL, 9, ROW_NUMBER() over (ORDER BY p2.date_trade ASC),2), 2) as [INTERCEPT]
,p3.price_close as [NASDAQ]
,ROUND(wct.MovingINTERCEPT(p3.price_close,NULL, 9, ROW_NUMBER() over (ORDER BY p3.date_trade ASC),3), 2) as [INTERCEPT]
FROM #p p1
JOIN #p p2
ON p2.date_trade = p1.date_trade
AND p2.ticker = 'DJI'
JOIN #p p3
ON p3.date_trade = p1.date_trade
AND p3.ticker = 'IXIC'
WHERE p1.ticker = 'GSPC'
This produces the following result.
trade date        S&P INTERCEPT      DJIA INTERCEPT    NASDAQ INTERCEPT
----------- --------- --------- --------- --------- --------- ---------
24 Aug 2012   1411.13            13157.97             3069.79         
27 Aug 2012   1410.44   1411.82  13124.67  13191.27   3073.19   3066.39
28 Aug 2012   1409.30   1412.12  13102.99  13183.52   3077.14   3066.02
29 Aug 2012   1410.49   1411.11  13107.48  13166.56   3081.19   3065.79
30 Aug 2012   1399.48   1415.14  13000.71  13198.28   3048.71   3080.25
31 Aug 2012   1406.58   1413.35  13090.84  13167.75   3066.96   3077.85
04 Sep 2012   1404.94   1412.64  13035.94  13165.23   3075.06   3073.87
05 Sep 2012   1403.44   1412.36  13047.48  13156.38   3069.27   3073.23
06 Sep 2012   1432.12   1405.57  13292.00  13093.86   3135.81   3057.96
07 Sep 2012   1437.92   1400.78  13306.64  13056.43   3136.42   3050.07
10 Sep 2012   1429.08   1398.16  13254.29  13016.30   3104.02   3052.27
11 Sep 2012   1433.56   1396.16  13323.36  12984.32   3104.53   3055.06
12 Sep 2012   1436.56   1395.64  13333.35  12973.70   3114.31   3056.14
13 Sep 2012   1459.99   1391.69  13539.86  12935.04   3155.83   3049.50
14 Sep 2012   1465.77   1395.02  13593.37  12964.34   3183.95   3057.37
17 Sep 2012   1461.19   1400.38  13553.10  12999.13   3178.67   3066.80
18 Sep 2012   1459.32   1410.52  13564.64  13088.06   3177.80   3080.07
19 Sep 2012   1461.05   1424.63  13577.96  13204.18   3182.62   3101.93
20 Sep 2012   1460.26   1429.36  13596.93  13237.77   3175.96   3101.62
21 Sep 2012   1460.15   1433.28  13579.47  13288.34   3179.96   3102.91
24 Sep 2012   1456.89   1443.46  13558.92  13385.64   3160.78   3126.05
25 Sep 2012   1441.59   1456.46  13457.55  13491.30   3117.73   3161.36
26 Sep 2012   1433.32   1470.26  13413.51  13610.04   3093.70   3197.78
27 Sep 2012   1447.15   1470.13  13485.97  13623.27   3136.60   3204.87
28 Sep 2012   1440.67   1467.75  13437.13  13617.70   3116.23   3201.63
01 Oct 2012   1444.49   1465.07  13515.11  13604.91   3113.53   3196.88
02 Oct 2012   1445.75   1461.90  13482.36  13590.75   3120.04   3186.90
03 Oct 2012   1450.99   1455.96  13494.61  13562.44   3135.23   3167.77
04 Oct 2012   1461.40   1447.65  13575.36  13503.57   3149.46   3145.75
05 Oct 2012   1460.93   1439.55  13610.15  13444.45   3136.19   3122.75
08 Oct 2012   1455.88   1434.04  13583.65  13402.27   3112.35   3110.55
09 Oct 2012   1441.48   1438.48  13473.53  13431.07   3065.02   3124.67
10 Oct 2012   1432.56   1448.55  13344.97  13507.20   3051.78   3149.15
11 Oct 2012   1432.84   1452.07  13326.39  13548.66   3049.41   3151.28
12 Oct 2012   1428.59   1458.51  13328.85  13601.78   3044.11   3158.17
15 Oct 2012   1440.13   1460.04  13424.23  13592.21   3064.18   3157.49
16 Oct 2012   1454.92   1457.75  13551.78  13566.36   3101.17   3143.09
17 Oct 2012   1460.91   1452.42  13557.00  13538.38   3104.12   3119.75
18 Oct 2012   1457.34   1443.61  13548.94  13478.48   3072.87   3093.95
19 Oct 2012   1433.19   1439.57  13343.51  13441.67   3005.62   3082.68
22 Oct 2012   1433.81   1435.92  13345.89  13398.98   3016.96   3071.57
23 Oct 2012   1413.11   1441.66  13102.53  13440.50   2990.46   3081.48
24 Oct 2012   1408.75   1450.54  13077.34  13522.32   2981.70   3094.36
25 Oct 2012   1412.97   1456.86  13103.68  13589.70   2986.12   3102.78
26 Oct 2012   1411.94   1464.05  13107.21  13640.38   2987.95   3109.10
 


Copyright 2008-2017 Westclintech LLC         Privacy Policy        Terms of Service