Fix historical futures plot axes (#4006)

* change start date to model

* rewrite test

* ruff

* add end date

* move futures and update test

* return if wrong dates

* fix controller test

* record mode rewrite model and view

Co-authored-by: James Maslek <jmaslek11@gmail.com>
This commit is contained in:
montezdesousa
2023-01-18 17:26:30 +00:00
committed by GitHub
parent a9a16016b1
commit 8b96fdbb29
14 changed files with 1505 additions and 8082 deletions

View File

@@ -169,6 +169,13 @@ class FuturesController(BaseController):
)
parser.add_argument(
"-e",
"--end",
dest="end",
type=valid_date,
help="Final date. Default: today",
default=datetime.now(),
)
parser.add_argument(
"--expiry",
dest="expiry",
type=valid_expiry_date,
@@ -189,6 +196,7 @@ class FuturesController(BaseController):
symbols=ns_parser.ticker.upper().split(","),
expiry=ns_parser.expiry,
start_date=ns_parser.start.strftime("%Y-%m-%d"),
end_date=ns_parser.end.strftime("%Y-%m-%d"),
raw=ns_parser.raw,
export=ns_parser.export,
)

View File

@@ -4,13 +4,14 @@ __docformat__ = "numpy"
import os
import sys
import logging
from typing import List
from datetime import datetime
from typing import List, Optional
from datetime import datetime, timedelta
import yfinance as yf
import pandas as pd
from dateutil.relativedelta import relativedelta
from openbb_terminal.rich_config import console
from openbb_terminal.decorators import log_start_end
from openbb_terminal.core.config.paths import MISCELLANEOUS_DIRECTORY
@@ -76,7 +77,12 @@ def get_search_futures(
@log_start_end(log=logger)
def get_historical_futures(symbols: List[str], expiry: str = "") -> pd.DataFrame:
def get_historical_futures(
symbols: List[str],
expiry: str = "",
start_date: Optional[str] = None,
end_date: Optional[str] = None,
) -> pd.DataFrame:
"""Get historical futures [Source: Yahoo Finance]
Parameters
@@ -85,12 +91,27 @@ def get_historical_futures(symbols: List[str], expiry: str = "") -> pd.DataFrame
List of future timeseries symbols to display
expiry: str
Future expiry date with format YYYY-MM
start_date: Optional[str]
Start date of the historical data with format YYYY-MM-DD
end_date: Optional[str]
End date of the historical data with format YYYY-MM-DD
Returns
-------
pd.DataFrame
Dictionary with sector weightings allocation
"""
if start_date is None:
start_date = (datetime.now() - timedelta(days=3 * 365)).strftime("%Y-%m-%d")
if end_date is None:
end_date = datetime.now().strftime("%Y-%m-%d")
if start_date >= end_date:
console.print("[yellow]Start date must be before end date.[/yellow]")
return pd.DataFrame()
if expiry:
symbols_with_expiry = list()
@@ -104,10 +125,22 @@ def get_historical_futures(symbols: List[str], expiry: str = "") -> pd.DataFrame
f"{symbol}{MONTHS[expiry_date.month]}{str(expiry_date.year)[-2:]}.{exchange}"
)
return yf.download(symbols_with_expiry, progress=False, period="max")
return yf.download(
symbols_with_expiry,
start=start_date,
end=end_date,
progress=False,
period="max",
ignore_tz=True,
)
df = yf.download(
[t + "=F" for t in symbols], progress=False, period="max", ignore_tz=True
[t + "=F" for t in symbols],
start=start_date,
end=end_date,
progress=False,
period="max",
ignore_tz=True,
)
if len(symbols) > 1:
df.columns = pd.MultiIndex.from_tuples(

View File

@@ -6,7 +6,6 @@ from itertools import cycle
import logging
import os
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
from openbb_terminal.config_terminal import theme
@@ -66,6 +65,7 @@ def display_historical(
symbols: List[str],
expiry: str = "",
start_date: Optional[str] = None,
end_date: Optional[str] = None,
raw: bool = False,
export: str = "",
external_axes: Optional[List[plt.Axes]] = None,
@@ -78,8 +78,10 @@ def display_historical(
List of future timeseries symbols to display
expiry: str
Future expiry date with format YYYY-MM
start_date : Optional[str]
Initial date like string (e.g., 2021-10-01)
start_date: Optional[str]
Start date of the historical data with format YYYY-MM-DD
end_date: Optional[str]
End date of the historical data with format YYYY-MM-DD
raw: bool
Display futures timeseries in raw format
export: str
@@ -88,9 +90,6 @@ def display_historical(
External axes (1 axis is expected in the list), by default None
"""
if start_date is None:
start_date = (datetime.now() - timedelta(days=3 * 365)).strftime("%Y-%m-%d")
symbols_validated = list()
for symbol in symbols:
if symbol in yfinance_model.FUTURES_DATA["Ticker"].unique().tolist():
@@ -104,10 +103,11 @@ def display_historical(
console.print("No symbol was provided.\n")
return
historicals = yfinance_model.get_historical_futures(symbols, expiry)
historicals = yfinance_model.get_historical_futures(
symbols, expiry, start_date, end_date
)
if historicals.empty:
console.print(f"No data was found for the symbols: {', '.join(symbols)}\n")
return
if raw or len(historicals) == 1:
@@ -118,7 +118,7 @@ def display_historical(
)
print_rich_table(
historicals[historicals.index > datetime.strptime(start_date, "%Y-%m-%d")],
historicals,
headers=list(historicals.columns),
show_index=True,
title="Futures timeseries",
@@ -147,12 +147,7 @@ def display_historical(
yfinance_model.FUTURES_DATA["Ticker"] == tick
]["Description"].values[0]
print_rich_table(
historicals[
historicals["Adj Close"][tick].index
> datetime.strptime(start_date, "%Y-%m-%d")
]["Adj Close"][tick]
.dropna()
.to_frame(),
historicals["Adj Close"][tick].dropna().to_frame(),
headers=[naming],
show_index=True,
title="Futures timeseries",
@@ -171,10 +166,6 @@ def display_historical(
)
ax.legend(name)
first = datetime.strptime(start_date, "%Y-%m-%d")
if historicals["Adj Close"].index[0] > first:
first = historicals["Adj Close"].index[0]
ax.set_xlim(first, historicals["Adj Close"].index[-1])
theme.style_primary_axis(ax)
make_white(ax)
@@ -187,10 +178,7 @@ def display_historical(
f"\nA single datapoint on {symbols[0]} is not enough to depict a chart, data shown below."
)
print_rich_table(
historicals[
historicals["Adj Close"].index
> datetime.strptime(start_date, "%Y-%m-%d")
],
historicals,
headers=list(historicals["Adj Close"].columns),
show_index=True,
title="Futures timeseries",
@@ -210,10 +198,6 @@ def display_historical(
else:
ax.set_title(name)
first = datetime.strptime(start_date, "%Y-%m-%d")
if historicals["Adj Close"].index[0] > first:
first = historicals["Adj Close"].index[0]
ax.set_xlim(first, historicals["Adj Close"].index[-1])
theme.style_primary_axis(ax)
make_white(ax)
@@ -224,7 +208,7 @@ def display_historical(
export,
os.path.dirname(os.path.abspath(__file__)),
"historical",
historicals[historicals.index > datetime.strptime(start_date, "%Y-%m-%d")],
historicals,
)

View File

@@ -2,8 +2,8 @@ futures
search -d Cheese
search -c agriculture
search -c agriculture -d orange
historical OJ
historical OJ -s 2022-01-01 -e 2022-01-20
historical M6B,MSF,M6E
curve OJ
curve CL --raw
exit
exit

View File

@@ -12,10 +12,10 @@ interactions:
uri: https://query2.finance.yahoo.com/v8/finance/chart/BLK=F?interval=1d&range=1d
response:
body:
string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"BLK=F","exchangeName":"CME","instrumentType":"FUTURE","firstTradeDate":1578891600,"regularMarketTime":1673284153,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":1.985,"chartPreviousClose":1.96,"priceHint":4,"currentTradingPeriod":{"pre":{"timezone":"EST","start":1673586000,"end":1673586000,"gmtoffset":-18000},"regular":{"timezone":"EST","start":1673586000,"end":1673672340,"gmtoffset":-18000},"post":{"timezone":"EST","start":1673672340,"end":1673672340,"gmtoffset":-18000}},"dataGranularity":"1d","range":"1d","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","ytd","max"]},"indicators":{"quote":[{}],"adjclose":[{}]}}],"error":null}}'
string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"BLK=F","exchangeName":"CME","instrumentType":"FUTURE","firstTradeDate":1578891600,"regularMarketTime":1673284153,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":1.985,"chartPreviousClose":1.985,"priceHint":4,"currentTradingPeriod":{"pre":{"timezone":"EST","start":1674018000,"end":1674018000,"gmtoffset":-18000},"regular":{"timezone":"EST","start":1674018000,"end":1674104340,"gmtoffset":-18000},"post":{"timezone":"EST","start":1674104340,"end":1674104340,"gmtoffset":-18000}},"dataGranularity":"1d","range":"1d","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","ytd","max"]},"indicators":{"quote":[{}],"adjclose":[{}]}}],"error":null}}'
headers:
Age:
- '0'
- '1'
Connection:
- keep-alive
Expect-CT:
@@ -33,11 +33,11 @@ interactions:
cache-control:
- public, max-age=10, stale-while-revalidate=20
content-length:
- '752'
- '753'
content-type:
- application/json;charset=utf-8
date:
- Fri, 13 Jan 2023 18:02:32 GMT
- Wed, 18 Jan 2023 16:38:58 GMT
server:
- ATS
vary:
@@ -45,13 +45,13 @@ interactions:
x-envoy-decorator-operation:
- finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*
x-envoy-upstream-service-time:
- '3'
- '4'
x-request-id:
- b371f1cb-e956-4713-bedc-35585b6baea7
- d0ca18b3-0958-48af-9c25-bed8cbbf7587
x-yahoo-request-id:
- 3u5iid1hs375o
- dbifpnphsg853
y-rid:
- 3u5iid1hs375o
- dbifpnphsg853
status:
code: 200
message: OK
@@ -69,123 +69,123 @@ interactions:
response:
body:
string: !!binary |
H4sIAAAAAAAAAO1dbXMcN3L+L/zMKIN3wFX5kNxLUpXcletO/pByuVKMRMvMSaRCUr5zVPrveRro
Zzk7M2vNkUtySeJ8pltNLLYbjUa/DB7N56M3P51cXh998/no8vTq03tQ338++nB6fSKsN58uL0/P
3/xy9M3Rd3/+7dHx0dUvH/774j3++C//8e//9HswTv+Gz5+/O/3jyYdTsH/zh9+BeXZ+dX356cPp
+fXrXz4K+/ffvf7uT/KbH88ur65fX568Pf3tyTV+Y0LKuZg4DMf4/nef3p9c/uHk8i+n16/PZD4T
k7PZm+COj959uL748cerU0j4DyYP8olrDPq/i3P5ht/9+fVImtf6C5Xqnz+cXp69OfnHP57+9b/+
8+LyL0eTL/sWv5Vve1VyOG4L8u3l6c9nF5+ufvP+4qr+KkOEjzLu387OIYI/1sWp2pydv/sWX3Hx
Vhbt4+Wp/Gcm3NV1XWjRKeRYFTg9f7vNmCn5ZSPq3z1nTNb5HXN+vLi6/tqE/PyKCTHj25Prk3+9
PDkXUc+uZceYt7LOYg78AeTPJ+/P3v5J/nyFTdZ+HeSH+XCBn67+jPWn+QU/rPwI8uOXaxn24eRv
Rz98aVaHmB8+YpbR/hGypLoxQJYheq+kCUNW0rpklQzZkhtjITeFoJOV7G2bLA9mMJZkTlFJmzwH
uDh4Jb2PWck0RA7AV3NAhshKlhh0XjME1SIbZ1RekCVxgM+OA0IadF4TQ9R5MY7y2iFnck3yOpm1
kVpYfC0HxIHy2lgcBySsipI5UgtnLOV11lBeZ0vmAJd11bPziVpgzSmky8aSm0vhZPA7ncwPiVp4
5yiv94ar7sPAVfehUAsfE7XwxVHeMFiuesCaZpKFWgSbqUUInvKGaLnqIRmuehAlSWYqFI2n6NE6
ih6doQEwkAaIKVDeCGOSWyxXHWblqqdKNdIFypuwEBwQLFc9QQidN2EKnbcasJHYlJQXW4oGwN6g
AbIbqAW0p7w5BhoAQtAA+BwNAM+jQvBBil5soOjFeRqgeEsDlGCoUEmJohecXxxQvBqgDINTA5Tq
g0r6GMiti9PI6HTVC3aRalGGklVeSJtU3mJMUAMUY70aoGBxVItSNVUShuMArDUHZJ85L/TUebGm
lNdWAzXSxcgBPqgBsE5ODVBsKhQdy0TRbUlqgAIDqQGKq9ZupB8ouvOZors6tJExqgGKrztDyUJ5
PQ5w/TZvI1fdu0AtfKTHgqTHwj702OIzPbb4EqhFsPTYEhw9FiQ9tgRPjy04cqmFnFIcUOixIOmx
UJEeW2AJKhQ9PRYnKj221HOLJD22xJSoUBrosVhoeqycuDRAsoUGgANQoRTpvNi+dF4JPTRAynTe
ArtSIRAUPTs6L8xO58UhSOcFmakQtgNFhz9RdHgDbYFtTVuUymxkoMeWEumxBXrSABCtaSGiqsfi
p1GPBWnVY0E69ViQfmha4EdUjwWZ1GNBZvVY/CjqsRERdIg6r7HqvCCdOi9Ir84LMqjzgozG6LwI
vAMHlEDRYSunA6xR5wVpDRWyPlF0nEsU3UZ1XpBJnRekRM5GuiFTdGciRXdWnRekU+cF6S0Vwsag
6NgvFN1ldV6QRZ1XEgZHhbwt1MK7RC2QSVALj1OOY3HK6VfA5amFL5lahCFRCxy0NAs+T7MExEUO
kONaSZxyHJAizQKHplkijs9IslCLiKk4AEcBSei+IQvljYgu+m0RO1EnS0OgFskZyouZKG/yhbZI
EE3nTTFSCyRXlBccygt/pC2yybQFshxqAWG4jRDHaQAEZBoAoW5QLkID5cUZT3lxLHPVC442nQxn
BYWE01NIuCyXusA722Rwi6yiG+wjFRI+ahMHBOM5oHqfkllFN/icLrXB/zK5dtClBqkJMsigqTDI
qKkwSBxiHIBEdCBZVAtjTaC8OJ4pr5XSTEkcYjqvDQO1EB04IHvKi62uS20cPFnndUZzZZA+UF6E
oUwuDjGdzCVDLZAfU14/BMoLaXTVQVhddRwwhlr4kCgvfIzyehxiHID8lfMWSy2CoW/iiKJvojil
b5rg6ZtYMUsDoDChvJIEklsCV70uk5LGUgv4OeWNPnHVYwhcdRxL1ALVGbXA9qW8aUhcdXgbVx2p
EbVIoVBIjOSqpxS56gjzXPVUPLWoW5ZkpryS53MAUnOdFxNQC8lDOSAXyis5oA4oNUY00gRqIekK
B/jCVZdUgQMQ3XVeqd/avFZCmVfSaGAVUgMrSJz8UUmnuTLIqIEVZNLAKqQGVpCo3zhv0Vw5WmM1
xoJ0GmOFZIy1sqV0XmxDVcjK+nFAYYyVw0xtYW1NghppEhWqW0vJyMAKsqgBrNRvOpkbGFgt9gjl
lfqNA5Bm6rc5l6kFjjDKC7tSXpcZWC3OO8t5S6YW3jKwIt4wsMJzGViR/g40gA+FBvCZgRWbk4EV
RwkDqw1VXCULFQqB0RQDGU0tijauupTmOpmEKh0g/q0DIDxXHQ7CVY9+oBYx0mMROOixiBv0WFl0
GiANhlokS4+10prhAE+PtZiLBkjR0AAp02NREdBjJcLSANk4GgChhQohSFP0HOi88Ew6r5XArPMi
qFEhRCyKjsqGoqMuoQFQVdAAxTsqVCKdFzuHzmtLpvNahDe1hRsGzZVBWjqvbEnLAZ7OixKHzuuw
p1Uhhxiq8sKv6LGudh+UtJoggwz0WGcCPRaBmx6L9IIeiwpdq1uxOz0WJD3WIXI7DnD0WMRa5srO
JnqspOWU12Z6rDiWGsBBIzWAq+FPSU/nBUnndS7QeZFJM1eWdJOiIwWn6Dgb1QDIHui8SEiZK8OA
dF7nI51XmjM0AEo5GsBn5soOVRRFD5bOi3BM5wVJ53XBM1eG5HReJ10mDih0XpB0XnyaubITKXQs
jh1qEdmlAskulZDMlWEURl6HUo5aJHapJMMxNEtilwpkYFaMEolZMdJ1Ry0SvInzFpeUmw2zYtm9
1ALVDrXI3tIsKOWoEDyaoiP9pego5WgWnKM0SzFMm7G6TJBRMjBBdiibaRYcDzQLcmkqhLJORcdP
JsjYL17N4gcceFHJwKwY25BZsUeOrQbwkkpzssJc2SMzVHmRryaV1yNXyxzgvRpAOveqhUcCMXBA
TokDSlQDIEQENQDWkRm0xBNLboiZ3Bh01bHVmTZ7MaAnyQQZaV9yHGCDrroEJ2rhInNlkMyVUYdp
Mxlk1mYyyMIMGjGNuTJI5soeg7nqqN+46qjfuOo+M1f2vjBXBplpgDAkGiAYZtCYgAkyyMJVR9HG
VUdlRC2k6tUBUh9kkoWrjo3BVY+OGTQyYebKHvUb5cUy0gA4qWkA1G/UAtUDhUQWylVPbE0Jmbnq
ia0pkJmR1+O446pndqmELNQis0sF0jPySs7AVc/sUglZqEVmlypipRl5vZRyOqCwSwWSXSohmUEj
7DLy+pIYeX1hlwoku1RRkhWVN6CUG8hlawokW1Ox2VLJzHAboLDKGwxbUyDZmqrtWNUCVSHDbZCq
jgPYmgLJ1hRItqZkhzDcBqnqdIBlawokW1Mg2ZoCGRl5Q61MlWRrCiRbUzE4tqZAWkbegFBG0aXA
4wB2qUCySwUyM/IiyjDyBr/pUgW/6VIFv+lSYfUZeYMUeByw6VIFv+lS4fRglwqLx8gbpMDTAWHT
pQph06UKYdOlgj8z8iKcMPKGsOlSwUvZpQpx06WSNJWiS0DggE2XKsRNlyrETZcKX8bIC5KRN6RN
l0pyXtoibbpUIQVGXpCMvPBBRt6QNl0qKMEuFeIC/VgeJlF0HGy0RXb0Y3n2QoWQqFH0nOnH8piA
tpB+lc6LWo8KYetQ9OLpx9JNpi1KoB9L+5YKYRlUdGlbqujSaVRbSJ9QbSFdPlUIZz39WCoCywGJ
fiztpMB5M/NqnKN0aWmCqOjSt3Ac4OnSUl6oQsjs6dJSIFsOKHRpSSnUFlJPUiEEaYoufTsOCHRp
KWfUFlKBUCFb6NKSWFN0Z+jSkt+qLSQlpUI1I1Ay0qURGOjSkvsUzluYYkuKTtERmyk6Iitt4T1d
WkIZFUKqR9F9pkvjJKVLy0lKW+Dwo0I4KSg6fJqiwyNpixDp0rHmd0oWurTYm6JHQ5eWtaYtJLvX
eWOgS0sBSNGlRcoBmS4tT4+pUDJ0aexTurScnbRF8nRpqSapEKp1aoF4Ti3SprmFL2VzK+ZNc0uy
IWoBh6YWedPcinnT3Ip509zCUcJkGiSTaSQ+bG5JRUuzlE1zC0ZjMg2SyTQOQTaewWPjGUcUU2wU
GkymkaOz8SzpeuEAz8az9FtUIczEZDoNhck0SDaeaw9Q5zWGKXbC4kQOCEymU32MomRkDxpJM1Ns
yMpkWkoGim4te9Ag2YNGWGWKnWxkMi31PkWHjpkDMnvQUn9QIWnY6gAUgxQdBZzjAF970D/IVZq3
Z29Ori8ur+S6xv9+upBbM99/PnrT7qV8LxdT6rmDFNTIhrLHYLX+XJBnjQMMLyxfk2uLRGmALkFY
sbIG6UMmbGZhSfKEr/ZJ2qmDE1apLAmNKJCSAQupkrDgsNi3QWbHgVkZRZ5TYMsJK1a5pPRDHp1i
/Vw9IuF6iBS5PDTHVKElZnqJ03diWV9Z1tXmi30kVrMC6rWEVY7LllnDaZEryA72oezg1D3ljK/l
td/FCjJ1wv9RYRRhpVQFT7HeYbH3y8lVM2k6O+nuHgyr1MPDwk5IJq3dMwvnSv1GibuuelpNBWEa
xGLkKtXIsVXXSIlwuuQoYoV2AIys/KAcX6Y7Wq4HTMS+PctOd8dtOTU3kioDVaiT1bX1REQERJxE
SZeEFarVvZMDXa4rLrNai2ljhDZXXRccV0H6wOtZtUkwiCkTtJdzGcFmugo4sevWkPa6JADCMlNL
1OeHo0ggrHlQca76tlQlKVkfd7BsnV0udziE3bz8hXPO0vfNWbYmRHLHBuGsuB0sk6bnEpLh7aPS
vmqDEJhQueLYcpVVGzpITYz0Nyort7nkGQcycXBsW1G55YdKusTKqrMjL0BZj28QlqmjHGrzAZMF
YU0W+dacUM/vml3iX+HUJ8qSv0naUXZw6mGNQ9k65xcZ7ZlSqX2x7O7AaTkEEh+L4hycIG3JIk/8
UFfaXDllFGBkDev9JLlnOSBjSkkWTFpX+J88GMcyRpkptubPjR+AlWt4lgWHrWSq2NJmK6knfHY1
x09EirXNCYEkqU/21pw03x77ZbmtgLOLVZcJf4DFTNnBiqVuW2mqOFRT4gDVC1H8YuVRtAqnfirn
EOSGlt0nJ23lOHvlzD371qz5Gs04Lf/mKRiXOaYaKdcqOJTYkry6K0exvTQ3NTh/UkI1t4PlxxLY
3FKxup1HNUC7enSzxZdTuHam54JjRh7hHAzL1yMte2n3G7OWE8bLHmT/ern7hn1XnFzpK2Iu32LB
TXGE82iYnmu35VRPlBurCI3iY5O8RzjBVB+DokEaE/WA3E7pXjpnGi62S1fTBm0nFYucNM5O4jKn
ZXfIobzcyt3BqSwjV+oh6GqOnSQTt+SEuhyb2vb80/v3C+xFTrvfJVe7gtxKlIJi64Sze2dN9/u+
WfUUxRE6yJ33h+bMK4HU1sAm6eSHUEs2OzlepEBriox6Cq1/xGG1bNzKpEyps1eLyhNJ5Py1gtgr
K/w9P7ZTU7uD5cy29wirDhqXommSju+oYVey6vkhz1MRDp0sW2z7ZlTW3SOnNdMNcl3p+FVOjc7M
2qpyzTNdqfei0zInzbKBmMJ2OFnNmtQx4IyP1FqDSTN4O3ouccZ581CWWc2WW0XgPlmxdb5CAxB5
v3fWbGVaYW0GeYxs6uZfyWpzwefluYkT4Zd6swusacG6zJrV0bk9hRrLkG0rWEe92XvuRx0Iq+6c
gCrJJ5fz3VjVQpjaOLkqVhd61mQQvJ/sVDhwkgveO8xhtsP5+h1RXVq7tqYpPQ6GrQFaI4Yf5Els
qbMvsRY+uMSqzJSHiLA7pNWsPExy3juxZmsaW90kd5tw5NRe2FJvsz6gwroL6ivWgHJrVmyFMsO8
X89q6ZDxbggoodMhsxYiWwvT8qASGUxlOT+yT8zrWb5+o6QAXi6S3YlVIQGjlgRYdnv73o21FXDi
nVjrln6+e2/PWorqt+DccwRfG+dnLYx1OcrDcZYKgHWsduIm4wT/MITO+nVWu4SI3ZkEfZnsYkRs
F2wGAbsISqgGkFaROOcQCOtTkgbr3yo1lljzMP24nCX9F1ir0sZDYLUSsvX5vLS+MgKNsLafrtV8
ZV2hubtOrQ/ikBfKtZR876zajqk/RIAWYEaxcIGVG/7LSttAsJE7WPNHa3tlLdwjmTtP67vJlSmT
28cWOC2DwskNyxi3f5Ysn2QlAYHP3okVZ7nkXVh1sYLNcndRWr1DfQqYEbrkWtxQWcP20zHzqrSE
E/mu3NGPtdfdFnWcJJTWNBmnpS+WVc0ofxeNEziVLH2qqXcSULypK7jEaW43SvVWsoofnUc1eL8E
FlKdup3Zj8LWLZMouWdW2/Q3veOXy5o9k7DTjqk8Zt/B3ytLtsXNU7iVnH1ddFh1GUKWavx4+rac
cVBOazlpcjfIvpoWp/bVtIxeGvNyOfrsatVHt9sKfj2r1Ihh5a8gktNMWDUKjy8fuO1HisKZPIO+
iwQrWFyJW0/YehnjqyENyiN/V4SAxkzl1HN3dO/F2kmElZsJdXbjTSzOmMpqjrc5klTYBsLFEYbk
Uf5yj7uxasi+aVSuZrW/Dk2gYUicXNjFGpu3nqp3YJmp3x8AS1KjKur4QeMSa3onYvkq8RNiNW8Y
NQIekpPbVh4n67mVhCkJdM9Ev8TSAnHN0GXWbfPZYmbPpNaytp32+bGQerVbU+NbobdnuTA946S6
lphi5W9KjPZu0z871valxTZqe/fukVNTwHFWNrT0buPZi5zYcgI2gB+Sc9NWWvd5Y6YJzT3e3Lwd
pyZVCzdMJw9NhTN5DHQnVm4HNi/hL7CY3qwYeg8TDvP7gMPWDZKa3Jn2LGKUnq7i1L+7bJBYhZ2f
fzg+uvh4ev7UgGQLYKiOJHtmSLL5raKOJOtIsrVIsmmidaBIsvmDTjt/PLQSSTbbxHcAkrUrjM4F
+esCDgdINrtNtYQkmz0Dfgwk2ZzVwvwo4VxCki10XqZXqjuSrCPJOpKsI8k6kqwjybbynuOOJFvB
2ReSbNYb6kiyjiTrSLIDRZJV7Ud19Gpw2eyDLwxJ1uAXoyumHUnWkWQ3zdmFG9cHgv7aK2scKu4I
LnsqSLLtO/jC6UCyDiRbwepAskcEklUPlb8717p8EECyQ4CWPWscWYeWdRxZx5Gtw5Et9BQ6jqzj
yJ4xjmyYxvUDgXAdBKvjyB4JR7Z1btXbmB1H1nFkHUf26ziydll9bODDgnJ1IFkHkj1tIFnNvOTd
yvLWGbcTWzY2bweSdSDZvoBkCznjgQPJKmf7gnvdJB1I1oFkHUjWgWQdSPaCgGTvL/7acWQdR3Zo
OLL+RrKOI+tvJHusN5I9ZSDZwhfOWfPItlcg2ULPYBWQbOmVZPVzHUjWgWQdSNaBZHsGkg3TY7cD
yTqQ7FlzniSQbNrb6UCyDiR75kCyBYhYfyVZfyXZvq+Y7xE1lqftsOePIzsUoNf9sp7yG8nmhu0w
sg4j6zCye4eRLazNy3sf2R5hZAupSIeRdRhZh5F1GFmHkXUYWYeRdRhZh5EdHKu/jqzDyDqMrL+O
rKPIDhJFNkODLXFeBIbMT0JXx5B1DNkDYshWvoxscve+v4zs8FgdQ9YxZB1D9nCcjiE7AAzZzxfv
P304FRjZsTketv6xkz+3f8z4D2H2a7v1QbM0w6/9M/uAPaZgnkMmI4Tv5IONqB9KdZSrnx6UbSaf
36He5r/T8cvjlpZLqLgZZTaSTz8/nSOvWiK7Y4a6ye682jsGmeMElcJmyFT09ue49Zv55lj+VFUk
HQ8716lK1v7j6qyGQoT6Ncu2GCknw/LitFsq3ohsy/hrLb/OjscPOyTeTOoWVmDXP8ubcdfn7ZYG
s00w2Qnbs9ysg12Q2VMQu2PfL3zm1r/8mvpf+d6v/H6yCvPhmwHN141Z/mCVz31dl6A+/2sj5N/Z
9OsW2t1iiWba6neHY+6KmU47T5SlTYX48dPZu5+eGgj5IRHHzw6D3Jb8ayX5Y2OQ+7ssOwa5v8vy
kd5lOVuEw4Agz75wAYE8eRb3KK+yzNshQzjbF/eXAchtg2AfJAOL11H1+kER5OwAje7wbG6OE+74
444/7vjjx8Ifz5HE/UWWHX+8b/zxAiz20DDBTxF/PF/W/iLLjj++Pafjj/uLLKec/eGPG7rPWdSZ
plQQTH+R5fGe8cf9RZa7XmSZBzvdfwcCLe4vstyFQL493nhptar5nw0EuV05GqNl9opAPgggcUcg
9xdZPsnXVr40CPIh4HqfEKtDkF8wBHldnfkSIcgLG/6hIcgLYNyOQb4zBjlMs4QDgf8eBKtjkB8J
g7x1cPVXWXYM8jKnY5D7qyw7CLm/yrK/yrLDkF8CDLm/yvK5sDoMucOQOwz54TgdhvzoMOQvPxwf
nbz9nzfvL64Eivx5/IeOLHspyLJVYLNHR5b1t1t2ZFl/u+Vjvd3yCUPLFr5vzrpnaNkCuGQVtmzp
5Zb7wpb1l1t2cFkHlx0QuOwAXm7ZwWXPHlx2cPCuDi7r4LIOLptyOrjsPsFldS/1l1v2l1t2cNle
wWWHgv66X9ZTfrvlHsFl/f2W/f2WK1gdXfaI6LLp7u3oso4u66yOLuvoso4u6y+47OCyg8F1HQSr
g8seCVy2RyRZB5d1cNk+OE8AXNZfcNmxZR1bdo/YsiUgWceWdWzZYb3i8oCwZXVH9FdcdmzZYbE6
tqxjyzq27KGxZV8EXnZ6eXlxefSNiPnly/8DXi5PV4Q5AQA=
H4sIAAAAAAAAAO1dbXMcN3L+L/zMKIN3wFX5kNxLUpXcletO/pByuVKMRNvMSaRCUr5zXPrveRro
ZzU7M2vNLZfkkoR9R7eaWGw3Go1+GTyaX07e/Hh2fXvy1S8n1+c3H9+B+vaXk/fnt2fCevPx+vr8
8s3PJ1+dfPPn356cntz8/P6/r97hj//yH//+T78H4/xv+PzlD+d/PHt/DvZv/vA7MC8ub26vP74/
v7x9/fMHYf/+m9ff/El+8/3F9c3t6+uzt+e/PbvFb0xIORcTh+EU3//Dx3dn1384u/7L+e3rC5nP
xORs9ia405Mf3t9eff/9zTkk/AeTB/nELQb939WlfMPv/vx6JM1r/YVK9c/vz68v3pz94x/P//pf
/3l1/ZeTyZd9jd/Kt70qOZy2Bfn6+vyni6uPN795d3VTf5VLOj35IAP/7eISMvhTXZ2qzsXlD1/j
O67eyqp9uD6X/8yku7mtKw2l/KAanF++3WbMtPy0kfXvntMM3vkdc364urn90oT8/IoJMePbs9uz
f70+uxRRL25ly5i3stBiD/wB5E9n7y7e/kn+fINd1n4d5Id5f4Wfrv6M9af5GT+s/Ajy4+dbGfb+
7G8n331qZoeY7z9gFmygErKFEKdCxliskimEqGT2dqhkHsxgLMmcopIWq6eki4NX0vuYlUxD5IBU
LAdkbF4lSww6rxmC0XmNM0MmWRIH+Ow4IKRB5zUxRJ0X4yivHXIm1ySvk1kbqYXF13JAHCivjcVx
QMKqKJkjtXDGUl5nDeV1tmQOcNnrvM4nauGSpZAuG0tuLoWTwYN0Mj8kauGdo7zeG666DwNX3YdC
LXxM1MIXR3nDYLnqAWuaSRZqEWymFiF4yhui5aqHZLjqQZQkmalQNJ6iR+soenSGBsBAGiCmQHkj
jElusVx1mJWrnirVSBcob8JCcECwXPUEIXTehCl03mrARmJTUl5sKRoAe4MGyG6gFtCe8uYYaAAI
QQPgczQAzmAqhNOYohcbKHpxngYo3tIAJRgqVFKi6CVHil6KVwOUYXBqgFJ9UEkfA7l1cRoZna56
wS5SLcpQssoLaZPKW4wJaoBirFcDFCyOalGqpkrCcByAteaA7DPnhZ46L9aU8tpqoEa6GDnABzUA
1smpAYpNhaJjmSi6LUkNUGAgNUBx1dqN9ANFdz5TdFeHNjJGNUDxdWcoWSivx0ms3+Zt5Kp7F6iF
j/RYkPRY2IceW3ymxxZfArUIlh5bgqPHgqTHluDpsQVHLrWQU4oDCj0WJD0WKtJjCyxBhaKnx+JE
pceWem6RpMeWmBIVSgM9FgtNj5UTlwZIttAAcAAqlCKdF9uXzltSpvOCpPMW2JUKgaDo2dF5YXY6
Lw5BOi/ITIWwHSg6/ImiwxtoC2xr2qJUZiMDPbaUSI8t0JMGgGhNCxFVPRY/jXosSKseC9Kpx4JE
xhCVjOqxIJN6LMisHosfRT02IoIOUec1Vp0XpFPnBenVeUEGdV6Q0RidF4F34IASKDps5XSANeq8
IK2hQtYnio5ziaLbqM4LMqnzgpTI2Ug3ZIruTKTozqrzgnTqvCC9pULYGBQd+4Wiu6zOC7Ko80rC
4KiQt4VaeJeoBTIJauFxynEsTjn9Crg8tfAlU4swJGqBg5ZmwedploC4yAFyXCuJU44DUqRZ4NA0
S8TxGUkWahExFQfgKCAJ3TdkobwR0UW/LWIn6mRpCNQiOUN5MRPlTb7QFgmi6bwpRmqB5IrygkN5
4Y+0RTaZtkCWQy0gDLcR4jgNgIBMAyDUDcpFaKC8OOMpL45lrnrB0aaT4aygkHB6CgmX5VIXeGeb
DG6RVXSDfaRCwkdt4oBgPAdU71Myq+gGn9OlNvgnk2sHXWqQRUVH0AsDB0SXOACHGAcgER1IFtXC
WBMoL45nymulyFISh5jOa8NALUQHDsie8mKr61IbB0/WeZ3RXBmkD5QXYSiTi0NMJ3PJUAvkx5TX
D4HyQhpddRBWVx0HjKEWPiTKCx+jvB6HGAcgf+W8xVKLYOibOKLomygz6ZsmePomVszSAKhWKa8k
geSWwFWvy6SksdQCfk55o09c9RgCVx3HErVAxUstsH0pbxoSVx3exlVHakQtUigUEiO56ilFrjrC
PFc9FU8t6pYlmSmv5PkcgNRc58UE1ELyUA7IhfJKDqgDSo0RjTSBWki6wgG+cNUlVeAARHedV+q3
Nq+VUOaVNBpYhdTAChInf1TSaa4MMmpgBZk0sAqpgRUk6jfOWzRXjtZYjbEgncZYIRljrWwpnRfb
UBWysn4cUBhj5TBTW1hbk6BGmkSF6tZSMjKwgixqACv1m07mBgZWiz1CeaV+4wCkmfptzmVqgSOM
8sKulNdlBlaL885y3pKphbcMrIg3DKzwXAZWpL8DDeBDoQF8ZmDF5mRgxVHCwGpDFVfJQoVCYDTF
QEZTi6KNqy6luU4moUoHiH/rAAjPVYeDcNWjH6hFjPRYBA56LOIGPVYWnQZIg6EWydJjscvosRYG
pAEwFw2QoqEBUqbHoiKgx0qEpQGycTQAQgsVQpCm6DnQeeGZdF4rgVnnRVCjQohYFB2VDUVHXUID
oKqgAYp3VKhEOi92Dp3XlkzntQhvags3DJorg7R0XtmSlgM8nRclDp3XYU+rQg4xVOWFX9FjXe0+
KGk1QQYZ6LHOBHosAjc9FukFPRYVula3Ynd6LEh6rEPkdhzg6LGItcyVnU30WEnLKa/N9FhxLDWA
g0ZqAFfDn5KezguSzutQv6kBkEkzV5Z0k6IjBafoOBvVAMge6LxISJkrw4B0XucjnVeaMzQASjka
wGfmyg5VFEUPls6LcEznBUnndcEzV4bkdF4nXSYOKHRekHRefJq5shMpdGz0jLwusksFkl0qIZkr
wyiMvA6lHLVI7FJJhmNolsQuFcjArBglErNipOuOWiR4E+ctLik3G2bFsnupBaodapG9pVlQylEh
eDRFR/pL0VHK0Sw4R2mWYpg2Y3WZIKNkYILsUDbTLDgeaBbk0lQIZZ2Kjp9MkLFfvJrFDzjwopKB
WTG2IbNijxxbDeAlleZkhbmyR2ao8iJfTSqvR66WOcB7NYD04FULjwRi4ICcEgeUqAZAiAhqAKwj
M2iJJ5bcEDO5MeiqY6szbfZiQE+SCTLSvuQ4wAZddQlO1MJF5sogmSujDkuZA3C0cd7CDBoxjbky
SObKHoO56qjfuOqo37jqPjNX9r4wVwaZaYAwJBogGGbQmIAJMsjCVUfRxlVHZUQtpOrVAVIfZJKF
q46NwVWPjhk0MmHmyh71G+XFMtIAOKlpANRv1ALVA4VEFspVT2xNCZm56omtKZCZkdfjuOOqZ3ap
hCzUIrNLBdIz8krOwFXP7FIJWahFZpcqYqUZeb2UcjqgsEsFkl0qIZlBI+wy8vqSGHl9YZcKJLtU
UZIVlTeglBvIZWsKJFtTsdlSycxwG6CwyhsMW1Mg2Zqq7VjVAlUhw22Qqo4D2JoCydYUSLamZIcw
3Aap6nSAZWsKJFtTINmaAhkZeUOtTJVkawokW1MxOLamQFpG3oBQRtGlwOMAdqlAsksFMjPyIsow
8ga/6VIFv+lSBb/pUmH1GXmDFHgcsOlSBb/pUuH0YJcKi8fIG6TA0wFh06UKYdOlCmHTpYI/M/Ii
nDDyhrDpUsFL2aUKcdOlkjSVoktA4IBNlyrETZcqxE2XCl/GyAuSkTekTZdKcl7aIm26VCEFRl6Q
jLzwQUbekDZdKijBLhXiAv1YHiZRdBxstEV29GN59kKFkKhR9Jzpx/KYgLaQfpXOi1qPCmHrUPTi
6cfSTaYtSqAfS/uWCmEZVHRpW6ro0mlUW0ifUG0hXT5VCGc9/VgqAssBiX4s7aTAeTPzapyjdGlp
gqjo0rdwHODp0lJeqELI7OnSUiBbDih0aUkp1BZST1IhBGmKLn07Dgh0aSln1BZSgVAhW+jSklhT
dGfo0pLfqi0kJaVCNSNQMtKlERjo0pL7FM5bmGJLik7REZspOiIrbeE9XVpCGRVCqkfRfaZL4ySl
S8tJSlvg8KNCOCkoOnyaosMjaYsQ6dKx5ndKFrq02JuiR0OXlrWmLSS713ljoEtLAUjRpUXKAZku
LU+PqVAydGnsU7q0nJ20RfJ0aakmqRCqdWqBeE4t0qa5hS9lcyvmTXNLsiFqAYemFnnT3Ip509yK
edPcwlHCZBokk2kkPmxuIcGuz3wrGZlBg2QGjZOP3Wbw2G3GucS8GtUFM2gk5uw2S45eOMCz2yxN
FtUCMzGDTkNhBg2S3eba+NN5jWFenbAikQMCM+hUn50oGdl4RqbMvBqyMoOWOoGiW8vGM0g2nhFL
mVcnG5lBS5FP0aFj5oDMxrMUHVRIurQ6ABUgRUfV5jjAs/EsHQMqhM1J0VETiOjfyVWZtxdvzm6v
rm/kNsb/frySWzHf/nLypt07+VYunsAcMAgiGuqaZE7NK2Q4woKfYbsFLxyEbWEUebyAnSKsWKsg
qdiQ/qZYP1dPNngMDvhcHppjqtAS6ryE1zuxrK8s62rPxD4Sq1kBZVbCKsdly6zhtIATZA/6UHZw
6kHojK9Vsd/FCjJ1wv9QGBRhpVQFT7FePbH3y8lVM+kVO2nKHg2rVPe3sBNyQGsPzMLJUL9RwqWr
nlYzOJgGIRQpRjVybEUxMhmcDzmKWMgQJ1Z+UI4v0x0tT/UnYu/PstPdsS+npjRSHKB4dLK6tp6I
iGHFyiWBJKxQrY5aHxLIfcFlVusMbYzQ5qrrguMqSPt2PavW9oOYEuf5IOcywsV0FXBi160hXXGJ
28IyU0vUx37yjzxISl4kdU1Qb4uR5MJWVvVtKSZSsj7uYNk6u9zJcAicefkL55yl75uzbM1j5GqM
R7HldrBMmp5LyGG3j0r7qg1CYELBiWPLVVbtwyC5MNKWqKzc5pJHE0igwbFtReVyHgrgEiurzo7I
jmoc3yAsU0c5lNQDJgvCmizy3pxQz++aFOL/wqkPgiXtksSh7ODUwxqHsnXOLzLao6BS21nZ3YFT
3SMidbGoqcEJ0k0s8qAO5aDNlVNGAUbWsF4rkuuRA3KelGTBpOOEf+R5NpYxykyx9Ww++wFYuYZn
WXDYSqaKLdu1kjzCZ1dz/ESkWFMnCCS5eLJ7c9J8exyW5bYCzi5WXSb8ARYzZQcrlrptpRfiUASJ
A1QvRM2KlUetKZz6qZxDkItV9pCctJXjHJQz9+y9WfM1mnHaY22egnGZY6qRci1eQ4ktyau7chTb
S3NTg/MnJRRhO1h+LIHNLRWr21muCWIztuxse4svp3DtTM8Fx4w8eTkalq9HWvbSpTdmLSeMlz3I
/vVyZQ37rji5iVfEXL7FAptx1qBUk8MnDNNzbV9O9US5aIrQKD42yXuEE0z1MSgapJ9QD8jtlO6l
c6bhomWTjIqmDdpOKhY5aZydxGVOy+6QQ3m5TLuDU1lGbsJD0NUcO0km9uSEuhyb2vby47t3C+xF
TruWJTeyglwmlIJi64SzB2dN9/uhWfUUxRE6yFX1h+bMK4HU1sAmacCHUEs2OzlepEBriox6Cq0D
xGG1bNzKpEyps1eLyoNE5Py1gjgoK/w9P7ZTU7uD5cy29wirDhqXommSju+oYVey6vkhj0ERDp0s
W2z7ZlTW3SOn9cANcl3p2VVOjc7M2qpyzTNdqdeZ0zInzbKBmMJ2OFnNmtQx4IyP1FqDSQ93O3ou
ccZ581CWWc2WW0XgIVmxdb5Cw/14f3DWbGVaYW0Gefpr6uZfyWpzweflcYcT4fXK4zgvW2JNC9Zl
1qyOzu3h0ViGbFvBOurN3nM/6khYdecEVEk+uZzvxqoWwtTGyQ2vutCzJoPA9GSnwoGT3MveYQ6z
Hc7X74jq0tq1NU3pcTBsDdAaMfwgD1BLnX2JtfDBJVZlpjxEhN0hrWblYZLz3ok1W9PY6ia5koQj
p/bClnqb9RET1l3AWrEGlL1ZsRXKDPN+PaulQ8a7IaCETsfMWohsLUzL80VkMJXl/Mg+Ma9n+fqN
kgJ4uf91J1a9yT9qSYBlt7fv3VhbASfeibVu6ee7d3/WUlTfg3PPEXxtnJ+1MNblKA/HWSoA1rHa
iZuME9jCEDrr11nt7iB2ZxLQZLKLEbHdixkEoyLgnhpAWkXinEMgrE9JGhp/q9RYYs3D9ONylvRf
YK1KG4+B1UrI1ufz0vrKCDTC2n66VvOVdYXm7jq1PohDXigXS/K9s2o7pv4QAVqAGcXCBVZusC0r
bQOBNO5gzR+tHZQ1f9624Dyt7yY3nUxuH1vgtAwKJzcsY9zhWbJ8kpUEBD57J1ac5ZJ3YdXFCjbL
lUNp9Q71KWBG6JLbbENlDdtPx8yr0hJO5LtytT7WXndb1HGSUFrTZJyWvlhWNWOyzjtBQcnSp5p6
J8Gym7qCS5zmdqNUbyWr+NF5VIP3S2Ah1anbmf0obN0yiZIHZrVN/7l3/HJZs2cSdtoxlcfsO/gH
Zcm2+PwUbiXnUBcdVl2GkKUaP57elzMOymktJ03uBtlX0+LUvpqW0UtjXi5Hn12t+uh2W8GvZ5Ua
Maz8zUFymgmrRuHx5QO3/UhROJNn0HeRYAWLK7H3hK2XMb4a0hA48lc8CNbLVE49d0f3XqydRFi5
mVBnN97E4oyprOZ4myNJhW3YWRxhSB7l7+S4G6uG7M+NytWs9reYCaILiZMLu1hj89ZT9Q4sM/X7
I2BJalRFHT9oXGJN70QsXyV+QqzmDaNGwENyctvK42Q9t5IwJUHcmeiXWFogrhm6zNo3ny1m9kxq
LWvbaZ8fC6lXuzU1vhW6P8uF6Rkn1bXEFCt/wWG0d5v+2bG2Ly22Udu794CcmgKOs7KhpXcbz17k
xJYTsAH8kBwNuWs+asw0l7nHS5v7cWo+tXC5dPK8VDiTJ0B3YuV2VvP+/QKLmc2Kofcw4TC/Cjhs
XR6peZ1pjyFGmekqTv3bxgYJU9j0eYFDUbfZ352eXH04vzw4GmwB0dThYM8MDja/GtThYB0OthYO
Ns2WjhQONn9aaefPeFbCwWab+A5osHYP0bkgUP3jQYPNrkQtwcFmD3IfAw42Z7WAPcoal+BgC+2T
6b3oDgfrcLAOB+twsA4H63CwrbzntMPBVnAOBQebNXg6HKzDwToc7EjhYFX7UR29GiE2++ALg4M1
DMXonmiHg3U42Ofm7MK16SOBcB2UNQ4Vd0SIPRU42PZFeuF0NFhHg61gdTTYI6LBqofK31trXT4K
NNgx4MOeNRis48M6GKyDwdaBwRZ6Ch0M1sFgzxgMNkzj+pHgsI6C1cFgjwQG2zq36pXKDgbrYLAO
Bvt1MFi7cT428HHhsToarKPBnjYarGZe8l5jeeOL2wkQG5u3o8E6GuxQaLCFnPHI0WCVs33BvW6S
jgbraLCOButosI4G62iwLTTYjxc//NjfDXZMYLC25F/KizoY7NGRXx0M1sFgp48CBnvCrwab9EQf
BQuWt0OGXflmsLZBsA+SgcXrqIO9GWyO2OpIsI4E60iwx0KCzTFdHQnWkWCHRoItAJSODZ31FJFg
/cVgHQl2SE5HgnUk2JRzOCRYQ1k4izrTlHoZuSPBTjsS7IGQYHmw0/13LBivdaxxqHghSLD9cV9L
q1XN/2ygYO257/jW8kGRYEcB6OpIsI4Ee5K4r5cGBTsGfNUTYnUo2AuGgvX3gu2Cgi1s+IeGgi2A
ojoWrL8YrGPBnjirY8E6FqxjwToWrGPBOhbstGPBOhbsmFkdC9axYB0L9uRZHQvWsWAdCzYcIRbs
3dVf+4vBjgoLtgoe9uhYsHowJenWZZzypysxXB0LdhfW88GC7Q38elgs2Pzx7hLwax0WbB3y6wW8
GWzhC+es+TWpg6LBFgr/VW8Gm4N0+pvBOh6s48GeJR7sCN4MNkyP3Y4He254sKNDZD0PPNiDvhls
2qXpeLCOB3vmeLAFpNcd8GB1L30R/DVntZ47jg+EQ1dvPD9NPNjebwabszoebAcrT9thzx8Odix4
rftl7Y39OgI42Nyw/b1g/b1gHQ1272iwhbW5dzTYdPc+OhrsgPiwhVSkg8E6PqyDwToYrL8XrL8X
rGPB+nvBOhbs6FhLWLADAr86FqxjwQ7BeQJYsEkVfWxgrA4Fe4pQsBmka4nzIoBgfhK6OhCsA8Ee
EAjWtvK4nbcI5QrbdnhMIFiV5Euorw4E60CwDgSbcDoQ7ECcDgR7SkCwn67efXx/fvLVt8Np+9ee
Dgv/mvEfwuzXduuDZmmGX/t39gF7ivhbKc8hkxHCd/LBRtQPpTrK1U8PyjaTz+9Qb/Pf6fjlcdua
f6biZpTZSD79/HSOvGqJ7I4ZqmHvvNo7BpnTBJXCZshU9PbnuPWb+eZY/lRVJJ0OO9epStb+4+qs
hkKE+jXLthgpJ8Py4rRbKn4W2Zbx11p+nR2PH3ZIvJnULazArn+XN+Ouz9stDWabYLITtmf5vA52
QWZPQeyOfb/wmb1/+SX1v/C9X/j9ZBXmwzcDmq8bs/zBKp/7si5Bff7XRsj/Z9OvW2i3xxItaBtO
uSFm6uw8TBb2k9uwv/uE2HH29n/evLu6kejxy/gPh4UV9zdMdlTxvXKOAkLcUcUdVbyDdd+o4if8
ismF75uz7vkVkwsIwlXvmFwCFR/qHZMdVNxBxR1U3EHF/SWTHVT8cjn9JZMdVLyD1UHFRwQqPuxL
Jute6qDiDiq+R1DxS3zJ5JHAfjuq+CFeMtlxxR1XvILVccWP+JbJ6e59dFxxf8vkfQOLjwGt+4RY
HVj8goHF/S2THVj8soDFLbD3l0x2YHEHFr88VgcWd2DxC+F0YHF/x+RdocVLOOIOLe7Q4uOCFh/R
OybrjujQ4g4tPi5WhxZ3aHGHFg9HBy3+9N0nwYidX19fXZ98JYM+ffp/8995cTc4AQA=
headers:
Age:
- '0'
@@ -212,7 +212,7 @@ interactions:
content-type:
- application/json;charset=utf-8
date:
- Fri, 13 Jan 2023 18:02:32 GMT
- Wed, 18 Jan 2023 16:38:59 GMT
server:
- ATS
vary:
@@ -220,13 +220,13 @@ interactions:
x-envoy-decorator-operation:
- finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*
x-envoy-upstream-service-time:
- '14'
- '11'
x-request-id:
- 2d60dc04-279a-4da9-9796-0599d0524a0f
- 2b1ab5cb-2e33-445f-8c4e-ef1f27b3b967
x-yahoo-request-id:
- fmj790ths375o
- 7oot4ulhsg853
y-rid:
- fmj790ths375o
- 7oot4ulhsg853
status:
code: 200
message: OK

View File

@@ -1,9 +1,4 @@
Date,Open,High,Low,Close,Adj Close,Volume
2020-01-13,1.8300000429153442,1.8300000429153442,1.8300000429153442,1.8300000429153442,1.8300000429153442,1
2020-01-14,1.8200000524520874,1.8200000524520874,1.8200000524520874,1.8200000524520874,1.8200000524520874,1
2020-01-15,1.8450000286102295,1.8450000286102295,1.8450000286102295,1.8450000286102295,1.8450000286102295,0
2020-01-16,1.8650000095367432,1.8650000095367432,1.8650000095367432,1.8650000095367432,1.8650000095367432,0
2020-01-17,1.8869999647140503,1.8869999647140503,1.8869999647140503,1.8869999647140503,1.8869999647140503,0
2020-01-21,1.8969999551773071,1.8969999551773071,1.8969999551773071,1.8969999551773071,1.8969999551773071,0
2020-01-22,1.930999994277954,1.930999994277954,1.930999994277954,1.930999994277954,1.930999994277954,0
2020-01-23,1.9529999494552612,1.9529999494552612,1.9529999494552612,1.9529999494552612,1.9529999494552612,0
@@ -752,4 +747,6 @@ Date,Open,High,Low,Close,Adj Close,Volume
2023-01-09,2.109999895095825,2.109999895095825,2.109999895095825,2.109999895095825,2.109999895095825,0
2023-01-10,2.109999895095825,2.109999895095825,2.109999895095825,2.109999895095825,2.109999895095825,5
2023-01-11,2.109999895095825,2.109999895095825,2.109999895095825,2.109999895095825,2.109999895095825,0
2023-01-12,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,0
2023-01-12,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,3
2023-01-13,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,0
2023-01-17,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,2.118000030517578,0
1 Date Open High Low Close Adj Close Volume
2020-01-13 1.8300000429153442 1.8300000429153442 1.8300000429153442 1.8300000429153442 1.8300000429153442 1
2020-01-14 1.8200000524520874 1.8200000524520874 1.8200000524520874 1.8200000524520874 1.8200000524520874 1
2020-01-15 1.8450000286102295 1.8450000286102295 1.8450000286102295 1.8450000286102295 1.8450000286102295 0
2020-01-16 1.8650000095367432 1.8650000095367432 1.8650000095367432 1.8650000095367432 1.8650000095367432 0
2020-01-17 1.8869999647140503 1.8869999647140503 1.8869999647140503 1.8869999647140503 1.8869999647140503 0
2 2020-01-21 1.8969999551773071 1.8969999551773071 1.8969999551773071 1.8969999551773071 1.8969999551773071 0
3 2020-01-22 1.930999994277954 1.930999994277954 1.930999994277954 1.930999994277954 1.930999994277954 0
4 2020-01-23 1.9529999494552612 1.9529999494552612 1.9529999494552612 1.9529999494552612 1.9529999494552612 0
747 2023-01-09 2.109999895095825 2.109999895095825 2.109999895095825 2.109999895095825 2.109999895095825 0
748 2023-01-10 2.109999895095825 2.109999895095825 2.109999895095825 2.109999895095825 2.109999895095825 5
749 2023-01-11 2.109999895095825 2.109999895095825 2.109999895095825 2.109999895095825 2.109999895095825 0
750 2023-01-12 2.118000030517578 2.118000030517578 2.118000030517578 2.118000030517578 2.118000030517578 0 3
751 2023-01-13 2.118000030517578 2.118000030517578 2.118000030517578 2.118000030517578 2.118000030517578 0
752 2023-01-17 2.118000030517578 2.118000030517578 2.118000030517578 2.118000030517578 2.118000030517578 0

View File

@@ -227,6 +227,8 @@ def test_call_func_expect_queue(expected_queue, func, queue):
"YI,BLK",
"--start",
"2022-10-01",
"--end",
"2022-10-12",
],
"yfinance_view.display_historical",
[],
@@ -234,6 +236,7 @@ def test_call_func_expect_queue(expected_queue, func, queue):
symbols=["YI", "BLK"],
expiry="",
start_date="2022-10-01",
end_date="2022-10-12",
raw=False,
export="",
),

View File

@@ -1,7 +1,7 @@
Futures
2023-03-01 3998.00
2023-06-01 4032.50
2023-09-01 4059.25
2023-12-01 4106.00
2024-03-01 4137.00
2023-03-01 3985.75
2023-06-01 4023.00
2023-09-01 4089.75
2023-12-01 4111.00
2024-03-01 4143.00

View File

@@ -1,6 +1,7 @@
Adj Close Close High Low Open Volume
BLK SB BLK SB BLK SB BLK SB BLK SB BLK SB
Date
2022-10-10 2.045 18.610001 2.045 18.610001 2.045 18.780001 2.045 18.530001 2.045 18.680000 0.0 58994
2022-10-11 2.035 18.740000 2.035 18.740000 2.035 18.750000 2.035 18.350000 2.035 18.590000 3.0 72474
2022-10-12 2.043 18.680000 2.043 18.680000 2.043 18.940001 2.043 18.570000 2.043 18.740000 0.0 64102
2022-10-13 2.045 18.809999 2.045 18.809999 2.045 18.830000 2.045 18.410000 2.045 18.690001 0.0 54392
@@ -65,6 +66,8 @@ Date
2023-01-09 2.110 19.170000 2.110 19.170000 2.110 19.280001 2.110 18.920000 2.110 19.020000 0.0 71286
2023-01-10 2.110 19.639999 2.110 19.639999 2.110 19.830000 2.110 19.129999 2.110 19.170000 5.0 80768
2023-01-11 2.110 19.650000 2.110 19.650000 2.110 20.040001 2.110 19.540001 2.110 19.549999 0.0 58355
2023-01-12 2.118 19.590000 2.118 19.590000 2.118 19.809999 2.118 19.450001 2.118 19.650000 0.0 58355
2023-01-13 NaN 19.700001 NaN 19.700001 NaN 19.760000 NaN 19.459999 NaN 19.629999 NaN 34684
2023-01-12 2.118 19.590000 2.118 19.590000 2.118 19.809999 2.118 19.450001 2.118 19.650000 3.0 44801
2023-01-13 2.118 19.730000 2.118 19.730000 2.118 19.809999 2.118 19.459999 2.118 19.629999 0.0 43139
2023-01-16 NaN 19.730000 NaN 19.730000 NaN 19.809999 NaN 19.459999 NaN 19.629999 NaN 43139
2023-01-17 2.118 20.139999 2.118 20.139999 2.118 20.190001 2.118 19.680000 2.118 19.840000 0.0 43139

View File

@@ -1,70 +1,73 @@
Adj Close Close High Low Open Volume
ES SF ES SF ES SF ES SF ES SF ES SF
Date
2022-10-11 3599.250000 NaN 3599.250000 NaN 3653.25 NaN 3579.00 NaN 3624.75 NaN 2398140.0 NaN
2022-10-12 3588.500000 NaN 3588.500000 NaN 3635.25 NaN 3585.50 NaN 3607.00 NaN 1948173.0 NaN
2022-10-13 3681.750000 NaN 3681.750000 NaN 3697.75 NaN 3502.00 NaN 3596.25 NaN 3288646.0 NaN
2022-10-14 3597.500000 NaN 3597.500000 NaN 3733.75 NaN 3591.25 NaN 3680.25 NaN 2730405.0 NaN
2022-10-17 3689.250000 NaN 3689.250000 NaN 3702.50 NaN 3590.50 NaN 3591.00 NaN 1951998.0 NaN
2022-10-18 3732.750000 NaN 3732.750000 NaN 3777.25 NaN 3697.25 NaN 3706.25 NaN 2746886.0 NaN
2022-10-19 3707.250000 NaN 3707.250000 NaN 3774.25 NaN 3676.75 NaN 3759.75 NaN 2348844.0 NaN
2022-10-20 3675.250000 NaN 3675.250000 NaN 3748.00 NaN 3666.25 NaN 3708.00 NaN 2403705.0 NaN
2022-10-21 3764.000000 NaN 3764.000000 NaN 3773.25 NaN 3641.50 NaN 3677.75 NaN 2681019.0 NaN
2022-10-24 3809.250000 NaN 3809.250000 NaN 3822.00 NaN 3736.50 NaN 3771.00 NaN 2109780.0 NaN
2022-10-25 3870.250000 NaN 3870.250000 NaN 3874.25 NaN 3790.00 NaN 3803.25 NaN 1836723.0 NaN
2022-10-26 3841.000000 NaN 3841.000000 NaN 3897.50 NaN 3824.25 NaN 3841.00 NaN 2118534.0 NaN
2022-10-27 3819.500000 NaN 3819.500000 NaN 3870.75 NaN 3757.50 NaN 3844.25 NaN 2211786.0 NaN
2022-10-28 3911.250000 NaN 3911.250000 NaN 3924.25 NaN 3776.75 NaN 3798.25 NaN 2084386.0 NaN
2022-10-31 3883.000000 NaN 3883.000000 NaN 3914.75 NaN 3872.25 NaN 3911.50 NaN 2002625.0 NaN
2022-11-01 3866.000000 NaN 3866.000000 NaN 3928.00 NaN 3852.50 NaN 3884.00 NaN 1895614.0 NaN
2022-11-02 3768.750000 NaN 3768.750000 NaN 3907.00 NaN 3760.25 NaN 3863.00 NaN 2210708.0 NaN
2022-11-03 3727.750000 NaN 3727.750000 NaN 3782.50 NaN 3704.25 NaN 3766.75 NaN 1887557.0 NaN
2022-11-04 3779.500000 NaN 3779.500000 NaN 3805.50 NaN 3711.00 NaN 3724.00 NaN 2494788.0 NaN
2022-11-07 3815.250000 NaN 3815.250000 NaN 3821.75 NaN 3738.25 NaN 3750.00 NaN 1483146.0 NaN
2022-11-08 3835.250000 NaN 3835.250000 NaN 3867.00 NaN 3792.75 NaN 3812.75 NaN 1878046.0 NaN
2022-11-09 3755.500000 NaN 3755.500000 NaN 3848.75 NaN 3750.00 NaN 3832.50 NaN 1889153.0 NaN
2022-11-10 3961.000000 NaN 3961.000000 NaN 3973.50 NaN 3751.50 NaN 3757.00 NaN 2408104.0 NaN
2022-11-11 4000.250000 NaN 4000.250000 NaN 4009.75 NaN 3951.00 NaN 3973.00 NaN 1927068.0 NaN
2022-11-14 3966.000000 NaN 3966.000000 NaN 4017.50 NaN 3964.00 NaN 3984.00 NaN 1592615.0 NaN
2022-11-15 3999.500000 NaN 3999.500000 NaN 4050.75 NaN 3960.00 NaN 3974.75 NaN 2230543.0 NaN
2022-11-16 3968.500000 NaN 3968.500000 NaN 4015.75 NaN 3962.00 NaN 3992.00 NaN 1502501.0 NaN
2022-11-17 3955.250000 NaN 3955.250000 NaN 3990.25 NaN 3912.50 NaN 3977.25 NaN 1560808.0 NaN
2022-11-18 3974.000000 NaN 3974.000000 NaN 3994.00 NaN 3942.50 NaN 3960.50 NaN 1534155.0 NaN
2022-11-21 3958.000000 NaN 3958.000000 NaN 3982.00 NaN 3937.50 NaN 3972.50 NaN 1178421.0 NaN
2022-11-22 4010.250000 NaN 4010.250000 NaN 4012.50 NaN 3945.25 NaN 3957.75 NaN 1161999.0 NaN
2022-11-23 4033.000000 NaN 4033.000000 NaN 4039.50 NaN 4002.00 NaN 4010.00 NaN 1281153.0 NaN
2022-11-25 4032.500000 NaN 4032.500000 NaN 4049.25 NaN 4024.75 NaN 4038.75 NaN 608795.0 NaN
2022-11-28 3970.250000 NaN 3970.250000 NaN 4024.00 NaN 3960.25 NaN 4020.25 NaN 1481503.0 NaN
2022-11-29 3962.000000 NaN 3962.000000 NaN 3990.25 NaN 3941.25 NaN 3972.00 NaN 1500171.0 NaN
2022-11-30 4081.250000 NaN 4081.250000 NaN 4093.50 NaN 3942.75 NaN 3962.25 NaN 2479997.0 NaN
2022-12-01 4081.750000 NaN 4081.750000 NaN 4110.00 NaN 4054.50 NaN 4094.50 NaN 1834073.0 NaN
2022-12-02 4075.500000 NaN 4075.500000 NaN 4085.50 NaN 4006.75 NaN 4077.50 NaN 1849784.0 NaN
2022-12-05 4003.250000 NaN 4003.250000 NaN 4075.75 NaN 3987.25 NaN 4074.00 NaN 1497688.0 NaN
2022-12-06 3945.000000 NaN 3945.000000 NaN 4014.75 NaN 3921.50 NaN 4005.75 NaN 1869101.0 NaN
2022-12-07 3936.750000 NaN 3936.750000 NaN 3961.50 NaN 3914.00 NaN 3944.50 NaN 1756473.0 NaN
2022-12-08 3965.750000 NaN 3965.750000 NaN 3977.25 NaN 3916.00 NaN 3935.75 NaN 1708915.0 NaN
2022-12-09 3936.250000 NaN 3936.250000 NaN 3990.00 NaN 3930.00 NaN 3964.75 NaN 1739761.0 NaN
2022-12-12 3991.750000 NaN 3991.750000 NaN 3992.75 NaN 3924.50 NaN 3933.00 NaN 1619977.0 NaN
2022-12-13 4022.250000 NaN 4022.250000 NaN 4145.00 NaN 3985.00 NaN 3989.25 NaN 1419560.0 NaN
2022-12-14 3998.000000 NaN 3998.000000 NaN 4073.00 NaN 3965.25 NaN 4021.75 NaN 712439.0 NaN
2022-12-15 3897.000000 NaN 3897.000000 NaN 4010.25 NaN 3878.50 NaN 4004.25 NaN 560669.0 NaN
2022-12-16 3871.469971 NaN 3871.469971 NaN 3904.25 NaN 3842.00 NaN 3890.50 NaN 1965701.0 NaN
2022-12-19 3845.500000 NaN 3845.500000 NaN 3899.00 NaN 3827.25 NaN 3874.00 NaN 1405774.0 NaN
2022-12-20 3849.250000 NaN 3849.250000 NaN 3866.50 NaN 3803.50 NaN 3842.75 NaN 1541868.0 NaN
2022-12-21 3905.750000 NaN 3905.750000 NaN 3918.75 NaN 3855.50 NaN 3857.25 NaN 1522069.0 NaN
2022-12-22 3849.250000 NaN 3849.250000 NaN 3919.75 NaN 3788.50 NaN 3915.00 NaN 1842326.0 NaN
2022-12-23 3869.750000 NaN 3869.750000 NaN 3872.50 NaN 3821.25 NaN 3850.00 NaN 1374913.0 NaN
2022-12-27 3855.000000 NaN 3855.000000 NaN 3900.50 NaN 3837.25 NaN 3878.00 NaN 1006414.0 NaN
2022-12-28 3807.500000 NaN 3807.500000 NaN 3875.00 NaN 3804.50 NaN 3858.00 NaN 1282810.0 NaN
2022-12-29 3871.750000 NaN 3871.750000 NaN 3882.75 NaN 3806.25 NaN 3811.00 NaN 1146984.0 NaN
2022-12-30 3861.000000 NaN 3861.000000 NaN 3871.00 NaN 3821.50 NaN 3869.75 NaN 1401810.0 NaN
2023-01-03 3846.000000 NaN 3846.000000 NaN 3906.75 NaN 3814.50 NaN 3895.00 NaN 1782473.0 NaN
2023-01-04 3874.500000 NaN 3874.500000 NaN 3896.25 NaN 3836.50 NaN 3842.75 NaN 1912155.0 NaN
2023-01-05 3829.000000 NaN 3829.000000 NaN 3885.50 NaN 3822.50 NaN 3871.00 NaN 1679973.0 NaN
2023-01-06 3915.500000 NaN 3915.500000 NaN 3928.75 NaN 3819.00 NaN 3833.00 NaN 2026154.0 NaN
2023-01-09 3913.750000 NaN 3913.750000 NaN 3973.25 NaN 3909.75 NaN 3918.50 NaN 1697887.0 NaN
2023-01-10 3940.750000 NaN 3940.750000 NaN 3943.75 NaN 3891.50 NaN 3914.50 NaN 1520955.0 NaN
2023-01-11 3990.000000 NaN 3990.000000 NaN 3992.50 NaN 3934.50 NaN 3941.00 NaN 1398769.0 NaN
2023-01-12 4003.500000 NaN 4003.500000 NaN 4021.50 NaN 3954.00 NaN 3991.75 NaN 1398769.0 NaN
2023-01-13 3997.750000 36.25 3997.750000 36.25 4008.25 36.25 3961.75 36.25 4003.00 36.25 933691.0 5.0
Adj Close Close High Low Open Volume
ES SF ES SF ES SF ES SF ES SF ES SF
Date
2022-10-10 3625.250000 NaN 3625.250000 NaN 3667.50 NaN 3600.00 NaN 3638.75 NaN 2024447 NaN
2022-10-11 3599.250000 NaN 3599.250000 NaN 3653.25 NaN 3579.00 NaN 3624.75 NaN 2398140 NaN
2022-10-12 3588.500000 NaN 3588.500000 NaN 3635.25 NaN 3585.50 NaN 3607.00 NaN 1948173 NaN
2022-10-13 3681.750000 NaN 3681.750000 NaN 3697.75 NaN 3502.00 NaN 3596.25 NaN 3288646 NaN
2022-10-14 3597.500000 NaN 3597.500000 NaN 3733.75 NaN 3591.25 NaN 3680.25 NaN 2730405 NaN
2022-10-17 3689.250000 NaN 3689.250000 NaN 3702.50 NaN 3590.50 NaN 3591.00 NaN 1951998 NaN
2022-10-18 3732.750000 NaN 3732.750000 NaN 3777.25 NaN 3697.25 NaN 3706.25 NaN 2746886 NaN
2022-10-19 3707.250000 NaN 3707.250000 NaN 3774.25 NaN 3676.75 NaN 3759.75 NaN 2348844 NaN
2022-10-20 3675.250000 NaN 3675.250000 NaN 3748.00 NaN 3666.25 NaN 3708.00 NaN 2403705 NaN
2022-10-21 3764.000000 NaN 3764.000000 NaN 3773.25 NaN 3641.50 NaN 3677.75 NaN 2681019 NaN
2022-10-24 3809.250000 NaN 3809.250000 NaN 3822.00 NaN 3736.50 NaN 3771.00 NaN 2109780 NaN
2022-10-25 3870.250000 NaN 3870.250000 NaN 3874.25 NaN 3790.00 NaN 3803.25 NaN 1836723 NaN
2022-10-26 3841.000000 NaN 3841.000000 NaN 3897.50 NaN 3824.25 NaN 3841.00 NaN 2118534 NaN
2022-10-27 3819.500000 NaN 3819.500000 NaN 3870.75 NaN 3757.50 NaN 3844.25 NaN 2211786 NaN
2022-10-28 3911.250000 NaN 3911.250000 NaN 3924.25 NaN 3776.75 NaN 3798.25 NaN 2084386 NaN
2022-10-31 3883.000000 NaN 3883.000000 NaN 3914.75 NaN 3872.25 NaN 3911.50 NaN 2002625 NaN
2022-11-01 3866.000000 NaN 3866.000000 NaN 3928.00 NaN 3852.50 NaN 3884.00 NaN 1895614 NaN
2022-11-02 3768.750000 NaN 3768.750000 NaN 3907.00 NaN 3760.25 NaN 3863.00 NaN 2210708 NaN
2022-11-03 3727.750000 NaN 3727.750000 NaN 3782.50 NaN 3704.25 NaN 3766.75 NaN 1887557 NaN
2022-11-04 3779.500000 NaN 3779.500000 NaN 3805.50 NaN 3711.00 NaN 3724.00 NaN 2494788 NaN
2022-11-07 3815.250000 NaN 3815.250000 NaN 3821.75 NaN 3738.25 NaN 3750.00 NaN 1483146 NaN
2022-11-08 3835.250000 NaN 3835.250000 NaN 3867.00 NaN 3792.75 NaN 3812.75 NaN 1878046 NaN
2022-11-09 3755.500000 NaN 3755.500000 NaN 3848.75 NaN 3750.00 NaN 3832.50 NaN 1889153 NaN
2022-11-10 3961.000000 NaN 3961.000000 NaN 3973.50 NaN 3751.50 NaN 3757.00 NaN 2408104 NaN
2022-11-11 4000.250000 NaN 4000.250000 NaN 4009.75 NaN 3951.00 NaN 3973.00 NaN 1927068 NaN
2022-11-14 3966.000000 NaN 3966.000000 NaN 4017.50 NaN 3964.00 NaN 3984.00 NaN 1592615 NaN
2022-11-15 3999.500000 NaN 3999.500000 NaN 4050.75 NaN 3960.00 NaN 3974.75 NaN 2230543 NaN
2022-11-16 3968.500000 NaN 3968.500000 NaN 4015.75 NaN 3962.00 NaN 3992.00 NaN 1502501 NaN
2022-11-17 3955.250000 NaN 3955.250000 NaN 3990.25 NaN 3912.50 NaN 3977.25 NaN 1560808 NaN
2022-11-18 3974.000000 NaN 3974.000000 NaN 3994.00 NaN 3942.50 NaN 3960.50 NaN 1534155 NaN
2022-11-21 3958.000000 NaN 3958.000000 NaN 3982.00 NaN 3937.50 NaN 3972.50 NaN 1178421 NaN
2022-11-22 4010.250000 NaN 4010.250000 NaN 4012.50 NaN 3945.25 NaN 3957.75 NaN 1161999 NaN
2022-11-23 4033.000000 NaN 4033.000000 NaN 4039.50 NaN 4002.00 NaN 4010.00 NaN 1281153 NaN
2022-11-25 4032.500000 NaN 4032.500000 NaN 4049.25 NaN 4024.75 NaN 4038.75 NaN 608795 NaN
2022-11-28 3970.250000 NaN 3970.250000 NaN 4024.00 NaN 3960.25 NaN 4020.25 NaN 1481503 NaN
2022-11-29 3962.000000 NaN 3962.000000 NaN 3990.25 NaN 3941.25 NaN 3972.00 NaN 1500171 NaN
2022-11-30 4081.250000 NaN 4081.250000 NaN 4093.50 NaN 3942.75 NaN 3962.25 NaN 2479997 NaN
2022-12-01 4081.750000 NaN 4081.750000 NaN 4110.00 NaN 4054.50 NaN 4094.50 NaN 1834073 NaN
2022-12-02 4075.500000 NaN 4075.500000 NaN 4085.50 NaN 4006.75 NaN 4077.50 NaN 1849784 NaN
2022-12-05 4003.250000 NaN 4003.250000 NaN 4075.75 NaN 3987.25 NaN 4074.00 NaN 1497688 NaN
2022-12-06 3945.000000 NaN 3945.000000 NaN 4014.75 NaN 3921.50 NaN 4005.75 NaN 1869101 NaN
2022-12-07 3936.750000 NaN 3936.750000 NaN 3961.50 NaN 3914.00 NaN 3944.50 NaN 1756473 NaN
2022-12-08 3965.750000 NaN 3965.750000 NaN 3977.25 NaN 3916.00 NaN 3935.75 NaN 1708915 NaN
2022-12-09 3936.250000 NaN 3936.250000 NaN 3990.00 NaN 3930.00 NaN 3964.75 NaN 1739761 NaN
2022-12-12 3991.750000 NaN 3991.750000 NaN 3992.75 NaN 3924.50 NaN 3933.00 NaN 1619977 NaN
2022-12-13 4022.250000 NaN 4022.250000 NaN 4145.00 NaN 3985.00 NaN 3989.25 NaN 1419560 NaN
2022-12-14 3998.000000 NaN 3998.000000 NaN 4073.00 NaN 3965.25 NaN 4021.75 NaN 712439 NaN
2022-12-15 3897.000000 NaN 3897.000000 NaN 4010.25 NaN 3878.50 NaN 4004.25 NaN 560669 NaN
2022-12-16 3871.469971 NaN 3871.469971 NaN 3904.25 NaN 3842.00 NaN 3890.50 NaN 1965701 NaN
2022-12-19 3845.500000 NaN 3845.500000 NaN 3899.00 NaN 3827.25 NaN 3874.00 NaN 1405774 NaN
2022-12-20 3849.250000 NaN 3849.250000 NaN 3866.50 NaN 3803.50 NaN 3842.75 NaN 1541868 NaN
2022-12-21 3905.750000 NaN 3905.750000 NaN 3918.75 NaN 3855.50 NaN 3857.25 NaN 1522069 NaN
2022-12-22 3849.250000 NaN 3849.250000 NaN 3919.75 NaN 3788.50 NaN 3915.00 NaN 1842326 NaN
2022-12-23 3869.750000 NaN 3869.750000 NaN 3872.50 NaN 3821.25 NaN 3850.00 NaN 1374913 NaN
2022-12-27 3855.000000 NaN 3855.000000 NaN 3900.50 NaN 3837.25 NaN 3878.00 NaN 1006414 NaN
2022-12-28 3807.500000 NaN 3807.500000 NaN 3875.00 NaN 3804.50 NaN 3858.00 NaN 1282810 NaN
2022-12-29 3871.750000 NaN 3871.750000 NaN 3882.75 NaN 3806.25 NaN 3811.00 NaN 1146984 NaN
2022-12-30 3861.000000 NaN 3861.000000 NaN 3871.00 NaN 3821.50 NaN 3869.75 NaN 1401810 NaN
2023-01-03 3846.000000 NaN 3846.000000 NaN 3906.75 NaN 3814.50 NaN 3895.00 NaN 1782473 NaN
2023-01-04 3874.500000 NaN 3874.500000 NaN 3896.25 NaN 3836.50 NaN 3842.75 NaN 1912155 NaN
2023-01-05 3829.000000 NaN 3829.000000 NaN 3885.50 NaN 3822.50 NaN 3871.00 NaN 1679973 NaN
2023-01-06 3915.500000 NaN 3915.500000 NaN 3928.75 NaN 3819.00 NaN 3833.00 NaN 2026154 NaN
2023-01-09 3913.750000 NaN 3913.750000 NaN 3973.25 NaN 3909.75 NaN 3918.50 NaN 1697887 NaN
2023-01-10 3940.750000 NaN 3940.750000 NaN 3943.75 NaN 3891.50 NaN 3914.50 NaN 1520955 NaN
2023-01-11 3990.000000 NaN 3990.000000 NaN 3992.50 NaN 3934.50 NaN 3941.00 NaN 1398769 NaN
2023-01-12 4003.500000 NaN 4003.500000 NaN 4021.50 NaN 3954.00 NaN 3991.75 NaN 2102587 NaN
2023-01-13 4018.250000 NaN 4018.250000 NaN 4024.25 NaN 3961.75 NaN 4003.00 NaN 1456784 NaN
2023-01-16 4009.750000 NaN 4009.750000 NaN 4028.25 NaN 3996.75 NaN 4020.00 NaN 1456784 NaN
2023-01-17 4009.500000 36.799999 4009.500000 36.799999 4035.25 36.799999 3996.75 36.799999 4020.00 36.799999 1456784 10.0