├── .gitignore ├── README.md ├── candlestick.png ├── examples ├── raw_levels_with_candlestick_visualization.py ├── sample.txt ├── scoring.py └── zig_zag_with_visualization.py ├── pricelevels ├── __init__.py ├── _abstract.py ├── cluster.py ├── exceptions.py ├── scoring │ ├── __init__.py │ ├── abstract.py │ └── touch_scorer.py ├── version.py └── visualization │ ├── __init__.py │ ├── _helpers.py │ ├── levels_on_candlestick.py │ └── levels_with_zigzag.py ├── requirements.txt ├── setup.cfg ├── setup.py ├── tests ├── __init__.py ├── check_vizualization.py ├── fixtures.py ├── fixtures │ ├── 1H.txt │ └── levels.pkl ├── test_cluster_levels.py └── test_touch_scorer.py └── zig_zag.png /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .test 3 | 4 | # Byte-compiled / optimized / DLL files 5 | __pycache__/ 6 | *.py[cod] 7 | *$py.class 8 | 9 | # C extensions 10 | *.so 11 | 12 | # Distribution / packaging 13 | .Python 14 | env/ 15 | build/ 16 | develop-eggs/ 17 | dist/ 18 | downloads/ 19 | eggs/ 20 | .eggs/ 21 | parts/ 22 | sdist/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | 91 | *.deb 92 | 93 | .idea/ 94 | 95 | .mypy_cache/ 96 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## PriceLevels 2 | 3 | Small package that helps to find support and resistance levels and plot them on chart 4 | 5 | ![Levels on candlestick chart](candlestick.png?raw=true "Candlestick with levels") 6 | 7 | 8 | ![Levels on zig zag chart](zig_zag.png?raw=true "Zig Zag Price with levels") 9 | 10 | ## Requirements 11 | * python 3.6+ 12 | * matplotlib, pandas, numpy, zigzag, scikit-learn 13 | 14 | (For full dependency list check requirements.txt) 15 | 16 | ## Installation 17 | `python setup.py install` 18 | 19 | ### How it works? 20 | Algorithm uses AgglomerativeClustering to find levels from pivot points. There are 2 different implementations 21 | 22 | * ZigZagClusterLevels 23 | * RawPriceClusterLevels 24 | 25 | First one use zigzag pivot points and the second one use all high/low prices 26 | as pivot points. 27 | 28 | Usage example: 29 | 30 | ```pl = ZigZagClusterLevels(0.2, 200) 31 | data = get_quotes_from_fixture() 32 | pl.fit(data.iloc[-100:]) 33 | levels = pl.levels 34 | ``` 35 | 36 | `fit` method expected to have pandas.DataFrame object with columns `Open, High, Low, Close` or 1d numpy.array of prices 37 | you want to use to generate levels 38 | 39 | #### Please check examples first :) 40 | 41 | #### ZigZagClusterLevels 42 | 43 | Init args: 44 | * peak_percent_delta - Min change for new pivot in ZigZag 45 | * merge_distance/merge_percent - Max distance between pivots that can be merged into price level. Comes from AgglomerativeClustering. Only one of those args should be specified, another should be set to None 46 | * min_bars_between_peaks - filter pivots that occurs less than specified number of bars 47 | * peaks (default='All'). Specifies which pivot prices to take. All, High, Low values expected here. 48 | * level_selector(default='median') How to define level from pivots. Options: mean and median 49 | 50 | 51 | 52 | #### RawPriceClusterLevels 53 | 54 | Init args: 55 | * merge_distance/merge_percent - Max distance between pivots that can be merged into price level. Comes from AgglomerativeClustering. Only one of those args should be specified, another should be set to None 56 | * level_selector(default='median') How to define level from pivots. Options: mean and median 57 | * use_maximums(default=True) which prices to use. 58 | * bars_for_peak(default=21) take only bars that is high or low across specified number of bars 59 | 60 | 61 | ## other stuff 62 | ------ 63 | 64 | #### Visualization 65 | 66 | expected usage: 67 | 68 | ``` 69 | from pricelevels.visualization.levels_on_candlestick import plot_levels_on_candlestick 70 | plot_levels_on_candlestick(df, levels, only_good=False, path=pth) 71 | 72 | from pricelevels.visualization.levels_with_zigzag import plot_with_pivots 73 | plot_with_pivots(df['Close'].values, levels, zig_zag_percent) 74 | 75 | ``` 76 | 77 | 78 | #### Level scoring 79 | 80 | Put some score if price touch, cut or pivot near selected levels. 81 | Better levels have higher score. 82 | It works slowly, so probably you don't want to use it. This idea came from https://stackoverflow.com/questions/8587047/support-resistance-algorithm-technical-analysis 83 | 84 | Many parameters, so please check source code. 85 | 86 | Usage: 87 | ``` 88 | from pricelevels.scoring.touch_scorer import TouchScorer 89 | scorer = TouchScorer() 90 | scorer.fit(levels, df.copy()) 91 | print(scorer.scores) 92 | ``` 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /candlestick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/day0market/support_resistance/fdd4a7f0fdccf6c4007da79fd6f3879164462c3c/candlestick.png -------------------------------------------------------------------------------- /examples/raw_levels_with_candlestick_visualization.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | from pricelevels.cluster import RawPriceClusterLevels 4 | from pricelevels.visualization.levels_on_candlestick import plot_levels_on_candlestick 5 | 6 | df = pd.read_csv('sample.txt') 7 | cl = RawPriceClusterLevels(None, merge_percent=0.25, use_maximums=True, bars_for_peak=91) 8 | cl.fit(df) 9 | levels = cl.levels 10 | 11 | plot_levels_on_candlestick(df, levels, only_good=False) # in case you want to display chart 12 | # plot_levels_on_candlestick(df, levels, only_good=False, path='image.png') # in case you want to save chart to image 13 | -------------------------------------------------------------------------------- /examples/sample.txt: -------------------------------------------------------------------------------- 1 | Datetime,Open,High,Low,Close,Volume 2 | 2012-04-02 10:00:00,160535.0,160990.0,160520.0,160870.0,22179.0 3 | 2012-04-02 10:05:00,160850.0,161080.0,160750.0,160905.0,16202.0 4 | 2012-04-02 10:10:00,160905.0,160945.0,160555.0,160700.0,13279.0 5 | 2012-04-02 10:15:00,160700.0,160860.0,160605.0,160790.0,7390.0 6 | 2012-04-02 10:20:00,160795.0,160885.0,160675.0,160785.0,4519.0 7 | 2012-04-02 10:25:00,160790.0,160985.0,160705.0,160775.0,7404.0 8 | 2012-04-02 10:30:00,160785.0,160950.0,160315.0,160375.0,16363.0 9 | 2012-04-02 10:35:00,160370.0,160520.0,160300.0,160465.0,6308.0 10 | 2012-04-02 10:40:00,160460.0,161175.0,160435.0,161100.0,20230.0 11 | 2012-04-02 10:45:00,161095.0,161190.0,160870.0,160905.0,10262.0 12 | 2012-04-02 10:50:00,160905.0,161045.0,160805.0,160855.0,6122.0 13 | 2012-04-02 10:55:00,160855.0,161080.0,160750.0,161025.0,6589.0 14 | 2012-04-02 11:00:00,161025.0,161270.0,160645.0,160925.0,26024.0 15 | 2012-04-02 11:05:00,160935.0,161450.0,160810.0,161375.0,23407.0 16 | 2012-04-02 11:10:00,161355.0,161455.0,161115.0,161190.0,12406.0 17 | 2012-04-02 11:15:00,161195.0,161245.0,160795.0,160900.0,14064.0 18 | 2012-04-02 11:20:00,160900.0,160960.0,160405.0,160520.0,18512.0 19 | 2012-04-02 11:25:00,160520.0,160685.0,160345.0,160570.0,16221.0 20 | 2012-04-02 11:30:00,160580.0,160870.0,160545.0,160740.0,13585.0 21 | 2012-04-02 11:35:00,160720.0,161135.0,160645.0,160970.0,16815.0 22 | 2012-04-02 11:40:00,160975.0,161090.0,160765.0,160830.0,10415.0 23 | 2012-04-02 11:45:00,160820.0,161000.0,160605.0,160980.0,12303.0 24 | 2012-04-02 11:50:00,160980.0,161110.0,160510.0,160945.0,18038.0 25 | 2012-04-02 11:55:00,160960.0,161190.0,160720.0,160760.0,12400.0 26 | 2012-04-02 12:00:00,160775.0,161345.0,160755.0,161270.0,19097.0 27 | 2012-04-02 12:05:00,161270.0,161550.0,161250.0,161425.0,17441.0 28 | 2012-04-02 12:10:00,161425.0,161455.0,161055.0,161085.0,10209.0 29 | 2012-04-02 12:15:00,161075.0,161335.0,161050.0,161320.0,7458.0 30 | 2012-04-02 12:20:00,161320.0,161420.0,160910.0,161175.0,13239.0 31 | 2012-04-02 12:25:00,161180.0,161260.0,160835.0,160840.0,7260.0 32 | 2012-04-02 12:30:00,160850.0,160950.0,160560.0,160690.0,17229.0 33 | 2012-04-02 12:35:00,160710.0,160885.0,160000.0,160050.0,34974.0 34 | 2012-04-02 12:40:00,160045.0,160050.0,159385.0,159560.0,41213.0 35 | 2012-04-02 12:45:00,159565.0,159930.0,159430.0,159870.0,20807.0 36 | 2012-04-02 12:50:00,159870.0,159930.0,159700.0,159785.0,9911.0 37 | 2012-04-02 12:55:00,159795.0,159920.0,159650.0,159820.0,12293.0 38 | 2012-04-02 13:00:00,159810.0,159915.0,159585.0,159605.0,14308.0 39 | 2012-04-02 13:05:00,159610.0,159860.0,159455.0,159545.0,14084.0 40 | 2012-04-02 13:10:00,159550.0,159685.0,159300.0,159425.0,18159.0 41 | 2012-04-02 13:15:00,159430.0,159765.0,159355.0,159725.0,10411.0 42 | 2012-04-02 13:20:00,159725.0,159795.0,159245.0,159675.0,12138.0 43 | 2012-04-02 13:25:00,159685.0,159755.0,159505.0,159600.0,8305.0 44 | 2012-04-02 13:30:00,159575.0,159795.0,159455.0,159780.0,7583.0 45 | 2012-04-02 13:35:00,159795.0,159800.0,159485.0,159575.0,6459.0 46 | 2012-04-02 13:40:00,159560.0,159630.0,159430.0,159555.0,4200.0 47 | 2012-04-02 13:45:00,159570.0,159625.0,159465.0,159535.0,4598.0 48 | 2012-04-02 13:50:00,159525.0,160375.0,159525.0,160265.0,21962.0 49 | 2012-04-02 13:55:00,160270.0,160355.0,160120.0,160240.0,10908.0 50 | 2012-04-02 14:00:00,160220.0,160275.0,159880.0,160050.0,7108.0 51 | 2012-04-02 14:05:00,160055.0,160760.0,160000.0,160760.0,26773.0 52 | 2012-04-02 14:10:00,160755.0,160900.0,160540.0,160665.0,11577.0 53 | 2012-04-02 14:15:00,160665.0,160710.0,160515.0,160665.0,6698.0 54 | 2012-04-02 14:20:00,160645.0,160690.0,160530.0,160580.0,5027.0 55 | 2012-04-02 14:25:00,160580.0,160650.0,160000.0,160015.0,12864.0 56 | 2012-04-02 14:30:00,160010.0,160385.0,159920.0,160165.0,10127.0 57 | 2012-04-02 14:35:00,160190.0,160335.0,159950.0,160155.0,9913.0 58 | 2012-04-02 14:40:00,160180.0,160235.0,160000.0,160145.0,7138.0 59 | 2012-04-02 14:45:00,160150.0,160425.0,160000.0,160115.0,9853.0 60 | 2012-04-02 14:50:00,160090.0,160200.0,159570.0,159645.0,14247.0 61 | 2012-04-02 14:55:00,159625.0,159760.0,159380.0,159415.0,13749.0 62 | 2012-04-02 15:00:00,159400.0,159670.0,159275.0,159655.0,15506.0 63 | 2012-04-02 15:05:00,159660.0,159865.0,159500.0,159665.0,11044.0 64 | 2012-04-02 15:10:00,159675.0,159740.0,159520.0,159625.0,3621.0 65 | 2012-04-02 15:15:00,159620.0,159850.0,159440.0,159720.0,9799.0 66 | 2012-04-02 15:20:00,159710.0,159760.0,159345.0,159560.0,7877.0 67 | 2012-04-02 15:25:00,159560.0,159620.0,159070.0,159115.0,16216.0 68 | 2012-04-02 15:30:00,159115.0,159335.0,159100.0,159250.0,11521.0 69 | 2012-04-02 15:35:00,159240.0,159340.0,159055.0,159255.0,10129.0 70 | 2012-04-02 15:40:00,159285.0,159330.0,158780.0,158925.0,15460.0 71 | 2012-04-02 15:45:00,158920.0,158940.0,158415.0,158505.0,21090.0 72 | 2012-04-02 15:50:00,158525.0,158790.0,158250.0,158725.0,17704.0 73 | 2012-04-02 15:55:00,158725.0,158800.0,158565.0,158600.0,8025.0 74 | 2012-04-02 16:00:00,158605.0,158765.0,158150.0,158310.0,17422.0 75 | 2012-04-02 16:05:00,158345.0,158545.0,158135.0,158375.0,11444.0 76 | 2012-04-02 16:10:00,158370.0,158740.0,158260.0,158570.0,10704.0 77 | 2012-04-02 16:15:00,158565.0,158595.0,158225.0,158390.0,10628.0 78 | 2012-04-02 16:20:00,158385.0,158440.0,158255.0,158390.0,6929.0 79 | 2012-04-02 16:25:00,158390.0,158885.0,158360.0,158865.0,12678.0 80 | 2012-04-02 16:30:00,158890.0,158995.0,158725.0,158790.0,17272.0 81 | 2012-04-02 16:35:00,158785.0,158965.0,158700.0,158825.0,7516.0 82 | 2012-04-02 16:40:00,158825.0,158935.0,158500.0,158860.0,10463.0 83 | 2012-04-02 16:45:00,158855.0,159150.0,158805.0,159020.0,11546.0 84 | 2012-04-02 16:50:00,159010.0,159030.0,158665.0,158835.0,9340.0 85 | 2012-04-02 16:55:00,158820.0,158935.0,158580.0,158640.0,5898.0 86 | 2012-04-02 17:00:00,158635.0,158845.0,158240.0,158790.0,17656.0 87 | 2012-04-02 17:05:00,158790.0,158790.0,158510.0,158685.0,6639.0 88 | 2012-04-02 17:10:00,158685.0,158705.0,158370.0,158495.0,13249.0 89 | 2012-04-02 17:15:00,158490.0,158680.0,158415.0,158495.0,11107.0 90 | 2012-04-02 17:20:00,158495.0,158650.0,158385.0,158620.0,7057.0 91 | 2012-04-02 17:25:00,158640.0,158715.0,158450.0,158615.0,7555.0 92 | 2012-04-02 17:30:00,158610.0,158815.0,158345.0,158570.0,22444.0 93 | 2012-04-02 17:35:00,158575.0,158635.0,157760.0,157960.0,46504.0 94 | 2012-04-02 17:40:00,157970.0,158195.0,157855.0,158085.0,20428.0 95 | 2012-04-02 17:45:00,158070.0,158345.0,158045.0,158165.0,12055.0 96 | 2012-04-02 17:50:00,158150.0,158295.0,158060.0,158100.0,7649.0 97 | 2012-04-02 17:55:00,158105.0,158175.0,157390.0,157690.0,30451.0 98 | 2012-04-02 18:00:00,157695.0,158675.0,157515.0,158585.0,34712.0 99 | 2012-04-02 18:05:00,158585.0,158670.0,158365.0,158435.0,17524.0 100 | 2012-04-02 18:10:00,158435.0,159400.0,158415.0,159305.0,34549.0 101 | 2012-04-02 18:15:00,159310.0,160380.0,159250.0,160265.0,60824.0 102 | 2012-04-02 18:20:00,160260.0,160445.0,159940.0,160075.0,29202.0 103 | 2012-04-02 18:25:00,160090.0,160270.0,159920.0,160060.0,14677.0 104 | 2012-04-02 18:30:00,160065.0,160270.0,159915.0,159920.0,15248.0 105 | 2012-04-02 18:35:00,159925.0,160050.0,159805.0,159830.0,12483.0 106 | 2012-04-02 18:40:00,159830.0,159865.0,159550.0,159615.0,13950.0 107 | 2012-04-02 19:00:00,159785.0,160425.0,159785.0,159815.0,14612.0 108 | 2012-04-02 19:05:00,159820.0,160245.0,159815.0,160230.0,6232.0 109 | 2012-04-02 19:10:00,160230.0,160350.0,160160.0,160235.0,5495.0 110 | 2012-04-02 19:15:00,160210.0,160355.0,160155.0,160180.0,3981.0 111 | 2012-04-02 19:20:00,160180.0,160285.0,160105.0,160110.0,2975.0 112 | 2012-04-02 19:25:00,160110.0,160300.0,160105.0,160265.0,3540.0 113 | 2012-04-02 19:30:00,160245.0,160495.0,160240.0,160455.0,6500.0 114 | 2012-04-02 19:35:00,160455.0,160515.0,160330.0,160350.0,3818.0 115 | 2012-04-02 19:40:00,160350.0,160395.0,160310.0,160350.0,1633.0 116 | 2012-04-02 19:45:00,160370.0,160800.0,160350.0,160660.0,6957.0 117 | 2012-04-02 19:50:00,160680.0,160800.0,160620.0,160780.0,4454.0 118 | 2012-04-02 19:55:00,160750.0,160970.0,160735.0,160950.0,6780.0 119 | 2012-04-02 20:00:00,160950.0,161340.0,160950.0,161105.0,11132.0 120 | 2012-04-02 20:05:00,161100.0,161300.0,161070.0,161110.0,4705.0 121 | 2012-04-02 20:10:00,161100.0,161165.0,161025.0,161085.0,3448.0 122 | 2012-04-02 20:15:00,161085.0,161145.0,160960.0,161135.0,3404.0 123 | 2012-04-02 20:20:00,161135.0,161155.0,161030.0,161085.0,1786.0 124 | 2012-04-02 20:25:00,161070.0,161200.0,161045.0,161050.0,2660.0 125 | 2012-04-02 20:30:00,161055.0,161090.0,160770.0,160775.0,5933.0 126 | 2012-04-02 20:35:00,160775.0,160945.0,160770.0,160910.0,3252.0 127 | 2012-04-02 20:40:00,160925.0,161045.0,160885.0,160950.0,2010.0 128 | 2012-04-02 20:45:00,160955.0,161100.0,160900.0,161005.0,1867.0 129 | 2012-04-02 20:50:00,161005.0,161240.0,160965.0,161040.0,2770.0 130 | 2012-04-02 20:55:00,161025.0,161235.0,160980.0,161145.0,3887.0 131 | 2012-04-02 21:00:00,161145.0,161290.0,160910.0,160920.0,4814.0 132 | 2012-04-02 21:05:00,160945.0,161000.0,160915.0,160950.0,1539.0 133 | 2012-04-02 21:10:00,160975.0,161035.0,160830.0,160900.0,2767.0 134 | 2012-04-02 21:15:00,160905.0,160945.0,160810.0,160865.0,1481.0 135 | 2012-04-02 21:20:00,160870.0,160920.0,160800.0,160835.0,1104.0 136 | 2012-04-02 21:25:00,160850.0,160945.0,160850.0,160910.0,1319.0 137 | 2012-04-02 21:30:00,160910.0,161095.0,160885.0,161030.0,2899.0 138 | 2012-04-02 21:35:00,161035.0,161070.0,160875.0,160920.0,1482.0 139 | 2012-04-02 21:40:00,160925.0,160950.0,160880.0,160945.0,614.0 140 | 2012-04-02 21:45:00,160940.0,161100.0,160925.0,160960.0,2655.0 141 | 2012-04-02 21:50:00,160960.0,161075.0,160955.0,160990.0,1022.0 142 | 2012-04-02 21:55:00,161000.0,161125.0,161000.0,161065.0,1746.0 143 | 2012-04-02 22:00:00,161065.0,161125.0,160885.0,160895.0,1806.0 144 | 2012-04-02 22:05:00,160925.0,161015.0,160900.0,160975.0,1234.0 145 | 2012-04-02 22:10:00,160985.0,160985.0,160780.0,160905.0,3994.0 146 | 2012-04-02 22:15:00,160905.0,161035.0,160900.0,161015.0,1633.0 147 | 2012-04-02 22:20:00,161005.0,161190.0,160970.0,161160.0,2746.0 148 | 2012-04-02 22:25:00,161175.0,161245.0,161070.0,161120.0,1739.0 149 | 2012-04-02 22:30:00,161110.0,161385.0,161110.0,161360.0,5211.0 150 | 2012-04-02 22:35:00,161355.0,161495.0,161350.0,161475.0,4803.0 151 | 2012-04-02 22:40:00,161470.0,161500.0,161405.0,161475.0,2750.0 152 | 2012-04-02 22:45:00,161475.0,161710.0,161425.0,161680.0,5849.0 153 | 2012-04-02 22:50:00,161660.0,161660.0,161340.0,161405.0,5022.0 154 | 2012-04-02 22:55:00,161400.0,161535.0,161390.0,161495.0,2014.0 155 | 2012-04-02 23:00:00,161490.0,161590.0,161460.0,161470.0,3239.0 156 | 2012-04-02 23:05:00,161480.0,161515.0,161365.0,161430.0,3353.0 157 | 2012-04-02 23:10:00,161430.0,161680.0,161390.0,161650.0,3784.0 158 | 2012-04-02 23:15:00,161650.0,161680.0,161515.0,161605.0,2856.0 159 | 2012-04-02 23:20:00,161620.0,161640.0,161495.0,161495.0,1950.0 160 | 2012-04-02 23:25:00,161500.0,161520.0,161320.0,161410.0,2947.0 161 | 2012-04-02 23:30:00,161425.0,161485.0,161345.0,161480.0,1727.0 162 | 2012-04-02 23:35:00,161465.0,161500.0,161250.0,161250.0,2716.0 163 | 2012-04-02 23:40:00,161270.0,161340.0,161010.0,161300.0,8467.0 164 | 2012-04-02 23:45:00,161310.0,161435.0,161215.0,161285.0,5872.0 165 | 2012-04-03 10:00:00,161310.0,161460.0,161130.0,161375.0,14788.0 166 | 2012-04-03 10:05:00,161365.0,161415.0,161215.0,161350.0,8495.0 167 | 2012-04-03 10:10:00,161340.0,161355.0,160875.0,160915.0,12362.0 168 | 2012-04-03 10:15:00,160925.0,161045.0,160720.0,160850.0,12050.0 169 | 2012-04-03 10:20:00,160850.0,160890.0,160790.0,160790.0,5913.0 170 | 2012-04-03 10:25:00,160795.0,160900.0,160715.0,160815.0,7410.0 171 | 2012-04-03 10:30:00,160825.0,161265.0,160785.0,161170.0,9924.0 172 | 2012-04-03 10:35:00,161170.0,161285.0,160925.0,161020.0,6902.0 173 | 2012-04-03 10:40:00,161015.0,161250.0,160980.0,161250.0,6745.0 174 | 2012-04-03 10:45:00,161255.0,161480.0,161255.0,161450.0,13781.0 175 | 2012-04-03 10:50:00,161435.0,161500.0,161320.0,161430.0,7369.0 176 | 2012-04-03 10:55:00,161430.0,161490.0,161260.0,161350.0,9542.0 177 | 2012-04-03 11:00:00,161360.0,161400.0,160625.0,160790.0,28717.0 178 | 2012-04-03 11:05:00,160780.0,161130.0,160770.0,161040.0,14818.0 179 | 2012-04-03 11:10:00,161040.0,161270.0,160830.0,161240.0,13469.0 180 | 2012-04-03 11:15:00,161260.0,161860.0,161250.0,161850.0,31618.0 181 | 2012-04-03 11:20:00,161850.0,162145.0,161505.0,161505.0,34011.0 182 | 2012-04-03 11:25:00,161510.0,161600.0,161325.0,161560.0,15691.0 183 | 2012-04-03 11:30:00,161560.0,161675.0,161500.0,161640.0,7905.0 184 | 2012-04-03 11:35:00,161645.0,161655.0,161145.0,161360.0,13535.0 185 | 2012-04-03 11:40:00,161365.0,161760.0,161285.0,161670.0,14832.0 186 | 2012-04-03 11:45:00,161665.0,161780.0,161485.0,161730.0,9528.0 187 | 2012-04-03 11:50:00,161715.0,161750.0,161510.0,161635.0,8251.0 188 | 2012-04-03 11:55:00,161635.0,161760.0,161260.0,161445.0,11741.0 189 | 2012-04-03 12:00:00,161445.0,161690.0,161370.0,161420.0,12769.0 190 | 2012-04-03 12:05:00,161430.0,161895.0,161415.0,161555.0,14638.0 191 | 2012-04-03 12:10:00,161560.0,161645.0,161390.0,161525.0,8715.0 192 | 2012-04-03 12:15:00,161525.0,161665.0,161170.0,161215.0,14968.0 193 | 2012-04-03 12:20:00,161185.0,161255.0,160885.0,160905.0,23830.0 194 | 2012-04-03 12:25:00,160910.0,161300.0,160770.0,161245.0,15808.0 195 | 2012-04-03 12:30:00,161240.0,161390.0,161075.0,161370.0,11462.0 196 | 2012-04-03 12:35:00,161370.0,161630.0,161155.0,161200.0,16198.0 197 | 2012-04-03 12:40:00,161175.0,161425.0,161055.0,161120.0,10375.0 198 | 2012-04-03 12:45:00,161120.0,161450.0,161010.0,161260.0,9362.0 199 | 2012-04-03 12:50:00,161255.0,161505.0,161065.0,161140.0,13775.0 200 | 2012-04-03 12:55:00,161135.0,161195.0,160905.0,161075.0,11052.0 201 | 2012-04-03 13:00:00,161080.0,161235.0,160850.0,161020.0,12739.0 202 | 2012-04-03 13:05:00,161025.0,161280.0,161005.0,161210.0,9800.0 203 | 2012-04-03 13:10:00,161210.0,161415.0,161055.0,161405.0,9652.0 204 | 2012-04-03 13:15:00,161415.0,161690.0,161165.0,161275.0,18387.0 205 | 2012-04-03 13:20:00,161275.0,161410.0,161195.0,161325.0,6114.0 206 | 2012-04-03 13:25:00,161335.0,161475.0,161140.0,161400.0,8681.0 207 | 2012-04-03 13:30:00,161400.0,161565.0,161310.0,161500.0,8310.0 208 | 2012-04-03 13:35:00,161500.0,162055.0,161490.0,161805.0,25600.0 209 | 2012-04-03 13:40:00,161800.0,162050.0,161760.0,162000.0,17813.0 210 | 2012-04-03 13:45:00,161980.0,162425.0,161930.0,162065.0,28641.0 211 | 2012-04-03 13:50:00,162060.0,162100.0,161870.0,162010.0,12891.0 212 | 2012-04-03 13:55:00,162015.0,162215.0,161920.0,162215.0,8748.0 213 | 2012-04-03 14:00:00,162180.0,162250.0,161840.0,161885.0,8368.0 214 | 2012-04-03 14:05:00,161890.0,162435.0,161850.0,162400.0,20770.0 215 | 2012-04-03 14:10:00,162400.0,162730.0,162315.0,162650.0,31865.0 216 | 2012-04-03 14:15:00,162650.0,162700.0,162320.0,162355.0,10691.0 217 | 2012-04-03 14:20:00,162345.0,162495.0,162295.0,162355.0,6970.0 218 | 2012-04-03 14:25:00,162365.0,162610.0,162335.0,162435.0,8498.0 219 | 2012-04-03 14:30:00,162435.0,162485.0,162210.0,162330.0,5714.0 220 | 2012-04-03 14:35:00,162325.0,162460.0,162060.0,162070.0,8545.0 221 | 2012-04-03 14:40:00,162070.0,162385.0,162055.0,162220.0,7539.0 222 | 2012-04-03 14:45:00,162235.0,162370.0,162120.0,162300.0,5064.0 223 | 2012-04-03 14:50:00,162310.0,162445.0,162130.0,162250.0,6839.0 224 | 2012-04-03 14:55:00,162250.0,162395.0,162185.0,162300.0,5283.0 225 | 2012-04-03 15:00:00,162295.0,162650.0,162285.0,162565.0,9354.0 226 | 2012-04-03 15:05:00,162580.0,162680.0,162195.0,162305.0,8548.0 227 | 2012-04-03 15:10:00,162310.0,162380.0,162170.0,162170.0,4797.0 228 | 2012-04-03 15:15:00,162185.0,162200.0,161620.0,161715.0,22111.0 229 | 2012-04-03 15:20:00,161715.0,161775.0,161500.0,161630.0,11062.0 230 | 2012-04-03 15:25:00,161645.0,161650.0,161250.0,161315.0,15649.0 231 | 2012-04-03 15:30:00,161305.0,161630.0,161205.0,161540.0,14104.0 232 | 2012-04-03 15:35:00,161535.0,161840.0,161460.0,161675.0,9917.0 233 | 2012-04-03 15:40:00,161680.0,161935.0,161645.0,161755.0,7092.0 234 | 2012-04-03 15:45:00,161750.0,161790.0,161600.0,161700.0,6803.0 235 | 2012-04-03 15:50:00,161700.0,161790.0,161540.0,161735.0,7350.0 236 | 2012-04-03 15:55:00,161735.0,161870.0,161625.0,161790.0,5813.0 237 | 2012-04-03 16:00:00,161790.0,162240.0,161720.0,162225.0,17674.0 238 | 2012-04-03 16:05:00,162220.0,162420.0,162080.0,162080.0,17400.0 239 | 2012-04-03 16:10:00,162080.0,162335.0,162035.0,162310.0,9002.0 240 | 2012-04-03 16:15:00,162310.0,162460.0,162200.0,162440.0,10582.0 241 | 2012-04-03 16:20:00,162445.0,162460.0,162220.0,162350.0,6566.0 242 | 2012-04-03 16:25:00,162350.0,162875.0,162350.0,162780.0,22730.0 243 | 2012-04-03 16:30:00,162780.0,162945.0,162665.0,162720.0,16516.0 244 | 2012-04-03 16:35:00,162730.0,162765.0,162495.0,162725.0,9702.0 245 | 2012-04-03 16:40:00,162730.0,162990.0,162715.0,162990.0,12567.0 246 | 2012-04-03 16:45:00,162985.0,163000.0,162635.0,162750.0,10174.0 247 | 2012-04-03 16:50:00,162740.0,162935.0,162585.0,162845.0,8341.0 248 | 2012-04-03 16:55:00,162835.0,163255.0,162750.0,163230.0,14572.0 249 | 2012-04-03 17:00:00,163225.0,163550.0,163000.0,163395.0,23809.0 250 | 2012-04-03 17:05:00,163395.0,163670.0,163390.0,163415.0,15845.0 251 | 2012-04-03 17:10:00,163420.0,163790.0,163380.0,163710.0,14120.0 252 | 2012-04-03 17:15:00,163710.0,163800.0,163410.0,163475.0,10893.0 253 | 2012-04-03 17:20:00,163465.0,163945.0,163460.0,163890.0,13377.0 254 | 2012-04-03 17:25:00,163900.0,163955.0,163730.0,163780.0,11860.0 255 | 2012-04-03 17:30:00,163780.0,163950.0,163535.0,163535.0,18593.0 256 | 2012-04-03 17:35:00,163540.0,164240.0,163515.0,164210.0,37853.0 257 | 2012-04-03 17:40:00,164210.0,164260.0,163895.0,163950.0,24556.0 258 | 2012-04-03 17:45:00,163950.0,164040.0,163710.0,163900.0,15611.0 259 | 2012-04-03 17:50:00,163895.0,164105.0,163825.0,163870.0,15641.0 260 | 2012-04-03 17:55:00,163875.0,164305.0,163825.0,164090.0,15986.0 261 | 2012-04-03 18:00:00,164090.0,164470.0,163755.0,164405.0,30353.0 262 | 2012-04-03 18:05:00,164410.0,164635.0,164245.0,164565.0,23846.0 263 | 2012-04-03 18:10:00,164570.0,164680.0,164115.0,164165.0,19096.0 264 | 2012-04-03 18:15:00,164160.0,164225.0,163250.0,163375.0,40087.0 265 | 2012-04-03 18:20:00,163375.0,163570.0,163275.0,163415.0,20364.0 266 | 2012-04-03 18:25:00,163415.0,163625.0,163290.0,163625.0,17759.0 267 | 2012-04-03 18:30:00,163625.0,163790.0,163570.0,163630.0,11827.0 268 | 2012-04-03 18:35:00,163620.0,163640.0,163485.0,163540.0,9073.0 269 | 2012-04-03 18:40:00,163545.0,163940.0,163520.0,163765.0,13712.0 270 | 2012-04-03 19:00:00,163685.0,163890.0,163470.0,163610.0,6965.0 271 | 2012-04-03 19:05:00,163615.0,163730.0,163375.0,163385.0,4618.0 272 | 2012-04-03 19:10:00,163400.0,163585.0,163305.0,163390.0,5363.0 273 | 2012-04-03 19:15:00,163390.0,163440.0,163075.0,163235.0,8250.0 274 | 2012-04-03 19:20:00,163240.0,163315.0,163115.0,163315.0,4641.0 275 | 2012-04-03 19:25:00,163300.0,163345.0,163075.0,163170.0,5036.0 276 | 2012-04-03 19:30:00,163175.0,163185.0,162915.0,163105.0,8742.0 277 | 2012-04-03 19:35:00,163110.0,163430.0,163070.0,163245.0,7973.0 278 | 2012-04-03 19:40:00,163250.0,163350.0,163155.0,163165.0,3604.0 279 | 2012-04-03 19:45:00,163155.0,163280.0,163070.0,163190.0,2889.0 280 | 2012-04-03 19:50:00,163195.0,163260.0,163135.0,163150.0,1644.0 281 | 2012-04-03 19:55:00,163160.0,163240.0,163120.0,163190.0,1534.0 282 | 2012-04-03 20:00:00,163205.0,163215.0,163050.0,163055.0,2524.0 283 | 2012-04-03 20:05:00,163060.0,163125.0,162760.0,162760.0,10713.0 284 | 2012-04-03 20:10:00,162780.0,162800.0,162320.0,162630.0,16481.0 285 | 2012-04-03 20:15:00,162630.0,162850.0,162560.0,162660.0,5154.0 286 | 2012-04-03 20:20:00,162660.0,162805.0,162620.0,162785.0,2490.0 287 | 2012-04-03 20:25:00,162790.0,162945.0,162730.0,162930.0,3955.0 288 | 2012-04-03 20:30:00,162925.0,162980.0,162835.0,162885.0,4183.0 289 | 2012-04-03 20:35:00,162900.0,163075.0,162865.0,162970.0,5547.0 290 | 2012-04-03 20:40:00,162970.0,163250.0,162970.0,163245.0,5388.0 291 | 2012-04-03 20:45:00,163240.0,163250.0,163120.0,163175.0,2146.0 292 | 2012-04-03 20:50:00,163165.0,163340.0,163130.0,163135.0,3690.0 293 | 2012-04-03 20:55:00,163130.0,163230.0,163035.0,163155.0,2627.0 294 | 2012-04-03 21:00:00,163160.0,163195.0,163005.0,163140.0,2098.0 295 | 2012-04-03 21:05:00,163130.0,163170.0,162850.0,162875.0,2729.0 296 | 2012-04-03 21:10:00,162880.0,162950.0,162720.0,162885.0,3576.0 297 | 2012-04-03 21:15:00,162880.0,162965.0,162840.0,162865.0,1727.0 298 | 2012-04-03 21:20:00,162880.0,163040.0,162770.0,162860.0,2795.0 299 | 2012-04-03 21:25:00,162885.0,162955.0,162805.0,162955.0,1687.0 300 | 2012-04-03 21:30:00,162935.0,162955.0,162765.0,162865.0,1870.0 301 | 2012-04-03 21:35:00,162865.0,163045.0,162835.0,162990.0,2289.0 302 | 2012-04-03 21:40:00,162990.0,163000.0,162890.0,162925.0,1357.0 303 | 2012-04-03 21:45:00,162925.0,163145.0,162905.0,163090.0,1972.0 304 | 2012-04-03 21:50:00,163080.0,163320.0,163040.0,163320.0,3507.0 305 | 2012-04-03 21:55:00,163305.0,163440.0,163155.0,163190.0,4497.0 306 | 2012-04-03 22:00:00,163160.0,163215.0,162400.0,162450.0,17096.0 307 | 2012-04-03 22:05:00,162440.0,162720.0,162350.0,162450.0,9940.0 308 | 2012-04-03 22:10:00,162470.0,162470.0,162040.0,162150.0,15612.0 309 | 2012-04-03 22:15:00,162150.0,162340.0,162015.0,162235.0,8432.0 310 | 2012-04-03 22:20:00,162230.0,162415.0,161930.0,162385.0,12398.0 311 | 2012-04-03 22:25:00,162380.0,162410.0,162065.0,162120.0,7000.0 312 | 2012-04-03 22:30:00,162105.0,162190.0,161875.0,162145.0,8275.0 313 | 2012-04-03 22:35:00,162145.0,162160.0,161800.0,161815.0,6916.0 314 | 2012-04-03 22:40:00,161815.0,162115.0,161755.0,162110.0,7849.0 315 | 2012-04-03 22:45:00,162095.0,162115.0,161845.0,162060.0,3569.0 316 | 2012-04-03 22:50:00,162050.0,162245.0,161960.0,162085.0,7051.0 317 | 2012-04-03 22:55:00,162090.0,162150.0,161905.0,161975.0,4462.0 318 | 2012-04-03 23:00:00,161990.0,162355.0,161910.0,162330.0,5615.0 319 | 2012-04-03 23:05:00,162330.0,162405.0,162165.0,162170.0,5864.0 320 | 2012-04-03 23:10:00,162180.0,162275.0,162065.0,162260.0,2794.0 321 | 2012-04-03 23:15:00,162260.0,162360.0,162100.0,162265.0,4185.0 322 | 2012-04-03 23:20:00,162265.0,162275.0,162020.0,162115.0,4913.0 323 | 2012-04-03 23:25:00,162120.0,162125.0,161695.0,161775.0,10966.0 324 | 2012-04-03 23:30:00,161775.0,161900.0,161690.0,161725.0,6628.0 325 | 2012-04-03 23:35:00,161735.0,161855.0,161600.0,161710.0,10735.0 326 | 2012-04-03 23:40:00,161710.0,161930.0,161710.0,161915.0,4873.0 327 | 2012-04-03 23:45:00,161920.0,162080.0,161895.0,161965.0,7266.0 328 | 2012-04-04 10:00:00,161050.0,161140.0,160680.0,160960.0,21747.0 329 | 2012-04-04 10:05:00,160960.0,161285.0,160730.0,160775.0,15023.0 330 | 2012-04-04 10:10:00,160775.0,161290.0,160705.0,161140.0,12414.0 331 | 2012-04-04 10:15:00,161140.0,161300.0,161015.0,161210.0,9291.0 332 | 2012-04-04 10:20:00,161230.0,161280.0,161075.0,161150.0,5306.0 333 | 2012-04-04 10:25:00,161150.0,161380.0,161130.0,161365.0,7861.0 334 | 2012-04-04 10:30:00,161360.0,161555.0,161355.0,161465.0,11799.0 335 | 2012-04-04 10:35:00,161455.0,161465.0,161050.0,161320.0,9991.0 336 | 2012-04-04 10:40:00,161305.0,161310.0,161110.0,161160.0,4840.0 337 | 2012-04-04 10:45:00,161140.0,161350.0,161060.0,161170.0,6603.0 338 | 2012-04-04 10:50:00,161170.0,161390.0,161130.0,161255.0,4366.0 339 | 2012-04-04 10:55:00,161265.0,161325.0,161155.0,161240.0,4411.0 340 | 2012-04-04 11:00:00,161265.0,161720.0,161215.0,161450.0,15670.0 341 | 2012-04-04 11:05:00,161450.0,161460.0,161000.0,161080.0,16504.0 342 | 2012-04-04 11:10:00,161075.0,161215.0,160935.0,161145.0,11470.0 343 | 2012-04-04 11:15:00,161140.0,161610.0,160985.0,161545.0,18513.0 344 | 2012-04-04 11:20:00,161520.0,161835.0,161385.0,161580.0,23553.0 345 | 2012-04-04 11:25:00,161590.0,161705.0,161340.0,161375.0,13296.0 346 | 2012-04-04 11:30:00,161365.0,161405.0,161045.0,161320.0,22773.0 347 | 2012-04-04 11:35:00,161310.0,161680.0,161250.0,161635.0,16449.0 348 | 2012-04-04 11:40:00,161635.0,161735.0,161485.0,161680.0,9611.0 349 | 2012-04-04 11:45:00,161670.0,161960.0,161480.0,161875.0,15182.0 350 | 2012-04-04 11:50:00,161870.0,161975.0,161705.0,161750.0,9473.0 351 | 2012-04-04 11:55:00,161760.0,161910.0,161655.0,161810.0,8810.0 352 | 2012-04-04 12:00:00,161815.0,161890.0,161225.0,161345.0,20063.0 353 | 2012-04-04 12:05:00,161350.0,161650.0,161140.0,161570.0,12242.0 354 | 2012-04-04 12:10:00,161555.0,161785.0,161460.0,161715.0,10847.0 355 | 2012-04-04 12:15:00,161715.0,161750.0,161465.0,161585.0,6580.0 356 | 2012-04-04 12:20:00,161590.0,162135.0,161535.0,162065.0,16356.0 357 | 2012-04-04 12:25:00,162055.0,162190.0,161875.0,161900.0,12443.0 358 | 2012-04-04 12:30:00,161905.0,162000.0,161375.0,161455.0,14004.0 359 | 2012-04-04 12:35:00,161485.0,161860.0,161345.0,161750.0,12696.0 360 | 2012-04-04 12:40:00,161750.0,161820.0,161230.0,161230.0,12445.0 361 | 2012-04-04 12:45:00,161235.0,161435.0,161175.0,161360.0,14468.0 362 | 2012-04-04 12:50:00,161350.0,161495.0,160545.0,160630.0,39255.0 363 | 2012-04-04 12:55:00,160635.0,160690.0,160210.0,160295.0,34629.0 364 | 2012-04-04 13:00:00,160305.0,160525.0,160085.0,160340.0,30981.0 365 | 2012-04-04 13:05:00,160340.0,160520.0,160200.0,160375.0,11843.0 366 | 2012-04-04 13:10:00,160385.0,160400.0,160140.0,160200.0,9973.0 367 | 2012-04-04 13:15:00,160200.0,160360.0,159800.0,159910.0,21980.0 368 | 2012-04-04 13:20:00,159910.0,160350.0,159870.0,160260.0,16237.0 369 | 2012-04-04 13:25:00,160260.0,160270.0,159830.0,159865.0,13792.0 370 | 2012-04-04 13:30:00,159870.0,160040.0,159600.0,159785.0,22723.0 371 | 2012-04-04 13:35:00,159780.0,159995.0,159705.0,159710.0,8902.0 372 | 2012-04-04 13:40:00,159710.0,160040.0,159700.0,159865.0,9933.0 373 | 2012-04-04 13:45:00,159870.0,160115.0,159870.0,160000.0,9059.0 374 | 2012-04-04 13:50:00,159990.0,159990.0,159695.0,159695.0,13915.0 375 | 2012-04-04 13:55:00,159705.0,159795.0,159570.0,159570.0,8950.0 376 | 2012-04-04 14:00:00,159570.0,159600.0,159300.0,159510.0,13274.0 377 | 2012-04-04 14:05:00,159500.0,159510.0,159170.0,159245.0,19800.0 378 | 2012-04-04 14:10:00,159235.0,159310.0,159150.0,159255.0,12422.0 379 | 2012-04-04 14:15:00,159255.0,159265.0,158975.0,159050.0,19840.0 380 | 2012-04-04 14:20:00,159045.0,159250.0,158950.0,159130.0,12388.0 381 | 2012-04-04 14:25:00,159130.0,159370.0,158920.0,159300.0,22029.0 382 | 2012-04-04 14:30:00,159300.0,159390.0,159130.0,159295.0,8263.0 383 | 2012-04-04 14:35:00,159300.0,159320.0,159140.0,159185.0,7295.0 384 | 2012-04-04 14:40:00,159185.0,159290.0,159140.0,159270.0,8390.0 385 | 2012-04-04 14:45:00,159275.0,159495.0,159270.0,159395.0,12831.0 386 | 2012-04-04 14:50:00,159395.0,159435.0,159150.0,159175.0,9322.0 387 | 2012-04-04 14:55:00,159185.0,159250.0,158760.0,158820.0,25795.0 388 | 2012-04-04 15:00:00,158825.0,158825.0,157865.0,158020.0,54956.0 389 | 2012-04-04 15:05:00,158020.0,158180.0,157805.0,158110.0,29085.0 390 | 2012-04-04 15:10:00,158075.0,158150.0,157430.0,157585.0,40247.0 391 | 2012-04-04 15:15:00,157600.0,157690.0,157210.0,157565.0,32658.0 392 | 2012-04-04 15:20:00,157555.0,157815.0,157520.0,157700.0,13216.0 393 | 2012-04-04 15:25:00,157700.0,157905.0,157605.0,157685.0,13206.0 394 | 2012-04-04 15:30:00,157675.0,157900.0,157575.0,157840.0,8226.0 395 | 2012-04-04 15:35:00,157850.0,157995.0,157730.0,157875.0,12431.0 396 | 2012-04-04 15:40:00,157865.0,157995.0,157850.0,157925.0,7790.0 397 | 2012-04-04 15:45:00,157955.0,158100.0,157785.0,157830.0,14018.0 398 | 2012-04-04 15:50:00,157815.0,158200.0,157775.0,158035.0,15178.0 399 | 2012-04-04 15:55:00,158030.0,158030.0,157525.0,157665.0,20771.0 400 | 2012-04-04 16:00:00,157660.0,157815.0,157560.0,157655.0,16771.0 401 | 2012-04-04 16:05:00,157655.0,157950.0,157580.0,157925.0,13276.0 402 | 2012-04-04 16:10:00,157935.0,158045.0,157800.0,158000.0,11967.0 403 | 2012-04-04 16:15:00,158000.0,158185.0,157750.0,158025.0,22350.0 404 | 2012-04-04 16:20:00,158020.0,158105.0,157810.0,157960.0,11661.0 405 | 2012-04-04 16:25:00,157970.0,158100.0,157800.0,157960.0,10365.0 406 | 2012-04-04 16:30:00,157955.0,158035.0,157675.0,157990.0,14966.0 407 | 2012-04-04 16:35:00,157975.0,158090.0,157505.0,157775.0,21419.0 408 | 2012-04-04 16:40:00,157770.0,157785.0,157355.0,157625.0,23414.0 409 | 2012-04-04 16:45:00,157620.0,157795.0,157525.0,157575.0,13244.0 410 | 2012-04-04 16:50:00,157585.0,157680.0,157415.0,157595.0,9269.0 411 | 2012-04-04 16:55:00,157600.0,157730.0,157400.0,157575.0,14233.0 412 | 2012-04-04 17:00:00,157580.0,157650.0,157505.0,157575.0,7583.0 413 | 2012-04-04 17:05:00,157565.0,157690.0,157540.0,157680.0,8784.0 414 | 2012-04-04 17:10:00,157680.0,157940.0,157585.0,157590.0,16619.0 415 | 2012-04-04 17:15:00,157590.0,157670.0,157510.0,157615.0,12716.0 416 | 2012-04-04 17:20:00,157615.0,157740.0,157535.0,157720.0,10573.0 417 | 2012-04-04 17:25:00,157705.0,157720.0,157530.0,157595.0,7987.0 418 | 2012-04-04 17:30:00,157595.0,157795.0,157385.0,157690.0,17424.0 419 | 2012-04-04 17:35:00,157710.0,158455.0,157660.0,158355.0,25966.0 420 | 2012-04-04 17:40:00,158355.0,158750.0,158120.0,158605.0,19111.0 421 | 2012-04-04 17:45:00,158645.0,158675.0,158195.0,158260.0,11254.0 422 | 2012-04-04 17:50:00,158240.0,158525.0,158130.0,158475.0,10963.0 423 | 2012-04-04 17:55:00,158475.0,158600.0,158325.0,158490.0,8108.0 424 | 2012-04-04 18:00:00,158480.0,158530.0,157910.0,158270.0,30356.0 425 | 2012-04-04 18:05:00,158270.0,158370.0,158100.0,158230.0,12008.0 426 | 2012-04-04 18:10:00,158225.0,158290.0,158130.0,158215.0,13246.0 427 | 2012-04-04 18:15:00,158215.0,158250.0,157950.0,158115.0,18798.0 428 | 2012-04-04 18:20:00,158115.0,158350.0,158040.0,158125.0,10183.0 429 | 2012-04-04 18:25:00,158145.0,158170.0,157565.0,157675.0,24052.0 430 | 2012-04-04 18:30:00,157660.0,157675.0,157075.0,157300.0,27713.0 431 | 2012-04-04 18:35:00,157300.0,157800.0,157225.0,157655.0,20116.0 432 | 2012-04-04 18:40:00,157665.0,157850.0,157485.0,157825.0,15630.0 433 | 2012-04-04 19:00:00,157650.0,157650.0,157100.0,157320.0,9963.0 434 | 2012-04-04 19:05:00,157335.0,157890.0,157265.0,157855.0,8482.0 435 | 2012-04-04 19:10:00,157855.0,157895.0,157670.0,157750.0,3742.0 436 | 2012-04-04 19:15:00,157760.0,157895.0,157700.0,157820.0,2696.0 437 | 2012-04-04 19:20:00,157810.0,157985.0,157665.0,157915.0,4189.0 438 | 2012-04-04 19:25:00,157920.0,157965.0,157720.0,157765.0,2559.0 439 | 2012-04-04 19:30:00,157755.0,158095.0,157735.0,158015.0,4385.0 440 | 2012-04-04 19:35:00,158015.0,158500.0,157975.0,158480.0,9454.0 441 | 2012-04-04 19:40:00,158475.0,158500.0,158300.0,158415.0,4067.0 442 | 2012-04-04 19:45:00,158405.0,158425.0,158055.0,158190.0,4038.0 443 | 2012-04-04 19:50:00,158200.0,158265.0,158105.0,158230.0,2456.0 444 | 2012-04-04 19:55:00,158215.0,158265.0,158045.0,158125.0,2842.0 445 | 2012-04-04 20:00:00,158115.0,158190.0,157860.0,157860.0,5117.0 446 | 2012-04-04 20:05:00,157860.0,158100.0,157825.0,158000.0,3091.0 447 | 2012-04-04 20:10:00,158020.0,158100.0,158000.0,158020.0,1436.0 448 | 2012-04-04 20:15:00,158025.0,158220.0,157965.0,158175.0,2864.0 449 | 2012-04-04 20:20:00,158165.0,158230.0,158150.0,158180.0,1790.0 450 | 2012-04-04 20:25:00,158180.0,158195.0,158060.0,158125.0,1968.0 451 | 2012-04-04 20:30:00,158090.0,158140.0,157890.0,157995.0,2247.0 452 | 2012-04-04 20:35:00,157995.0,158165.0,157965.0,158155.0,2366.0 453 | 2012-04-04 20:40:00,158155.0,158295.0,158135.0,158185.0,4039.0 454 | 2012-04-04 20:45:00,158185.0,158240.0,157990.0,158040.0,1755.0 455 | 2012-04-04 20:50:00,158045.0,158170.0,158045.0,158145.0,977.0 456 | 2012-04-04 20:55:00,158115.0,158175.0,158060.0,158125.0,781.0 457 | 2012-04-04 21:00:00,158125.0,158225.0,158015.0,158025.0,2082.0 458 | 2012-04-04 21:05:00,158025.0,158100.0,157900.0,157935.0,2212.0 459 | 2012-04-04 21:10:00,157935.0,158050.0,157850.0,157940.0,3201.0 460 | 2012-04-04 21:15:00,157950.0,158120.0,157900.0,158075.0,2418.0 461 | 2012-04-04 21:20:00,158085.0,158115.0,157945.0,157985.0,1879.0 462 | 2012-04-04 21:25:00,157985.0,157995.0,157700.0,157735.0,4208.0 463 | 2012-04-04 21:30:00,157725.0,157925.0,157690.0,157890.0,3299.0 464 | 2012-04-04 21:35:00,157890.0,157905.0,157800.0,157845.0,1371.0 465 | 2012-04-04 21:40:00,157845.0,158080.0,157830.0,158040.0,2281.0 466 | 2012-04-04 21:45:00,158025.0,158200.0,158025.0,158170.0,3158.0 467 | 2012-04-04 21:50:00,158170.0,158220.0,158065.0,158100.0,1829.0 468 | 2012-04-04 21:55:00,158100.0,158430.0,158070.0,158285.0,4365.0 469 | 2012-04-04 22:00:00,158295.0,158455.0,158165.0,158195.0,2816.0 470 | 2012-04-04 22:05:00,158195.0,158255.0,158125.0,158140.0,1775.0 471 | 2012-04-04 22:10:00,158145.0,158300.0,158135.0,158300.0,1058.0 472 | 2012-04-04 22:15:00,158300.0,158325.0,158100.0,158120.0,1563.0 473 | 2012-04-04 22:20:00,158120.0,158190.0,157965.0,158040.0,2639.0 474 | 2012-04-04 22:25:00,158040.0,158150.0,157975.0,158075.0,2235.0 475 | 2012-04-04 22:30:00,158080.0,158200.0,158025.0,158195.0,1895.0 476 | 2012-04-04 22:35:00,158195.0,158310.0,158100.0,158285.0,2380.0 477 | 2012-04-04 22:40:00,158305.0,158385.0,158190.0,158290.0,2751.0 478 | 2012-04-04 22:45:00,158305.0,158330.0,158205.0,158255.0,2077.0 479 | 2012-04-04 22:50:00,158250.0,158305.0,158100.0,158125.0,2393.0 480 | 2012-04-04 22:55:00,158125.0,158245.0,158125.0,158195.0,2118.0 481 | 2012-04-04 23:00:00,158190.0,158335.0,158180.0,158290.0,2230.0 482 | 2012-04-04 23:05:00,158280.0,158435.0,158215.0,158355.0,3597.0 483 | 2012-04-04 23:10:00,158350.0,158805.0,158325.0,158800.0,13556.0 484 | 2012-04-04 23:15:00,158800.0,158900.0,158680.0,158705.0,6098.0 485 | 2012-04-04 23:20:00,158705.0,158790.0,158640.0,158685.0,2169.0 486 | 2012-04-04 23:25:00,158690.0,158735.0,158610.0,158700.0,1834.0 487 | 2012-04-04 23:30:00,158700.0,158860.0,158680.0,158860.0,3408.0 488 | 2012-04-04 23:35:00,158860.0,159000.0,158805.0,158995.0,8226.0 489 | 2012-04-04 23:40:00,159000.0,159130.0,158950.0,159100.0,7710.0 490 | 2012-04-04 23:45:00,159095.0,159220.0,159095.0,159200.0,9011.0 491 | 2012-04-05 10:00:00,159450.0,159460.0,159100.0,159350.0,14851.0 492 | 2012-04-05 10:05:00,159355.0,159370.0,159150.0,159160.0,9948.0 493 | 2012-04-05 10:10:00,159170.0,159175.0,158935.0,159095.0,12330.0 494 | 2012-04-05 10:15:00,159095.0,159140.0,158845.0,158930.0,7559.0 495 | 2012-04-05 10:20:00,158930.0,159240.0,158930.0,159195.0,6320.0 496 | 2012-04-05 10:25:00,159195.0,159375.0,159180.0,159265.0,6374.0 497 | 2012-04-05 10:30:00,159280.0,159360.0,159100.0,159250.0,6659.0 498 | 2012-04-05 10:35:00,159245.0,159295.0,159145.0,159165.0,3289.0 499 | 2012-04-05 10:40:00,159170.0,159235.0,158920.0,159220.0,7795.0 500 | 2012-04-05 10:45:00,159210.0,159235.0,158950.0,159100.0,6650.0 501 | 2012-04-05 10:50:00,159100.0,159355.0,159100.0,159300.0,8249.0 502 | 2012-04-05 10:55:00,159300.0,159630.0,159280.0,159510.0,13974.0 503 | 2012-04-05 11:00:00,159510.0,159685.0,159370.0,159465.0,12073.0 504 | 2012-04-05 11:05:00,159450.0,159630.0,159435.0,159510.0,6892.0 505 | 2012-04-05 11:10:00,159495.0,159595.0,159305.0,159305.0,10160.0 506 | 2012-04-05 11:15:00,159320.0,159575.0,158560.0,158675.0,38909.0 507 | 2012-04-05 11:20:00,158675.0,158705.0,158355.0,158375.0,20300.0 508 | 2012-04-05 11:25:00,158385.0,158450.0,158115.0,158420.0,24279.0 509 | 2012-04-05 11:30:00,158420.0,158420.0,157760.0,157870.0,25296.0 510 | 2012-04-05 11:35:00,157875.0,158180.0,157815.0,158055.0,14659.0 511 | 2012-04-05 11:40:00,158040.0,158390.0,158035.0,158335.0,10436.0 512 | 2012-04-05 11:45:00,158330.0,158365.0,158075.0,158245.0,7250.0 513 | 2012-04-05 11:50:00,158245.0,158495.0,158190.0,158460.0,11359.0 514 | 2012-04-05 11:55:00,158450.0,158695.0,158395.0,158500.0,13595.0 515 | 2012-04-05 12:00:00,158495.0,158880.0,158485.0,158860.0,17689.0 516 | 2012-04-05 12:05:00,158835.0,158870.0,158270.0,158275.0,16606.0 517 | 2012-04-05 12:10:00,158270.0,158550.0,158160.0,158175.0,13037.0 518 | 2012-04-05 12:15:00,158185.0,158365.0,157850.0,158065.0,17546.0 519 | 2012-04-05 12:20:00,158065.0,158465.0,157845.0,158435.0,11453.0 520 | 2012-04-05 12:25:00,158435.0,158475.0,157770.0,157770.0,20039.0 521 | 2012-04-05 12:30:00,157770.0,158190.0,157625.0,157905.0,24056.0 522 | 2012-04-05 12:35:00,157900.0,157920.0,157405.0,157555.0,21357.0 523 | 2012-04-05 12:40:00,157555.0,157600.0,157265.0,157395.0,17139.0 524 | 2012-04-05 12:45:00,157390.0,157580.0,157000.0,157125.0,19947.0 525 | 2012-04-05 12:50:00,157125.0,157430.0,156875.0,157380.0,22944.0 526 | 2012-04-05 12:55:00,157385.0,157745.0,157380.0,157635.0,16583.0 527 | 2012-04-05 13:00:00,157635.0,157825.0,157520.0,157765.0,11682.0 528 | 2012-04-05 13:05:00,157765.0,157850.0,157610.0,157675.0,9191.0 529 | 2012-04-05 13:10:00,157690.0,157720.0,157450.0,157455.0,8075.0 530 | 2012-04-05 13:15:00,157465.0,157615.0,157130.0,157465.0,13287.0 531 | 2012-04-05 13:20:00,157455.0,157500.0,156960.0,157175.0,15003.0 532 | 2012-04-05 13:25:00,157160.0,157400.0,157090.0,157265.0,10289.0 533 | 2012-04-05 13:30:00,157270.0,157295.0,156750.0,156865.0,20229.0 534 | 2012-04-05 13:35:00,156875.0,156885.0,156345.0,156345.0,23040.0 535 | 2012-04-05 13:40:00,156345.0,156740.0,156280.0,156285.0,19576.0 536 | 2012-04-05 13:45:00,156290.0,156505.0,156125.0,156345.0,21900.0 537 | 2012-04-05 13:50:00,156345.0,156450.0,156160.0,156285.0,17740.0 538 | 2012-04-05 13:55:00,156290.0,156480.0,156250.0,156260.0,9153.0 539 | 2012-04-05 14:00:00,156255.0,156255.0,155520.0,155680.0,15734.0 540 | 2012-04-05 14:05:00,155680.0,155965.0,155485.0,155900.0,15268.0 541 | 2012-04-05 14:10:00,155900.0,155935.0,155590.0,155830.0,10259.0 542 | 2012-04-05 14:15:00,155845.0,155975.0,155740.0,155795.0,7666.0 543 | 2012-04-05 14:20:00,155800.0,156335.0,155740.0,156130.0,14323.0 544 | 2012-04-05 14:25:00,156120.0,156175.0,156000.0,156125.0,6700.0 545 | 2012-04-05 14:30:00,156130.0,156445.0,156070.0,156400.0,8334.0 546 | 2012-04-05 14:35:00,156400.0,156440.0,156265.0,156315.0,6885.0 547 | 2012-04-05 14:40:00,156310.0,156365.0,156100.0,156260.0,5855.0 548 | 2012-04-05 14:45:00,156255.0,156445.0,156160.0,156400.0,6244.0 549 | 2012-04-05 14:50:00,156385.0,156930.0,156350.0,156910.0,18164.0 550 | 2012-04-05 14:55:00,156930.0,156955.0,156695.0,156825.0,9525.0 551 | 2012-04-05 15:00:00,156825.0,156855.0,156505.0,156530.0,9408.0 552 | 2012-04-05 15:05:00,156510.0,156830.0,156505.0,156745.0,8679.0 553 | 2012-04-05 15:10:00,156750.0,156825.0,156460.0,156580.0,9525.0 554 | 2012-04-05 15:15:00,156580.0,156865.0,156480.0,156755.0,7582.0 555 | 2012-04-05 15:20:00,156750.0,156880.0,156735.0,156825.0,2896.0 556 | 2012-04-05 15:25:00,156815.0,157315.0,156765.0,157240.0,20768.0 557 | 2012-04-05 15:30:00,157235.0,157280.0,156840.0,157040.0,10991.0 558 | 2012-04-05 15:35:00,157040.0,157090.0,156655.0,156740.0,7277.0 559 | 2012-04-05 15:40:00,156725.0,156780.0,156555.0,156755.0,7862.0 560 | 2012-04-05 15:45:00,156760.0,156935.0,156740.0,156825.0,5168.0 561 | 2012-04-05 15:50:00,156835.0,157140.0,156825.0,156940.0,7547.0 562 | 2012-04-05 15:55:00,156935.0,157410.0,156860.0,157235.0,10641.0 563 | 2012-04-05 16:00:00,157240.0,157285.0,157000.0,157020.0,7471.0 564 | 2012-04-05 16:05:00,157005.0,157190.0,156835.0,156900.0,7037.0 565 | 2012-04-05 16:10:00,156885.0,156920.0,156655.0,156855.0,8893.0 566 | 2012-04-05 16:15:00,156860.0,156990.0,156755.0,156795.0,6048.0 567 | 2012-04-05 16:20:00,156795.0,156855.0,156585.0,156760.0,9656.0 568 | 2012-04-05 16:25:00,156760.0,157090.0,156750.0,157055.0,10183.0 569 | 2012-04-05 16:30:00,157055.0,158000.0,156975.0,157860.0,41808.0 570 | 2012-04-05 16:35:00,157850.0,158000.0,157215.0,157515.0,23950.0 571 | 2012-04-05 16:40:00,157515.0,157785.0,157415.0,157725.0,15855.0 572 | 2012-04-05 16:45:00,157720.0,158350.0,157700.0,158000.0,34241.0 573 | 2012-04-05 16:50:00,158000.0,158035.0,157700.0,157875.0,10862.0 574 | 2012-04-05 16:55:00,157875.0,157945.0,157600.0,157810.0,10345.0 575 | 2012-04-05 17:00:00,157810.0,158275.0,157735.0,157975.0,15939.0 576 | 2012-04-05 17:05:00,157975.0,158085.0,157760.0,157765.0,7545.0 577 | 2012-04-05 17:10:00,157770.0,157850.0,157400.0,157465.0,13745.0 578 | 2012-04-05 17:15:00,157440.0,157630.0,157400.0,157430.0,7036.0 579 | 2012-04-05 17:20:00,157450.0,157760.0,157400.0,157535.0,10010.0 580 | 2012-04-05 17:25:00,157540.0,157950.0,157495.0,157830.0,8147.0 581 | 2012-04-05 17:30:00,157805.0,158200.0,157750.0,158090.0,21642.0 582 | 2012-04-05 17:35:00,158090.0,158125.0,157650.0,158025.0,20061.0 583 | 2012-04-05 17:40:00,158015.0,158445.0,157950.0,158395.0,19592.0 584 | 2012-04-05 17:45:00,158395.0,159000.0,158390.0,158840.0,36746.0 585 | 2012-04-05 17:50:00,158840.0,159190.0,158815.0,159000.0,23973.0 586 | 2012-04-05 17:55:00,158990.0,159070.0,158830.0,158950.0,14211.0 587 | 2012-04-05 18:00:00,158950.0,159620.0,158940.0,159335.0,33190.0 588 | 2012-04-05 18:05:00,159335.0,159600.0,159320.0,159435.0,20655.0 589 | 2012-04-05 18:10:00,159435.0,159535.0,159065.0,159090.0,15491.0 590 | 2012-04-05 18:15:00,159090.0,159205.0,158935.0,159150.0,11393.0 591 | 2012-04-05 18:20:00,159150.0,159285.0,159100.0,159145.0,13158.0 592 | 2012-04-05 18:25:00,159135.0,159550.0,159105.0,159420.0,17714.0 593 | 2012-04-05 18:30:00,159410.0,159750.0,159365.0,159460.0,19627.0 594 | 2012-04-05 18:35:00,159465.0,159495.0,159165.0,159490.0,15779.0 595 | 2012-04-05 18:40:00,159495.0,159655.0,159355.0,159485.0,14324.0 596 | 2012-04-05 19:00:00,159600.0,160305.0,159600.0,160070.0,20585.0 597 | 2012-04-05 19:05:00,160070.0,160365.0,159965.0,160340.0,10775.0 598 | 2012-04-05 19:10:00,160335.0,160390.0,160230.0,160335.0,6599.0 599 | 2012-04-05 19:15:00,160335.0,160340.0,160015.0,160035.0,5334.0 600 | 2012-04-05 19:20:00,160035.0,160140.0,159950.0,159970.0,4511.0 601 | 2012-04-05 19:25:00,159960.0,160165.0,159920.0,160075.0,3459.0 602 | 2012-04-05 19:30:00,160075.0,160190.0,159905.0,159915.0,3957.0 603 | 2012-04-05 19:35:00,159915.0,159970.0,159870.0,159945.0,2913.0 604 | 2012-04-05 19:40:00,159940.0,160170.0,159905.0,159910.0,2954.0 605 | 2012-04-05 19:45:00,159930.0,160130.0,159860.0,159865.0,3790.0 606 | 2012-04-05 19:50:00,159860.0,159945.0,159725.0,159765.0,4532.0 607 | 2012-04-05 19:55:00,159775.0,160175.0,159760.0,160170.0,5065.0 608 | 2012-04-05 20:00:00,160165.0,160385.0,160150.0,160190.0,6429.0 609 | 2012-04-05 20:05:00,160190.0,160250.0,160065.0,160080.0,2630.0 610 | 2012-04-05 20:10:00,160075.0,160150.0,160000.0,160020.0,2201.0 611 | 2012-04-05 20:15:00,160020.0,160110.0,159955.0,160050.0,2483.0 612 | 2012-04-05 20:20:00,160050.0,160245.0,159955.0,160245.0,2162.0 613 | 2012-04-05 20:25:00,160230.0,160245.0,160020.0,160085.0,2015.0 614 | 2012-04-05 20:30:00,160085.0,160125.0,159975.0,160080.0,1681.0 615 | 2012-04-05 20:35:00,160080.0,160150.0,159900.0,159915.0,2344.0 616 | 2012-04-05 20:40:00,159915.0,160020.0,159905.0,159950.0,1365.0 617 | 2012-04-05 20:45:00,159975.0,159995.0,159850.0,159910.0,1438.0 618 | 2012-04-05 20:50:00,159920.0,160050.0,159890.0,160010.0,1453.0 619 | 2012-04-05 20:55:00,160005.0,160030.0,159975.0,160020.0,789.0 620 | 2012-04-05 21:00:00,160020.0,160145.0,160005.0,160035.0,3053.0 621 | 2012-04-05 21:05:00,160035.0,160055.0,159815.0,159860.0,2447.0 622 | 2012-04-05 21:10:00,159850.0,159970.0,159850.0,159940.0,865.0 623 | 2012-04-05 21:15:00,159940.0,160050.0,159825.0,159925.0,1841.0 624 | 2012-04-05 21:20:00,159910.0,160035.0,159905.0,159950.0,1084.0 625 | 2012-04-05 21:25:00,159950.0,160030.0,159935.0,159940.0,897.0 626 | 2012-04-05 21:30:00,159935.0,159965.0,159875.0,159885.0,1865.0 627 | 2012-04-05 21:35:00,159900.0,159995.0,159885.0,159970.0,712.0 628 | 2012-04-05 21:40:00,159965.0,159985.0,159880.0,159935.0,1340.0 629 | 2012-04-05 21:45:00,159930.0,159935.0,159525.0,159575.0,6484.0 630 | 2012-04-05 21:50:00,159590.0,159680.0,159220.0,159425.0,7491.0 631 | 2012-04-05 21:55:00,159440.0,159440.0,159100.0,159340.0,6377.0 632 | 2012-04-05 22:00:00,159325.0,159340.0,159065.0,159170.0,7941.0 633 | 2012-04-05 22:05:00,159160.0,159220.0,159065.0,159170.0,2375.0 634 | 2012-04-05 22:10:00,159180.0,159235.0,159130.0,159180.0,1486.0 635 | 2012-04-05 22:15:00,159180.0,159435.0,159025.0,159365.0,4976.0 636 | 2012-04-05 22:20:00,159365.0,159560.0,159345.0,159535.0,3539.0 637 | 2012-04-05 22:25:00,159535.0,159535.0,159300.0,159410.0,2893.0 638 | 2012-04-05 22:30:00,159430.0,159550.0,159215.0,159305.0,3468.0 639 | 2012-04-05 22:35:00,159305.0,159500.0,159305.0,159350.0,2219.0 640 | 2012-04-05 22:40:00,159350.0,159445.0,159330.0,159375.0,903.0 641 | 2012-04-05 22:45:00,159375.0,159545.0,159360.0,159460.0,1345.0 642 | 2012-04-05 22:50:00,159460.0,159735.0,159380.0,159705.0,4051.0 643 | 2012-04-05 22:55:00,159705.0,159780.0,159600.0,159615.0,3005.0 644 | 2012-04-05 23:00:00,159620.0,159650.0,159510.0,159635.0,1914.0 645 | 2012-04-05 23:05:00,159635.0,159795.0,159620.0,159715.0,2673.0 646 | 2012-04-05 23:10:00,159710.0,159725.0,159450.0,159605.0,3200.0 647 | 2012-04-05 23:15:00,159605.0,159765.0,159605.0,159725.0,2476.0 648 | 2012-04-05 23:20:00,159740.0,160020.0,159725.0,159930.0,5174.0 649 | 2012-04-05 23:25:00,159930.0,160225.0,159900.0,160190.0,4743.0 650 | 2012-04-05 23:30:00,160205.0,160275.0,160000.0,160055.0,4219.0 651 | 2012-04-05 23:35:00,160055.0,160250.0,160040.0,160215.0,3107.0 652 | 2012-04-05 23:40:00,160215.0,160330.0,160155.0,160250.0,4087.0 653 | 2012-04-05 23:45:00,160275.0,160400.0,160050.0,160340.0,8654.0 654 | 2012-04-06 10:00:00,160260.0,160305.0,159635.0,159750.0,10918.0 655 | 2012-04-06 10:05:00,159735.0,159925.0,159575.0,159680.0,8009.0 656 | 2012-04-06 10:10:00,159675.0,159845.0,159545.0,159655.0,7352.0 657 | 2012-04-06 10:15:00,159635.0,159800.0,159605.0,159715.0,4367.0 658 | 2012-04-06 10:20:00,159735.0,159895.0,159670.0,159855.0,3672.0 659 | 2012-04-06 10:25:00,159840.0,159980.0,159715.0,159810.0,4136.0 660 | 2012-04-06 10:30:00,159825.0,159895.0,159205.0,159290.0,14317.0 661 | 2012-04-06 10:35:00,159290.0,159380.0,159150.0,159265.0,9116.0 662 | 2012-04-06 10:40:00,159260.0,159485.0,159165.0,159435.0,5277.0 663 | 2012-04-06 10:45:00,159440.0,159545.0,159285.0,159490.0,4764.0 664 | 2012-04-06 10:50:00,159485.0,159575.0,159450.0,159510.0,2468.0 665 | 2012-04-06 10:55:00,159520.0,159755.0,159365.0,159720.0,6943.0 666 | 2012-04-06 11:00:00,159695.0,159855.0,159625.0,159780.0,6671.0 667 | 2012-04-06 11:05:00,159770.0,159895.0,159715.0,159765.0,5429.0 668 | 2012-04-06 11:10:00,159785.0,159795.0,159650.0,159715.0,2151.0 669 | 2012-04-06 11:15:00,159725.0,159835.0,159275.0,159295.0,9322.0 670 | 2012-04-06 11:20:00,159295.0,159520.0,159235.0,159515.0,3860.0 671 | 2012-04-06 11:25:00,159500.0,159610.0,159435.0,159465.0,2787.0 672 | 2012-04-06 11:30:00,159465.0,159695.0,159435.0,159470.0,3256.0 673 | 2012-04-06 11:35:00,159490.0,159735.0,159360.0,159705.0,3697.0 674 | 2012-04-06 11:40:00,159705.0,159750.0,159435.0,159445.0,4119.0 675 | 2012-04-06 11:45:00,159455.0,159685.0,159310.0,159600.0,6197.0 676 | 2012-04-06 11:50:00,159585.0,159620.0,159500.0,159600.0,1710.0 677 | 2012-04-06 11:55:00,159605.0,159620.0,159465.0,159510.0,2046.0 678 | 2012-04-06 12:00:00,159560.0,159675.0,159365.0,159615.0,6852.0 679 | 2012-04-06 12:05:00,159620.0,159695.0,159590.0,159670.0,1540.0 680 | 2012-04-06 12:10:00,159670.0,159695.0,159580.0,159625.0,1102.0 681 | 2012-04-06 12:15:00,159620.0,159670.0,159455.0,159585.0,2285.0 682 | 2012-04-06 12:20:00,159580.0,159585.0,159420.0,159515.0,1722.0 683 | 2012-04-06 12:25:00,159520.0,159590.0,159485.0,159520.0,1071.0 684 | 2012-04-06 12:30:00,159520.0,159540.0,159420.0,159475.0,1559.0 685 | 2012-04-06 12:35:00,159485.0,159500.0,159255.0,159355.0,3356.0 686 | 2012-04-06 12:40:00,159365.0,159490.0,159305.0,159320.0,3131.0 687 | 2012-04-06 12:45:00,159325.0,159435.0,159300.0,159385.0,2061.0 688 | 2012-04-06 12:50:00,159380.0,159480.0,159315.0,159460.0,1691.0 689 | 2012-04-06 12:55:00,159455.0,159475.0,159275.0,159395.0,1684.0 690 | 2012-04-06 13:00:00,159385.0,159470.0,159360.0,159465.0,1755.0 691 | 2012-04-06 13:05:00,159460.0,159640.0,159450.0,159625.0,3794.0 692 | 2012-04-06 13:10:00,159625.0,159675.0,159545.0,159635.0,1774.0 693 | 2012-04-06 13:15:00,159615.0,159695.0,159535.0,159595.0,1931.0 694 | 2012-04-06 13:20:00,159595.0,159645.0,159560.0,159570.0,1024.0 695 | 2012-04-06 13:25:00,159570.0,159680.0,159560.0,159680.0,1324.0 696 | 2012-04-06 13:30:00,159680.0,159770.0,159625.0,159690.0,2716.0 697 | 2012-04-06 13:35:00,159685.0,159695.0,159575.0,159575.0,1531.0 698 | 2012-04-06 13:40:00,159575.0,159575.0,159460.0,159540.0,1968.0 699 | 2012-04-06 13:45:00,159545.0,159550.0,159440.0,159465.0,1398.0 700 | 2012-04-06 13:50:00,159450.0,159595.0,159420.0,159530.0,1628.0 701 | 2012-04-06 13:55:00,159530.0,159595.0,159530.0,159555.0,532.0 702 | 2012-04-06 14:00:00,159560.0,159645.0,159525.0,159630.0,785.0 703 | 2012-04-06 14:05:00,159630.0,159645.0,159560.0,159595.0,1474.0 704 | 2012-04-06 14:10:00,159590.0,159590.0,159500.0,159500.0,1392.0 705 | 2012-04-06 14:15:00,159515.0,159585.0,159515.0,159560.0,732.0 706 | 2012-04-06 14:20:00,159560.0,159635.0,159525.0,159625.0,1003.0 707 | 2012-04-06 14:25:00,159630.0,159630.0,159580.0,159600.0,452.0 708 | 2012-04-06 14:30:00,159600.0,159600.0,159555.0,159595.0,567.0 709 | 2012-04-06 14:35:00,159595.0,159600.0,159510.0,159545.0,719.0 710 | 2012-04-06 14:40:00,159555.0,159555.0,159480.0,159520.0,768.0 711 | 2012-04-06 14:45:00,159525.0,159555.0,159500.0,159555.0,372.0 712 | 2012-04-06 14:50:00,159550.0,159560.0,159460.0,159500.0,1089.0 713 | 2012-04-06 14:55:00,159505.0,159540.0,159430.0,159480.0,1680.0 714 | 2012-04-06 15:00:00,159480.0,159490.0,159210.0,159330.0,6687.0 715 | 2012-04-06 15:05:00,159310.0,159370.0,159290.0,159345.0,1260.0 716 | 2012-04-06 15:10:00,159340.0,159370.0,159310.0,159330.0,477.0 717 | 2012-04-06 15:15:00,159330.0,159380.0,159265.0,159315.0,1160.0 718 | 2012-04-06 15:20:00,159315.0,159330.0,158475.0,158845.0,20892.0 719 | 2012-04-06 15:25:00,158840.0,158975.0,158650.0,158675.0,7481.0 720 | 2012-04-06 15:30:00,158680.0,158740.0,158510.0,158705.0,7530.0 721 | 2012-04-06 15:35:00,158705.0,158960.0,158700.0,158820.0,4536.0 722 | 2012-04-06 15:40:00,158820.0,158950.0,158820.0,158935.0,1587.0 723 | 2012-04-06 15:45:00,158935.0,159030.0,158780.0,158980.0,3452.0 724 | 2012-04-06 15:50:00,158975.0,159175.0,158970.0,159040.0,5072.0 725 | 2012-04-06 15:55:00,159055.0,159110.0,158865.0,159055.0,4309.0 726 | 2012-04-06 16:00:00,159055.0,159080.0,158780.0,158895.0,3919.0 727 | 2012-04-06 16:05:00,158890.0,158940.0,158820.0,158830.0,1399.0 728 | 2012-04-06 16:10:00,158830.0,158940.0,158820.0,158905.0,1653.0 729 | 2012-04-06 16:15:00,158905.0,159050.0,158860.0,158915.0,2096.0 730 | 2012-04-06 16:20:00,158915.0,159060.0,158815.0,158950.0,3307.0 731 | 2012-04-06 16:25:00,158965.0,159040.0,158890.0,158895.0,2455.0 732 | 2012-04-06 16:30:00,158905.0,158905.0,157540.0,157865.0,66827.0 733 | 2012-04-06 16:35:00,157865.0,157910.0,157165.0,157415.0,26813.0 734 | 2012-04-06 16:40:00,157425.0,157580.0,156630.0,156790.0,38133.0 735 | 2012-04-06 16:45:00,156795.0,157135.0,156500.0,156815.0,30112.0 736 | 2012-04-06 16:50:00,156815.0,157100.0,156635.0,156700.0,15108.0 737 | 2012-04-06 16:55:00,156710.0,156950.0,156325.0,156640.0,25050.0 738 | 2012-04-06 17:00:00,156640.0,156655.0,156330.0,156390.0,17809.0 739 | 2012-04-06 17:05:00,156390.0,156515.0,156130.0,156370.0,23833.0 740 | 2012-04-06 17:10:00,156395.0,156395.0,155965.0,156255.0,28723.0 741 | 2012-04-06 17:15:00,156255.0,156685.0,156175.0,156525.0,10413.0 742 | 2012-04-06 17:20:00,156525.0,156640.0,156400.0,156450.0,4900.0 743 | 2012-04-06 17:25:00,156445.0,156460.0,156050.0,156165.0,10025.0 744 | 2012-04-06 17:30:00,156145.0,156540.0,156085.0,156415.0,6589.0 745 | 2012-04-06 17:35:00,156425.0,156435.0,156230.0,156395.0,2785.0 746 | 2012-04-06 17:40:00,156400.0,156600.0,156315.0,156525.0,7035.0 747 | 2012-04-06 17:45:00,156525.0,156600.0,156400.0,156515.0,4374.0 748 | 2012-04-06 17:50:00,156515.0,156530.0,156230.0,156345.0,7440.0 749 | 2012-04-06 17:55:00,156340.0,156445.0,156270.0,156300.0,3884.0 750 | 2012-04-06 18:00:00,156295.0,156345.0,155820.0,155845.0,14023.0 751 | 2012-04-06 18:05:00,155845.0,156045.0,155655.0,155835.0,14430.0 752 | 2012-04-06 18:10:00,155845.0,155970.0,155700.0,155830.0,5805.0 753 | 2012-04-06 18:15:00,155830.0,155850.0,155605.0,155800.0,7230.0 754 | 2012-04-06 18:20:00,155800.0,156050.0,155750.0,155920.0,7058.0 755 | 2012-04-06 18:25:00,155925.0,155975.0,155810.0,155845.0,3230.0 756 | 2012-04-06 18:30:00,155840.0,155995.0,155725.0,155725.0,7397.0 757 | 2012-04-06 18:35:00,155735.0,156000.0,155630.0,155940.0,8760.0 758 | 2012-04-06 18:40:00,155915.0,156095.0,155770.0,155825.0,9426.0 759 | 2012-04-06 19:00:00,155805.0,155975.0,155645.0,155855.0,2440.0 760 | 2012-04-06 19:05:00,155855.0,156075.0,155200.0,155995.0,9758.0 761 | 2012-04-06 19:10:00,156000.0,156080.0,155705.0,155735.0,4046.0 762 | 2012-04-06 19:15:00,155735.0,155970.0,155560.0,155755.0,3632.0 763 | 2012-04-06 19:20:00,155745.0,155910.0,155740.0,155850.0,1093.0 764 | 2012-04-06 19:25:00,155850.0,155860.0,155635.0,155790.0,1745.0 765 | 2012-04-06 19:30:00,155790.0,155925.0,155740.0,155805.0,1949.0 766 | 2012-04-06 19:35:00,155810.0,155985.0,155800.0,155935.0,1528.0 767 | 2012-04-06 19:40:00,155945.0,155975.0,155880.0,155900.0,659.0 768 | 2012-04-06 19:45:00,155900.0,155945.0,155865.0,155880.0,1176.0 769 | 2012-04-06 19:50:00,155885.0,156000.0,155800.0,155910.0,2483.0 770 | 2012-04-06 19:55:00,155915.0,156000.0,155830.0,155845.0,2795.0 771 | 2012-04-06 20:00:00,155845.0,156435.0,155845.0,156125.0,8368.0 772 | 2012-04-06 20:05:00,156130.0,156270.0,156105.0,156250.0,1248.0 773 | 2012-04-06 20:10:00,156250.0,156280.0,156175.0,156230.0,691.0 774 | 2012-04-06 20:15:00,156230.0,156260.0,156190.0,156200.0,726.0 775 | 2012-04-06 20:20:00,156200.0,156220.0,156150.0,156180.0,372.0 776 | 2012-04-06 20:25:00,156200.0,156240.0,156180.0,156210.0,271.0 777 | 2012-04-06 20:30:00,156225.0,156240.0,156175.0,156220.0,393.0 778 | 2012-04-06 20:35:00,156220.0,156220.0,156175.0,156190.0,368.0 779 | 2012-04-06 20:40:00,156185.0,156195.0,156020.0,156125.0,1110.0 780 | 2012-04-06 20:45:00,156125.0,156130.0,156065.0,156110.0,353.0 781 | 2012-04-06 20:50:00,156100.0,156115.0,156035.0,156055.0,514.0 782 | 2012-04-06 20:55:00,156040.0,156060.0,156015.0,156020.0,478.0 783 | 2012-04-06 21:00:00,156025.0,156055.0,155630.0,155870.0,4653.0 784 | 2012-04-06 21:05:00,155855.0,155930.0,155785.0,155900.0,706.0 785 | 2012-04-06 21:10:00,155900.0,155930.0,155790.0,155915.0,887.0 786 | 2012-04-06 21:15:00,155910.0,155975.0,155865.0,155975.0,710.0 787 | 2012-04-06 21:20:00,155975.0,155975.0,155870.0,155890.0,609.0 788 | 2012-04-06 21:25:00,155890.0,155930.0,155870.0,155910.0,177.0 789 | 2012-04-06 21:30:00,155890.0,155920.0,155870.0,155880.0,143.0 790 | 2012-04-06 21:35:00,155880.0,155900.0,155870.0,155900.0,204.0 791 | 2012-04-06 21:40:00,155885.0,155895.0,155870.0,155875.0,178.0 792 | 2012-04-06 21:45:00,155890.0,155940.0,155870.0,155935.0,784.0 793 | 2012-04-06 21:50:00,155915.0,155935.0,155850.0,155870.0,294.0 794 | 2012-04-06 21:55:00,155870.0,156000.0,155870.0,156000.0,1067.0 795 | 2012-04-06 22:00:00,155990.0,156045.0,155905.0,155960.0,739.0 796 | 2012-04-06 22:05:00,155955.0,155960.0,155905.0,155930.0,132.0 797 | 2012-04-06 22:10:00,155930.0,155985.0,155920.0,155970.0,332.0 798 | 2012-04-06 22:15:00,155960.0,156000.0,155955.0,156000.0,189.0 799 | 2012-04-06 22:20:00,156000.0,156160.0,156000.0,156155.0,1363.0 800 | 2012-04-06 22:25:00,156140.0,156200.0,156090.0,156115.0,930.0 801 | 2012-04-06 22:30:00,156115.0,156140.0,156075.0,156135.0,500.0 802 | 2012-04-06 22:35:00,156125.0,156170.0,156025.0,156085.0,580.0 803 | 2012-04-06 22:40:00,156085.0,156130.0,156070.0,156105.0,212.0 804 | 2012-04-06 22:45:00,156105.0,156180.0,156100.0,156115.0,607.0 805 | 2012-04-06 22:50:00,156135.0,156200.0,156080.0,156090.0,590.0 806 | 2012-04-06 22:55:00,156090.0,156130.0,156050.0,156120.0,448.0 807 | 2012-04-06 23:00:00,156120.0,156185.0,156110.0,156125.0,474.0 808 | 2012-04-06 23:05:00,156125.0,156175.0,156120.0,156155.0,165.0 809 | 2012-04-06 23:10:00,156155.0,156165.0,156120.0,156120.0,201.0 810 | 2012-04-06 23:15:00,156130.0,156155.0,156130.0,156140.0,127.0 811 | 2012-04-06 23:20:00,156150.0,156155.0,156130.0,156130.0,179.0 812 | 2012-04-06 23:25:00,156130.0,156150.0,156105.0,156125.0,425.0 813 | 2012-04-06 23:30:00,156110.0,156300.0,156110.0,156235.0,2693.0 814 | 2012-04-06 23:35:00,156235.0,156460.0,156235.0,156330.0,2545.0 815 | 2012-04-06 23:40:00,156345.0,156640.0,156345.0,156400.0,4050.0 816 | 2012-04-06 23:45:00,156395.0,156630.0,156310.0,156550.0,5991.0 817 | 2012-04-09 10:00:00,155695.0,156220.0,155560.0,155980.0,19796.0 818 | 2012-04-09 10:05:00,156000.0,156055.0,155880.0,156000.0,8420.0 819 | 2012-04-09 10:10:00,156015.0,156040.0,155835.0,155845.0,9636.0 820 | 2012-04-09 10:15:00,155835.0,156030.0,155825.0,155975.0,6264.0 821 | 2012-04-09 10:20:00,155970.0,156040.0,155830.0,155925.0,3528.0 822 | 2012-04-09 10:25:00,155930.0,156180.0,155830.0,156175.0,5887.0 823 | 2012-04-09 10:30:00,156165.0,156680.0,156150.0,156325.0,17701.0 824 | 2012-04-09 10:35:00,156310.0,156540.0,156235.0,156490.0,6119.0 825 | 2012-04-09 10:40:00,156495.0,156510.0,156115.0,156220.0,6023.0 826 | 2012-04-09 10:45:00,156220.0,156485.0,156040.0,156100.0,8433.0 827 | 2012-04-09 10:50:00,156100.0,156175.0,155725.0,155870.0,12430.0 828 | 2012-04-09 10:55:00,155865.0,155875.0,155145.0,155185.0,25200.0 829 | 2012-04-09 11:00:00,155185.0,155405.0,154430.0,154465.0,39707.0 830 | 2012-04-09 11:05:00,154480.0,154840.0,154325.0,154735.0,21905.0 831 | 2012-04-09 11:10:00,154740.0,154740.0,154125.0,154230.0,21675.0 832 | 2012-04-09 11:15:00,154235.0,154245.0,153550.0,153625.0,43704.0 833 | 2012-04-09 11:20:00,153620.0,153825.0,153245.0,153745.0,32991.0 834 | 2012-04-09 11:25:00,153750.0,153980.0,153680.0,153925.0,13449.0 835 | 2012-04-09 11:30:00,153925.0,154800.0,153900.0,154665.0,28823.0 836 | 2012-04-09 11:35:00,154665.0,154670.0,153935.0,154200.0,16926.0 837 | 2012-04-09 11:40:00,154215.0,154385.0,154010.0,154370.0,8218.0 838 | 2012-04-09 11:45:00,154365.0,154560.0,154100.0,154370.0,10266.0 839 | 2012-04-09 11:50:00,154370.0,154485.0,154120.0,154340.0,5750.0 840 | 2012-04-09 11:55:00,154330.0,154500.0,153835.0,153975.0,11856.0 841 | 2012-04-09 12:00:00,153960.0,154170.0,153730.0,154050.0,18357.0 842 | 2012-04-09 12:05:00,154050.0,154400.0,154000.0,154395.0,11525.0 843 | 2012-04-09 12:10:00,154395.0,154395.0,154100.0,154320.0,5598.0 844 | 2012-04-09 12:15:00,154315.0,154390.0,154035.0,154250.0,5751.0 845 | 2012-04-09 12:20:00,154270.0,154285.0,153955.0,154070.0,5550.0 846 | 2012-04-09 12:25:00,154070.0,154215.0,154025.0,154185.0,3499.0 847 | 2012-04-09 12:30:00,154205.0,154485.0,154010.0,154315.0,11036.0 848 | 2012-04-09 12:35:00,154310.0,154310.0,154055.0,154155.0,5605.0 849 | 2012-04-09 12:40:00,154170.0,154360.0,154055.0,154065.0,3929.0 850 | 2012-04-09 12:45:00,154075.0,154355.0,153920.0,154240.0,10648.0 851 | 2012-04-09 12:50:00,154230.0,154400.0,154165.0,154360.0,6143.0 852 | 2012-04-09 12:55:00,154370.0,154420.0,154170.0,154250.0,4620.0 853 | 2012-04-09 13:00:00,154250.0,154500.0,154250.0,154440.0,8487.0 854 | 2012-04-09 13:05:00,154425.0,154960.0,154400.0,154795.0,17547.0 855 | 2012-04-09 13:10:00,154785.0,154950.0,154665.0,154855.0,8964.0 856 | 2012-04-09 13:15:00,154860.0,155290.0,154845.0,155200.0,23564.0 857 | 2012-04-09 13:20:00,155180.0,155220.0,154775.0,154830.0,8764.0 858 | 2012-04-09 13:25:00,154820.0,154890.0,154550.0,154585.0,9242.0 859 | 2012-04-09 13:30:00,154580.0,154850.0,154580.0,154715.0,4566.0 860 | 2012-04-09 13:35:00,154725.0,154740.0,154140.0,154250.0,14176.0 861 | 2012-04-09 13:40:00,154250.0,154360.0,154055.0,154265.0,8679.0 862 | 2012-04-09 13:45:00,154265.0,154285.0,153800.0,154045.0,17796.0 863 | 2012-04-09 13:50:00,154050.0,154345.0,154000.0,154145.0,7228.0 864 | 2012-04-09 13:55:00,154140.0,154325.0,154110.0,154320.0,4041.0 865 | 2012-04-09 14:00:00,154320.0,154385.0,154180.0,154280.0,3066.0 866 | 2012-04-09 14:05:00,154285.0,154400.0,154100.0,154170.0,4514.0 867 | 2012-04-09 14:10:00,154175.0,154220.0,153995.0,154220.0,4928.0 868 | 2012-04-09 14:15:00,154210.0,154325.0,154050.0,154325.0,3808.0 869 | 2012-04-09 14:20:00,154320.0,154540.0,154295.0,154345.0,6350.0 870 | 2012-04-09 14:25:00,154345.0,154390.0,154000.0,154230.0,7106.0 871 | 2012-04-09 14:30:00,154210.0,154345.0,154000.0,154180.0,6440.0 872 | 2012-04-09 14:35:00,154180.0,154245.0,154110.0,154175.0,1899.0 873 | 2012-04-09 14:40:00,154175.0,154190.0,153860.0,153950.0,4292.0 874 | 2012-04-09 14:45:00,153930.0,154195.0,153870.0,154130.0,5424.0 875 | 2012-04-09 14:50:00,154120.0,154220.0,154095.0,154190.0,1683.0 876 | 2012-04-09 14:55:00,154195.0,154370.0,154070.0,154350.0,2442.0 877 | 2012-04-09 15:00:00,154345.0,154480.0,154230.0,154420.0,4857.0 878 | 2012-04-09 15:05:00,154420.0,154875.0,154405.0,154760.0,13016.0 879 | 2012-04-09 15:10:00,154740.0,155130.0,154740.0,154965.0,12635.0 880 | 2012-04-09 15:15:00,154960.0,155025.0,154710.0,155005.0,5741.0 881 | 2012-04-09 15:20:00,155005.0,155250.0,154565.0,154645.0,14086.0 882 | 2012-04-09 15:25:00,154645.0,154900.0,154525.0,154885.0,7668.0 883 | 2012-04-09 15:30:00,154875.0,155125.0,154570.0,154725.0,10403.0 884 | 2012-04-09 15:35:00,154725.0,154730.0,154245.0,154525.0,10806.0 885 | 2012-04-09 15:40:00,154525.0,154875.0,154475.0,154810.0,6388.0 886 | 2012-04-09 15:45:00,154820.0,154865.0,154595.0,154760.0,4794.0 887 | 2012-04-09 15:50:00,154780.0,154785.0,154410.0,154535.0,5743.0 888 | 2012-04-09 15:55:00,154555.0,154655.0,154460.0,154480.0,3139.0 889 | 2012-04-09 16:00:00,154470.0,154935.0,154435.0,154785.0,8322.0 890 | 2012-04-09 16:05:00,154790.0,154880.0,154645.0,154810.0,4875.0 891 | 2012-04-09 16:10:00,154800.0,154900.0,154610.0,154805.0,4771.0 892 | 2012-04-09 16:15:00,154795.0,155095.0,154615.0,154940.0,7657.0 893 | 2012-04-09 16:20:00,154940.0,154965.0,154255.0,154540.0,13231.0 894 | 2012-04-09 16:25:00,154505.0,154900.0,154400.0,154880.0,5954.0 895 | 2012-04-09 16:30:00,154870.0,155500.0,154825.0,155300.0,21624.0 896 | 2012-04-09 16:35:00,155295.0,155345.0,155035.0,155145.0,7696.0 897 | 2012-04-09 16:40:00,155145.0,155530.0,155145.0,155340.0,9100.0 898 | 2012-04-09 16:45:00,155335.0,155440.0,154550.0,154830.0,15628.0 899 | 2012-04-09 16:50:00,154835.0,155190.0,154705.0,155020.0,9726.0 900 | 2012-04-09 16:55:00,155000.0,155295.0,154965.0,155255.0,5868.0 901 | 2012-04-09 17:00:00,155255.0,155365.0,154930.0,155165.0,9980.0 902 | 2012-04-09 17:05:00,155165.0,155300.0,155030.0,155145.0,3295.0 903 | 2012-04-09 17:10:00,155145.0,155215.0,154885.0,155040.0,6125.0 904 | 2012-04-09 17:15:00,155050.0,155190.0,154800.0,154980.0,5696.0 905 | 2012-04-09 17:20:00,154990.0,155180.0,154885.0,155070.0,3799.0 906 | 2012-04-09 17:25:00,155070.0,155155.0,155005.0,155145.0,2837.0 907 | 2012-04-09 17:30:00,155145.0,155865.0,154905.0,155820.0,25006.0 908 | 2012-04-09 17:35:00,155825.0,155935.0,155565.0,155640.0,15663.0 909 | 2012-04-09 17:40:00,155630.0,155770.0,155335.0,155525.0,10601.0 910 | 2012-04-09 17:45:00,155520.0,155640.0,155300.0,155365.0,9675.0 911 | 2012-04-09 17:50:00,155345.0,155475.0,154915.0,155470.0,19554.0 912 | 2012-04-09 17:55:00,155450.0,155750.0,155265.0,155705.0,10803.0 913 | 2012-04-09 18:00:00,155705.0,156085.0,155560.0,155695.0,22584.0 914 | 2012-04-09 18:05:00,155690.0,155965.0,155605.0,155855.0,9754.0 915 | 2012-04-09 18:10:00,155875.0,155950.0,155560.0,155850.0,10275.0 916 | 2012-04-09 18:15:00,155850.0,156670.0,155845.0,156670.0,27776.0 917 | 2012-04-09 18:20:00,156670.0,157145.0,156660.0,157095.0,32402.0 918 | 2012-04-09 18:25:00,157095.0,157250.0,156875.0,157225.0,19056.0 919 | 2012-04-09 18:30:00,157230.0,157305.0,156830.0,156905.0,14608.0 920 | 2012-04-09 18:35:00,156915.0,157075.0,156785.0,156795.0,12971.0 921 | 2012-04-09 18:40:00,156795.0,157280.0,156765.0,157185.0,18872.0 922 | 2012-04-09 19:00:00,157285.0,157400.0,156950.0,157090.0,10062.0 923 | 2012-04-09 19:05:00,157080.0,157130.0,156905.0,156925.0,4139.0 924 | 2012-04-09 19:10:00,156930.0,156975.0,156650.0,156730.0,7064.0 925 | 2012-04-09 19:15:00,156715.0,156765.0,156575.0,156675.0,4234.0 926 | 2012-04-09 19:20:00,156695.0,156740.0,156405.0,156575.0,7864.0 927 | 2012-04-09 19:25:00,156565.0,156795.0,156445.0,156545.0,6691.0 928 | 2012-04-09 19:30:00,156545.0,156980.0,156470.0,156590.0,7169.0 929 | 2012-04-09 19:35:00,156590.0,156775.0,156530.0,156620.0,5123.0 930 | 2012-04-09 19:40:00,156620.0,156635.0,155005.0,155930.0,28972.0 931 | 2012-04-09 19:45:00,155915.0,156290.0,155705.0,156280.0,5583.0 932 | 2012-04-09 19:50:00,156290.0,156295.0,156020.0,156100.0,3333.0 933 | 2012-04-09 19:55:00,156095.0,156390.0,156080.0,156360.0,4112.0 934 | 2012-04-09 20:00:00,156360.0,156450.0,156180.0,156245.0,3687.0 935 | 2012-04-09 20:05:00,156250.0,156525.0,156150.0,156460.0,4894.0 936 | 2012-04-09 20:10:00,156475.0,156700.0,156450.0,156530.0,4299.0 937 | 2012-04-09 20:15:00,156530.0,156630.0,156460.0,156565.0,1945.0 938 | 2012-04-09 20:20:00,156560.0,156575.0,156430.0,156460.0,1664.0 939 | 2012-04-09 20:25:00,156480.0,156645.0,156450.0,156575.0,1835.0 940 | 2012-04-09 20:30:00,156570.0,156825.0,156480.0,156785.0,4109.0 941 | 2012-04-09 20:35:00,156795.0,156965.0,156705.0,156885.0,3792.0 942 | 2012-04-09 20:40:00,156885.0,157075.0,156775.0,156860.0,4697.0 943 | 2012-04-09 20:45:00,156850.0,156940.0,156825.0,156925.0,1250.0 944 | 2012-04-09 20:50:00,156910.0,157000.0,156780.0,156830.0,1815.0 945 | 2012-04-09 20:55:00,156845.0,156960.0,156770.0,156875.0,2623.0 946 | 2012-04-09 21:00:00,156870.0,156930.0,156770.0,156825.0,1987.0 947 | 2012-04-09 21:05:00,156825.0,156880.0,156770.0,156810.0,1223.0 948 | 2012-04-09 21:10:00,156810.0,156825.0,156605.0,156715.0,3449.0 949 | 2012-04-09 21:15:00,156720.0,156765.0,156555.0,156555.0,2417.0 950 | 2012-04-09 21:20:00,156560.0,156735.0,156465.0,156695.0,3102.0 951 | 2012-04-09 21:25:00,156690.0,156690.0,156500.0,156540.0,1822.0 952 | 2012-04-09 21:30:00,156530.0,156685.0,156505.0,156685.0,1335.0 953 | 2012-04-09 21:35:00,156675.0,156700.0,156595.0,156620.0,1016.0 954 | 2012-04-09 21:40:00,156635.0,156650.0,156575.0,156600.0,1156.0 955 | 2012-04-09 21:45:00,156585.0,156650.0,156570.0,156650.0,1208.0 956 | 2012-04-09 21:50:00,156650.0,156855.0,156505.0,156790.0,3878.0 957 | 2012-04-09 21:55:00,156800.0,157190.0,156720.0,157140.0,4501.0 958 | 2012-04-09 22:00:00,157150.0,157200.0,156810.0,156870.0,5341.0 959 | 2012-04-09 22:05:00,156855.0,157065.0,156850.0,157045.0,3259.0 960 | 2012-04-09 22:10:00,157025.0,157045.0,156815.0,156890.0,2330.0 961 | 2012-04-09 22:15:00,156900.0,157000.0,156875.0,156980.0,1766.0 962 | 2012-04-09 22:20:00,156960.0,157040.0,156885.0,156955.0,1244.0 963 | 2012-04-09 22:25:00,156960.0,157040.0,156900.0,156970.0,1836.0 964 | 2012-04-09 22:30:00,156970.0,156995.0,156900.0,156965.0,1161.0 965 | 2012-04-09 22:35:00,156975.0,157145.0,156960.0,157095.0,1903.0 966 | 2012-04-09 22:40:00,157100.0,157140.0,156985.0,157010.0,2141.0 967 | 2012-04-09 22:45:00,157005.0,157090.0,157005.0,157015.0,817.0 968 | 2012-04-09 22:50:00,157020.0,157140.0,157000.0,157090.0,1821.0 969 | 2012-04-09 22:55:00,157100.0,157140.0,157020.0,157055.0,1413.0 970 | 2012-04-09 23:00:00,157065.0,157300.0,157040.0,157125.0,4640.0 971 | 2012-04-09 23:05:00,157120.0,157165.0,156910.0,156960.0,3032.0 972 | 2012-04-09 23:10:00,156960.0,157000.0,156800.0,156860.0,2621.0 973 | 2012-04-09 23:15:00,156875.0,156920.0,156840.0,156905.0,1065.0 974 | 2012-04-09 23:20:00,156905.0,157055.0,156885.0,156965.0,1642.0 975 | 2012-04-09 23:25:00,156970.0,156985.0,156610.0,156625.0,3481.0 976 | 2012-04-09 23:30:00,156625.0,156695.0,156555.0,156615.0,2642.0 977 | 2012-04-09 23:35:00,156635.0,156715.0,156525.0,156710.0,2695.0 978 | 2012-04-09 23:40:00,156710.0,156850.0,156660.0,156830.0,2937.0 979 | 2012-04-09 23:45:00,156845.0,156870.0,156705.0,156710.0,4088.0 980 | 2012-04-10 10:00:00,156820.0,156875.0,156485.0,156570.0,16547.0 981 | 2012-04-10 10:05:00,156570.0,156590.0,156205.0,156215.0,18626.0 982 | 2012-04-10 10:10:00,156220.0,156220.0,155800.0,155810.0,24705.0 983 | 2012-04-10 10:15:00,155805.0,156120.0,155565.0,155770.0,19737.0 984 | 2012-04-10 10:20:00,155765.0,156115.0,155680.0,155985.0,9704.0 985 | 2012-04-10 10:25:00,155985.0,156305.0,155920.0,156140.0,12086.0 986 | 2012-04-10 10:30:00,156125.0,156145.0,155855.0,156020.0,11322.0 987 | 2012-04-10 10:35:00,156035.0,156285.0,155915.0,156160.0,12575.0 988 | 2012-04-10 10:40:00,156145.0,156400.0,156140.0,156260.0,10216.0 989 | 2012-04-10 10:45:00,156235.0,156460.0,156135.0,156330.0,12172.0 990 | 2012-04-10 10:50:00,156350.0,157085.0,156345.0,156770.0,27905.0 991 | 2012-04-10 10:55:00,156755.0,156815.0,156170.0,156185.0,15480.0 992 | 2012-04-10 11:00:00,156190.0,156550.0,156150.0,156405.0,17216.0 993 | 2012-04-10 11:05:00,156395.0,157190.0,156395.0,156845.0,28862.0 994 | 2012-04-10 11:10:00,156860.0,157115.0,156805.0,157040.0,14821.0 995 | 2012-04-10 11:15:00,157030.0,157340.0,156985.0,157000.0,24585.0 996 | 2012-04-10 11:20:00,157000.0,157080.0,156470.0,156470.0,22277.0 997 | 2012-04-10 11:25:00,156475.0,156520.0,156040.0,156080.0,21777.0 998 | 2012-04-10 11:30:00,156080.0,156125.0,155500.0,156090.0,40939.0 999 | 2012-04-10 11:35:00,156090.0,156310.0,155750.0,156100.0,18559.0 1000 | 2012-04-10 11:40:00,156120.0,156280.0,155950.0,156040.0,11686.0 1001 | 2012-04-10 11:45:00,156040.0,156200.0,155880.0,155995.0,11870.0 1002 | 2012-04-10 11:50:00,155995.0,156530.0,155880.0,156435.0,16057.0 1003 | 2012-04-10 11:55:00,156435.0,156580.0,156250.0,156510.0,12869.0 1004 | 2012-04-10 12:00:00,156535.0,156800.0,156500.0,156615.0,23546.0 1005 | 2012-04-10 12:05:00,156630.0,157200.0,156485.0,157020.0,36112.0 1006 | 2012-04-10 12:10:00,157020.0,157130.0,156800.0,156970.0,12352.0 1007 | 2012-04-10 12:15:00,156970.0,157845.0,156600.0,157795.0,41383.0 1008 | 2012-04-10 12:20:00,157795.0,157950.0,157630.0,157875.0,27112.0 1009 | 2012-04-10 12:25:00,157875.0,158000.0,157765.0,157965.0,14626.0 1010 | 2012-04-10 12:30:00,157965.0,158070.0,157535.0,157535.0,17677.0 1011 | 2012-04-10 12:35:00,157535.0,157885.0,157535.0,157665.0,13984.0 1012 | 2012-04-10 12:40:00,157665.0,157915.0,157555.0,157815.0,10486.0 1013 | 2012-04-10 12:45:00,157825.0,157835.0,157535.0,157555.0,7996.0 1014 | 2012-04-10 12:50:00,157555.0,157970.0,157480.0,157770.0,13065.0 1015 | 2012-04-10 12:55:00,157770.0,157935.0,157605.0,157785.0,10072.0 1016 | 2012-04-10 13:00:00,157785.0,158000.0,157665.0,157835.0,17598.0 1017 | 2012-04-10 13:05:00,157860.0,157930.0,157645.0,157690.0,5687.0 1018 | 2012-04-10 13:10:00,157705.0,157745.0,157575.0,157645.0,6377.0 1019 | 2012-04-10 13:15:00,157645.0,157645.0,157215.0,157475.0,19079.0 1020 | 2012-04-10 13:20:00,157480.0,157870.0,157270.0,157805.0,16594.0 1021 | 2012-04-10 13:25:00,157795.0,157820.0,157335.0,157350.0,11704.0 1022 | 2012-04-10 13:30:00,157350.0,157435.0,157125.0,157315.0,15076.0 1023 | 2012-04-10 13:35:00,157320.0,157380.0,157050.0,157150.0,17600.0 1024 | 2012-04-10 13:40:00,157145.0,157420.0,157130.0,157285.0,12020.0 1025 | 2012-04-10 13:45:00,157285.0,157340.0,157125.0,157300.0,8823.0 1026 | 2012-04-10 13:50:00,157305.0,157380.0,157220.0,157320.0,5383.0 1027 | 2012-04-10 13:55:00,157335.0,157415.0,157245.0,157280.0,4608.0 1028 | 2012-04-10 14:00:00,157260.0,157260.0,156460.0,156555.0,24619.0 1029 | 2012-04-10 14:05:00,156560.0,156850.0,156480.0,156690.0,14289.0 1030 | 2012-04-10 14:10:00,156695.0,156805.0,156400.0,156685.0,19457.0 1031 | 2012-04-10 14:15:00,156680.0,156695.0,156205.0,156695.0,19739.0 1032 | 2012-04-10 14:20:00,156700.0,156790.0,156550.0,156695.0,8207.0 1033 | 2012-04-10 14:25:00,156695.0,157225.0,156635.0,157145.0,13747.0 1034 | 2012-04-10 14:30:00,157130.0,157365.0,156920.0,157300.0,20368.0 1035 | 2012-04-10 14:35:00,157300.0,157700.0,157285.0,157660.0,15276.0 1036 | 2012-04-10 14:40:00,157650.0,157860.0,157600.0,157625.0,11429.0 1037 | 2012-04-10 14:45:00,157620.0,157645.0,157445.0,157530.0,10112.0 1038 | 2012-04-10 14:50:00,157520.0,157520.0,156920.0,157100.0,17637.0 1039 | 2012-04-10 14:55:00,157090.0,157120.0,156770.0,157045.0,14097.0 1040 | 2012-04-10 15:00:00,157045.0,157235.0,156810.0,157145.0,12604.0 1041 | 2012-04-10 15:05:00,157145.0,157245.0,157020.0,157200.0,5598.0 1042 | 2012-04-10 15:10:00,157200.0,157370.0,157065.0,157155.0,6130.0 1043 | 2012-04-10 15:15:00,157155.0,157235.0,156970.0,157230.0,6493.0 1044 | 2012-04-10 15:20:00,157230.0,157250.0,156955.0,157155.0,4911.0 1045 | 2012-04-10 15:25:00,157150.0,157155.0,156815.0,156945.0,7249.0 1046 | 2012-04-10 15:30:00,156950.0,156990.0,156615.0,156685.0,11089.0 1047 | 2012-04-10 15:35:00,156685.0,156945.0,156655.0,156830.0,8522.0 1048 | 2012-04-10 15:40:00,156825.0,157075.0,156775.0,157000.0,7186.0 1049 | 2012-04-10 15:45:00,156995.0,157200.0,156910.0,157085.0,7388.0 1050 | 2012-04-10 15:50:00,157090.0,157240.0,157030.0,157140.0,4718.0 -------------------------------------------------------------------------------- /examples/scoring.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | from pricelevels.cluster import RawPriceClusterLevels 4 | from pricelevels.scoring.touch_scorer import TouchScorer 5 | 6 | df = pd.read_csv('sample.txt') 7 | cl = RawPriceClusterLevels(None, merge_percent=0.25, use_maximums=True, bars_for_peak=91) 8 | cl.fit(df) 9 | levels = cl.levels 10 | scorer = TouchScorer() 11 | scorer.fit(levels, df.copy()) 12 | 13 | print(scorer.scores) 14 | -------------------------------------------------------------------------------- /examples/zig_zag_with_visualization.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | 3 | from pricelevels.cluster import ZigZagClusterLevels 4 | from pricelevels.visualization.levels_with_zigzag import plot_with_pivots 5 | 6 | df = pd.read_csv('sample.txt') 7 | 8 | zig_zag_percent = 0.8 9 | 10 | zl = ZigZagClusterLevels(peak_percent_delta=zig_zag_percent, merge_distance=None, 11 | merge_percent=0.1, min_bars_between_peaks=20, peaks='Low') 12 | 13 | zl.fit(df) 14 | 15 | plot_with_pivots(df['Close'].values, zl.levels, zig_zag_percent) # in case you want to display chart 16 | # plot_with_pivots(df['Close'].values, zl.levels, zig_zag_percent, path='image.png') # in case you want to save chart to image 17 | -------------------------------------------------------------------------------- /pricelevels/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/day0market/support_resistance/fdd4a7f0fdccf6c4007da79fd6f3879164462c3c/pricelevels/__init__.py -------------------------------------------------------------------------------- /pricelevels/_abstract.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | from zigzag import peak_valley_pivots 4 | 5 | from .exceptions import InvalidParameterException, InvalidArgumentException 6 | 7 | 8 | class BaseLevelFinder: 9 | 10 | def __init__(self, merge_distance, merge_percent=None, level_selector='median'): 11 | 12 | self._merge_distance = merge_distance 13 | self._merge_percent = merge_percent 14 | 15 | self._level_selector = level_selector 16 | 17 | self._levels = None 18 | self._validate_init_args() 19 | 20 | @property 21 | def levels(self): 22 | return self._levels 23 | 24 | def _validate_init_args(self): 25 | pass 26 | 27 | def fit(self, data): 28 | if isinstance(data, pd.DataFrame): 29 | X = data['Close'].values 30 | elif isinstance(data, np.array): 31 | X = data 32 | else: 33 | raise InvalidArgumentException( 34 | 'Only np.array and pd.DataFrame are supported in `fit` method' 35 | ) 36 | 37 | prices = self._find_potential_level_prices(X) 38 | levels = self._aggregate_prices_to_levels(prices, self._get_distance(X)) 39 | 40 | self._levels = levels 41 | 42 | def _find_potential_level_prices(self, X): 43 | raise NotImplementedError() 44 | 45 | def _get_distance(self, X): 46 | if self._merge_distance: 47 | return self._merge_distance 48 | 49 | mean_price = np.mean(X) 50 | return self._merge_percent * mean_price / 100 51 | 52 | def _aggregate_prices_to_levels(self, pivot_prices, distance): 53 | raise NotImplementedError() 54 | 55 | 56 | class BaseZigZagLevels(BaseLevelFinder): 57 | 58 | def __init__(self, peak_percent_delta, merge_distance, merge_percent=None, min_bars_between_peaks=0, peaks='All', 59 | level_selector='median'): 60 | self._peak_percent_delta = peak_percent_delta / 100 61 | self._min_bars_between_peaks = min_bars_between_peaks 62 | self._peaks = peaks 63 | super().__init__(merge_distance, merge_percent, level_selector) 64 | 65 | def _find_potential_level_prices(self, X): 66 | pivots = peak_valley_pivots(X, self._peak_percent_delta, -self._peak_percent_delta) 67 | indexes = self._get_pivot_indexes(pivots) 68 | pivot_prices = X[indexes] 69 | 70 | return pivot_prices 71 | 72 | def _get_pivot_indexes(self, pivots): 73 | if self._peaks == 'All': 74 | indexes = np.where(np.abs(pivots) == 1) 75 | elif self._peaks == 'High': 76 | indexes = np.where(pivots == 1) 77 | elif self._peaks == 'Low': 78 | indexes = np.where(pivots == -1) 79 | else: 80 | raise InvalidParameterException( 81 | 'Peaks argument should be one of: `All`, `High`, `Low`' 82 | ) 83 | 84 | return indexes if self._min_bars_between_peaks == 0 else self._filter_by_bars_between(indexes) 85 | 86 | def _filter_by_bars_between(self, indexes): 87 | indexes = np.sort(indexes).reshape(-1, 1) 88 | 89 | try: 90 | selected = [indexes[0][0]] 91 | except IndexError: 92 | return indexes 93 | 94 | pre_idx = indexes[0][0] 95 | for i in range(1, len(indexes)): 96 | if indexes[i][0] - pre_idx < self._min_bars_between_peaks: 97 | continue 98 | pre_idx = indexes[i][0] 99 | selected.append(pre_idx) 100 | 101 | return np.array(selected) 102 | -------------------------------------------------------------------------------- /pricelevels/cluster.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | from sklearn.cluster import AgglomerativeClustering 3 | 4 | from ._abstract import BaseZigZagLevels, BaseLevelFinder 5 | 6 | 7 | def _cluster_prices_to_levels(prices, distance, level_selector='mean'): 8 | clustering = AgglomerativeClustering(distance_threshold=distance, n_clusters=None) 9 | try: 10 | clustering.fit(prices.reshape(-1, 1)) 11 | except ValueError: 12 | return None 13 | 14 | df = pd.DataFrame(data=prices, columns=('price',)) 15 | df['cluster'] = clustering.labels_ 16 | df['peak_count'] = 1 17 | 18 | grouped = df.groupby('cluster').agg( 19 | { 20 | 'price': level_selector, 21 | 'peak_count': 'sum' 22 | } 23 | ).reset_index() 24 | 25 | return grouped.to_dict('records') 26 | 27 | 28 | class ZigZagClusterLevels(BaseZigZagLevels): 29 | 30 | def _aggregate_prices_to_levels(self, prices, distance): 31 | return _cluster_prices_to_levels(prices, distance, self._level_selector) 32 | 33 | 34 | class RawPriceClusterLevels(BaseLevelFinder): 35 | def __init__(self, merge_distance, merge_percent=None, level_selector='median', use_maximums=True, 36 | bars_for_peak=21): 37 | 38 | self._use_max = use_maximums 39 | self._bars_for_peak = bars_for_peak 40 | super().__init__(merge_distance, merge_percent, level_selector) 41 | 42 | def _validate_init_args(self): 43 | super()._validate_init_args() 44 | if self._bars_for_peak % 2 == 0: 45 | raise Exception('N bars to define peak should be odd number') 46 | 47 | def _find_potential_level_prices(self, X): 48 | d = pd.DataFrame(data=X, columns=('price',)) 49 | bars_to_shift = int((self._bars_for_peak - 1) / 2) 50 | 51 | if self._use_max: 52 | d['F'] = d['price'].rolling(window=self._bars_for_peak).max().shift(-bars_to_shift) 53 | else: 54 | d['F'] = d['price'].rolling(window=self._bars_for_peak).min().shift(-bars_to_shift) 55 | 56 | prices = pd.unique(d[d['F'] == d['price']]['price']) 57 | 58 | return prices 59 | 60 | def _aggregate_prices_to_levels(self, prices, distance): 61 | return _cluster_prices_to_levels(prices, distance, self._level_selector) 62 | -------------------------------------------------------------------------------- /pricelevels/exceptions.py: -------------------------------------------------------------------------------- 1 | class InvalidParameterException(Exception): 2 | pass 3 | 4 | 5 | class InvalidArgumentException(Exception): 6 | pass -------------------------------------------------------------------------------- /pricelevels/scoring/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/day0market/support_resistance/fdd4a7f0fdccf6c4007da79fd6f3879164462c3c/pricelevels/scoring/__init__.py -------------------------------------------------------------------------------- /pricelevels/scoring/abstract.py: -------------------------------------------------------------------------------- 1 | class BaseScorer: 2 | 3 | def fit(self, levels, ohlc_df): 4 | raise NotImplementedError() -------------------------------------------------------------------------------- /pricelevels/scoring/touch_scorer.py: -------------------------------------------------------------------------------- 1 | from enum import Enum, auto 2 | 3 | import numpy as np 4 | 5 | from .abstract import BaseScorer 6 | 7 | 8 | class PointEventType(Enum): 9 | CUT_BODY = auto() 10 | CUT_WICK = auto() 11 | TOUCH_DOWN_HIGHLOW = auto() 12 | TOUCH_DOWN = auto() 13 | TOUCH_UP_HIGHLOW = auto() 14 | TOUCH_UP = auto() 15 | 16 | 17 | class PointEvent: 18 | def __init__(self, event_type, timestamp, score_change): 19 | self.type = event_type 20 | self.timestamp = timestamp 21 | self.score_change = score_change 22 | 23 | 24 | class PointScore: 25 | 26 | def __init__(self, point, score, point_event_list): 27 | self.point = point 28 | self.score = score 29 | self.point_event_list = point_event_list 30 | 31 | def __str__(self): 32 | return f'| price: {self.point}: score{self.score} |' 33 | 34 | def __repr__(self): 35 | return str(self) 36 | 37 | 38 | class TouchScorer(BaseScorer): 39 | 40 | def __init__(self, min_candles_between_body_cuts=5, diff_perc_from_extreme=0.05, 41 | min_distance_between_levels=0.1, min_trend_percent=0.5, diff_perc_for_candle_close=0.05, 42 | score_for_cut_body=-2, score_for_cut_wick=-1, score_for_touch_high_low=1, score_for_touch_normal=2): 43 | 44 | self.DIFF_PERC_FOR_CANDLE_CLOSE = diff_perc_for_candle_close 45 | self.MIN_DIFF_FOR_CONSECUTIVE_CUT = min_candles_between_body_cuts 46 | self.DIFF_PERC_FROM_EXTREME = diff_perc_from_extreme 47 | self.DIFF_PERC_FOR_INTRASR_DISTANCE = min_distance_between_levels 48 | self.MIN_PERC_FOR_TREND = min_trend_percent 49 | 50 | self.score_for_cut_body = score_for_cut_body 51 | self.score_for_cut_wick = score_for_cut_wick 52 | self.score_for_touch_high_low = score_for_touch_high_low 53 | self.score_for_touch_normal = score_for_touch_normal 54 | 55 | self._scores = None 56 | 57 | def closeFromExtreme(self, key, min_value, max_value): 58 | return abs(key - min_value) < (min_value * self.DIFF_PERC_FROM_EXTREME / 100.0) or \ 59 | abs(key - max_value) < (max_value * self.DIFF_PERC_FROM_EXTREME / 100) 60 | 61 | @staticmethod 62 | def getMin(candles): 63 | return candles['Low'].min() 64 | 65 | @staticmethod 66 | def getMax(candles): 67 | return candles['High'].max() 68 | 69 | def similar(self, key, used): 70 | for value in used: 71 | if abs(key - value) <= (self.DIFF_PERC_FOR_INTRASR_DISTANCE * value / 100): 72 | return True 73 | return False 74 | 75 | def fit(self, levels, ohlc_df): 76 | scores = [] 77 | high_low_list = self._get_high_low_list(ohlc_df) 78 | 79 | for i, obj in enumerate(levels): 80 | if isinstance(obj, float): 81 | price = obj 82 | elif isinstance(obj, dict): 83 | try: 84 | price = obj['price'] 85 | except KeyError: 86 | raise Exception('`levels` supposed to be a list of floats or list of dicts with `price` key') 87 | else: 88 | raise Exception('`levels` supposed to be a list of floats or list of dicts with `price` key') 89 | 90 | score = self._get_level_score(ohlc_df, high_low_list, price) 91 | scores.append((i, price, score)) 92 | 93 | self._scores = scores 94 | 95 | @property 96 | def scores(self): 97 | return self._scores 98 | 99 | @staticmethod 100 | def _get_high_low_list(ohlc_df): 101 | rolling_lows = ohlc_df['Low'].rolling(window=3).min().shift(-1) 102 | rolling_highs = ohlc_df['High'].rolling(window=3).min().shift(-1) 103 | high_low_list = np.where(ohlc_df['Low'] == rolling_lows, True, False) 104 | high_low_list = np.where(ohlc_df['High'] == rolling_highs, True, high_low_list) 105 | 106 | return high_low_list.tolist() 107 | 108 | def _get_level_score(self, candles, high_low_marks, price): 109 | events = [] 110 | score = 0.0 111 | last_cut_pos = -10 112 | for i in range(len(candles)): 113 | candle = candles.iloc[i] 114 | # If the body of the candle cuts through the price, then deduct some score 115 | if self.cut_body(price, candle) and i - last_cut_pos > self.MIN_DIFF_FOR_CONSECUTIVE_CUT: 116 | score += self.score_for_cut_body 117 | last_cut_pos = i 118 | events.append(PointEvent(PointEventType.CUT_BODY, candle['Datetime'], self.score_for_cut_body)) 119 | # If the wick of the candle cuts through the price, then deduct some score 120 | elif self.cut_wick(price, candle) and (i - last_cut_pos > self.MIN_DIFF_FOR_CONSECUTIVE_CUT): 121 | score += self.score_for_cut_wick 122 | last_cut_pos = i 123 | events.append(PointEvent(PointEventType.CUT_WICK, candle['Datetime'], self.score_for_cut_body)) 124 | # If the if is close the high of some candle and it was in an uptrend, then add some score to this 125 | elif self.touch_high(price, candle) and self.in_up_trend(candles, price, i): 126 | high_low_value = high_low_marks[i] 127 | # If it is a high, then add some score S1 128 | if high_low_value: 129 | score += self.score_for_touch_high_low 130 | events.append( 131 | PointEvent(PointEventType.TOUCH_UP_HIGHLOW, candle['Datetime'], self.score_for_touch_high_low)) 132 | # Else add S2. S2 > S1 133 | else: 134 | score += self.score_for_touch_normal 135 | events.append(PointEvent(PointEventType.TOUCH_UP, candle['Datetime'], self.score_for_touch_normal)) 136 | 137 | # If the if is close the low of some candle and it was in an downtrend, then add some score to this 138 | elif self.touch_low(price, candle) and self.in_down_trend(candles, price, i): 139 | high_low_value = high_low_marks[i] 140 | # If it is a high, then add some score S1 141 | if high_low_value is not None and not high_low_value: 142 | score += self.score_for_touch_high_low 143 | events.append( 144 | PointEvent(PointEventType.TOUCH_DOWN, candle['Datetime'], self.score_for_touch_high_low)) 145 | # Else add S2. S2 > S1 146 | else: 147 | score += self.score_for_touch_normal 148 | events.append( 149 | PointEvent(PointEventType.TOUCH_DOWN_HIGHLOW, candle['Datetime'], self.score_for_touch_normal)) 150 | 151 | return PointScore(price, score, events) 152 | 153 | def in_down_trend(self, candles, price, start_pos): 154 | # Either move #MIN_PERC_FOR_TREND in direction of trend, or cut through the price 155 | pos = start_pos 156 | while pos >= 0: 157 | if candles['Low'].iat[pos] < price: 158 | return False 159 | if candles['Low'].iat[pos] - price > (price * self.MIN_PERC_FOR_TREND / 100): 160 | return True 161 | pos -= 1 162 | 163 | return False 164 | 165 | def in_up_trend(self, candles, price, start_pos): 166 | pos = start_pos 167 | while pos >= 0: 168 | if candles['High'].iat[pos] > price: 169 | return False 170 | if price - candles['Low'].iat[pos] > (price * self.MIN_PERC_FOR_TREND / 100): 171 | return True 172 | pos -= 1 173 | 174 | return False 175 | 176 | def touch_high(self, price, candle): 177 | high = candle['High'] 178 | ltp = candle['Close'] 179 | return high <= price and abs(high - price) < ltp * self.DIFF_PERC_FOR_CANDLE_CLOSE / 100 180 | 181 | def touch_low(self, price, candle): 182 | low = candle['Low'] 183 | ltp = candle['Close'] 184 | return low >= price and abs(low - price) < ltp * self.DIFF_PERC_FOR_CANDLE_CLOSE / 100 185 | 186 | def cut_body(self, point, candle): 187 | return max(candle['Open'], candle['Close']) > point and min(candle['Open'], candle['Close']) < point 188 | 189 | def cut_wick(self, price, candle): 190 | return not self.cut_body(price, candle) and candle['High'] > price and candle['Low'] < price 191 | -------------------------------------------------------------------------------- /pricelevels/version.py: -------------------------------------------------------------------------------- 1 | __version__ = "0.0.2" 2 | -------------------------------------------------------------------------------- /pricelevels/visualization/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/day0market/support_resistance/fdd4a7f0fdccf6c4007da79fd6f3879164462c3c/pricelevels/visualization/__init__.py -------------------------------------------------------------------------------- /pricelevels/visualization/_helpers.py: -------------------------------------------------------------------------------- 1 | def _plot_levels(where, levels, only_good=False): 2 | for l in levels: 3 | 4 | if isinstance(l, float): 5 | where.axhline(y=l, color='black', linestyle='-') 6 | elif isinstance(l, dict): 7 | if 'score' in l.keys(): 8 | if only_good and l['score'] < 0: 9 | continue 10 | color = 'red' if l['score'] < 0 else 'blue' 11 | where.axhline(y=l['price'], color=color, linestyle='-', linewidth=0.2 * abs(l['score'])) 12 | else: 13 | where.axhline(y=l['price'], color='black', linestyle='-') 14 | -------------------------------------------------------------------------------- /pricelevels/visualization/levels_on_candlestick.py: -------------------------------------------------------------------------------- 1 | import matplotlib.dates as mdates 2 | import matplotlib.pyplot as plt 3 | import pandas as pd 4 | from mpl_finance import candlestick2_ohlc 5 | 6 | from ._helpers import _plot_levels 7 | 8 | 9 | def plot_levels_on_candlestick(df, levels, only_good=False, path=None, 10 | formatter=mdates.DateFormatter('%y-%m-%d %H:%M:%S')): 11 | ohlc = df[['Datetime', 'Open', 'High', 'Low', 'Close']].copy() 12 | ohlc["Datetime"] = pd.to_datetime(ohlc['Datetime']) 13 | ohlc["Datetime"] = ohlc["Datetime"].apply(lambda x: mdates.date2num(x)) 14 | f1, ax = plt.subplots(figsize=(10, 5)) 15 | candlestick2_ohlc(ax, 16 | closes=ohlc.Close.values, 17 | opens=ohlc.Open.values, 18 | highs=ohlc.High.values, 19 | lows=ohlc.Low.values, 20 | colordown='red', 21 | colorup='green' 22 | ) 23 | 24 | _plot_levels(ax, levels, only_good) 25 | 26 | if path: 27 | plt.savefig(path) 28 | else: 29 | plt.show() 30 | plt.close() 31 | -------------------------------------------------------------------------------- /pricelevels/visualization/levels_with_zigzag.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import numpy as np 3 | from zigzag import peak_valley_pivots 4 | 5 | from ._helpers import _plot_levels 6 | 7 | 8 | def plot_with_pivots(X, levels, zigzag_percent=1, only_good=False, path=None): 9 | pivots = peak_valley_pivots(X, zigzag_percent / 100, -zigzag_percent / 100) 10 | plt.xlim(0, len(X)) 11 | plt.ylim(X.min() * 0.995, X.max() * 1.005) 12 | plt.plot(np.arange(len(X)), X, 'k-', alpha=0.9) 13 | plt.plot(np.arange(len(X))[pivots != 0], X[pivots != 0], 'k:', alpha=0.5) 14 | 15 | plt.scatter(np.arange(len(X))[pivots == 1], X[pivots == 1], color='g') 16 | plt.scatter(np.arange(len(X))[pivots == -1], X[pivots == -1], color='r') 17 | 18 | _plot_levels(plt, levels, only_good) 19 | if path: 20 | plt.savefig(path) 21 | else: 22 | plt.show() 23 | plt.close() 24 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | atomicwrites==1.3.0 2 | attrs==19.1.0 3 | colorama==0.4.1 4 | cycler==0.10.0 5 | importlib-metadata==0.19 6 | joblib==0.13.2 7 | kiwisolver==1.1.0 8 | matplotlib==3.1.1 9 | more-itertools==7.2.0 10 | mpl-finance==0.10.0 11 | numpy==1.17.0 12 | packaging==19.0 13 | pandas==0.25.0 14 | pluggy==0.12.0 15 | py==1.10.0 16 | pyparsing==2.4.1.1 17 | pytest==5.0.1 18 | pytest-runner==5.1 19 | python-dateutil==2.8.0 20 | pytz==2019.1 21 | scikit-learn==0.21.2 22 | scipy==1.3.0 23 | six==1.12.0 24 | wcwidth==0.1.7 25 | ZigZag==0.2.2 26 | zipp==0.5.2 -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [aliases] 2 | test = pytest 3 | 4 | [tool:pytest] 5 | addopts = --verbose --pyargs . 6 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from distutils.util import convert_path 2 | from os import path 3 | 4 | from setuptools import setup, find_packages 5 | 6 | here = path.abspath(path.dirname(__file__)) 7 | metadata = dict() 8 | with open(convert_path('pricelevels/version.py')) as metadata_file: 9 | exec(metadata_file.read(), metadata) 10 | 11 | setup( 12 | name='pricelevels', 13 | 14 | version=metadata['__version__'], 15 | zip_safe=False, 16 | 17 | description='Small lib to find support and resistance levels', 18 | 19 | author='Alex Hurko', 20 | author_email='alex1hurko@gmail.com', 21 | 22 | license='wtfpl', 23 | 24 | packages=find_packages(exclude=['contrib', 'docs', 'tests']), 25 | 26 | install_requires=[ 27 | 'scikit-learn==0.21.2', 28 | 'pandas==0.25.0', 29 | 'ZigZag==0.2.2', 30 | 'matplotlib==3.1.1', 31 | ], 32 | setup_requires=[ 33 | 'pytest-runner' 34 | ], 35 | tests_require=[ 36 | 'pytest' 37 | ], 38 | 39 | include_package_data=True, 40 | 41 | extras_require={ 42 | 'test': ['coverage', 'pytest'], 43 | }, 44 | ) 45 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/day0market/support_resistance/fdd4a7f0fdccf6c4007da79fd6f3879164462c3c/tests/__init__.py -------------------------------------------------------------------------------- /tests/check_vizualization.py: -------------------------------------------------------------------------------- 1 | from pricelevels.scoring.touch_scorer import TouchScorer 2 | from pricelevels.visualization.levels_with_zigzag import plot_with_pivots 3 | from tests.fixtures import get_levels_from_fixture, get_quotes_from_fixture 4 | 5 | 6 | def check_zigzag(): 7 | levels = get_levels_from_fixture() 8 | quotes = get_quotes_from_fixture().iloc[-100:] 9 | scoring = TouchScorer() 10 | scoring.fit(levels, quotes) 11 | 12 | plot_with_pivots(quotes.Close.values, levels, zigzag_percent=0.2) 13 | 14 | for level, score in zip(levels, scoring.scores): 15 | level['score'] = score[-1].score 16 | 17 | plot_with_pivots(quotes.Close.values, levels, zigzag_percent=0.2) 18 | 19 | 20 | if __name__ == '__main__': 21 | check_zigzag() 22 | -------------------------------------------------------------------------------- /tests/fixtures.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pickle 3 | 4 | import pandas as pd 5 | 6 | 7 | def get_quotes_from_fixture(): 8 | pth = os.path.join(os.path.dirname(__file__), 'fixtures', '1H.txt') 9 | df = pd.read_csv(pth) 10 | 11 | return df 12 | 13 | 14 | def get_levels_from_fixture(): 15 | pth = os.path.join(os.path.dirname(__file__), 'fixtures', 'levels.pkl') 16 | with open(pth, 'rb') as f: 17 | obj = pickle.load(f) 18 | 19 | return obj 20 | -------------------------------------------------------------------------------- /tests/fixtures/levels.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/day0market/support_resistance/fdd4a7f0fdccf6c4007da79fd6f3879164462c3c/tests/fixtures/levels.pkl -------------------------------------------------------------------------------- /tests/test_cluster_levels.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | from pricelevels.cluster import ZigZagClusterLevels 4 | from tests.fixtures import get_quotes_from_fixture 5 | 6 | 7 | def test_find_pivot_prices(): 8 | pl = ZigZagClusterLevels(0.2, 200) 9 | 10 | data = get_quotes_from_fixture() 11 | closes = data['Close'].values 12 | 13 | pivot_prices = pl._find_potential_level_prices(closes[-100:]) 14 | 15 | expected = np.array([136940, 135750, 136510, 135540, 136920, 135370, 135890, 135340, 136690, 16 | 134800, 135070, 134720, 135370, 134180, 135370, 134660, 135340, 134020]) 17 | 18 | assert (pivot_prices == expected).all() 19 | 20 | 21 | def test_price_level_from_clusters_fit(): 22 | pl = ZigZagClusterLevels(0.2, 200) 23 | 24 | data = get_quotes_from_fixture() 25 | 26 | pl.fit(data.iloc[-100:]) 27 | 28 | assert len(pl.levels) > 0 29 | assert isinstance(pl.levels, list) 30 | 31 | for i in range(1, len(pl.levels)): 32 | assert abs(pl.levels[i]['price'] - pl.levels[i - 1]['price']) > 200 33 | 34 | 35 | if __name__ == '__main__': 36 | test_find_pivot_prices() 37 | test_price_level_from_clusters_fit() 38 | -------------------------------------------------------------------------------- /tests/test_touch_scorer.py: -------------------------------------------------------------------------------- 1 | from pricelevels.scoring.touch_scorer import TouchScorer 2 | from tests.fixtures import get_quotes_from_fixture, get_levels_from_fixture 3 | 4 | 5 | def test_touch_scorer(): 6 | levels = get_levels_from_fixture() 7 | quotes = get_quotes_from_fixture() 8 | scorer = TouchScorer() 9 | scorer.fit(levels, (quotes.iloc[-100:]).copy()) 10 | 11 | assert len(levels) == len(scorer.scores) 12 | scores = scorer.scores 13 | 14 | for level, score in zip(levels, scores): 15 | assert score[1] == level['price'] 16 | 17 | 18 | if __name__ == '__main__': 19 | test_touch_scorer() 20 | -------------------------------------------------------------------------------- /zig_zag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/day0market/support_resistance/fdd4a7f0fdccf6c4007da79fd6f3879164462c3c/zig_zag.png --------------------------------------------------------------------------------