├── .gitignore ├── LICENSE ├── README.md ├── __init__.py ├── img └── MASS.pdf ├── makefile ├── pdm.lock ├── pyproject.toml ├── stock_disagreement ├── __init__.py ├── agent │ ├── __init__.py │ ├── agent_distribution.py │ ├── basic_agent.py │ ├── investing_history.py │ ├── investment_analyzer.py │ ├── investor_distribution_agent.py │ └── stock_selector.py ├── example_dataset │ ├── base_data.parq │ ├── ih_label.parq │ ├── industry_ret.parq │ ├── macro_data │ │ ├── China_1-Year_Loan_Prime_Rate_LPR.csv │ │ ├── China_CPI_YoY_Current_Month.csv │ │ ├── Market_Sentiment_Index.csv │ │ ├── csi_300_pe_ttm.csv │ │ └── yield_on_China_10_year_government_bonds.csv │ ├── stock_basic_data.parq │ ├── sub_fudamental_data.parq │ ├── wind-financial-news-info.parq │ └── wind-financial-news-relationship.parq ├── exp │ ├── __init__.py │ └── trainer.py ├── main.py ├── prompts │ ├── __init__.py │ ├── prompt_template.py │ └── stock_indicator │ │ └── 1.txt └── utils │ ├── __init__.py │ └── llm.py └── tests └── __init__.py /.gitignore: -------------------------------------------------------------------------------- 1 | .pdm-build/ 2 | stock_disagreement/dataset 3 | stock_disagreement/all_dataset 4 | stock_disagreement/lightgbm_disagreement_res 5 | stock_disagreement/backtest_res 6 | stock_disagreement/res 7 | stock_disagreement/notebooks 8 | 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD Zero Clause License 2 | 3 | Copyright (c) 2024 taian guo 4 | 5 | Permission to use, copy, modify, and/or distribute this software for any 6 | purpose with or without fee is hereby granted. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 9 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 11 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 13 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 | PERFORMANCE OF THIS SOFTWARE. 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MASS: Multi-Agent Simulation Scaling for Portfolio Construction 2 | 3 | 📜 [Paper Link](https://arxiv.org/abs/2505.10278) 4 | 5 | ## ✨ Overview 6 | 7 |  8 | 9 | ## 📝 What You Need to Know 10 | 11 | 1. Currently, we only provide a very [small subset](https://github.com/gta0804/MASS/tree/main/stock_disagreement/example_dataset) of the complete dataset for running MASS. The full dataset will be released after the review is completed. 12 | 13 | ## 🧑💻Usage 14 | 1. **dependency installation** 15 | ``` 16 | conda create -n your_env_name python==3.10 -y 17 | conda activate your_env_name 18 | pip install pdm 19 | pdm install 20 | ``` 21 | 2. **dataset fetching** 22 | After fetching dataset, change all `ROOT_PATH` variables to your dataset directory. 23 | Now we release an example dataset on SSE 50 index. 24 | 25 | 3. **Extend MASS on your own dataset** 26 | Due to time limit, our data source is limited. We encourage you to incorporate more data sources into MASS to get more significant performances, and we also encourage you to extend MASS beyond investment portfolio construction! 27 | You can use your data sources step by step below: 28 | - **Define your own data modality.** 29 | In MASS, we pre-define multiple data modalities in [here](https://github.com/gta0804/MASS/blob/main/stock_disagreement/agent/basic_agent.py#L42). You can change them into your own data sources. After changing your data sources, remember to change data loading code [here](https://github.com/gta0804/MASS/blob/main/stock_disagreement/agent/basic_agent.py#L165). 30 | ``` 31 | class Modality(IntFlag): 32 | FUDAMENTAL_VALUTION = 0b00000001 33 | FUDAMENTAL_DIVIDEND = 0b00000010 34 | FUDAMENTAL_GROWTH = 0b000000100 35 | FUDAMENTAL_QUALITY = 0b000001000 36 | NEWS = 0b000010000 37 | BASE_DATA = 0b000100000 38 | CROSS_INDUSTRY_LABEL = 0b001000000 39 | RISK_FACTOR = 0b010000000 40 | PRICE_FEATURE = 0b100000000 41 | ``` 42 | - **Use your own aggregation function.** 43 | In MASS, we aggregate individual investor's decision by market disagreement hypothesis. In fact, you can use your own aggregation method. Change the code in [investor_analyzer.py](https://github.com/gta0804/MASS/blob/main/stock_disagreement/agent/investment_analyzer.py) for your own aggregation function! 44 | - **Use different optimizers** 45 | In MASS, we use simulated annealing on agent distaribution optimization. We imeplement an optimzer framework in [agent_distribution.py](https://github.com/gta0804/MASS/blob/main/stock_disagreement/agent/agent_distribution.py). You can define your own optimizer. 46 | 47 | 48 | 4. **Compute resources configuration.** 49 | We use [Qwen2.5-72B-Instruct](https://huggingface.co/Qwen/Qwen2.5-72B-Instruct) as our foundation model. You can change your foundation model url [here](https://github.com/gta0804/MASS/blob/main/stock_disagreement/agent/basic_agent.py#L57). 50 | For SSE 50 and the default configuration, 80GiB RAM is needed. You can save memory overhead by adjusting the agent parallelism [here](https://github.com/gta0804/MASS/blob/main/stock_disagreement/exp/trainer.py#L148). 51 | 52 | 5. **Running MASS** 53 | ``` 54 | python stock_disagreement/main.py 55 | ``` 56 | -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- 1 | from .stock_disagreement import * -------------------------------------------------------------------------------- /img/MASS.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/img/MASS.pdf -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | sources = src 2 | format: 3 | isort $(sources) tests 4 | black $(sources) tests 5 | 6 | lint: 7 | flake8 $(sources) tests 8 | mypy $(sources) tests 9 | 10 | clean: 11 | rm -rf .mypy_cache .pytest_cache 12 | rm -rf *.egg-info 13 | rm -rf .tox build dist site 14 | rm -rf coverage.xml junit-report.xml .coverage 15 | find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ -delete 16 | 17 | export-requirements: 18 | pdm export --without-hashes -o requirements.txt --prod 19 | pdm export --without-hashes --no-default -o requirements-dev.txt --dev 20 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "stock_prediction_benchmark" 3 | version = "0.1.0" 4 | url = "https://mirrors.aliyun.com/pypi/simple/" 5 | verify_ssl = true 6 | description = "a unified stock_prediction_benchmark" 7 | authors = [ 8 | {name = "anonymous", email = "anonymous"}, 9 | ] 10 | dependencies = [ 11 | "ipykernel>=6.29.4", 12 | "pyarrow>=16.1.0", 13 | "fastparquet>=2024.5.0", 14 | "fire>=0.6.0", 15 | "lightgbm>=4.3.0", 16 | "pyecharts>=2.0.6", 17 | "openai==1.55.1", 18 | "transformers==4.41.0", 19 | "modelscope==1.14.0", 20 | "backoff>=2.2.1", 21 | "retry>=0.9.2", 22 | "retrying>=1.3.4", 23 | "jieba>=0.42.1", 24 | "bs4>=0.0.2", 25 | "baostock>=0.8.9", 26 | "faiss-gpu>=1.7.2", 27 | "sentence-transformers>=3.3.1", 28 | "torchvision==0.17.2", 29 | "torch==2.2.2", 30 | "qwen-agent==0.0.9", 31 | "pyparsing>=3.2.1", 32 | "cycler>=0.12.1", 33 | "kiwisolver>=1.4.8", 34 | "matplotlib>=3.10.0", 35 | ] 36 | requires-python = ">=3.10" 37 | readme = "README.md" 38 | license = {text = "MIT"} 39 | 40 | [build-system] 41 | requires = ["pdm-backend"] 42 | build-backend = "pdm.backend" 43 | 44 | 45 | [tool.pdm] 46 | distribution = true 47 | 48 | [tool.pdm.dev-dependencies] 49 | dev = [ 50 | "flake8>=7.0.0", 51 | "mypy>=1.10.0", 52 | "isort>=5.13.2", 53 | "black>=24.4.2", 54 | ] 55 | -------------------------------------------------------------------------------- /stock_disagreement/__init__.py: -------------------------------------------------------------------------------- 1 | from .prompts.prompt_template import (SUMMARIZE_EXAMPLE, SUMMARIZE_INSTRUCTION, 2 | INVESTING_STYLE_INSTRUCTION, 3 | INVSETING_STYLE_EXAMPLE, 4 | INVESTING_DECISION_INSTRUCTION, 5 | INVESTING_DECISION_EXAMPLE, 6 | INVESTING_STYLE_WITH_MACRO_DATA_EXAMPLE) 7 | from .utils.llm import OpenAIModel 8 | from .agent import (StockDisagreementAgent, 9 | Modality, 10 | BasicStockSelector, 11 | RandomStockSelector, 12 | IndustryEqualStockSelector, 13 | IndustryBasisStockSelector, 14 | MVEqualStockSelector, 15 | InvestmentAnalyzer, 16 | InvestingHistory, 17 | BaseOptimizer, 18 | SimulatedAnnealingOptimizer) 19 | from .exp import StockDisagreementTrainer -------------------------------------------------------------------------------- /stock_disagreement/agent/__init__.py: -------------------------------------------------------------------------------- 1 | from .stock_selector import (BasicStockSelector, RandomStockSelector, 2 | IndustryEqualStockSelector, IndustryBasisStockSelector, 3 | MVEqualStockSelector 4 | ) 5 | from .basic_agent import StockDisagreementAgent, Modality 6 | from .investment_analyzer import InvestmentAnalyzer 7 | from .investing_history import InvestingHistory 8 | from .agent_distribution import BaseOptimizer, SimulatedAnnealingOptimizer -------------------------------------------------------------------------------- /stock_disagreement/agent/agent_distribution.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | from abc import ABC, abstractmethod 4 | from stock_disagreement.agent import InvestmentAnalyzer 5 | import bisect 6 | import concurrent 7 | import random 8 | from tqdm import tqdm 9 | import time 10 | 11 | class BaseOptimizer(ABC): 12 | """ 13 | 基类 提供Agent 分布优化的初始逻辑. 14 | """ 15 | interval: int = 4 16 | def __init__(self, 17 | max_iter:int = 20, 18 | look_back_window: int = 5): 19 | super().__init__() 20 | self.max_iter = max_iter 21 | self.look_back_window = look_back_window 22 | 23 | 24 | def calcluate_fitness(self, investment_res: pd.DataFrame, stock_labels: pd.DataFrame, alpha: float = 0.5) -> float: 25 | sub_res = investment_res.copy() 26 | sub_res = investment_res.merge(stock_labels, on = ["Stock", "Date"], how="inner") 27 | label_col = "5_15_labelB" 28 | signal_col = "Signal_std" 29 | rankic_values = sub_res.groupby(by = ["Date"])[["Stock",label_col, signal_col]].apply( 30 | lambda x: np.corrcoef(x[label_col].rank(), x[signal_col].rank())[0, 1] 31 | ) 32 | 33 | return rankic_values.mean() 34 | 35 | @abstractmethod 36 | def optimize(self, 37 | investment_res: InvestmentAnalyzer, 38 | dates: list[int], 39 | current_date: int, 40 | stock_pool: pd.DataFrame, 41 | distribution: list[float]) -> list[float]: 42 | pass 43 | 44 | 45 | 46 | class SimulatedAnnealingOptimizer(BaseOptimizer): 47 | """ 48 | 模拟退火算法. 49 | """ 50 | mean: float = 0 51 | std_dev: float = 0.25 52 | def __init__(self, 53 | look_back_window: int = 5, 54 | max_iter:int = 20, 55 | init_temp: float = 0.5, 56 | cooling_rate: float = 0.95, 57 | ): 58 | super().__init__(max_iter, look_back_window) 59 | self.init_temp = init_temp 60 | self.cooling_rate = cooling_rate 61 | 62 | def is_adjusted(self, dates:list[int], current_date: int) -> int: 63 | dates = sorted(dates) 64 | target_index = bisect.bisect_left(dates, current_date) 65 | if target_index - self.look_back_window - self.interval < 0: 66 | return -1 67 | return dates[target_index - self.look_back_window - self.interval] 68 | 69 | 70 | def _random_tweak(self, distribution: dict[int, float]) -> dict[float, int]: 71 | while True: 72 | sample = np.random.normal(self.mean, self.std_dev) 73 | keys = list(distribution.keys()) 74 | if len(keys) < 2: 75 | raise ValueError("Agent type < 2!") 76 | selected_keys = random.sample(keys, 2) 77 | if distribution[selected_keys[0]] - sample <= 0 or distribution[selected_keys[1]] + sample <= 0: 78 | continue 79 | distribution[selected_keys[0]] -= sample 80 | distribution[selected_keys[1]] += sample 81 | return distribution 82 | 83 | 84 | def optimize(self, 85 | investment_analyzer: InvestmentAnalyzer, 86 | dates: list[int], 87 | start_date: int, 88 | current_date:int, 89 | stock_labels: pd.DataFrame, 90 | stock_pool:pd.DataFrame, 91 | distribution: dict[int, float] 92 | ) -> dict[int, float]: 93 | dates = sorted(dates) 94 | current_temp = self.init_temp 95 | start_index = bisect.bisect_left(dates, start_date) 96 | search_dates = dates[start_index: start_index + self.look_back_window].copy() 97 | end_date = search_dates[-1] 98 | cuurent_distribution = distribution.copy() 99 | investment_res = self.get_investment_res(investment_analyzer, start_date, current_date, stock_pool, end_date, cuurent_distribution, search_dates) 100 | current_fitness = self.calcluate_fitness(investment_res=investment_res, stock_labels=stock_labels) 101 | best_distributions = distribution.copy() 102 | best_fitness = current_fitness 103 | for i in tqdm(range(self.max_iter), desc=f"optimizing {current_date}"): 104 | 105 | tweaked_distribution = self._random_tweak(cuurent_distribution.copy()) 106 | fitness = self.calcluate_fitness(investment_res=self.get_investment_res(investment_analyzer, start_date, current_date, stock_pool, end_date, tweaked_distribution, search_dates), 107 | stock_labels=stock_labels) 108 | if fitness > current_fitness: 109 | cuurent_distribution = tweaked_distribution 110 | current_fitness = fitness 111 | else: 112 | diff = (current_fitness - fitness) * 10 113 | prob = np.exp(-diff / current_temp) 114 | if random.random() < prob: 115 | cuurent_distribution = tweaked_distribution 116 | current_fitness = fitness 117 | if current_fitness > best_fitness: 118 | best_fitness = current_fitness 119 | best_distributions = cuurent_distribution 120 | current_temp *= self.cooling_rate 121 | 122 | return best_distributions 123 | 124 | 125 | def get_investment_res(self, investment_analyzer:InvestmentAnalyzer, start_date:int, current_date:int, stock_pool:pd.DataFrame, end_date:int, 126 | agent_distributions: dict[int, float], dates: list[int]): 127 | investment_res = stock_pool[(stock_pool["Date"] >= start_date) & (stock_pool["Date"] <= end_date)].copy() 128 | def _calc_signal(date: int): 129 | current_pool = stock_pool[stock_pool["Date"] == date]["Stock"].tolist() 130 | res = investment_analyzer.calculate_stock_disagreement_score(date=date, stock_pool=current_pool, agent_distributions=agent_distributions) 131 | return date, res 132 | 133 | date_signal_results = {} 134 | with concurrent.futures.ThreadPoolExecutor(max_workers=16) as executor: 135 | date_futures = {executor.submit(_calc_signal, date): date for date in dates} 136 | for future in tqdm( 137 | concurrent.futures.as_completed(date_futures), 138 | total=len(dates), 139 | desc=f"Calculating signals {start_date} ~ {end_date}, while current date is {current_date}" 140 | ): 141 | date, result = future.result() 142 | date_signal_results[date] = result 143 | 144 | data_list = [] 145 | for date, res in date_signal_results.items(): 146 | for stock, values in res.items(): 147 | data_list.append([date, stock, values[0], values[1], values[2]]) 148 | result_df = pd.DataFrame(data_list, columns=['Date', 'Stock', 'Signal', 'Signal_mean', 'Signal_std']) 149 | investment_res = pd.merge(investment_res, result_df, on=['Date', 'Stock'], how='left') 150 | investment_res[['Signal', 'Signal_mean', 'Signal_std']] = investment_res[['Signal', 'Signal_mean', 'Signal_std']].fillna(0) 151 | return investment_res 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /stock_disagreement/agent/basic_agent.py: -------------------------------------------------------------------------------- 1 | from stock_disagreement import OpenAIModel 2 | from openai import OpenAI 3 | from typing import * 4 | from stock_disagreement.agent import RandomStockSelector, BasicStockSelector, IndustryBasisStockSelector, IndustryEqualStockSelector, MVEqualStockSelector 5 | from stock_disagreement.prompts import (INVESTING_DECISION_EXAMPLE, 6 | INVESTING_DECISION_INSTRUCTION, 7 | INVESTING_STYLE_INSTRUCTION, 8 | INVSETING_STYLE_EXAMPLE, 9 | INVESTING_DECISION_INSTRUCTION_USING_SELF_REFLECTION, 10 | INVESTING_STYLE_INSTRUCTION_WITH_MARCO_DATA, 11 | INVESTING_STYLE_WITH_MACRO_DATA_EXAMPLE) 12 | 13 | from stock_disagreement.agent.investment_analyzer import InvestmentAnalyzer 14 | from stock_disagreement.agent.investing_history import InvestingHistory 15 | import pandas as pd 16 | import numpy as np 17 | import json 18 | from enum import IntFlag 19 | from scipy.stats import percentileofscore 20 | 21 | MAX_RETRIRES = 3 22 | ROOT_PATH = "" 23 | 24 | def calculate_pe_quantile_5y(df:pd.DataFrame) -> pd.DataFrame: 25 | 26 | 27 | df_copy = df.copy() 28 | df_copy["dt"] = pd.to_datetime(df_copy["Date"].astype(str), format="%Y%m%d") 29 | df_copy.sort_values("dt", inplace=True) 30 | df_copy.reset_index(drop=True, inplace=True) 31 | 32 | min_periods = 10 * 250 33 | df_copy["quantile"] = df_copy["Value"].rolling( 34 | window= min_periods, closed="both" 35 | ).apply(lambda x: percentileofscore(x, x.iloc[-1]), raw=False) 36 | 37 | df_copy["quantile"] = df_copy["quantile"].round(1) 38 | 39 | df_copy["Date"] = df_copy["dt"].dt.strftime("%Y%m%d").astype(int) 40 | return df_copy[["Date", "Value", "quantile"]] 41 | 42 | class Modality(IntFlag): 43 | FUDAMENTAL_VALUTION = 0b00000001 44 | FUDAMENTAL_DIVIDEND = 0b00000010 45 | FUDAMENTAL_GROWTH = 0b000000100 46 | FUDAMENTAL_QUALITY = 0b000001000 47 | NEWS = 0b000010000 48 | BASE_DATA = 0b000100000 49 | CROSS_INDUSTRY_LABEL = 0b001000000 50 | RISK_FACTOR = 0b010000000 51 | PRICE_FEATURE = 0b100000000 52 | 53 | 54 | 55 | 56 | class StockDisagreementAgent(): 57 | model_name: str = "Qwen2.5-72B-Instruct" 58 | model_server: str = "http://127.0.0.1:1025/v1" 59 | api_key: str = "" 60 | prev_stock: list[str] | None = None 61 | system_prompt: str = "You are a helpful assistant. Strictly follow the user's input prompt and output the result in JSON format as specified. Do not include any additional content." 62 | investing_history: InvestingHistory = InvestingHistory() 63 | 64 | def __init__(self, 65 | stock_num: int, 66 | stock_pool: pd.DataFrame, 67 | stock_labels: pd.DataFrame, 68 | csi_300_pe: pd.DataFrame, 69 | cpi: pd.DataFrame, 70 | loan_rate: pd.DataFrame, 71 | yield_on_China_bonds: pd.DataFrame, 72 | market_sentiment_index: pd.DataFrame, 73 | is_self_reflective: bool = False, 74 | max_reflective_times: int = 10, 75 | start_date: int | None = None, 76 | end_date: int | None = None, 77 | modality: Modality = Modality.FUDAMENTAL_VALUTION, 78 | use_prev_stock: bool = False, 79 | use_self_reflection: bool = False, 80 | use_macro_data: bool = False, 81 | ): 82 | self.client = OpenAI(api_key=self.api_key, base_url=self.model_server) 83 | self.model = OpenAIModel(self.model_name, None, 80000) 84 | self.stock_num = stock_num 85 | self.stock_pool = stock_pool 86 | self.stock_labels = stock_labels 87 | self.is_self_reflective = is_self_reflective 88 | self.max_reflective_times = max_reflective_times 89 | self.loan_rate = loan_rate 90 | self.cpi = cpi 91 | self.market_sentiment_index = market_sentiment_index 92 | self.csi_300_pe = csi_300_pe 93 | self.yield_on_China_bonds = yield_on_China_bonds 94 | self.csi_300_pe = calculate_pe_quantile_5y(csi_300_pe) 95 | 96 | self.csi_300_pe["Date"] = self.csi_300_pe["Date"].astype("int32") 97 | 98 | self.cpi["Date"] = self.cpi["Date"].astype("int32") 99 | 100 | self.yield_on_China_bonds["Date"] = pd.to_datetime(self.yield_on_China_bonds["Date"].astype(str)) 101 | self.yield_on_China_bonds["Date"] = self.yield_on_China_bonds["Date"].dt.strftime("%Y%m%d").astype("int32") 102 | self.yield_on_China_bonds = self.yield_on_China_bonds.sort_values("Date") 103 | self.yield_on_China_bonds["1_day_diff"] = self.yield_on_China_bonds["Value"].diff(periods=1) 104 | self.yield_on_China_bonds["30_day_diff"] = self.yield_on_China_bonds["Value"].diff(periods=30) 105 | self.yield_on_China_bonds["180_day_diff"] = self.yield_on_China_bonds["Value"].diff(periods=180) 106 | 107 | self.loan_rate["Date"] = self.loan_rate["Date"].astype("int32") 108 | 109 | self.market_sentiment_index["Date"] = self.market_sentiment_index["Date"].astype("int32") 110 | 111 | 112 | if start_date is None: 113 | self.start_date = stock_pool["Date"].min() 114 | else: 115 | self.start_date = start_date 116 | if end_date is None: 117 | self.end_date = stock_pool["Date"].max() 118 | else: 119 | self.end_date = end_date 120 | self.modality = modality 121 | self.prepare_data: dict[str, pd.DataFrame] = {} 122 | self.description: dict[str, str] = {} 123 | self.strategy_input: str = "" 124 | # self.prepare_data_source() 125 | self.strategy: dict[str, Any] = None 126 | self.stock_selector: BasicStockSelector = None 127 | self.use_macro_data = use_macro_data 128 | self.investment_analyzer = InvestmentAnalyzer() 129 | self.use_prev_stock = use_prev_stock 130 | self.use_self_reflection = use_self_reflection 131 | 132 | def generate_macro_data_input(self, date: int) -> str: 133 | latest_loan_rate_date = self.loan_rate[self.loan_rate["Date"] <= date]["Date"].max() 134 | latest_loan_rate = self.loan_rate[self.loan_rate["Date"] == latest_loan_rate_date]["Value"].iloc[0] 135 | res = "" 136 | res += f"The latest 1 year loan prime rate is {str(latest_loan_rate)}. " 137 | 138 | latest_cpi_rate_date = self.cpi[self.cpi["Date"] <= date]["Date"].max() 139 | latest_cpi = self.cpi[self.cpi["Date"] == latest_cpi_rate_date]["Value"].iloc[0] 140 | res += f"The latest month China CPI YOY growth rate is {str(latest_cpi)}. " 141 | latest_yield_on_China_bonds_date = self.yield_on_China_bonds[self.yield_on_China_bonds["Date"] <= date]["Date"].max() 142 | latest_yield = self.yield_on_China_bonds[self.yield_on_China_bonds["Date"] == latest_yield_on_China_bonds_date]["Value"].iloc[0] 143 | one_day_yield_diff = self.yield_on_China_bonds[self.yield_on_China_bonds["Date"] == latest_yield_on_China_bonds_date]["1_day_diff"].iloc[0] 144 | month_yield_diff = self.yield_on_China_bonds[self.yield_on_China_bonds["Date"] == latest_yield_on_China_bonds_date]["30_day_diff"].iloc[0] 145 | half_year_yield_diff = self.yield_on_China_bonds[self.yield_on_China_bonds["Date"] == latest_yield_on_China_bonds_date]["180_day_diff"].iloc[0] 146 | res += f"The latest yield of China ten year government bonds is {str(latest_yield)}%, while yield increases {str(round(one_day_yield_diff * 100))} BP over past one day,\ 147 | increases {str(round(month_yield_diff * 100))} BP over past one month, increases {str(round(half_year_yield_diff * 100))} BP over past half an year. " 148 | latest_pe_date = self.csi_300_pe[self.csi_300_pe["Date"] <= date]["Date"].max() 149 | latest_pe = self.csi_300_pe[self.csi_300_pe["Date"] == latest_pe_date]["Value"].iloc[0] 150 | latest_pe_quantile = self.csi_300_pe[self.csi_300_pe["Date"] == latest_pe_date]["quantile"].iloc[0] 151 | res += f"The latest csi_300 pe is {str(latest_pe)}, and the current PE ratio of the CSI 300 is at the {latest_pe_quantile} percentile over the past 5 years(0 indicates most undervalued, and 100 indicates most overvalued). " 152 | market_sentiment_index_date = self.market_sentiment_index[self.market_sentiment_index["Date"] <= date]["Date"].max() 153 | market_sentiment_index_pricechange = self.market_sentiment_index[self.market_sentiment_index["Date"] == market_sentiment_index_date]["PriceChange"].iloc[0] 154 | res += f"The latest market sentiement index got {str(round( market_sentiment_index_pricechange * 100, 2))} % return." 155 | 156 | return res 157 | 158 | 159 | def prepare_data_source(self, news_info: pd.DataFrame, news_relationship: pd.DataFrame) -> None: 160 | if self.modality & Modality.FUDAMENTAL_VALUTION: 161 | keys = ["E/P", "B/P", "CF/P", "S/P", 162 | "Log-orthogonalized E/P", "Log-orthogonalized B/P", 163 | "Log-orthogonalized CF/P", "Log-orthogonalized S/P", "EBITDA/EV"] 164 | 165 | self.prepare_data["fudamental_valuation"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/sub_fudamental_data.parq")[["Stock", "Date"] + keys] 166 | self.description["E/P"] = "The inverse of the P/E ratio (E/P) indicates the earnings yield, showing the percentage of profit generated per dollar invested in the stock." 167 | self.description["B/P"] = "Inverse of P/B (B/P) indicates the book yield, showing the return on book value per dollar invested." 168 | self.description["S/P"] = "Inverse of P/S (S/P) reflects the sales yield, showing sales generated per dollar invested." 169 | self.description["CF/P"] = "Inverse of P/CF (CF/P) shows the cash flow yield, representing cash flow generated per dollar invested." 170 | self.description["Log-orthogonalized E/P"] = "Log-orthogonalized version of E/P, removing some kind of cap basis.Log-orthogonalized version of E/P, removing some kind of cap basis." 171 | self.description["Log-orthogonalized B/P"] = "Log-orthogonalized version of B/P, removing some kind of cap basis." 172 | self.description["Log-orthogonalized CF/P"] = "Log-orthogonalized version of CF/P, removing some kind of cap basis." 173 | self.description["Log-orthogonalized S/P"] = "Log-orthogonalized version of S/P, removing some kind of cap basis." 174 | self.description["EBITDA/EV"] = "Measures a company's return on enterprise value, indicating operating earnings (EBITDA) generated per dollar of EV." 175 | 176 | if self.modality & Modality.FUDAMENTAL_QUALITY: 177 | keys = ["ROE stability", "ROA stability", "ROE", "Annualized ROE"] 178 | self.prepare_data["fudamental_quality"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/sub_fudamental_data.parq")[["Stock", "Date"] + keys] 179 | self.description["ROE"] = "ROE Measures profitability, showing net income generated per dollar of shareholders' equity." 180 | self.description["ROE stability"] = "TS_Mean(ROE, 8) / TS_Std(ROE, 8), measuring both absolute value and stability of ROE." 181 | self.description["ROA stability"] = "TS_Mean(ROA, 8) / TS_Std(ROA, 8), measuring both absolute value and stability of ROA." 182 | self.description["Annualized ROE"] = "Annualized version of ROE." 183 | 184 | if self.modality & Modality.FUDAMENTAL_DIVIDEND: 185 | keys = ["Dividend yield", "Log-orthogonalized dividend yield", "Log-orthogonalized dividend yield", "Dividend yield incl repo & mjrholder trans"] 186 | self.prepare_data["fudamental_dividend"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/sub_fudamental_data.parq")[["Stock", "Date"] + keys] 187 | self.description["Dividend yield"] = "Dividend yield indicates annual dividends received per dollar invested, expressed as a percentage of the stock price" 188 | self.description["Log-orthogonalized dividend yield"] = "Log-orthogonalized version of dividend yield, removing some kind of cap basis." 189 | self.description["Dividend yield incl repo & mjrholder trans"] = "Dividend yield including stock repurchasing and major holder trading." 190 | 191 | if self.modality & Modality.FUDAMENTAL_GROWTH: 192 | keys = ["Revenue TTM YoY growth rate", "Net profit TTM YoY growth rate", "Non-GAAP net profit YoY growth rate"] 193 | self.prepare_data["fudamental_growth"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/sub_fudamental_data.parq")[["Stock", "Date"] + keys] 194 | self.description["Revenue TTM YoY growth rate"] = "Measures the percentage change in trailing twelve months' revenue compared to the same period last year." 195 | self.description["Net profit TTM YoY growth rate"] = "Measures the percentage change in trailing twelve months' net profit compared to the same period last year." 196 | self.description["Non-GAAP net profit YoY growth rate"] = "Indicates the percentage change in non-GAAP net profit compared to the same period last year." 197 | 198 | if self.modality & Modality.RISK_FACTOR: 199 | keys = ["Intraday volatility", "Liquidity", "Residual volatility"] 200 | self.prepare_data["risk_factor"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/sub_fudamental_data.parq")[["Stock", "Date"] + keys] 201 | self.description["Intraday volatility"] = "Measuring the price fluctuation range of a stock within a single trading day." 202 | self.description["Liquidity"] = "Weighted average of monthly, quarterly and yearly turnover ratio." 203 | self.description["Residual volatility"] = "Residual volatility measures the unexplained variability in a security's returns after accounting for market or factor influences, indicating idiosyncratic risk." 204 | 205 | 206 | if self.modality & Modality.BASE_DATA: 207 | keys = ["Open", "High", "Low", "Close", "Value"] 208 | self.prepare_data["base_data"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/base_data.parq")[["Stock", "Date"] + keys] 209 | 210 | if self.modality & Modality.CROSS_INDUSTRY_LABEL: 211 | keys = ["Industry", "Daily_Return"] 212 | self.prepare_data["cross_industry_label"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/industry_ret.parq")[keys] 213 | self.prepare_data["stock_basic_data"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/stock_basic_data.parq") 214 | self.description["Daily_Return"] = "One-day return of holding the sector's constituent stocks." 215 | 216 | if self.modality & Modality.PRICE_FEATURE: 217 | keys = ["price_value_feature_0", "price_value_feature_1", "price_value_feature_2", 218 | "price_value_feature_3", "price_value_feature_4", "price_value_feature_5"] 219 | 220 | self.prepare_data["price_value_data"] = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/price_feature.parq")[["Stock", "Date"] + keys] 221 | self.description["price_value_feature_0"] = "Combined feature using price and value data, theoretically negatively correlated with future daily returns over the next 1-5 days." 222 | self.description["price_value_feature_1"] = "Combined feature using price and value data, theoretically negatively correlated with future daily returns over the next 1-5 days." 223 | self.description["price_value_feature_2"] = "Combined feature using price and value data, theoretically negatively correlated with future daily returns over the next 1-5 days." 224 | self.description["price_value_feature_3"] = "Combined feature using price and value data, theoretically positively correlated with future daily returns over the next 1-5 days." 225 | self.description["price_value_feature_4"] = "Combined feature using price and value data, theoretically negatively correlated with future daily returns over the next 1-5 days." 226 | self.description["price_value_feature_5"] = "Combined feature using price and value data, theoretically possitively correlated with future daily returns over the next 1-5 days." 227 | 228 | if self.modality & Modality.NEWS: 229 | news_info = news_info 230 | news_relationship = news_relationship.merge(self.stock_pool[["Stock", "Date"]], on=["Stock", "Date"]) 231 | self.prepare_data["news"] = news_info[["Date", "NewsId", "NewsTitle"]].merge(news_relationship[["Stock","NewsId"]], on=["NewsId"]) 232 | # self.prepare_data["news"] = news_info.iloc[:, ~self.prepare_data["news"].columns.isin(["NewsId"])] 233 | 234 | 235 | def generate_strategy_input(self, date: int = None) -> tuple[str, str]: 236 | def generate_headers() -> dict[str, str]: 237 | res = {} 238 | for key, description in self.description.items(): 239 | res[key] = description 240 | if "news" in self.prepare_data.keys(): 241 | res["news"] = f"Investors read news to make investment descisions. The example news is: {self.prepare_data['news']['NewsTitle'].head(3).to_list()}" 242 | return res 243 | headers = generate_headers() 244 | input = f"Investors read following information to make investment decisions. The information is in key-value format, key representing name, value representing descriptions.: \ 245 | {str(headers)}. \n" 246 | if date is None: 247 | return input, None 248 | macro_input = self.generate_macro_data_input(date) 249 | return input, macro_input 250 | 251 | def genererate_self_reflection_input(self, date:int) -> dict[str, Any]: 252 | def get_stock_labels(date: int, x: int, stock_labels: pd.DataFrame) -> Tuple[bool, pd.DataFrame]: 253 | if x <= 0: 254 | raise ValueError(f"{x} is expected to be positive integers.") 255 | stock_labels = stock_labels.sort_values("Date") 256 | sorted_dates = np.sort(stock_labels["Date"].unique()) 257 | idx = np.searchsorted(sorted_dates, date, side="left") 258 | target_idx = idx - x 259 | if target_idx < 0: 260 | return False, None 261 | target_date = sorted_dates[target_idx] 262 | target_data = stock_labels[stock_labels["Date"] == target_date] 263 | success = len(target_data) > 0 264 | return success, target_data 265 | res_dict = {} 266 | pass_days = [1, 5, 10] 267 | for pass_day in pass_days: 268 | success, pass_stock_labels = get_stock_labels(date, pass_day, self.stock_labels) 269 | if not success: 270 | break 271 | success, pass_stock_list = self.investing_history.get_history_stocks(pass_day) 272 | if not success: 273 | break 274 | success, chosen_stock_list = self.investing_history.get_chosen_stocks(pass_day) 275 | if not success: 276 | break 277 | success, pass_investing_history = self.investing_history.get_record(pass_day) 278 | if not success: 279 | break 280 | current_dict = {} 281 | current_dict["description"] = f"Investing history {pass_day} ago." 282 | current_dict["input_data"] = pass_investing_history 283 | sub_stock_label = pass_stock_labels[pass_stock_labels["Stock"].isin(pass_stock_list)].copy() 284 | sub_stock_label["rank"] = sub_stock_label[f"{pass_day}_15_labelB"].rank(ascending=False, method="min") 285 | investment_res = "" 286 | for stock in chosen_stock_list: 287 | if stock in pass_stock_list: 288 | if stock in sub_stock_label["Stock"].unique().tolist(): 289 | investment_res += f"For chosen stock {stock}, you get rank {sub_stock_label[sub_stock_label['Stock'] == stock]['rank'].iloc[0].astype(int)} out of {len(pass_stock_list)}." 290 | current_dict["investment_res"] = investment_res 291 | res_dict[f"{pass_day} ago"] = current_dict 292 | return res_dict 293 | 294 | def generate_strategy_and_stock_selector(self, date: int = None) -> None: 295 | data_input, macro_input = self.generate_strategy_input(date) 296 | if not self.use_macro_data: 297 | strategy_input = INVESTING_STYLE_INSTRUCTION.format(examples=INVSETING_STYLE_EXAMPLE, input_data=data_input) 298 | else: 299 | strategy_input = INVESTING_STYLE_INSTRUCTION_WITH_MARCO_DATA.format(examples=INVESTING_STYLE_WITH_MACRO_DATA_EXAMPLE, 300 | input_data=data_input, 301 | macro_data=macro_input) 302 | strategy,_ = self.model.chat_generate(client=self.client, 303 | system_prompt=self.system_prompt, 304 | input_string=strategy_input 305 | ) 306 | json_strategy = json.loads(strategy) 307 | selector_name = json_strategy["Details"]["StockPoolSelector"] 308 | if isinstance(selector_name, str): 309 | if selector_name == "RandomStockSelector": 310 | stock_selector = RandomStockSelector(self.stock_num, self.stock_pool, self.start_date, self.end_date) 311 | elif selector_name == "IndustryEqualStockSelector": 312 | stock_selector = IndustryEqualStockSelector(self.stock_num, self.stock_pool, self.start_date, self.end_date) 313 | elif selector_name == "MVEqualStockSelector": 314 | stock_selector = MVEqualStockSelector(self.stock_num, self.stock_pool, self.start_date, self.end_date) 315 | else: 316 | stock_selector = RandomStockSelector(self.stock_num, self.stock_pool, self.start_date, self.end_date) 317 | # elif isinstance(selector_name, dict): 318 | # assert len(list(selector_name.keys())) == 1 319 | # assert list(selector_name.keys())[0] == "I" 320 | # basis_indutsry = selector_name["IndustryBasisStockSelector"] 321 | # assert isinstance(basis_indutsry, list[str]) 322 | # stock_selector = IndustryBasisStockSelector(self.stock_num, self.stock_pool, self.start_date, self.end_date, basis_indutsry) 323 | else: 324 | print("stock selector does not match, using default random stock selector.") 325 | stock_selector = RandomStockSelector(self.stock_num, self.stock_pool, self.start_date, self.end_date) 326 | assert isinstance(stock_selector, BasicStockSelector) 327 | if self.stock_selector is None: 328 | self.stock_selector = stock_selector 329 | self.strategy = json_strategy 330 | 331 | def invest(self, date: int, num_stocks: int) -> None: 332 | # if self.use_macro_data: 333 | self.generate_strategy_and_stock_selector(date) 334 | # if self.use_prev_stock: 335 | # if self.prev_stock is None: 336 | # current_stock = self.stock_selector.select_stock_for_llm(date=date) 337 | # else: 338 | # all_in_stock_pool = True 339 | # for stock in self.prev_stock: 340 | # if stock not in self.stock_pool[self.stock_pool["Date"] == date]["Stock"].tolist(): 341 | # all_in_stock_pool = False 342 | # break 343 | # if all_in_stock_pool: 344 | # current_stock = self.prev_stock 345 | # else: 346 | # current_stock = self.stock_selector.select_stock_for_llm(date=date) 347 | # else: 348 | # current_stock = self.stock_selector.select_stock_for_llm(date=date) 349 | # self.prev_stock = current_stock 350 | 351 | current_stock = self.stock_selector.select_stock_for_llm(date=date) 352 | 353 | prepare_datas = {} 354 | descriptions = {} 355 | for key in self.prepare_data: 356 | if "Stock" in self.prepare_data[key].columns and "Date" in self.prepare_data[key].columns: 357 | prepare_datas[key] = self.prepare_data[key][(self.prepare_data[key]["Date"] == date) & (self.prepare_data[key]["Stock"].isin(current_stock))] 358 | elif "Stock" in self.prepare_data[key].columns: 359 | prepare_datas[key] = self.prepare_data[key][(self.prepare_data[key]["Stock"].isin(current_stock))] 360 | for key in self.description: 361 | descriptions[key] = self.description[key] 362 | input_data = f"Input Data for investing decision:1. descriptions: {str(descriptions)}, 2. input data: {str(prepare_datas)}." 363 | investment_strategy = f" Investment strategy: {str(self.strategy)}" 364 | if not self.use_self_reflection: 365 | llm_input = INVESTING_DECISION_INSTRUCTION.format(num_stocks = num_stocks, examples = INVESTING_DECISION_EXAMPLE, input_data = input_data + investment_strategy) 366 | else: 367 | reflection_input = self.genererate_self_reflection_input(date) 368 | llm_input = INVESTING_DECISION_INSTRUCTION_USING_SELF_REFLECTION.format(num_stocks = num_stocks, 369 | examples = INVESTING_DECISION_EXAMPLE, input_data = input_data + investment_strategy, 370 | decision_history = str(reflection_input)) 371 | for attempt in range(MAX_RETRIRES): 372 | try: 373 | res, reason = self.model.chat_generate(client=self.client, 374 | system_prompt=self.system_prompt, 375 | input_string=llm_input) 376 | selected_stocks = json.loads(res)["Stock"] 377 | print(f"on {date}, agent {self.modality} chooses {str(selected_stocks)}") 378 | # if num_stocks != len(selected_stocks): 379 | # raise ValueError(f"LLM does not output required num stocks, expected {num_stocks}, actual {len(selected_stocks)}") 380 | for stock in selected_stocks: 381 | if stock not in current_stock: 382 | print(f"current stock is {str(current_stock)}, whereas current selected stock is {stock}") 383 | raise ValueError(f"LLM output illegal stock code {stock}!") 384 | break 385 | except Exception as e: 386 | self.investing_history.add_records(input_data, current_stock, []) 387 | print(f"occuring exceptions {str(e)} in investment decisions") 388 | if attempt >= MAX_RETRIRES - 1: 389 | print("Exceeding max retries, giving up.") 390 | return 391 | self.investing_history.add_records(input_data, current_stock, selected_stocks) 392 | selected_stock_res = {} 393 | for stock in current_stock: 394 | if stock in selected_stocks: 395 | selected_stock_res[stock] = 1 396 | else: 397 | selected_stock_res[stock] = 0 398 | self.investment_analyzer.record_score(date, self.modality, 1, selected_stock_res) 399 | -------------------------------------------------------------------------------- /stock_disagreement/agent/investing_history.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | from typing import Tuple, Optional 3 | 4 | class InvestingHistory(): 5 | """记录每个Agent的投资决策历史.""" 6 | def __init__(self) -> None: 7 | self.records = deque() 8 | self.history_stock_list = deque() 9 | self.chosen_stock_list = deque() 10 | 11 | def add_records(self, record: str, history_stocks: list[str], chosen_stocks: list[str]) -> None: 12 | self.records.append(record) 13 | self.history_stock_list.append(history_stocks) 14 | self.chosen_stock_list.append(chosen_stocks) 15 | 16 | def get_record(self, n_days_ago: int = 1) -> Tuple[bool, Optional[str]]: 17 | if n_days_ago <= 0: 18 | raise ValueError(f"{n_days_ago} is illegal, please input positive integers.") 19 | total_records = len(self.records) 20 | if n_days_ago > total_records: 21 | return False, {} 22 | return True, self.records[-n_days_ago] 23 | 24 | def get_history_stocks(self, n_days_ago: int = 1) -> Tuple[bool, Optional[list[str]]]: 25 | if n_days_ago <= 0: 26 | raise ValueError(f"{n_days_ago} is illegal, please input positive integers.") 27 | total_stock_records = len(self.history_stock_list) 28 | if n_days_ago > total_stock_records: 29 | return False, [] 30 | 31 | return True, self.history_stock_list[-n_days_ago] 32 | 33 | def get_chosen_stocks(self, n_days_ago: int = 1) -> Tuple[bool, Optional[list[str]]]: 34 | if n_days_ago <= 0: 35 | raise ValueError(f"{n_days_ago} is illegal, please input positive integers.") 36 | total_stock_records = len(self.chosen_stock_list) 37 | if n_days_ago > total_stock_records: 38 | return False, [] 39 | 40 | return True, self.chosen_stock_list[-n_days_ago] 41 | -------------------------------------------------------------------------------- /stock_disagreement/agent/investment_analyzer.py: -------------------------------------------------------------------------------- 1 | import threading 2 | import numpy as np 3 | 4 | class InvestmentAnalyzer: 5 | _instance = None 6 | _lock = threading.Lock() 7 | 8 | def __new__(cls): 9 | if cls._instance is None: 10 | with cls._lock: 11 | if cls._instance is None: 12 | cls._instance = super().__new__(cls) 13 | cls._instance.data = {} 14 | return cls._instance 15 | 16 | def __init__(self): 17 | if not hasattr(self, 'initialized'): 18 | self.initialized = True 19 | self.data = {} 20 | 21 | def record_score(self, date:int, investor_type: int, investor_id: int, stocks: dict[str, int]): 22 | with threading.Lock(): 23 | if date not in self.data: 24 | self.data[date] = {} 25 | if investor_type not in self.data[date]: 26 | self.data[date][investor_type] = {} 27 | for (key, value) in stocks.items(): 28 | if key not in self.data[date][investor_type]: 29 | self.data[date][investor_type][key] = { 30 | "score": 0, 31 | "num_investors": 0 32 | } 33 | self.data[date][investor_type][key]["score"] += value 34 | self.data[date][investor_type][key]["num_investors"] += 1 35 | 36 | def calculate_stock_disagreement_score(self, 37 | date: int, 38 | stock_pool: list[str], 39 | agent_distributions:dict[int, float] , 40 | alpha:float = 0.5): 41 | res = {} 42 | distributions = [] 43 | with threading.Lock(): 44 | for investor_type in self.data[date]: 45 | if investor_type in agent_distributions: 46 | distribution = agent_distributions[investor_type] 47 | else: 48 | distribution = 0.0 49 | raise ValueError(f"agent type {investor_type} does not exist!") 50 | for stock in stock_pool: 51 | if stock not in self.data[date][investor_type]: 52 | self.data[date][investor_type][stock] = { 53 | "score": 0, 54 | "num_investors": 0 55 | } 56 | for stock_code in self.data[date][investor_type]: 57 | stock_data = self.data[date][investor_type][stock_code] 58 | total_scores = stock_data["score"] 59 | total_investors = stock_data["num_investors"] 60 | if stock_code not in res: 61 | res[stock_code] = [(total_scores / total_investors) if total_investors != 0 else 0] 62 | else: 63 | res[stock_code].append((total_scores / total_investors)if total_investors != 0 else 0) 64 | distributions.append(distribution) 65 | for stock_code in res: 66 | mean_value = np.sum(np.array(res[stock_code]) * distributions) / np.sum(distributions) 67 | std = np.sqrt(np.average((np.array(res[stock_code]) - mean_value) ** 2, weights=distributions)) 68 | res[stock_code] = [alpha * mean_value - (1 - alpha) * std, mean_value, -std] 69 | return res 70 | 71 | -------------------------------------------------------------------------------- /stock_disagreement/agent/investor_distribution_agent.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/agent/investor_distribution_agent.py -------------------------------------------------------------------------------- /stock_disagreement/agent/stock_selector.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | from typing import Iterator, Any, Optional 4 | import random 5 | 6 | 7 | class BasicStockSelector(): 8 | def __init__(self, stock_num: int, 9 | stock_pool: pd.DataFrame, 10 | start_date: int | None = None, 11 | end_date: int | None = None): 12 | self.stock_num = stock_num 13 | self.stock_pool = stock_pool 14 | self.stock_pool = self.stock_pool.sort_values(["Stock", "Date"]) 15 | if start_date is None: 16 | self.start_date = self.stock_pool["Date"].min() 17 | else: 18 | self.start_date = start_date 19 | if end_date is None: 20 | self.end_date = self.stock_pool["Date"].max() 21 | else: 22 | self.end_date = end_date 23 | self.stock_pool = self.stock_pool.query("Date >= @self.start_date and Date <= @self.end_date") 24 | self.stock_iterator = self._get_cross_section() 25 | self.current_date = None 26 | self.current_data = None 27 | 28 | def _get_cross_section(self) -> Iterator[tuple[int, pd.DataFrame]]: 29 | for (date, group) in self.stock_pool.groupby("Date"): 30 | yield (date, group) 31 | 32 | def get_next(self) -> bool: 33 | try: 34 | self.current_date, self.current_data = next(self.stock_iterator) 35 | return True 36 | except StopIteration: 37 | return False 38 | 39 | def select_stock_for_llm(self) -> list[str]: 40 | pass 41 | 42 | class RandomStockSelector(BasicStockSelector): 43 | def __init__(self, stock_num: int, 44 | stock_pool: pd.DataFrame, 45 | start_date: int | None = None, 46 | end_date: int | None = None): 47 | super().__init__(stock_num, stock_pool, start_date, end_date) 48 | 49 | def select_stock_for_llm(self, date:int = None) -> list[str]: 50 | if date is None: 51 | return random.choices(self.current_data["Stock"].to_list(),k=self.stock_num) 52 | else: 53 | current_data = self.stock_pool[self.stock_pool["Date"] == date].copy() 54 | return random.choices(current_data["Stock"].to_list(),k=self.stock_num) 55 | 56 | 57 | class IndustryEqualStockSelector(BasicStockSelector): 58 | def __init__(self, stock_num, stock_pool, start_date=None, end_date=None): 59 | super().__init__(stock_num, stock_pool, start_date, end_date) 60 | 61 | def select_stock_for_llm(self, date:int=None) -> list[str]: 62 | if date is None: 63 | assert "Industry" in self.current_data.columns 64 | self.current_data["weight"] = 1 65 | weights = self.current_data.groupby("Industry")["weight"].transform(lambda x: x / x.sum()) 66 | return random.choices(self.current_data["Stock"].to_list(), k=self.stock_num, weights=weights.to_list()) 67 | else: 68 | current_data = self.stock_pool[self.stock_pool["Date"] == date].copy() 69 | assert "Industry" in current_data.columns 70 | current_data["weight"] = 1 71 | weights = current_data.groupby("Industry")["weight"].transform(lambda x: x / x.sum()) 72 | return random.choices(current_data["Stock"].to_list(), k=self.stock_num, weights=weights.to_list()) 73 | 74 | 75 | class IndustryBasisStockSelector(BasicStockSelector): 76 | def __init__(self, stock_num, stock_pool, start_date = None, end_date = None, basis_industry = None): 77 | super().__init__(stock_num, stock_pool, start_date, end_date) 78 | self.basis_industry = basis_industry 79 | 80 | def select_stock_for_llm(self, basis: float = 0.2, date: int = None) -> list[str]: 81 | if date is None: 82 | assert "Industry" in self.current_data.columns 83 | self.current_data["weight"] = np.where(self.current_data["Industry"].isin(self.basis_industry), 1, basis) 84 | weights = self.current_data.groupby("Industry")["weight"].transform(lambda x: x / x.sum()) 85 | return random.choices(self.current_data["Stock"].to_list(), k=self.stock_num, weights=weights.to_list()) 86 | else: 87 | current_data = self.stock_pool[self.stock_pool["Date"] == date].copy() 88 | assert "Industry" in current_data.columns 89 | current_data["weight"] = np.where(current_data["Industry"].isin(self.basis_industry), 1, basis) 90 | weights = current_data.groupby("Industry")["weight"].transform(lambda x: x / x.sum()) 91 | return random.choices(current_data["Stock"].to_list(), k=self.stock_num, weights=weights.to_list()) 92 | 93 | 94 | class MVEqualStockSelector(BasicStockSelector): 95 | def __init__(self, stock_num, stock_pool, start_date = None, end_date = None): 96 | super().__init__(stock_num, stock_pool, start_date, end_date) 97 | 98 | def select_stock_for_llm(self, num_groups: int = 5, date: int = None) -> list[str]: 99 | if date is None: 100 | assert "FREE_MV" in self.current_data.columns 101 | self.current_data["rank"] = self.current_data.groupby("Date")["FREE_MV"].rank(ascending=False) 102 | self.current_data["count"] = self.current_data.groupby("Date")["Stock"].transform("count") 103 | self.current_data["group"] = ((self.current_data["rank"] - 1) // (self.current_data["count"] / num_groups)).astype(int) 104 | self.current_data["weight"] = 1 105 | weights = self.current_data.groupby("group")["weight"].transform(lambda x: x / x.sum()) 106 | return random.choices(self.current_data["Stock"].to_list(), k=self.stock_num, weights=weights.to_list()) 107 | else: 108 | current_data = self.stock_pool[self.stock_pool["Date"] == date].copy() 109 | assert "FREE_MV" in current_data.columns 110 | current_data["rank"] = current_data.groupby("Date")["FREE_MV"].rank(ascending=False) 111 | current_data["count"] = current_data.groupby("Date")["Stock"].transform("count") 112 | current_data["group"] = ((current_data["rank"] - 1) // (current_data["count"] / num_groups)).astype(int) 113 | current_data["weight"] = 1 114 | weights = current_data.groupby("group")["weight"].transform(lambda x: x / x.sum()) 115 | return random.choices(current_data["Stock"].to_list(), k=self.stock_num, weights=weights.to_list()) 116 | -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/base_data.parq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/example_dataset/base_data.parq -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/ih_label.parq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/example_dataset/ih_label.parq -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/industry_ret.parq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/example_dataset/industry_ret.parq -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/macro_data/China_1-Year_Loan_Prime_Rate_LPR.csv: -------------------------------------------------------------------------------- 1 | ,Date,Value 2 | 0,20131025,5.71 3 | 1,20131028,5.72 4 | 2,20131029,5.72 5 | 3,20131030,5.72 6 | 4,20131031,5.72 7 | 5,20131101,5.72 8 | 6,20131104,5.72 9 | 7,20131105,5.72 10 | 8,20131106,5.72 11 | 9,20131107,5.72 12 | 10,20131108,5.72 13 | 11,20131111,5.72 14 | 12,20131112,5.72 15 | 13,20131113,5.72 16 | 14,20131114,5.72 17 | 15,20131115,5.72 18 | 16,20131118,5.72 19 | 17,20131119,5.73 20 | 18,20131120,5.73 21 | 19,20131121,5.73 22 | 20,20131122,5.73 23 | 21,20131125,5.73 24 | 22,20131126,5.73 25 | 23,20131127,5.73 26 | 24,20131128,5.73 27 | 25,20131129,5.73 28 | 26,20131202,5.73 29 | 27,20131203,5.73 30 | 28,20131204,5.73 31 | 29,20131205,5.73 32 | 30,20131206,5.73 33 | 31,20131209,5.73 34 | 32,20131210,5.73 35 | 33,20131211,5.73 36 | 34,20131212,5.73 37 | 35,20131213,5.73 38 | 36,20131216,5.73 39 | 37,20131217,5.73 40 | 38,20131218,5.73 41 | 39,20131219,5.73 42 | 40,20131220,5.73 43 | 41,20131223,5.73 44 | 42,20131224,5.73 45 | 43,20131225,5.73 46 | 44,20131226,5.73 47 | 45,20131227,5.73 48 | 46,20131230,5.73 49 | 47,20131231,5.73 50 | 48,20140102,5.73 51 | 49,20140103,5.73 52 | 50,20140106,5.73 53 | 51,20140107,5.73 54 | 52,20140108,5.73 55 | 53,20140109,5.73 56 | 54,20140110,5.73 57 | 55,20140113,5.73 58 | 56,20140114,5.73 59 | 57,20140115,5.73 60 | 58,20140116,5.73 61 | 59,20140117,5.73 62 | 60,20140120,5.73 63 | 61,20140121,5.73 64 | 62,20140122,5.73 65 | 63,20140123,5.73 66 | 64,20140124,5.73 67 | 65,20140126,5.73 68 | 66,20140127,5.73 69 | 67,20140128,5.73 70 | 68,20140129,5.73 71 | 69,20140130,5.73 72 | 70,20140207,5.73 73 | 71,20140208,5.73 74 | 72,20140210,5.73 75 | 73,20140211,5.73 76 | 74,20140212,5.73 77 | 75,20140213,5.74 78 | 76,20140214,5.76 79 | 77,20140217,5.76 80 | 78,20140218,5.76 81 | 79,20140219,5.76 82 | 80,20140220,5.76 83 | 81,20140221,5.76 84 | 82,20140224,5.76 85 | 83,20140225,5.76 86 | 84,20140226,5.76 87 | 85,20140227,5.76 88 | 86,20140228,5.76 89 | 87,20140303,5.76 90 | 88,20140304,5.76 91 | 89,20140305,5.76 92 | 90,20140306,5.76 93 | 91,20140307,5.76 94 | 92,20140310,5.76 95 | 93,20140311,5.76 96 | 94,20140312,5.76 97 | 95,20140313,5.76 98 | 96,20140314,5.76 99 | 97,20140317,5.76 100 | 98,20140318,5.76 101 | 99,20140319,5.76 102 | 100,20140320,5.76 103 | 101,20140321,5.76 104 | 102,20140324,5.76 105 | 103,20140325,5.76 106 | 104,20140326,5.76 107 | 105,20140327,5.76 108 | 106,20140328,5.76 109 | 107,20140331,5.76 110 | 108,20140401,5.77 111 | 109,20140402,5.77 112 | 110,20140403,5.77 113 | 111,20140404,5.77 114 | 112,20140408,5.77 115 | 113,20140409,5.77 116 | 114,20140410,5.77 117 | 115,20140411,5.77 118 | 116,20140414,5.77 119 | 117,20140415,5.77 120 | 118,20140416,5.77 121 | 119,20140417,5.77 122 | 120,20140418,5.77 123 | 121,20140421,5.77 124 | 122,20140422,5.77 125 | 123,20140423,5.77 126 | 124,20140424,5.77 127 | 125,20140425,5.77 128 | 126,20140428,5.77 129 | 127,20140429,5.77 130 | 128,20140430,5.77 131 | 129,20140504,5.77 132 | 130,20140505,5.77 133 | 131,20140506,5.77 134 | 132,20140507,5.77 135 | 133,20140508,5.77 136 | 134,20140509,5.77 137 | 135,20140512,5.77 138 | 136,20140513,5.77 139 | 137,20140514,5.77 140 | 138,20140515,5.77 141 | 139,20140516,5.77 142 | 140,20140519,5.77 143 | 141,20140520,5.77 144 | 142,20140521,5.77 145 | 143,20140522,5.77 146 | 144,20140523,5.77 147 | 145,20140526,5.77 148 | 146,20140527,5.77 149 | 147,20140528,5.77 150 | 148,20140529,5.77 151 | 149,20140530,5.77 152 | 150,20140603,5.77 153 | 151,20140604,5.77 154 | 152,20140605,5.77 155 | 153,20140606,5.77 156 | 154,20140609,5.77 157 | 155,20140610,5.77 158 | 156,20140611,5.77 159 | 157,20140612,5.77 160 | 158,20140613,5.77 161 | 159,20140616,5.77 162 | 160,20140617,5.76 163 | 161,20140618,5.76 164 | 162,20140619,5.76 165 | 163,20140620,5.76 166 | 164,20140623,5.76 167 | 165,20140624,5.76 168 | 166,20140625,5.76 169 | 167,20140626,5.76 170 | 168,20140627,5.76 171 | 169,20140630,5.76 172 | 170,20140701,5.76 173 | 171,20140702,5.76 174 | 172,20140703,5.76 175 | 173,20140704,5.76 176 | 174,20140707,5.76 177 | 175,20140708,5.76 178 | 176,20140709,5.76 179 | 177,20140710,5.76 180 | 178,20140711,5.76 181 | 179,20140714,5.76 182 | 180,20140715,5.76 183 | 181,20140716,5.76 184 | 182,20140717,5.76 185 | 183,20140718,5.76 186 | 184,20140721,5.76 187 | 185,20140722,5.76 188 | 186,20140723,5.76 189 | 187,20140724,5.76 190 | 188,20140725,5.76 191 | 189,20140728,5.76 192 | 190,20140729,5.76 193 | 191,20140730,5.76 194 | 192,20140731,5.76 195 | 193,20140801,5.76 196 | 194,20140804,5.76 197 | 195,20140805,5.76 198 | 196,20140806,5.76 199 | 197,20140807,5.76 200 | 198,20140808,5.76 201 | 199,20140811,5.76 202 | 200,20140812,5.76 203 | 201,20140813,5.76 204 | 202,20140814,5.76 205 | 203,20140815,5.76 206 | 204,20140818,5.76 207 | 205,20140819,5.76 208 | 206,20140820,5.76 209 | 207,20140821,5.76 210 | 208,20140822,5.76 211 | 209,20140825,5.76 212 | 210,20140826,5.76 213 | 211,20140827,5.76 214 | 212,20140828,5.76 215 | 213,20140829,5.76 216 | 214,20140901,5.76 217 | 215,20140902,5.76 218 | 216,20140903,5.76 219 | 217,20140904,5.76 220 | 218,20140905,5.76 221 | 219,20140909,5.76 222 | 220,20140910,5.76 223 | 221,20140911,5.76 224 | 222,20140912,5.76 225 | 223,20140915,5.76 226 | 224,20140916,5.76 227 | 225,20140917,5.76 228 | 226,20140918,5.76 229 | 227,20140919,5.76 230 | 228,20140922,5.76 231 | 229,20140923,5.76 232 | 230,20140924,5.76 233 | 231,20140925,5.76 234 | 232,20140926,5.76 235 | 233,20140928,5.76 236 | 234,20140929,5.76 237 | 235,20140930,5.76 238 | 236,20141008,5.76 239 | 237,20141009,5.76 240 | 238,20141010,5.76 241 | 239,20141011,5.76 242 | 240,20141013,5.76 243 | 241,20141014,5.76 244 | 242,20141015,5.76 245 | 243,20141016,5.76 246 | 244,20141017,5.76 247 | 245,20141020,5.76 248 | 246,20141021,5.76 249 | 247,20141022,5.76 250 | 248,20141023,5.76 251 | 249,20141024,5.76 252 | 250,20141027,5.76 253 | 251,20141028,5.76 254 | 252,20141029,5.76 255 | 253,20141030,5.76 256 | 254,20141031,5.76 257 | 255,20141103,5.76 258 | 256,20141104,5.76 259 | 257,20141105,5.76 260 | 258,20141106,5.76 261 | 259,20141107,5.76 262 | 260,20141110,5.76 263 | 261,20141111,5.76 264 | 262,20141112,5.76 265 | 263,20141113,5.76 266 | 264,20141114,5.76 267 | 265,20141117,5.76 268 | 266,20141118,5.76 269 | 267,20141119,5.76 270 | 268,20141120,5.76 271 | 269,20141121,5.76 272 | 270,20141124,5.56 273 | 271,20141125,5.56 274 | 272,20141126,5.56 275 | 273,20141127,5.52 276 | 274,20141128,5.51 277 | 275,20141201,5.51 278 | 276,20141202,5.51 279 | 277,20141203,5.51 280 | 278,20141204,5.51 281 | 279,20141205,5.51 282 | 280,20141208,5.51 283 | 281,20141209,5.51 284 | 282,20141210,5.51 285 | 283,20141211,5.51 286 | 284,20141212,5.51 287 | 285,20141215,5.51 288 | 286,20141216,5.51 289 | 287,20141217,5.51 290 | 288,20141218,5.51 291 | 289,20141219,5.51 292 | 290,20141222,5.51 293 | 291,20141223,5.51 294 | 292,20141224,5.51 295 | 293,20141225,5.51 296 | 294,20141226,5.51 297 | 295,20141229,5.51 298 | 296,20141230,5.51 299 | 297,20141231,5.51 300 | 298,20150104,5.51 301 | 299,20150105,5.51 302 | 300,20150106,5.51 303 | 301,20150107,5.51 304 | 302,20150108,5.51 305 | 303,20150109,5.51 306 | 304,20150112,5.51 307 | 305,20150113,5.51 308 | 306,20150114,5.51 309 | 307,20150115,5.51 310 | 308,20150116,5.51 311 | 309,20150119,5.51 312 | 310,20150120,5.51 313 | 311,20150121,5.51 314 | 312,20150122,5.51 315 | 313,20150123,5.51 316 | 314,20150126,5.51 317 | 315,20150127,5.51 318 | 316,20150128,5.51 319 | 317,20150129,5.51 320 | 318,20150130,5.51 321 | 319,20150202,5.51 322 | 320,20150203,5.51 323 | 321,20150204,5.51 324 | 322,20150205,5.51 325 | 323,20150206,5.51 326 | 324,20150209,5.51 327 | 325,20150210,5.51 328 | 326,20150211,5.51 329 | 327,20150212,5.51 330 | 328,20150213,5.51 331 | 329,20150215,5.51 332 | 330,20150216,5.51 333 | 331,20150217,5.51 334 | 332,20150225,5.51 335 | 333,20150226,5.51 336 | 334,20150227,5.51 337 | 335,20150228,5.51 338 | 336,20150302,5.3 339 | 337,20150303,5.3 340 | 338,20150304,5.3 341 | 339,20150305,5.3 342 | 340,20150306,5.3 343 | 341,20150309,5.3 344 | 342,20150310,5.3 345 | 343,20150311,5.3 346 | 344,20150312,5.3 347 | 345,20150313,5.3 348 | 346,20150316,5.3 349 | 347,20150317,5.3 350 | 348,20150318,5.3 351 | 349,20150319,5.3 352 | 350,20150320,5.3 353 | 351,20150323,5.3 354 | 352,20150324,5.3 355 | 353,20150325,5.3 356 | 354,20150326,5.3 357 | 355,20150327,5.3 358 | 356,20150330,5.3 359 | 357,20150331,5.3 360 | 358,20150401,5.3 361 | 359,20150402,5.3 362 | 360,20150403,5.3 363 | 361,20150407,5.3 364 | 362,20150408,5.3 365 | 363,20150409,5.3 366 | 364,20150410,5.3 367 | 365,20150413,5.3 368 | 366,20150414,5.3 369 | 367,20150415,5.3 370 | 368,20150416,5.3 371 | 369,20150417,5.3 372 | 370,20150420,5.3 373 | 371,20150421,5.3 374 | 372,20150422,5.3 375 | 373,20150423,5.3 376 | 374,20150424,5.3 377 | 375,20150427,5.3 378 | 376,20150428,5.3 379 | 377,20150429,5.3 380 | 378,20150430,5.3 381 | 379,20150504,5.3 382 | 380,20150505,5.3 383 | 381,20150506,5.3 384 | 382,20150507,5.3 385 | 383,20150508,5.3 386 | 384,20150511,5.05 387 | 385,20150512,5.05 388 | 386,20150513,5.05 389 | 387,20150514,5.05 390 | 388,20150515,5.05 391 | 389,20150518,5.05 392 | 390,20150519,5.05 393 | 391,20150520,5.05 394 | 392,20150521,5.05 395 | 393,20150522,5.05 396 | 394,20150525,5.05 397 | 395,20150526,5.05 398 | 396,20150527,5.05 399 | 397,20150528,5.05 400 | 398,20150529,5.05 401 | 399,20150601,5.05 402 | 400,20150602,5.05 403 | 401,20150603,5.05 404 | 402,20150604,5.05 405 | 403,20150605,5.05 406 | 404,20150608,5.05 407 | 405,20150609,5.05 408 | 406,20150610,5.05 409 | 407,20150611,5.05 410 | 408,20150612,5.05 411 | 409,20150615,5.05 412 | 410,20150616,5.05 413 | 411,20150617,5.05 414 | 412,20150618,5.05 415 | 413,20150619,5.05 416 | 414,20150623,5.05 417 | 415,20150624,5.05 418 | 416,20150625,5.05 419 | 417,20150626,5.05 420 | 418,20150629,4.8 421 | 419,20150630,4.8 422 | 420,20150701,4.8 423 | 421,20150702,4.8 424 | 422,20150703,4.8 425 | 423,20150706,4.8 426 | 424,20150707,4.8 427 | 425,20150708,4.8 428 | 426,20150709,4.8 429 | 427,20150710,4.8 430 | 428,20150713,4.8 431 | 429,20150714,4.8 432 | 430,20150715,4.8 433 | 431,20150716,4.8 434 | 432,20150717,4.8 435 | 433,20150720,4.8 436 | 434,20150721,4.8 437 | 435,20150722,4.8 438 | 436,20150723,4.8 439 | 437,20150724,4.8 440 | 438,20150727,4.8 441 | 439,20150728,4.8 442 | 440,20150729,4.8 443 | 441,20150730,4.8 444 | 442,20150731,4.8 445 | 443,20150803,4.8 446 | 444,20150804,4.8 447 | 445,20150805,4.8 448 | 446,20150806,4.8 449 | 447,20150807,4.8 450 | 448,20150810,4.8 451 | 449,20150811,4.8 452 | 450,20150812,4.8 453 | 451,20150813,4.8 454 | 452,20150814,4.8 455 | 453,20150817,4.8 456 | 454,20150818,4.8 457 | 455,20150819,4.8 458 | 456,20150820,4.8 459 | 457,20150821,4.8 460 | 458,20150824,4.8 461 | 459,20150825,4.8 462 | 460,20150826,4.55 463 | 461,20150827,4.55 464 | 462,20150828,4.55 465 | 463,20150831,4.55 466 | 464,20150901,4.55 467 | 465,20150902,4.55 468 | 466,20150906,4.55 469 | 467,20150907,4.55 470 | 468,20150908,4.55 471 | 469,20150909,4.55 472 | 470,20150910,4.55 473 | 471,20150911,4.55 474 | 472,20150914,4.55 475 | 473,20150915,4.55 476 | 474,20150916,4.55 477 | 475,20150917,4.55 478 | 476,20150918,4.55 479 | 477,20150921,4.55 480 | 478,20150922,4.55 481 | 479,20150923,4.55 482 | 480,20150924,4.55 483 | 481,20150925,4.55 484 | 482,20150928,4.55 485 | 483,20150929,4.55 486 | 484,20150930,4.55 487 | 485,20151008,4.55 488 | 486,20151009,4.55 489 | 487,20151010,4.55 490 | 488,20151012,4.55 491 | 489,20151013,4.55 492 | 490,20151014,4.55 493 | 491,20151015,4.55 494 | 492,20151016,4.55 495 | 493,20151019,4.55 496 | 494,20151020,4.55 497 | 495,20151021,4.55 498 | 496,20151022,4.55 499 | 497,20151023,4.55 500 | 498,20151026,4.3 501 | 499,20151027,4.3 502 | 500,20151028,4.3 503 | 501,20151029,4.3 504 | 502,20151030,4.3 505 | 503,20151102,4.3 506 | 504,20151103,4.3 507 | 505,20151104,4.3 508 | 506,20151105,4.3 509 | 507,20151106,4.3 510 | 508,20151109,4.3 511 | 509,20151110,4.3 512 | 510,20151111,4.3 513 | 511,20151112,4.3 514 | 512,20151113,4.3 515 | 513,20151116,4.3 516 | 514,20151117,4.3 517 | 515,20151118,4.3 518 | 516,20151119,4.3 519 | 517,20151120,4.3 520 | 518,20151123,4.3 521 | 519,20151124,4.3 522 | 520,20151125,4.3 523 | 521,20151126,4.3 524 | 522,20151127,4.3 525 | 523,20151130,4.3 526 | 524,20151201,4.3 527 | 525,20151202,4.3 528 | 526,20151203,4.3 529 | 527,20151204,4.3 530 | 528,20151207,4.3 531 | 529,20151208,4.3 532 | 530,20151209,4.3 533 | 531,20151210,4.3 534 | 532,20151211,4.3 535 | 533,20151214,4.3 536 | 534,20151215,4.3 537 | 535,20151216,4.3 538 | 536,20151217,4.3 539 | 537,20151218,4.3 540 | 538,20151221,4.3 541 | 539,20151222,4.3 542 | 540,20151223,4.3 543 | 541,20151224,4.3 544 | 542,20151225,4.3 545 | 543,20151228,4.3 546 | 544,20151229,4.3 547 | 545,20151230,4.3 548 | 546,20151231,4.3 549 | 547,20160104,4.3 550 | 548,20160105,4.3 551 | 549,20160106,4.3 552 | 550,20160107,4.3 553 | 551,20160108,4.3 554 | 552,20160111,4.3 555 | 553,20160112,4.3 556 | 554,20160113,4.3 557 | 555,20160114,4.3 558 | 556,20160115,4.3 559 | 557,20160118,4.3 560 | 558,20160119,4.3 561 | 559,20160120,4.3 562 | 560,20160121,4.3 563 | 561,20160122,4.3 564 | 562,20160125,4.3 565 | 563,20160126,4.3 566 | 564,20160127,4.3 567 | 565,20160128,4.3 568 | 566,20160129,4.3 569 | 567,20160201,4.3 570 | 568,20160202,4.3 571 | 569,20160203,4.3 572 | 570,20160204,4.3 573 | 571,20160205,4.3 574 | 572,20160206,4.3 575 | 573,20160214,4.3 576 | 574,20160215,4.3 577 | 575,20160216,4.3 578 | 576,20160217,4.3 579 | 577,20160218,4.3 580 | 578,20160219,4.3 581 | 579,20160222,4.3 582 | 580,20160223,4.3 583 | 581,20160224,4.3 584 | 582,20160225,4.3 585 | 583,20160226,4.3 586 | 584,20160229,4.3 587 | 585,20160301,4.3 588 | 586,20160302,4.3 589 | 587,20160303,4.3 590 | 588,20160304,4.3 591 | 589,20160307,4.3 592 | 590,20160308,4.3 593 | 591,20160309,4.3 594 | 592,20160310,4.3 595 | 593,20160311,4.3 596 | 594,20160314,4.3 597 | 595,20160315,4.3 598 | 596,20160316,4.3 599 | 597,20160317,4.3 600 | 598,20160318,4.3 601 | 599,20160321,4.3 602 | 600,20160322,4.3 603 | 601,20160323,4.3 604 | 602,20160324,4.3 605 | 603,20160325,4.3 606 | 604,20160328,4.3 607 | 605,20160329,4.3 608 | 606,20160330,4.3 609 | 607,20160331,4.3 610 | 608,20160401,4.3 611 | 609,20160405,4.3 612 | 610,20160406,4.3 613 | 611,20160407,4.3 614 | 612,20160408,4.3 615 | 613,20160411,4.3 616 | 614,20160412,4.3 617 | 615,20160413,4.3 618 | 616,20160414,4.3 619 | 617,20160415,4.3 620 | 618,20160418,4.3 621 | 619,20160419,4.3 622 | 620,20160420,4.3 623 | 621,20160421,4.3 624 | 622,20160422,4.3 625 | 623,20160425,4.3 626 | 624,20160426,4.3 627 | 625,20160427,4.3 628 | 626,20160428,4.3 629 | 627,20160429,4.3 630 | 628,20160503,4.3 631 | 629,20160504,4.3 632 | 630,20160505,4.3 633 | 631,20160506,4.3 634 | 632,20160509,4.3 635 | 633,20160510,4.3 636 | 634,20160511,4.3 637 | 635,20160512,4.3 638 | 636,20160513,4.3 639 | 637,20160516,4.3 640 | 638,20160517,4.3 641 | 639,20160518,4.3 642 | 640,20160519,4.3 643 | 641,20160520,4.3 644 | 642,20160523,4.3 645 | 643,20160524,4.3 646 | 644,20160525,4.3 647 | 645,20160526,4.3 648 | 646,20160527,4.3 649 | 647,20160530,4.3 650 | 648,20160531,4.3 651 | 649,20160601,4.3 652 | 650,20160602,4.3 653 | 651,20160603,4.3 654 | 652,20160606,4.3 655 | 653,20160607,4.3 656 | 654,20160608,4.3 657 | 655,20160612,4.3 658 | 656,20160613,4.3 659 | 657,20160614,4.3 660 | 658,20160615,4.3 661 | 659,20160616,4.3 662 | 660,20160617,4.3 663 | 661,20160620,4.3 664 | 662,20160621,4.3 665 | 663,20160622,4.3 666 | 664,20160623,4.3 667 | 665,20160624,4.3 668 | 666,20160627,4.3 669 | 667,20160628,4.3 670 | 668,20160629,4.3 671 | 669,20160630,4.3 672 | 670,20160701,4.3 673 | 671,20160704,4.3 674 | 672,20160705,4.3 675 | 673,20160706,4.3 676 | 674,20160707,4.3 677 | 675,20160708,4.3 678 | 676,20160711,4.3 679 | 677,20160712,4.3 680 | 678,20160713,4.3 681 | 679,20160714,4.3 682 | 680,20160715,4.3 683 | 681,20160718,4.3 684 | 682,20160719,4.3 685 | 683,20160720,4.3 686 | 684,20160721,4.3 687 | 685,20160722,4.3 688 | 686,20160725,4.3 689 | 687,20160726,4.3 690 | 688,20160727,4.3 691 | 689,20160728,4.3 692 | 690,20160729,4.3 693 | 691,20160801,4.3 694 | 692,20160802,4.3 695 | 693,20160803,4.3 696 | 694,20160804,4.3 697 | 695,20160805,4.3 698 | 696,20160808,4.3 699 | 697,20160809,4.3 700 | 698,20160810,4.3 701 | 699,20160811,4.3 702 | 700,20160812,4.3 703 | 701,20160815,4.3 704 | 702,20160816,4.3 705 | 703,20160817,4.3 706 | 704,20160818,4.3 707 | 705,20160819,4.3 708 | 706,20160822,4.3 709 | 707,20160823,4.3 710 | 708,20160824,4.3 711 | 709,20160825,4.3 712 | 710,20160826,4.3 713 | 711,20160829,4.3 714 | 712,20160830,4.3 715 | 713,20160831,4.3 716 | 714,20160901,4.3 717 | 715,20160902,4.3 718 | 716,20160905,4.3 719 | 717,20160906,4.3 720 | 718,20160907,4.3 721 | 719,20160908,4.3 722 | 720,20160909,4.3 723 | 721,20160912,4.3 724 | 722,20160913,4.3 725 | 723,20160914,4.3 726 | 724,20160918,4.3 727 | 725,20160919,4.3 728 | 726,20160920,4.3 729 | 727,20160921,4.3 730 | 728,20160922,4.3 731 | 729,20160923,4.3 732 | 730,20160926,4.3 733 | 731,20160927,4.3 734 | 732,20160928,4.3 735 | 733,20160929,4.3 736 | 734,20160930,4.3 737 | 735,20161008,4.3 738 | 736,20161009,4.3 739 | 737,20161010,4.3 740 | 738,20161011,4.3 741 | 739,20161012,4.3 742 | 740,20161013,4.3 743 | 741,20161014,4.3 744 | 742,20161017,4.3 745 | 743,20161018,4.3 746 | 744,20161019,4.3 747 | 745,20161020,4.3 748 | 746,20161021,4.3 749 | 747,20161024,4.3 750 | 748,20161025,4.3 751 | 749,20161026,4.3 752 | 750,20161027,4.3 753 | 751,20161028,4.3 754 | 752,20161031,4.3 755 | 753,20161101,4.3 756 | 754,20161102,4.3 757 | 755,20161103,4.3 758 | 756,20161104,4.3 759 | 757,20161107,4.3 760 | 758,20161108,4.3 761 | 759,20161109,4.3 762 | 760,20161110,4.3 763 | 761,20161111,4.3 764 | 762,20161114,4.3 765 | 763,20161115,4.3 766 | 764,20161116,4.3 767 | 765,20161117,4.3 768 | 766,20161118,4.3 769 | 767,20161121,4.3 770 | 768,20161122,4.3 771 | 769,20161123,4.3 772 | 770,20161124,4.3 773 | 771,20161125,4.3 774 | 772,20161128,4.3 775 | 773,20161129,4.3 776 | 774,20161130,4.3 777 | 775,20161201,4.3 778 | 776,20161202,4.3 779 | 777,20161205,4.3 780 | 778,20161206,4.3 781 | 779,20161207,4.3 782 | 780,20161208,4.3 783 | 781,20161209,4.3 784 | 782,20161212,4.3 785 | 783,20161213,4.3 786 | 784,20161214,4.3 787 | 785,20161215,4.3 788 | 786,20161216,4.3 789 | 787,20161219,4.3 790 | 788,20161220,4.3 791 | 789,20161221,4.3 792 | 790,20161222,4.3 793 | 791,20161223,4.3 794 | 792,20161226,4.3 795 | 793,20161227,4.3 796 | 794,20161228,4.3 797 | 795,20161229,4.3 798 | 796,20161230,4.3 799 | 797,20170103,4.3 800 | 798,20170104,4.3 801 | 799,20170105,4.3 802 | 800,20170106,4.3 803 | 801,20170109,4.3 804 | 802,20170110,4.3 805 | 803,20170111,4.3 806 | 804,20170112,4.3 807 | 805,20170113,4.3 808 | 806,20170116,4.3 809 | 807,20170117,4.3 810 | 808,20170118,4.3 811 | 809,20170119,4.3 812 | 810,20170120,4.3 813 | 811,20170122,4.3 814 | 812,20170123,4.3 815 | 813,20170124,4.3 816 | 814,20170125,4.3 817 | 815,20170126,4.3 818 | 816,20170203,4.3 819 | 817,20170204,4.3 820 | 818,20170206,4.3 821 | 819,20170207,4.3 822 | 820,20170208,4.3 823 | 821,20170209,4.3 824 | 822,20170210,4.3 825 | 823,20170213,4.3 826 | 824,20170214,4.3 827 | 825,20170215,4.3 828 | 826,20170216,4.3 829 | 827,20170217,4.3 830 | 828,20170220,4.3 831 | 829,20170221,4.3 832 | 830,20170222,4.3 833 | 831,20170223,4.3 834 | 832,20170224,4.3 835 | 833,20170227,4.3 836 | 834,20170228,4.3 837 | 835,20170301,4.3 838 | 836,20170302,4.3 839 | 837,20170303,4.3 840 | 838,20170306,4.3 841 | 839,20170307,4.3 842 | 840,20170308,4.3 843 | 841,20170309,4.3 844 | 842,20170310,4.3 845 | 843,20170313,4.3 846 | 844,20170314,4.3 847 | 845,20170315,4.3 848 | 846,20170316,4.3 849 | 847,20170317,4.3 850 | 848,20170320,4.3 851 | 849,20170321,4.3 852 | 850,20170322,4.3 853 | 851,20170323,4.3 854 | 852,20170324,4.3 855 | 853,20170327,4.3 856 | 854,20170328,4.3 857 | 855,20170329,4.3 858 | 856,20170330,4.3 859 | 857,20170331,4.3 860 | 858,20170401,4.3 861 | 859,20170405,4.3 862 | 860,20170406,4.3 863 | 861,20170407,4.3 864 | 862,20170410,4.3 865 | 863,20170411,4.3 866 | 864,20170412,4.3 867 | 865,20170413,4.3 868 | 866,20170414,4.3 869 | 867,20170417,4.3 870 | 868,20170418,4.3 871 | 869,20170419,4.3 872 | 870,20170420,4.3 873 | 871,20170421,4.3 874 | 872,20170424,4.3 875 | 873,20170425,4.3 876 | 874,20170426,4.3 877 | 875,20170427,4.3 878 | 876,20170428,4.3 879 | 877,20170502,4.3 880 | 878,20170503,4.3 881 | 879,20170504,4.3 882 | 880,20170505,4.3 883 | 881,20170508,4.3 884 | 882,20170509,4.3 885 | 883,20170510,4.3 886 | 884,20170511,4.3 887 | 885,20170512,4.3 888 | 886,20170515,4.3 889 | 887,20170516,4.3 890 | 888,20170517,4.3 891 | 889,20170518,4.3 892 | 890,20170519,4.3 893 | 891,20170522,4.3 894 | 892,20170523,4.3 895 | 893,20170524,4.3 896 | 894,20170525,4.3 897 | 895,20170526,4.3 898 | 896,20170527,4.3 899 | 897,20170531,4.3 900 | 898,20170601,4.3 901 | 899,20170602,4.3 902 | 900,20170605,4.3 903 | 901,20170606,4.3 904 | 902,20170607,4.3 905 | 903,20170608,4.3 906 | 904,20170609,4.3 907 | 905,20170612,4.3 908 | 906,20170613,4.3 909 | 907,20170614,4.3 910 | 908,20170615,4.3 911 | 909,20170616,4.3 912 | 910,20170619,4.3 913 | 911,20170620,4.3 914 | 912,20170621,4.3 915 | 913,20170622,4.3 916 | 914,20170623,4.3 917 | 915,20170626,4.3 918 | 916,20170627,4.3 919 | 917,20170628,4.3 920 | 918,20170629,4.3 921 | 919,20170630,4.3 922 | 920,20170703,4.3 923 | 921,20170704,4.3 924 | 922,20170705,4.3 925 | 923,20170706,4.3 926 | 924,20170707,4.3 927 | 925,20170710,4.3 928 | 926,20170711,4.3 929 | 927,20170712,4.3 930 | 928,20170713,4.3 931 | 929,20170714,4.3 932 | 930,20170717,4.3 933 | 931,20170718,4.3 934 | 932,20170719,4.3 935 | 933,20170720,4.3 936 | 934,20170721,4.3 937 | 935,20170724,4.3 938 | 936,20170725,4.3 939 | 937,20170726,4.3 940 | 938,20170727,4.3 941 | 939,20170728,4.3 942 | 940,20170731,4.3 943 | 941,20170801,4.3 944 | 942,20170802,4.3 945 | 943,20170803,4.3 946 | 944,20170804,4.3 947 | 945,20170807,4.3 948 | 946,20170808,4.3 949 | 947,20170809,4.3 950 | 948,20170810,4.3 951 | 949,20170811,4.3 952 | 950,20170814,4.3 953 | 951,20170815,4.3 954 | 952,20170816,4.3 955 | 953,20170817,4.3 956 | 954,20170818,4.3 957 | 955,20170821,4.3 958 | 956,20170822,4.3 959 | 957,20170823,4.3 960 | 958,20170824,4.3 961 | 959,20170825,4.3 962 | 960,20170828,4.3 963 | 961,20170829,4.3 964 | 962,20170830,4.3 965 | 963,20170831,4.3 966 | 964,20170901,4.3 967 | 965,20170904,4.3 968 | 966,20170905,4.3 969 | 967,20170906,4.3 970 | 968,20170907,4.3 971 | 969,20170908,4.3 972 | 970,20170911,4.3 973 | 971,20170912,4.3 974 | 972,20170913,4.3 975 | 973,20170914,4.3 976 | 974,20170915,4.3 977 | 975,20170918,4.3 978 | 976,20170919,4.3 979 | 977,20170920,4.3 980 | 978,20170921,4.3 981 | 979,20170922,4.3 982 | 980,20170925,4.3 983 | 981,20170926,4.3 984 | 982,20170927,4.3 985 | 983,20170928,4.3 986 | 984,20170929,4.3 987 | 985,20170930,4.3 988 | 986,20171009,4.3 989 | 987,20171010,4.3 990 | 988,20171011,4.3 991 | 989,20171012,4.3 992 | 990,20171013,4.3 993 | 991,20171016,4.3 994 | 992,20171017,4.3 995 | 993,20171018,4.3 996 | 994,20171019,4.3 997 | 995,20171020,4.3 998 | 996,20171023,4.3 999 | 997,20171024,4.3 1000 | 998,20171025,4.3 1001 | 999,20171026,4.3 1002 | 1000,20171027,4.3 1003 | 1001,20171030,4.3 1004 | 1002,20171031,4.3 1005 | 1003,20171101,4.3 1006 | 1004,20171102,4.3 1007 | 1005,20171103,4.3 1008 | 1006,20171106,4.3 1009 | 1007,20171107,4.3 1010 | 1008,20171108,4.3 1011 | 1009,20171109,4.3 1012 | 1010,20171110,4.3 1013 | 1011,20171113,4.3 1014 | 1012,20171114,4.3 1015 | 1013,20171115,4.3 1016 | 1014,20171116,4.3 1017 | 1015,20171117,4.3 1018 | 1016,20171120,4.3 1019 | 1017,20171121,4.3 1020 | 1018,20171122,4.3 1021 | 1019,20171123,4.3 1022 | 1020,20171124,4.3 1023 | 1021,20171127,4.3 1024 | 1022,20171128,4.3 1025 | 1023,20171129,4.3 1026 | 1024,20171130,4.3 1027 | 1025,20171201,4.3 1028 | 1026,20171204,4.3 1029 | 1027,20171205,4.3 1030 | 1028,20171206,4.3 1031 | 1029,20171207,4.3 1032 | 1030,20171208,4.3 1033 | 1031,20171211,4.3 1034 | 1032,20171212,4.3 1035 | 1033,20171213,4.3 1036 | 1034,20171214,4.3 1037 | 1035,20171215,4.3 1038 | 1036,20171218,4.3 1039 | 1037,20171219,4.3 1040 | 1038,20171220,4.3 1041 | 1039,20171221,4.3 1042 | 1040,20171222,4.3 1043 | 1041,20171225,4.3 1044 | 1042,20171226,4.3 1045 | 1043,20171227,4.3 1046 | 1044,20171228,4.3 1047 | 1045,20171229,4.3 1048 | 1046,20180102,4.3 1049 | 1047,20180103,4.3 1050 | 1048,20180104,4.3 1051 | 1049,20180105,4.3 1052 | 1050,20180108,4.3 1053 | 1051,20180109,4.3 1054 | 1052,20180110,4.3 1055 | 1053,20180111,4.3 1056 | 1054,20180112,4.3 1057 | 1055,20180115,4.3 1058 | 1056,20180116,4.3 1059 | 1057,20180117,4.3 1060 | 1058,20180118,4.3 1061 | 1059,20180119,4.3 1062 | 1060,20180122,4.3 1063 | 1061,20180123,4.3 1064 | 1062,20180124,4.3 1065 | 1063,20180125,4.3 1066 | 1064,20180126,4.3 1067 | 1065,20180129,4.3 1068 | 1066,20180130,4.3 1069 | 1067,20180131,4.3 1070 | 1068,20180201,4.3 1071 | 1069,20180202,4.3 1072 | 1070,20180205,4.3 1073 | 1071,20180206,4.3 1074 | 1072,20180207,4.3 1075 | 1073,20180208,4.3 1076 | 1074,20180209,4.3 1077 | 1075,20180211,4.3 1078 | 1076,20180212,4.3 1079 | 1077,20180213,4.3 1080 | 1078,20180214,4.3 1081 | 1079,20180222,4.3 1082 | 1080,20180223,4.3 1083 | 1081,20180224,4.3 1084 | 1082,20180226,4.3 1085 | 1083,20180227,4.3 1086 | 1084,20180228,4.3 1087 | 1085,20180301,4.3 1088 | 1086,20180302,4.3 1089 | 1087,20180305,4.3 1090 | 1088,20180306,4.3 1091 | 1089,20180307,4.3 1092 | 1090,20180308,4.3 1093 | 1091,20180309,4.3 1094 | 1092,20180312,4.3 1095 | 1093,20180313,4.3 1096 | 1094,20180314,4.3 1097 | 1095,20180315,4.3 1098 | 1096,20180316,4.3 1099 | 1097,20180319,4.3 1100 | 1098,20180320,4.3 1101 | 1099,20180321,4.3 1102 | 1100,20180322,4.3 1103 | 1101,20180323,4.3 1104 | 1102,20180326,4.3 1105 | 1103,20180327,4.3 1106 | 1104,20180328,4.3 1107 | 1105,20180329,4.3 1108 | 1106,20180330,4.3 1109 | 1107,20180402,4.3 1110 | 1108,20180403,4.3 1111 | 1109,20180404,4.3 1112 | 1110,20180408,4.31 1113 | 1111,20180409,4.31 1114 | 1112,20180410,4.31 1115 | 1113,20180411,4.31 1116 | 1114,20180412,4.31 1117 | 1115,20180413,4.31 1118 | 1116,20180416,4.31 1119 | 1117,20180417,4.31 1120 | 1118,20180418,4.31 1121 | 1119,20180419,4.31 1122 | 1120,20180420,4.31 1123 | 1121,20180423,4.31 1124 | 1122,20180424,4.31 1125 | 1123,20180425,4.31 1126 | 1124,20180426,4.31 1127 | 1125,20180427,4.31 1128 | 1126,20180428,4.31 1129 | 1127,20180502,4.31 1130 | 1128,20180503,4.31 1131 | 1129,20180504,4.31 1132 | 1130,20180507,4.31 1133 | 1131,20180508,4.31 1134 | 1132,20180509,4.31 1135 | 1133,20180510,4.31 1136 | 1134,20180511,4.31 1137 | 1135,20180514,4.31 1138 | 1136,20180515,4.31 1139 | 1137,20180516,4.31 1140 | 1138,20180517,4.31 1141 | 1139,20180518,4.31 1142 | 1140,20180521,4.31 1143 | 1141,20180522,4.31 1144 | 1142,20180523,4.31 1145 | 1143,20180524,4.31 1146 | 1144,20180525,4.31 1147 | 1145,20180528,4.31 1148 | 1146,20180529,4.31 1149 | 1147,20180530,4.31 1150 | 1148,20180531,4.31 1151 | 1149,20180601,4.31 1152 | 1150,20180604,4.31 1153 | 1151,20180605,4.31 1154 | 1152,20180606,4.31 1155 | 1153,20180607,4.31 1156 | 1154,20180608,4.31 1157 | 1155,20180611,4.31 1158 | 1156,20180612,4.31 1159 | 1157,20180613,4.31 1160 | 1158,20180614,4.31 1161 | 1159,20180615,4.31 1162 | 1160,20180619,4.31 1163 | 1161,20180620,4.31 1164 | 1162,20180621,4.31 1165 | 1163,20180622,4.31 1166 | 1164,20180625,4.31 1167 | 1165,20180626,4.31 1168 | 1166,20180627,4.31 1169 | 1167,20180628,4.31 1170 | 1168,20180629,4.31 1171 | 1169,20180702,4.31 1172 | 1170,20180703,4.31 1173 | 1171,20180704,4.31 1174 | 1172,20180705,4.31 1175 | 1173,20180706,4.31 1176 | 1174,20180709,4.31 1177 | 1175,20180710,4.31 1178 | 1176,20180711,4.31 1179 | 1177,20180712,4.31 1180 | 1178,20180713,4.31 1181 | 1179,20180716,4.31 1182 | 1180,20180717,4.31 1183 | 1181,20180718,4.31 1184 | 1182,20180719,4.31 1185 | 1183,20180720,4.31 1186 | 1184,20180723,4.31 1187 | 1185,20180724,4.31 1188 | 1186,20180725,4.31 1189 | 1187,20180726,4.31 1190 | 1188,20180727,4.31 1191 | 1189,20180730,4.31 1192 | 1190,20180731,4.31 1193 | 1191,20180801,4.31 1194 | 1192,20180802,4.31 1195 | 1193,20180803,4.31 1196 | 1194,20180806,4.31 1197 | 1195,20180807,4.31 1198 | 1196,20180808,4.31 1199 | 1197,20180809,4.31 1200 | 1198,20180810,4.31 1201 | 1199,20180813,4.31 1202 | 1200,20180814,4.31 1203 | 1201,20180815,4.31 1204 | 1202,20180816,4.31 1205 | 1203,20180817,4.31 1206 | 1204,20180820,4.31 1207 | 1205,20180821,4.31 1208 | 1206,20180822,4.31 1209 | 1207,20180823,4.31 1210 | 1208,20180824,4.31 1211 | 1209,20180827,4.31 1212 | 1210,20180828,4.31 1213 | 1211,20180829,4.31 1214 | 1212,20180830,4.31 1215 | 1213,20180831,4.31 1216 | 1214,20180903,4.31 1217 | 1215,20180904,4.31 1218 | 1216,20180905,4.31 1219 | 1217,20180906,4.31 1220 | 1218,20180907,4.31 1221 | 1219,20180910,4.31 1222 | 1220,20180911,4.31 1223 | 1221,20180912,4.31 1224 | 1222,20180913,4.31 1225 | 1223,20180914,4.31 1226 | 1224,20180917,4.31 1227 | 1225,20180918,4.31 1228 | 1226,20180919,4.31 1229 | 1227,20180920,4.31 1230 | 1228,20180921,4.31 1231 | 1229,20180925,4.31 1232 | 1230,20180926,4.31 1233 | 1231,20180927,4.31 1234 | 1232,20180928,4.31 1235 | 1233,20180929,4.31 1236 | 1234,20180930,4.31 1237 | 1235,20181008,4.31 1238 | 1236,20181009,4.31 1239 | 1237,20181010,4.31 1240 | 1238,20181011,4.31 1241 | 1239,20181012,4.31 1242 | 1240,20181015,4.31 1243 | 1241,20181016,4.31 1244 | 1242,20181017,4.31 1245 | 1243,20181018,4.31 1246 | 1244,20181019,4.31 1247 | 1245,20181022,4.31 1248 | 1246,20181023,4.31 1249 | 1247,20181024,4.31 1250 | 1248,20181025,4.31 1251 | 1249,20181026,4.31 1252 | 1250,20181029,4.31 1253 | 1251,20181030,4.31 1254 | 1252,20181031,4.31 1255 | 1253,20181101,4.31 1256 | 1254,20181102,4.31 1257 | 1255,20181105,4.31 1258 | 1256,20181106,4.31 1259 | 1257,20181107,4.31 1260 | 1258,20181108,4.31 1261 | 1259,20181109,4.31 1262 | 1260,20181112,4.31 1263 | 1261,20181113,4.31 1264 | 1262,20181114,4.31 1265 | 1263,20181115,4.31 1266 | 1264,20181116,4.31 1267 | 1265,20181119,4.31 1268 | 1266,20181120,4.31 1269 | 1267,20181121,4.31 1270 | 1268,20181122,4.31 1271 | 1269,20181123,4.31 1272 | 1270,20181126,4.31 1273 | 1271,20181127,4.31 1274 | 1272,20181128,4.31 1275 | 1273,20181129,4.31 1276 | 1274,20181130,4.31 1277 | 1275,20181203,4.31 1278 | 1276,20181204,4.31 1279 | 1277,20181205,4.31 1280 | 1278,20181206,4.31 1281 | 1279,20181207,4.31 1282 | 1280,20181210,4.31 1283 | 1281,20181211,4.31 1284 | 1282,20181212,4.31 1285 | 1283,20181213,4.31 1286 | 1284,20181214,4.31 1287 | 1285,20181217,4.31 1288 | 1286,20181218,4.31 1289 | 1287,20181219,4.31 1290 | 1288,20181220,4.31 1291 | 1289,20181221,4.31 1292 | 1290,20181224,4.31 1293 | 1291,20181225,4.31 1294 | 1292,20181226,4.31 1295 | 1293,20181227,4.31 1296 | 1294,20181228,4.31 1297 | 1295,20181229,4.31 1298 | 1296,20190102,4.31 1299 | 1297,20190103,4.31 1300 | 1298,20190104,4.31 1301 | 1299,20190107,4.31 1302 | 1300,20190108,4.31 1303 | 1301,20190109,4.31 1304 | 1302,20190110,4.31 1305 | 1303,20190111,4.31 1306 | 1304,20190114,4.31 1307 | 1305,20190115,4.31 1308 | 1306,20190116,4.31 1309 | 1307,20190117,4.31 1310 | 1308,20190118,4.31 1311 | 1309,20190121,4.31 1312 | 1310,20190122,4.31 1313 | 1311,20190123,4.31 1314 | 1312,20190124,4.31 1315 | 1313,20190125,4.31 1316 | 1314,20190128,4.31 1317 | 1315,20190129,4.31 1318 | 1316,20190130,4.31 1319 | 1317,20190131,4.31 1320 | 1318,20190201,4.31 1321 | 1319,20190202,4.31 1322 | 1320,20190203,4.31 1323 | 1321,20190211,4.31 1324 | 1322,20190212,4.31 1325 | 1323,20190213,4.31 1326 | 1324,20190214,4.31 1327 | 1325,20190215,4.31 1328 | 1326,20190218,4.31 1329 | 1327,20190219,4.31 1330 | 1328,20190220,4.31 1331 | 1329,20190221,4.31 1332 | 1330,20190222,4.31 1333 | 1331,20190225,4.31 1334 | 1332,20190226,4.31 1335 | 1333,20190227,4.31 1336 | 1334,20190228,4.31 1337 | 1335,20190301,4.31 1338 | 1336,20190304,4.31 1339 | 1337,20190305,4.31 1340 | 1338,20190306,4.31 1341 | 1339,20190307,4.31 1342 | 1340,20190308,4.31 1343 | 1341,20190311,4.31 1344 | 1342,20190312,4.31 1345 | 1343,20190313,4.31 1346 | 1344,20190314,4.31 1347 | 1345,20190315,4.31 1348 | 1346,20190318,4.31 1349 | 1347,20190319,4.31 1350 | 1348,20190320,4.31 1351 | 1349,20190321,4.31 1352 | 1350,20190322,4.31 1353 | 1351,20190325,4.31 1354 | 1352,20190326,4.31 1355 | 1353,20190327,4.31 1356 | 1354,20190328,4.31 1357 | 1355,20190329,4.31 1358 | 1356,20190401,4.31 1359 | 1357,20190402,4.31 1360 | 1358,20190403,4.31 1361 | 1359,20190404,4.31 1362 | 1360,20190408,4.31 1363 | 1361,20190409,4.31 1364 | 1362,20190410,4.31 1365 | 1363,20190411,4.31 1366 | 1364,20190412,4.31 1367 | 1365,20190415,4.31 1368 | 1366,20190416,4.31 1369 | 1367,20190417,4.31 1370 | 1368,20190418,4.31 1371 | 1369,20190419,4.31 1372 | 1370,20190422,4.31 1373 | 1371,20190423,4.31 1374 | 1372,20190424,4.31 1375 | 1373,20190425,4.31 1376 | 1374,20190426,4.31 1377 | 1375,20190428,4.31 1378 | 1376,20190429,4.31 1379 | 1377,20190430,4.31 1380 | 1378,20190505,4.31 1381 | 1379,20190506,4.31 1382 | 1380,20190508,4.31 1383 | 1381,20190509,4.31 1384 | 1382,20190510,4.31 1385 | 1383,20190513,4.31 1386 | 1384,20190514,4.31 1387 | 1385,20190515,4.31 1388 | 1386,20190516,4.31 1389 | 1387,20190517,4.31 1390 | 1388,20190520,4.31 1391 | 1389,20190521,4.31 1392 | 1390,20190522,4.31 1393 | 1391,20190523,4.31 1394 | 1392,20190524,4.31 1395 | 1393,20190527,4.31 1396 | 1394,20190528,4.31 1397 | 1395,20190529,4.31 1398 | 1396,20190530,4.31 1399 | 1397,20190531,4.31 1400 | 1398,20190603,4.31 1401 | 1399,20190604,4.31 1402 | 1400,20190605,4.31 1403 | 1401,20190606,4.31 1404 | 1402,20190610,4.31 1405 | 1403,20190611,4.31 1406 | 1404,20190612,4.31 1407 | 1405,20190613,4.31 1408 | 1406,20190614,4.31 1409 | 1407,20190617,4.31 1410 | 1408,20190618,4.31 1411 | 1409,20190619,4.31 1412 | 1410,20190620,4.31 1413 | 1411,20190621,4.31 1414 | 1412,20190624,4.31 1415 | 1413,20190625,4.31 1416 | 1414,20190626,4.31 1417 | 1415,20190627,4.31 1418 | 1416,20190628,4.31 1419 | 1417,20190701,4.31 1420 | 1418,20190702,4.31 1421 | 1419,20190703,4.31 1422 | 1420,20190704,4.31 1423 | 1421,20190705,4.31 1424 | 1422,20190708,4.31 1425 | 1423,20190709,4.31 1426 | 1424,20190710,4.31 1427 | 1425,20190711,4.31 1428 | 1426,20190712,4.31 1429 | 1427,20190715,4.31 1430 | 1428,20190716,4.31 1431 | 1429,20190717,4.31 1432 | 1430,20190718,4.31 1433 | 1431,20190719,4.31 1434 | 1432,20190722,4.31 1435 | 1433,20190723,4.31 1436 | 1434,20190724,4.31 1437 | 1435,20190725,4.31 1438 | 1436,20190726,4.31 1439 | 1437,20190729,4.31 1440 | 1438,20190730,4.31 1441 | 1439,20190731,4.31 1442 | 1440,20190801,4.31 1443 | 1441,20190802,4.31 1444 | 1442,20190805,4.31 1445 | 1443,20190806,4.31 1446 | 1444,20190807,4.31 1447 | 1445,20190808,4.31 1448 | 1446,20190809,4.31 1449 | 1447,20190812,4.31 1450 | 1448,20190813,4.31 1451 | 1449,20190814,4.31 1452 | 1450,20190815,4.31 1453 | 1451,20190816,4.31 1454 | 1452,20190820,4.25 1455 | 1453,20190920,4.2 1456 | 1454,20191021,4.2 1457 | 1455,20191120,4.15 1458 | 1456,20191220,4.15 1459 | 1457,20200120,4.15 1460 | 1458,20200220,4.05 1461 | 1459,20200320,4.05 1462 | 1460,20200420,3.85 1463 | 1461,20200520,3.85 1464 | 1462,20200622,3.85 1465 | 1463,20200720,3.85 1466 | 1464,20200820,3.85 1467 | 1465,20200921,3.85 1468 | 1466,20201020,3.85 1469 | 1467,20201120,3.85 1470 | 1468,20201221,3.85 1471 | 1469,20210120,3.85 1472 | 1470,20210220,3.85 1473 | 1471,20210322,3.85 1474 | 1472,20210420,3.85 1475 | 1473,20210520,3.85 1476 | 1474,20210621,3.85 1477 | 1475,20210720,3.85 1478 | 1476,20210820,3.85 1479 | 1477,20210922,3.85 1480 | 1478,20211020,3.85 1481 | 1479,20211122,3.85 1482 | 1480,20211220,3.8 1483 | 1481,20220120,3.7 1484 | 1482,20220221,3.7 1485 | 1483,20220321,3.7 1486 | 1484,20220420,3.7 1487 | 1485,20220520,3.7 1488 | 1486,20220620,3.7 1489 | 1487,20220720,3.7 1490 | 1488,20220822,3.65 1491 | 1489,20220920,3.65 1492 | 1490,20221020,3.65 1493 | 1491,20221121,3.65 1494 | 1492,20221220,3.65 1495 | 1493,20230120,3.65 1496 | 1494,20230220,3.65 1497 | 1495,20230320,3.65 1498 | 1496,20230420,3.65 1499 | 1497,20230522,3.65 1500 | 1498,20230620,3.55 1501 | 1499,20230720,3.55 1502 | 1500,20230821,3.45 1503 | 1501,20230920,3.45 1504 | 1502,20231020,3.45 1505 | 1503,20231120,3.45 1506 | 1504,20231220,3.45 1507 | 1505,20240122,3.45 1508 | 1506,20240220,3.45 1509 | 1507,20240320,3.45 1510 | 1508,20240422,3.45 1511 | 1509,20240520,3.45 1512 | 1510,20240620,3.45 1513 | 1511,20240722,3.35 1514 | 1512,20240820,3.35 1515 | 1513,20240920,3.35 1516 | 1514,20241021,3.1 1517 | 1515,20241120,3.1 1518 | 1516,20241220,3.1 1519 | 1517,20250120,3.1 1520 | 1518,20250220,3.1 1521 | -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/macro_data/China_CPI_YoY_Current_Month.csv: -------------------------------------------------------------------------------- 1 | ,Date,Value 2 | 0,19870131,5.1 3 | 1,19870228,5.4 4 | 2,19870331,5.8 5 | 3,19870430,6.7 6 | 4,19870531,7.6 7 | 5,19870630,7.8 8 | 6,19870731,7.8 9 | 7,19870831,8.2 10 | 8,19870930,7.7 11 | 9,19871031,7.5 12 | 10,19871130,8.3 13 | 11,19871231,8.9 14 | 12,19880131,9.4 15 | 13,19880229,10.4 16 | 14,19880331,11.3 17 | 15,19880430,12.2 18 | 16,19880531,14.2 19 | 17,19880630,16.3 20 | 18,19880731,19.2 21 | 19,19880831,23.6 22 | 20,19880930,26.4 23 | 21,19881031,27.1 24 | 22,19881130,26.8 25 | 23,19881231,27.9 26 | 24,19890131,27.4 27 | 25,19890228,28.4 28 | 26,19890331,27.1 29 | 27,19890430,26.6 30 | 28,19890531,24.8 31 | 29,19890630,22.8 32 | 30,19890731,19.4 33 | 31,19890831,15.3 34 | 32,19890930,11.5 35 | 33,19891031,8.6 36 | 34,19891130,7.4 37 | 35,19891231,6.6 38 | 36,19900131,4.3 39 | 37,19900228,4.4 40 | 38,19900331,3.4 41 | 39,19900430,3.2 42 | 40,19900531,2.7 43 | 41,19900630,1.1 44 | 42,19900731,1.1 45 | 43,19900831,2.5 46 | 44,19900930,2.9 47 | 45,19901031,3.1 48 | 46,19901130,3.7 49 | 47,19901231,4.3 50 | 48,19910131,2.2 51 | 49,19910228,1.0 52 | 50,19910331,1.6 53 | 51,19910430,1.3 54 | 52,19910531,3.6 55 | 53,19910630,4.4 56 | 54,19910731,4.7 57 | 55,19910831,4.9 58 | 56,19910930,4.5 59 | 57,19911031,4.8 60 | 58,19911130,4.4 61 | 59,19911231,4.5 62 | 60,19920131,5.5 63 | 61,19920229,5.3 64 | 62,19920331,5.3 65 | 63,19920430,7.1 66 | 64,19920531,4.7 67 | 65,19920630,4.8 68 | 66,19920731,5.2 69 | 67,19920831,5.8 70 | 68,19920930,7.5 71 | 69,19921031,7.9 72 | 70,19921130,8.2 73 | 71,19921231,8.8 74 | 72,19930131,10.3 75 | 73,19930228,10.5 76 | 74,19930331,12.2 77 | 75,19930430,12.6 78 | 76,19930531,14.0 79 | 77,19930630,15.1 80 | 78,19930731,16.2 81 | 79,19930831,16.0 82 | 80,19930930,15.7 83 | 81,19931031,15.9 84 | 82,19931130,16.7 85 | 83,19931231,18.8 86 | 84,19940131,21.1 87 | 85,19940228,23.2 88 | 86,19940331,22.4 89 | 87,19940430,21.7 90 | 88,19940531,21.3 91 | 89,19940630,22.6 92 | 90,19940731,24.0 93 | 91,19940831,25.8 94 | 92,19940930,27.3 95 | 93,19941031,27.7 96 | 94,19941130,27.5 97 | 95,19941231,25.5 98 | 96,19950131,24.1 99 | 97,19950228,22.4 100 | 98,19950331,21.3 101 | 99,19950430,20.7 102 | 100,19950531,20.3 103 | 101,19950630,18.2 104 | 102,19950731,16.7 105 | 103,19950831,14.5 106 | 104,19950930,13.2 107 | 105,19951031,12.1 108 | 106,19951130,11.2 109 | 107,19951231,10.1 110 | 108,19960131,9.0 111 | 109,19960229,9.3 112 | 110,19960331,9.8 113 | 111,19960430,9.7 114 | 112,19960531,8.9 115 | 113,19960630,8.6 116 | 114,19960731,8.3 117 | 115,19960831,8.1 118 | 116,19960930,7.4 119 | 117,19961031,7.0 120 | 118,19961130,6.9 121 | 119,19961231,7.0 122 | 120,19970131,5.9 123 | 121,19970228,5.6 124 | 122,19970331,4.0 125 | 123,19970430,3.2 126 | 124,19970531,2.8 127 | 125,19970630,2.8 128 | 126,19970731,2.7 129 | 127,19970831,1.9 130 | 128,19970930,1.8 131 | 129,19971031,1.5 132 | 130,19971130,1.1 133 | 131,19971231,0.4 134 | 132,19980131,0.3 135 | 133,19980228,-0.1 136 | 134,19980331,0.7 137 | 135,19980430,-0.3 138 | 136,19980531,-1.0 139 | 137,19980630,-1.3 140 | 138,19980731,-1.4 141 | 139,19980831,-1.4 142 | 140,19980930,-1.5 143 | 141,19981031,-1.1 144 | 142,19981130,-1.2 145 | 143,19981231,-1.0 146 | 144,19990131,-1.2 147 | 145,19990228,-1.3 148 | 146,19990331,-1.8 149 | 147,19990430,-2.2 150 | 148,19990531,-2.2 151 | 149,19990630,-2.1 152 | 150,19990731,-1.4 153 | 151,19990831,-1.3 154 | 152,19990930,-0.8 155 | 153,19991031,-0.6 156 | 154,19991130,-0.9 157 | 155,19991231,-1.0 158 | 156,20000131,-0.2 159 | 157,20000229,0.7 160 | 158,20000331,-0.2 161 | 159,20000430,-0.3 162 | 160,20000531,0.1 163 | 161,20000630,0.5 164 | 162,20000731,0.5 165 | 163,20000831,0.3 166 | 164,20000930,0.0 167 | 165,20001031,0.0 168 | 166,20001130,1.3 169 | 167,20001231,1.5 170 | 168,20010131,1.2 171 | 169,20010228,0.0 172 | 170,20010331,0.8 173 | 171,20010430,1.6 174 | 172,20010531,1.7 175 | 173,20010630,1.4 176 | 174,20010731,1.5 177 | 175,20010831,1.0 178 | 176,20010930,-0.1 179 | 177,20011031,0.2 180 | 178,20011130,-0.3 181 | 179,20011231,-0.3 182 | 180,20020131,-1.0 183 | 181,20020228,0.0 184 | 182,20020331,-0.8 185 | 183,20020430,-1.3 186 | 184,20020531,-1.1 187 | 185,20020630,-0.8 188 | 186,20020731,-0.9 189 | 187,20020831,-0.7 190 | 188,20020930,-0.7 191 | 189,20021031,-0.8 192 | 190,20021130,-0.7 193 | 191,20021231,-0.4 194 | 192,20030131,0.4 195 | 193,20030228,0.2 196 | 194,20030331,0.9 197 | 195,20030430,1.0 198 | 196,20030531,0.7 199 | 197,20030630,0.3 200 | 198,20030731,0.5 201 | 199,20030831,0.9 202 | 200,20030930,1.1 203 | 201,20031031,1.8 204 | 202,20031130,3.0 205 | 203,20031231,3.2 206 | 204,20040131,3.2 207 | 205,20040229,2.1 208 | 206,20040331,3.0 209 | 207,20040430,3.8 210 | 208,20040531,4.4 211 | 209,20040630,5.0 212 | 210,20040731,5.3 213 | 211,20040831,5.3 214 | 212,20040930,5.2 215 | 213,20041031,4.3 216 | 214,20041130,2.8 217 | 215,20041231,2.4 218 | 216,20050131,1.9 219 | 217,20050228,3.9 220 | 218,20050331,2.7 221 | 219,20050430,1.8 222 | 220,20050531,1.8 223 | 221,20050630,1.6 224 | 222,20050731,1.8 225 | 223,20050831,1.3 226 | 224,20050930,0.9 227 | 225,20051031,1.2 228 | 226,20051130,1.3 229 | 227,20051231,1.6 230 | 228,20060131,1.9 231 | 229,20060228,0.9 232 | 230,20060331,0.8 233 | 231,20060430,1.2 234 | 232,20060531,1.4 235 | 233,20060630,1.5 236 | 234,20060731,1.0 237 | 235,20060831,1.3 238 | 236,20060930,1.5 239 | 237,20061031,1.4 240 | 238,20061130,1.9 241 | 239,20061231,2.8 242 | 240,20070131,2.2 243 | 241,20070228,2.7 244 | 242,20070331,3.3 245 | 243,20070430,3.0 246 | 244,20070531,3.4 247 | 245,20070630,4.4 248 | 246,20070731,5.6 249 | 247,20070831,6.5 250 | 248,20070930,6.2 251 | 249,20071031,6.5 252 | 250,20071130,6.9 253 | 251,20071231,6.5 254 | 252,20080131,7.1 255 | 253,20080229,8.7 256 | 254,20080331,8.3 257 | 255,20080430,8.5 258 | 256,20080531,7.7 259 | 257,20080630,7.1 260 | 258,20080731,6.3 261 | 259,20080831,4.9 262 | 260,20080930,4.6 263 | 261,20081031,4.0 264 | 262,20081130,2.4 265 | 263,20081231,1.2 266 | 264,20090131,1.0 267 | 265,20090228,-1.6 268 | 266,20090331,-1.2 269 | 267,20090430,-1.5 270 | 268,20090531,-1.4 271 | 269,20090630,-1.7 272 | 270,20090731,-1.8 273 | 271,20090831,-1.2 274 | 272,20090930,-0.8 275 | 273,20091031,-0.5 276 | 274,20091130,0.6 277 | 275,20091231,1.9 278 | 276,20100131,1.5 279 | 277,20100228,2.7 280 | 278,20100331,2.4 281 | 279,20100430,2.8 282 | 280,20100531,3.1 283 | 281,20100630,2.9 284 | 282,20100731,3.3 285 | 283,20100831,3.5 286 | 284,20100930,3.6 287 | 285,20101031,4.4 288 | 286,20101130,5.1 289 | 287,20101231,4.6 290 | 288,20110131,4.9 291 | 289,20110228,4.944 292 | 290,20110331,5.383 293 | 291,20110430,5.344 294 | 292,20110531,5.515 295 | 293,20110630,6.355 296 | 294,20110731,6.451 297 | 295,20110831,6.151 298 | 296,20110930,6.067 299 | 297,20111031,5.495 300 | 298,20111130,4.225 301 | 299,20111231,4.07 302 | 300,20120131,4.5 303 | 301,20120229,3.2 304 | 302,20120331,3.6 305 | 303,20120430,3.4 306 | 304,20120531,3.0 307 | 305,20120630,2.2 308 | 306,20120731,1.8 309 | 307,20120831,2.0 310 | 308,20120930,1.9 311 | 309,20121031,1.7 312 | 310,20121130,2.0 313 | 311,20121231,2.5 314 | 312,20130131,2.0305 315 | 313,20130228,3.2198 316 | 314,20130331,2.0696 317 | 315,20130430,2.3861 318 | 316,20130531,2.0981 319 | 317,20130630,2.6684 320 | 318,20130731,2.6741 321 | 319,20130831,2.5666 322 | 320,20130930,3.0519 323 | 321,20131031,3.2058 324 | 322,20131130,3.018 325 | 323,20131231,2.4987 326 | 324,20140131,2.4861 327 | 325,20140228,1.9511 328 | 326,20140331,2.3848 329 | 327,20140430,1.8014 330 | 328,20140531,2.4773 331 | 329,20140630,2.3361 332 | 330,20140731,2.2852 333 | 331,20140831,1.9909 334 | 332,20140930,1.6275 335 | 333,20141031,1.6011 336 | 334,20141130,1.4393 337 | 335,20141231,1.5056 338 | 336,20150131,0.7638 339 | 337,20150228,1.4311 340 | 338,20150331,1.3758 341 | 339,20150430,1.5091 342 | 340,20150531,1.2308 343 | 341,20150630,1.3909 344 | 342,20150731,1.6473 345 | 343,20150831,1.9554 346 | 344,20150930,1.5956 347 | 345,20151031,1.2674 348 | 346,20151130,1.4856 349 | 347,20151231,1.6 350 | 348,20160131,1.8 351 | 349,20160229,2.3 352 | 350,20160331,2.301391 353 | 351,20160430,2.327865 354 | 352,20160531,2.038999 355 | 353,20160630,1.879503 356 | 354,20160731,1.765113 357 | 355,20160831,1.339773 358 | 356,20160930,1.920226 359 | 357,20161031,2.095947 360 | 358,20161130,2.252258 361 | 359,20161231,2.076545 362 | 360,20170131,2.549055 363 | 361,20170228,0.8 364 | 362,20170331,0.9 365 | 363,20170430,1.2 366 | 364,20170531,1.5 367 | 365,20170630,1.5 368 | 366,20170731,1.4 369 | 367,20170831,1.8 370 | 368,20170930,1.6 371 | 369,20171031,1.9 372 | 370,20171130,1.7 373 | 371,20171231,1.8 374 | 372,20180131,1.5 375 | 373,20180228,2.9 376 | 374,20180331,2.1 377 | 375,20180430,1.8 378 | 376,20180531,1.8 379 | 377,20180630,1.9 380 | 378,20180731,2.1 381 | 379,20180831,2.3 382 | 380,20180930,2.5 383 | 381,20181031,2.5 384 | 382,20181130,2.2 385 | 383,20181231,1.9 386 | 384,20190131,1.7 387 | 385,20190228,1.5 388 | 386,20190331,2.3 389 | 387,20190430,2.5 390 | 388,20190531,2.7 391 | 389,20190630,2.7 392 | 390,20190731,2.8 393 | 391,20190831,2.8 394 | 392,20190930,3.0 395 | 393,20191031,3.8 396 | 394,20191130,4.5 397 | 395,20191231,4.5 398 | 396,20200131,5.4 399 | 397,20200229,5.2 400 | 398,20200331,4.3 401 | 399,20200430,3.3 402 | 400,20200531,2.4 403 | 401,20200630,2.5 404 | 402,20200731,2.7 405 | 403,20200831,2.4 406 | 404,20200930,1.7 407 | 405,20201031,0.5 408 | 406,20201130,-0.5 409 | 407,20201231,0.2 410 | 408,20210131,-0.3 411 | 409,20210228,-0.2 412 | 410,20210331,0.4 413 | 411,20210430,0.9 414 | 412,20210531,1.3 415 | 413,20210630,1.1 416 | 414,20210731,1.0 417 | 415,20210831,0.8 418 | 416,20210930,0.7 419 | 417,20211031,1.5 420 | 418,20211130,2.3 421 | 419,20211231,1.5 422 | 420,20220131,0.9 423 | 421,20220228,0.9 424 | 422,20220331,1.5 425 | 423,20220430,2.1 426 | 424,20220531,2.1 427 | 425,20220630,2.5 428 | 426,20220731,2.7 429 | 427,20220831,2.5 430 | 428,20220930,2.8 431 | 429,20221031,2.1 432 | 430,20221130,1.6 433 | 431,20221231,1.8 434 | 432,20230131,2.1 435 | 433,20230228,1.0 436 | 434,20230331,0.7 437 | 435,20230430,0.1 438 | 436,20230531,0.2 439 | 437,20230630,0.0 440 | 438,20230731,-0.3 441 | 439,20230831,0.1 442 | 440,20230930,0.0 443 | 441,20231031,-0.2 444 | 442,20231130,-0.5 445 | 443,20231231,-0.3 446 | 444,20240131,-0.8 447 | 445,20240229,0.7 448 | 446,20240331,0.1 449 | 447,20240430,0.3 450 | 448,20240531,0.3 451 | 449,20240630,0.2 452 | 450,20240731,0.5 453 | 451,20240831,0.6 454 | 452,20240930,0.4 455 | 453,20241031,0.3 456 | 454,20241130,0.2 457 | 455,20241231,0.1 458 | 456,20250131,0.5 459 | 457,20250228,-0.7 460 | -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/macro_data/yield_on_China_10_year_government_bonds.csv: -------------------------------------------------------------------------------- 1 | Date,Value 2 | 2015-01-04,3.6405 3 | 2015-01-05,3.6406 4 | 2015-01-06,3.6456 5 | 2015-01-07,3.6505 6 | 2015-01-08,3.6457 7 | 2015-01-09,3.6556 8 | 2015-01-12,3.6607 9 | 2015-01-13,3.6311 10 | 2015-01-14,3.572 11 | 2015-01-15,3.5473 12 | 2015-01-16,3.4932 13 | 2015-01-19,3.4935 14 | 2015-01-20,3.4935 15 | 2015-01-21,3.4977 16 | 2015-01-22,3.4829 17 | 2015-01-23,3.4904 18 | 2015-01-26,3.4832 19 | 2015-01-27,3.4632 20 | 2015-01-28,3.4977 21 | 2015-01-29,3.5103 22 | 2015-01-30,3.5374 23 | 2015-02-02,3.4675 24 | 2015-02-03,3.455 25 | 2015-02-04,3.455 26 | 2015-02-05,3.3988 27 | 2015-02-06,3.429 28 | 2015-02-09,3.415 29 | 2015-02-10,3.4225 30 | 2015-02-11,3.3988 31 | 2015-02-12,3.3725 32 | 2015-02-13,3.365 33 | 2015-02-15,3.3325 34 | 2015-02-16,3.335 35 | 2015-02-17,3.325 36 | 2015-02-25,3.3276 37 | 2015-02-26,3.365 38 | 2015-02-27,3.37 39 | 2015-02-28,3.3775 40 | 2015-03-02,3.3988 41 | 2015-03-03,3.4285 42 | 2015-03-04,3.4332 43 | 2015-03-05,3.4729 44 | 2015-03-06,3.4846 45 | 2015-03-09,3.5215 46 | 2015-03-10,3.502 47 | 2015-03-11,3.4679 48 | 2015-03-12,3.4412 49 | 2015-03-13,3.4632 50 | 2015-03-16,3.5049 51 | 2015-03-17,3.5269 52 | 2015-03-18,3.5123 53 | 2015-03-19,3.5514 54 | 2015-03-20,3.5198 55 | 2015-03-23,3.5078 56 | 2015-03-24,3.4957 57 | 2015-03-25,3.5141 58 | 2015-03-26,3.5606 59 | 2015-03-27,3.5788 60 | 2015-03-30,3.6021 61 | 2015-03-31,3.6216 62 | 2015-04-01,3.6073 63 | 2015-04-02,3.5744 64 | 2015-04-03,3.5732 65 | 2015-04-07,3.588 66 | 2015-04-08,3.6124 67 | 2015-04-09,3.6916 68 | 2015-04-10,3.6965 69 | 2015-04-13,3.6894 70 | 2015-04-14,3.619 71 | 2015-04-15,3.6045 72 | 2015-04-16,3.6216 73 | 2015-04-17,3.6047 74 | 2015-04-20,3.5151 75 | 2015-04-21,3.4457 76 | 2015-04-22,3.4667 77 | 2015-04-23,3.4935 78 | 2015-04-24,3.5275 79 | 2015-04-27,3.4817 80 | 2015-04-28,3.4842 81 | 2015-04-29,3.4843 82 | 2015-04-30,3.4577 83 | 2015-05-04,3.375 84 | 2015-05-05,3.3976 85 | 2015-05-06,3.4315 86 | 2015-05-07,3.4227 87 | 2015-05-08,3.3829 88 | 2015-05-11,3.3932 89 | 2015-05-12,3.3734 90 | 2015-05-13,3.3984 91 | 2015-05-14,3.3686 92 | 2015-05-15,3.3612 93 | 2015-05-18,3.3939 94 | 2015-05-19,3.4337 95 | 2015-05-20,3.4338 96 | 2015-05-21,3.4364 97 | 2015-05-22,3.439 98 | 2015-05-25,3.4542 99 | 2015-05-26,3.4741 100 | 2015-05-27,3.5202 101 | 2015-05-28,3.5241 102 | 2015-05-29,3.5739 103 | 2015-06-01,3.6436 104 | 2015-06-02,3.599 105 | 2015-06-03,3.614 106 | 2015-06-04,3.5843 107 | 2015-06-05,3.5893 108 | 2015-06-08,3.5647 109 | 2015-06-09,3.5673 110 | 2015-06-10,3.5946 111 | 2015-06-11,3.6096 112 | 2015-06-12,3.622 113 | 2015-06-15,3.6445 114 | 2015-06-16,3.6253 115 | 2015-06-17,3.6194 116 | 2015-06-18,3.5804 117 | 2015-06-19,3.5909 118 | 2015-06-23,3.6095 119 | 2015-06-24,3.6204 120 | 2015-06-25,3.5933 121 | 2015-06-26,3.6057 122 | 2015-06-29,3.6158 123 | 2015-06-30,3.5961 124 | 2015-07-01,3.5975 125 | 2015-07-02,3.6213 126 | 2015-07-03,3.57 127 | 2015-07-06,3.5375 128 | 2015-07-07,3.44 129 | 2015-07-08,3.375 130 | 2015-07-09,3.4375 131 | 2015-07-10,3.49 132 | 2015-07-13,3.48 133 | 2015-07-14,3.54 134 | 2015-07-15,3.565 135 | 2015-07-16,3.5325 136 | 2015-07-17,3.5125 137 | 2015-07-20,3.515 138 | 2015-07-21,3.52 139 | 2015-07-22,3.5175 140 | 2015-07-23,3.495 141 | 2015-07-24,3.465 142 | 2015-07-27,3.4844 143 | 2015-07-28,3.455 144 | 2015-07-29,3.4475 145 | 2015-07-30,3.4375 146 | 2015-07-31,3.47 147 | 2015-08-03,3.49 148 | 2015-08-04,3.48 149 | 2015-08-05,3.49 150 | 2015-08-06,3.49 151 | 2015-08-07,3.46 152 | 2015-08-10,3.4775 153 | 2015-08-11,3.535 154 | 2015-08-12,3.555 155 | 2015-08-13,3.5313 156 | 2015-08-14,3.5125 157 | 2015-08-17,3.5375 158 | 2015-08-18,3.535 159 | 2015-08-19,3.53 160 | 2015-08-20,3.525 161 | 2015-08-21,3.5125 162 | 2015-08-24,3.4975 163 | 2015-08-25,3.475 164 | 2015-08-26,3.44 165 | 2015-08-27,3.42 166 | 2015-08-28,3.3775 167 | 2015-08-31,3.34 168 | 2015-09-01,3.3178 169 | 2015-09-02,3.315 170 | 2015-09-06,3.315 171 | 2015-09-07,3.3288 172 | 2015-09-08,3.3675 173 | 2015-09-09,3.3425 174 | 2015-09-10,3.3575 175 | 2015-09-11,3.3475 176 | 2015-09-14,3.3425 177 | 2015-09-15,3.3225 178 | 2015-09-16,3.3175 179 | 2015-09-17,3.325 180 | 2015-09-18,3.325 181 | 2015-09-21,3.305 182 | 2015-09-22,3.315 183 | 2015-09-23,3.315 184 | 2015-09-24,3.32 185 | 2015-09-25,3.325 186 | 2015-09-28,3.3 187 | 2015-09-29,3.265 188 | 2015-09-30,3.255 189 | 2015-10-08,3.24 190 | 2015-10-09,3.1688 191 | 2015-10-10,3.1625 192 | 2015-10-12,3.1575 193 | 2015-10-13,3.145 194 | 2015-10-14,3.0126 195 | 2015-10-15,3.0775 196 | 2015-10-16,3.1225 197 | 2015-10-19,3.125 198 | 2015-10-20,3.0755 199 | 2015-10-21,3.0525 200 | 2015-10-22,3.0425 201 | 2015-10-23,3.04 202 | 2015-10-26,3.025 203 | 2015-10-27,2.99 204 | 2015-10-28,2.965 205 | 2015-10-29,3.035 206 | 2015-10-30,3.0625 207 | 2015-11-02,3.0588 208 | 2015-11-03,3.065 209 | 2015-11-04,3.1075 210 | 2015-11-05,3.135 211 | 2015-11-06,3.1025 212 | 2015-11-09,3.186 213 | 2015-11-10,3.215 214 | 2015-11-11,3.145 215 | 2015-11-12,3.1325 216 | 2015-11-13,3.129 217 | 2015-11-16,3.135 218 | 2015-11-17,3.129 219 | 2015-11-18,3.135 220 | 2015-11-19,3.15 221 | 2015-11-20,3.13 222 | 2015-11-23,3.125 223 | 2015-11-24,3.1175 224 | 2015-11-25,3.085 225 | 2015-11-26,3.0625 226 | 2015-11-27,3.0625 227 | 2015-11-30,3.03 228 | 2015-12-01,3.0569 229 | 2015-12-02,3.0406 230 | 2015-12-03,3.038 231 | 2015-12-04,3.0234 232 | 2015-12-07,3.0344 233 | 2015-12-08,3.0322 234 | 2015-12-09,3.0076 235 | 2015-12-10,2.9917 236 | 2015-12-11,2.9852 237 | 2015-12-14,3.0183 238 | 2015-12-15,3.0271 239 | 2015-12-16,3.022 240 | 2015-12-17,2.9948 241 | 2015-12-18,2.9568 242 | 2015-12-21,2.8979 243 | 2015-12-22,2.8604 244 | 2015-12-23,2.8642 245 | 2015-12-24,2.8143 246 | 2015-12-25,2.8281 247 | 2015-12-28,2.8117 248 | 2015-12-29,2.814 249 | 2015-12-30,2.8359 250 | 2015-12-31,2.8366 251 | 2016-01-04,2.8699 252 | 2016-01-05,2.904 253 | 2016-01-06,2.9111 254 | 2016-01-07,2.8791 255 | 2016-01-08,2.8609 256 | 2016-01-11,2.8455 257 | 2016-01-12,2.8181 258 | 2016-01-13,2.7867 259 | 2016-01-14,2.7686 260 | 2016-01-15,2.7876 261 | 2016-01-18,2.8072 262 | 2016-01-19,2.8191 263 | 2016-01-20,2.8591 264 | 2016-01-21,2.836 265 | 2016-01-22,2.8042 266 | 2016-01-25,2.8879 267 | 2016-01-26,2.8928 268 | 2016-01-27,2.916 269 | 2016-01-28,2.9209 270 | 2016-01-29,2.8846 271 | 2016-02-01,2.825 272 | 2016-02-02,2.8725 273 | 2016-02-03,2.905 274 | 2016-02-04,2.8775 275 | 2016-02-05,2.8525 276 | 2016-02-06,2.8688 277 | 2016-02-14,2.815 278 | 2016-02-15,2.84 279 | 2016-02-16,2.85 280 | 2016-02-17,2.87 281 | 2016-02-18,2.8588 282 | 2016-02-19,2.8553 283 | 2016-02-22,2.875 284 | 2016-02-23,2.8763 285 | 2016-02-24,2.8875 286 | 2016-02-25,2.89 287 | 2016-02-26,2.8975 288 | 2016-02-29,2.88 289 | 2016-03-01,2.8875 290 | 2016-03-02,2.885 291 | 2016-03-03,2.895 292 | 2016-03-04,2.9 293 | 2016-03-07,2.93 294 | 2016-03-08,2.94 295 | 2016-03-09,2.9325 296 | 2016-03-10,2.9 297 | 2016-03-11,2.87 298 | 2016-03-14,2.865 299 | 2016-03-15,2.8825 300 | 2016-03-16,2.865 301 | 2016-03-17,2.845 302 | 2016-03-18,2.865 303 | 2016-03-21,2.8525 304 | 2016-03-22,2.88 305 | 2016-03-23,2.8588 306 | 2016-03-24,2.8625 307 | 2016-03-25,2.8725 308 | 2016-03-28,2.9 309 | 2016-03-29,2.89 310 | 2016-03-30,2.8675 311 | 2016-03-31,2.8625 312 | 2016-04-01,2.8688 313 | 2016-04-05,2.8675 314 | 2016-04-06,2.885 315 | 2016-04-07,2.9125 316 | 2016-04-08,2.9075 317 | 2016-04-11,2.885 318 | 2016-04-12,2.905 319 | 2016-04-13,2.925 320 | 2016-04-14,2.93 321 | 2016-04-15,2.94 322 | 2016-04-18,2.91 323 | 2016-04-19,2.92 324 | 2016-04-20,2.92 325 | 2016-04-21,2.94 326 | 2016-04-22,2.95 327 | 2016-04-25,2.965 328 | 2016-04-26,2.955 329 | 2016-04-27,2.95 330 | 2016-04-28,2.9225 331 | 2016-04-29,2.92 332 | 2016-05-03,2.89 333 | 2016-05-04,2.89 334 | 2016-05-05,2.88 335 | 2016-05-06,2.8975 336 | 2016-05-09,2.89 337 | 2016-05-10,2.8725 338 | 2016-05-11,2.87 339 | 2016-05-12,2.87 340 | 2016-05-13,2.875 341 | 2016-05-16,2.875 342 | 2016-05-17,2.89 343 | 2016-05-18,2.905 344 | 2016-05-19,2.905 345 | 2016-05-20,2.905 346 | 2016-05-23,2.905 347 | 2016-05-24,2.905 348 | 2016-05-25,2.91 349 | 2016-05-26,2.91 350 | 2016-05-27,2.925 351 | 2016-05-30,2.905 352 | 2016-05-31,2.905 353 | 2016-06-01,2.9825 354 | 2016-06-02,3.0075 355 | 2016-06-03,3.0175 356 | 2016-06-06,3.0025 357 | 2016-06-07,3.0033 358 | 2016-06-08,3.0075 359 | 2016-06-12,3.0025 360 | 2016-06-13,3.0 361 | 2016-06-14,2.96 362 | 2016-06-15,2.9663 363 | 2016-06-16,2.9488 364 | 2016-06-17,2.9395 365 | 2016-06-20,2.9425 366 | 2016-06-21,2.9538 367 | 2016-06-22,2.9213 368 | 2016-06-23,2.92 369 | 2016-06-24,2.9025 370 | 2016-06-27,2.825 371 | 2016-06-28,2.8288 372 | 2016-06-29,2.8638 373 | 2016-06-30,2.8425 374 | 2016-07-01,2.8013 375 | 2016-07-04,2.825 376 | 2016-07-05,2.8376 377 | 2016-07-06,2.8325 378 | 2016-07-07,2.8138 379 | 2016-07-08,2.8075 380 | 2016-07-11,2.8113 381 | 2016-07-12,2.835 382 | 2016-07-13,2.84 383 | 2016-07-14,2.8325 384 | 2016-07-15,2.835 385 | 2016-07-18,2.825 386 | 2016-07-19,2.8213 387 | 2016-07-20,2.8063 388 | 2016-07-21,2.775 389 | 2016-07-22,2.7913 390 | 2016-07-25,2.8075 391 | 2016-07-26,2.799 392 | 2016-07-27,2.79 393 | 2016-07-28,2.7875 394 | 2016-07-29,2.7675 395 | 2016-08-01,2.775 396 | 2016-08-02,2.785 397 | 2016-08-03,2.7663 398 | 2016-08-04,2.7663 399 | 2016-08-05,2.755 400 | 2016-08-08,2.76 401 | 2016-08-09,2.73 402 | 2016-08-10,2.6875 403 | 2016-08-11,2.7 404 | 2016-08-12,2.69 405 | 2016-08-15,2.6375 406 | 2016-08-16,2.65 407 | 2016-08-17,2.695 408 | 2016-08-18,2.7075 409 | 2016-08-19,2.7195 410 | 2016-08-22,2.7225 411 | 2016-08-23,2.7175 412 | 2016-08-24,2.7675 413 | 2016-08-25,2.75 414 | 2016-08-26,2.7475 415 | 2016-08-29,2.745 416 | 2016-08-30,2.7725 417 | 2016-08-31,2.7925 418 | 2016-09-01,2.74 419 | 2016-09-02,2.735 420 | 2016-09-05,2.75 421 | 2016-09-06,2.745 422 | 2016-09-07,2.7658 423 | 2016-09-08,2.7815 424 | 2016-09-09,2.7713 425 | 2016-09-12,2.79 426 | 2016-09-13,2.7663 427 | 2016-09-14,2.7525 428 | 2016-09-18,2.765 429 | 2016-09-19,2.7625 430 | 2016-09-20,2.7425 431 | 2016-09-21,2.7613 432 | 2016-09-22,2.745 433 | 2016-09-23,2.7263 434 | 2016-09-26,2.7175 435 | 2016-09-27,2.715 436 | 2016-09-28,2.73 437 | 2016-09-29,2.735 438 | 2016-09-30,2.72 439 | 2016-10-08,2.7038 440 | 2016-10-09,2.67 441 | 2016-10-10,2.685 442 | 2016-10-11,2.6675 443 | 2016-10-12,2.6738 444 | 2016-10-13,2.7088 445 | 2016-10-14,2.6888 446 | 2016-10-17,2.6925 447 | 2016-10-18,2.6913 448 | 2016-10-19,2.6875 449 | 2016-10-20,2.6525 450 | 2016-10-21,2.65 451 | 2016-10-24,2.63 452 | 2016-10-25,2.6825 453 | 2016-10-26,2.7025 454 | 2016-10-27,2.7213 455 | 2016-10-28,2.6938 456 | 2016-10-31,2.7213 457 | 2016-11-01,2.7499 458 | 2016-11-02,2.7413 459 | 2016-11-03,2.7351 460 | 2016-11-04,2.7376 461 | 2016-11-07,2.7441 462 | 2016-11-08,2.776 463 | 2016-11-09,2.7685 464 | 2016-11-10,2.7811 465 | 2016-11-11,2.8256 466 | 2016-11-14,2.8558 467 | 2016-11-15,2.885 468 | 2016-11-16,2.8518 469 | 2016-11-17,2.8866 470 | 2016-11-18,2.9019 471 | 2016-11-21,2.8994 472 | 2016-11-22,2.8796 473 | 2016-11-23,2.8696 474 | 2016-11-24,2.8765 475 | 2016-11-25,2.8819 476 | 2016-11-28,2.8672 477 | 2016-11-29,2.9163 478 | 2016-11-30,2.9564 479 | 2016-12-01,2.9663 480 | 2016-12-02,3.0063 481 | 2016-12-05,3.0138 482 | 2016-12-06,3.106 483 | 2016-12-07,3.0962 484 | 2016-12-08,3.0618 485 | 2016-12-09,3.0859 486 | 2016-12-12,3.1121 487 | 2016-12-13,3.1816 488 | 2016-12-14,3.1822 489 | 2016-12-15,3.3031 490 | 2016-12-16,3.2946 491 | 2016-12-19,3.2962 492 | 2016-12-20,3.361 493 | 2016-12-21,3.3106 494 | 2016-12-22,3.2414 495 | 2016-12-23,3.1968 496 | 2016-12-26,3.1963 497 | 2016-12-27,3.152 498 | 2016-12-28,3.1618 499 | 2016-12-29,3.1102 500 | 2016-12-30,3.0358 501 | 2017-01-03,3.1311 502 | 2017-01-04,3.1122 503 | 2017-01-05,3.2145 504 | 2017-01-06,3.195 505 | 2017-01-09,3.2074 506 | 2017-01-10,3.1782 507 | 2017-01-11,3.2177 508 | 2017-01-12,3.1905 509 | 2017-01-13,3.2149 510 | 2017-01-16,3.2249 511 | 2017-01-17,3.2636 512 | 2017-01-18,3.2738 513 | 2017-01-19,3.2849 514 | 2017-01-20,3.2451 515 | 2017-01-22,3.2351 516 | 2017-01-23,3.2602 517 | 2017-01-24,3.2749 518 | 2017-01-25,3.3097 519 | 2017-01-26,3.3292 520 | 2017-02-03,3.3299 521 | 2017-02-04,3.4146 522 | 2017-02-06,3.4292 523 | 2017-02-07,3.4599 524 | 2017-02-08,3.4512 525 | 2017-02-09,3.4313 526 | 2017-02-10,3.3968 527 | 2017-02-13,3.4265 528 | 2017-02-14,3.402 529 | 2017-02-15,3.4414 530 | 2017-02-16,3.3924 531 | 2017-02-17,3.3825 532 | 2017-02-20,3.3107 533 | 2017-02-21,3.3373 534 | 2017-02-22,3.3457 535 | 2017-02-23,3.3169 536 | 2017-02-24,3.3324 537 | 2017-02-27,3.3228 538 | 2017-02-28,3.3179 539 | 2017-03-01,3.3115 540 | 2017-03-02,3.3315 541 | 2017-03-03,3.3465 542 | 2017-03-06,3.3593 543 | 2017-03-07,3.3694 544 | 2017-03-08,3.3757 545 | 2017-03-09,3.407 546 | 2017-03-10,3.412 547 | 2017-03-13,3.4165 548 | 2017-03-14,3.3724 549 | 2017-03-15,3.3636 550 | 2017-03-16,3.2728 551 | 2017-03-17,3.3127 552 | 2017-03-20,3.313 553 | 2017-03-21,3.3431 554 | 2017-03-22,3.2984 555 | 2017-03-23,3.3157 556 | 2017-03-24,3.2738 557 | 2017-03-27,3.2264 558 | 2017-03-28,3.2388 559 | 2017-03-29,3.2808 560 | 2017-03-30,3.2936 561 | 2017-03-31,3.2838 562 | 2017-04-01,3.2613 563 | 2017-04-05,3.2843 564 | 2017-04-06,3.3265 565 | 2017-04-07,3.3018 566 | 2017-04-10,3.3143 567 | 2017-04-11,3.337 568 | 2017-04-12,3.3105 569 | 2017-04-13,3.3156 570 | 2017-04-14,3.3379 571 | 2017-04-17,3.3989 572 | 2017-04-18,3.4252 573 | 2017-04-19,3.4142 574 | 2017-04-20,3.433 575 | 2017-04-21,3.4322 576 | 2017-04-24,3.4819 577 | 2017-04-25,3.4823 578 | 2017-04-26,3.4549 579 | 2017-04-27,3.4513 580 | 2017-04-28,3.4634 581 | 2017-05-02,3.4601 582 | 2017-05-03,3.5145 583 | 2017-05-04,3.5298 584 | 2017-05-05,3.5497 585 | 2017-05-08,3.5901 586 | 2017-05-09,3.6092 587 | 2017-05-10,3.6492 588 | 2017-05-11,3.7012 589 | 2017-05-12,3.6443 590 | 2017-05-15,3.6247 591 | 2017-05-16,3.6346 592 | 2017-05-17,3.625 593 | 2017-05-18,3.615 594 | 2017-05-19,3.6302 595 | 2017-05-22,3.6353 596 | 2017-05-23,3.6551 597 | 2017-05-24,3.6849 598 | 2017-05-25,3.6455 599 | 2017-05-26,3.6559 600 | 2017-05-27,3.6559 601 | 2017-05-31,3.6562 602 | 2017-06-01,3.6168 603 | 2017-06-02,3.6169 604 | 2017-06-05,3.6018 605 | 2017-06-06,3.6168 606 | 2017-06-07,3.684 607 | 2017-06-08,3.6418 608 | 2017-06-09,3.6394 609 | 2017-06-12,3.6072 610 | 2017-06-13,3.5626 611 | 2017-06-14,3.5688 612 | 2017-06-15,3.5325 613 | 2017-06-16,3.5675 614 | 2017-06-19,3.5205 615 | 2017-06-20,3.4881 616 | 2017-06-21,3.5105 617 | 2017-06-22,3.5429 618 | 2017-06-23,3.5479 619 | 2017-06-26,3.5381 620 | 2017-06-27,3.5134 621 | 2017-06-28,3.5209 622 | 2017-06-29,3.5482 623 | 2017-06-30,3.5656 624 | 2017-07-03,3.5732 625 | 2017-07-04,3.608 626 | 2017-07-05,3.6056 627 | 2017-07-06,3.5684 628 | 2017-07-07,3.5735 629 | 2017-07-10,3.5835 630 | 2017-07-11,3.5824 631 | 2017-07-12,3.5737 632 | 2017-07-13,3.5602 633 | 2017-07-14,3.5702 634 | 2017-07-17,3.5542 635 | 2017-07-18,3.5864 636 | 2017-07-19,3.5902 637 | 2017-07-20,3.5742 638 | 2017-07-21,3.5755 639 | 2017-07-24,3.5796 640 | 2017-07-25,3.587 641 | 2017-07-26,3.6036 642 | 2017-07-27,3.6161 643 | 2017-07-28,3.6025 644 | 2017-07-31,3.6203 645 | 2017-08-01,3.6315 646 | 2017-08-02,3.6303 647 | 2017-08-03,3.6328 648 | 2017-08-04,3.6218 649 | 2017-08-07,3.6482 650 | 2017-08-08,3.6695 651 | 2017-08-09,3.6707 652 | 2017-08-10,3.661 653 | 2017-08-11,3.636 654 | 2017-08-14,3.6192 655 | 2017-08-15,3.6043 656 | 2017-08-16,3.6187 657 | 2017-08-17,3.6319 658 | 2017-08-18,3.6221 659 | 2017-08-21,3.6498 660 | 2017-08-22,3.6638 661 | 2017-08-23,3.6577 662 | 2017-08-24,3.6748 663 | 2017-08-25,3.6747 664 | 2017-08-28,3.6863 665 | 2017-08-29,3.6946 666 | 2017-08-30,3.6848 667 | 2017-08-31,3.6701 668 | 2017-09-01,3.6339 669 | 2017-09-04,3.6478 670 | 2017-09-05,3.6604 671 | 2017-09-06,3.6642 672 | 2017-09-07,3.6431 673 | 2017-09-08,3.6038 674 | 2017-09-11,3.6098 675 | 2017-09-12,3.6311 676 | 2017-09-13,3.6262 677 | 2017-09-14,3.6104 678 | 2017-09-15,3.5991 679 | 2017-09-18,3.6143 680 | 2017-09-19,3.6193 681 | 2017-09-20,3.6232 682 | 2017-09-21,3.6295 683 | 2017-09-22,3.6347 684 | 2017-09-25,3.6038 685 | 2017-09-26,3.6152 686 | 2017-09-27,3.63 687 | 2017-09-28,3.6179 688 | 2017-09-29,3.6178 689 | 2017-09-30,3.6179 690 | 2017-10-09,3.6398 691 | 2017-10-10,3.656 692 | 2017-10-11,3.661 693 | 2017-10-12,3.671 694 | 2017-10-13,3.6686 695 | 2017-10-16,3.6985 696 | 2017-10-17,3.7308 697 | 2017-10-18,3.7364 698 | 2017-10-19,3.7255 699 | 2017-10-20,3.7156 700 | 2017-10-23,3.7413 701 | 2017-10-24,3.732 702 | 2017-10-25,3.7617 703 | 2017-10-26,3.8016 704 | 2017-10-27,3.8017 705 | 2017-10-30,3.8983 706 | 2017-10-31,3.8959 707 | 2017-11-01,3.8827 708 | 2017-11-02,3.8563 709 | 2017-11-03,3.9006 710 | 2017-11-06,3.8868 711 | 2017-11-07,3.8964 712 | 2017-11-08,3.9255 713 | 2017-11-09,3.9008 714 | 2017-11-10,3.9223 715 | 2017-11-13,3.9664 716 | 2017-11-14,4.0025 717 | 2017-11-15,3.9795 718 | 2017-11-16,3.949 719 | 2017-11-17,3.9521 720 | 2017-11-20,3.976 721 | 2017-11-21,3.982 722 | 2017-11-22,3.9868 723 | 2017-11-23,4.0028 724 | 2017-11-24,4.0059 725 | 2017-11-27,3.9623 726 | 2017-11-28,3.9799 727 | 2017-11-29,3.9941 728 | 2017-11-30,3.9318 729 | 2017-12-01,3.8894 730 | 2017-12-04,3.902 731 | 2017-12-05,3.8648 732 | 2017-12-06,3.8798 733 | 2017-12-07,3.8848 734 | 2017-12-08,3.9122 735 | 2017-12-11,3.9274 736 | 2017-12-12,3.9324 737 | 2017-12-13,3.9388 738 | 2017-12-14,3.8977 739 | 2017-12-15,3.8928 740 | 2017-12-18,3.8756 741 | 2017-12-19,3.8881 742 | 2017-12-20,3.9007 743 | 2017-12-21,3.907 744 | 2017-12-22,3.8834 745 | 2017-12-25,3.8836 746 | 2017-12-26,3.8911 747 | 2017-12-27,3.8887 748 | 2017-12-28,3.9037 749 | 2017-12-29,3.8888 750 | 2018-01-02,3.8941 751 | 2018-01-03,3.9383 752 | 2018-01-04,3.9583 753 | 2018-01-05,3.9383 754 | 2018-01-08,3.9385 755 | 2018-01-09,3.9342 756 | 2018-01-10,3.9532 757 | 2018-01-11,3.9872 758 | 2018-01-12,3.9925 759 | 2018-01-15,4.0146 760 | 2018-01-16,4.0076 761 | 2018-01-17,4.0124 762 | 2018-01-18,4.0213 763 | 2018-01-19,4.0518 764 | 2018-01-22,4.0516 765 | 2018-01-23,4.0371 766 | 2018-01-24,4.0425 767 | 2018-01-25,4.0425 768 | 2018-01-26,4.023 769 | 2018-01-29,4.028 770 | 2018-01-30,4.0277 771 | 2018-01-31,4.0135 772 | 2018-02-01,3.9204 773 | 2018-02-02,3.9104 774 | 2018-02-05,3.9153 775 | 2018-02-06,3.9066 776 | 2018-02-07,3.8967 777 | 2018-02-08,3.8902 778 | 2018-02-09,3.8879 779 | 2018-02-11,3.8907 780 | 2018-02-12,3.8809 781 | 2018-02-13,3.8859 782 | 2018-02-14,3.8761 783 | 2018-02-22,3.882 784 | 2018-02-23,3.8865 785 | 2018-02-24,3.889 786 | 2018-02-26,3.8719 787 | 2018-02-27,3.8567 788 | 2018-02-28,3.8383 789 | 2018-03-01,3.8318 790 | 2018-03-02,3.8319 791 | 2018-03-05,3.8371 792 | 2018-03-06,3.8372 793 | 2018-03-07,3.8272 794 | 2018-03-08,3.8073 795 | 2018-03-09,3.8173 796 | 2018-03-12,3.8298 797 | 2018-03-13,3.8323 798 | 2018-03-14,3.8425 799 | 2018-03-15,3.8352 800 | 2018-03-16,3.8303 801 | 2018-03-19,3.818 802 | 2018-03-20,3.7982 803 | 2018-03-21,3.7633 804 | 2018-03-22,3.7582 805 | 2018-03-23,3.7478 806 | 2018-03-26,3.7431 807 | 2018-03-27,3.7507 808 | 2018-03-28,3.7233 809 | 2018-03-29,3.7511 810 | 2018-03-30,3.7309 811 | 2018-04-02,3.7509 812 | 2018-04-03,3.7237 813 | 2018-04-04,3.7385 814 | 2018-04-08,3.7035 815 | 2018-04-09,3.7039 816 | 2018-04-10,3.7087 817 | 2018-04-11,3.7212 818 | 2018-04-12,3.7212 819 | 2018-04-13,3.7035 820 | 2018-04-16,3.6841 821 | 2018-04-17,3.6445 822 | 2018-04-18,3.5023 823 | 2018-04-19,3.5295 824 | 2018-04-20,3.5323 825 | 2018-04-23,3.5869 826 | 2018-04-24,3.6043 827 | 2018-04-25,3.587 828 | 2018-04-26,3.622 829 | 2018-04-27,3.634 830 | 2018-04-28,3.6093 831 | 2018-05-02,3.641 832 | 2018-05-03,3.6602 833 | 2018-05-04,3.6461 834 | 2018-05-07,3.6278 835 | 2018-05-08,3.6957 836 | 2018-05-09,3.7035 837 | 2018-05-10,3.7011 838 | 2018-05-11,3.6814 839 | 2018-05-14,3.6964 840 | 2018-05-15,3.7068 841 | 2018-05-16,3.733 842 | 2018-05-17,3.7096 843 | 2018-05-18,3.7192 844 | 2018-05-21,3.6997 845 | 2018-05-22,3.68 846 | 2018-05-23,3.6699 847 | 2018-05-24,3.6527 848 | 2018-05-25,3.667 849 | 2018-05-28,3.6252 850 | 2018-05-29,3.6326 851 | 2018-05-30,3.6024 852 | 2018-05-31,3.6302 853 | 2018-06-01,3.6185 854 | 2018-06-04,3.6449 855 | 2018-06-05,3.6512 856 | 2018-06-06,3.6637 857 | 2018-06-07,3.6739 858 | 2018-06-08,3.6553 859 | 2018-06-11,3.6517 860 | 2018-06-12,3.6692 861 | 2018-06-13,3.6768 862 | 2018-06-14,3.6245 863 | 2018-06-15,3.5985 864 | 2018-06-19,3.6048 865 | 2018-06-20,3.5764 866 | 2018-06-21,3.5801 867 | 2018-06-22,3.5727 868 | 2018-06-25,3.5742 869 | 2018-06-26,3.5804 870 | 2018-06-27,3.5706 871 | 2018-06-28,3.5408 872 | 2018-06-29,3.4762 873 | 2018-07-02,3.492 874 | 2018-07-03,3.4658 875 | 2018-07-04,3.513 876 | 2018-07-05,3.4956 877 | 2018-07-06,3.5055 878 | 2018-07-09,3.5369 879 | 2018-07-10,3.5472 880 | 2018-07-11,3.5311 881 | 2018-07-12,3.5188 882 | 2018-07-13,3.499 883 | 2018-07-16,3.479 884 | 2018-07-17,3.4804 885 | 2018-07-18,3.4692 886 | 2018-07-19,3.4989 887 | 2018-07-20,3.4491 888 | 2018-07-23,3.5142 889 | 2018-07-24,3.5541 890 | 2018-07-25,3.5643 891 | 2018-07-26,3.5444 892 | 2018-07-27,3.5322 893 | 2018-07-30,3.5227 894 | 2018-07-31,3.5079 895 | 2018-08-01,3.4926 896 | 2018-08-02,3.4741 897 | 2018-08-03,3.4803 898 | 2018-08-06,3.4583 899 | 2018-08-07,3.4654 900 | 2018-08-08,3.5029 901 | 2018-08-09,3.555 902 | 2018-08-10,3.5619 903 | 2018-08-13,3.5828 904 | 2018-08-14,3.5695 905 | 2018-08-15,3.5671 906 | 2018-08-16,3.5736 907 | 2018-08-17,3.6432 908 | 2018-08-20,3.6575 909 | 2018-08-21,3.6594 910 | 2018-08-22,3.6303 911 | 2018-08-23,3.6166 912 | 2018-08-24,3.6155 913 | 2018-08-27,3.6342 914 | 2018-08-28,3.6356 915 | 2018-08-29,3.6232 916 | 2018-08-30,3.6111 917 | 2018-08-31,3.5937 918 | 2018-09-03,3.5715 919 | 2018-09-04,3.5966 920 | 2018-09-05,3.6079 921 | 2018-09-06,3.6167 922 | 2018-09-07,3.6267 923 | 2018-09-10,3.6369 924 | 2018-09-11,3.6746 925 | 2018-09-12,3.671 926 | 2018-09-13,3.6598 927 | 2018-09-14,3.6524 928 | 2018-09-17,3.6326 929 | 2018-09-18,3.6377 930 | 2018-09-19,3.6652 931 | 2018-09-20,3.6876 932 | 2018-09-21,3.6865 933 | 2018-09-25,3.6755 934 | 2018-09-26,3.6706 935 | 2018-09-27,3.6433 936 | 2018-09-28,3.6234 937 | 2018-09-29,3.6135 938 | 2018-09-30,3.6136 939 | 2018-10-08,3.6314 940 | 2018-10-09,3.6191 941 | 2018-10-10,3.6192 942 | 2018-10-11,3.5908 943 | 2018-10-12,3.5821 944 | 2018-10-15,3.5836 945 | 2018-10-16,3.5973 946 | 2018-10-17,3.5775 947 | 2018-10-18,3.5625 948 | 2018-10-19,3.5576 949 | 2018-10-22,3.5975 950 | 2018-10-23,3.5877 951 | 2018-10-24,3.5725 952 | 2018-10-25,3.5378 953 | 2018-10-26,3.5416 954 | 2018-10-29,3.5208 955 | 2018-10-30,3.5209 956 | 2018-10-31,3.5185 957 | 2018-11-01,3.495 958 | 2018-11-02,3.5222 959 | 2018-11-05,3.5388 960 | 2018-11-06,3.5303 961 | 2018-11-07,3.5102 962 | 2018-11-08,3.4854 963 | 2018-11-09,3.4891 964 | 2018-11-12,3.4894 965 | 2018-11-13,3.487 966 | 2018-11-14,3.4346 967 | 2018-11-15,3.4174 968 | 2018-11-16,3.4005 969 | 2018-11-19,3.3476 970 | 2018-11-20,3.3869 971 | 2018-11-21,3.3597 972 | 2018-11-22,3.3768 973 | 2018-11-23,3.4023 974 | 2018-11-26,3.4071 975 | 2018-11-27,3.4319 976 | 2018-11-28,3.3999 977 | 2018-11-29,3.3901 978 | 2018-11-30,3.3662 979 | 2018-12-03,3.3976 980 | 2018-12-04,3.343 981 | 2018-12-05,3.2886 982 | 2018-12-06,3.323 983 | 2018-12-07,3.3102 984 | 2018-12-10,3.2928 985 | 2018-12-11,3.2876 986 | 2018-12-12,3.2954 987 | 2018-12-13,3.3031 988 | 2018-12-14,3.3523 989 | 2018-12-17,3.3739 990 | 2018-12-18,3.3942 991 | 2018-12-19,3.3639 992 | 2018-12-20,3.3185 993 | 2018-12-21,3.3256 994 | 2018-12-24,3.3479 995 | 2018-12-25,3.3166 996 | 2018-12-26,3.321 997 | 2018-12-27,3.2986 998 | 2018-12-28,3.2336 999 | 2018-12-29,3.2198 1000 | 2019-01-02,3.1633 1001 | 2019-01-03,3.1482 1002 | 2019-01-04,3.1407 1003 | 2019-01-07,3.1636 1004 | 2019-01-08,3.1239 1005 | 2019-01-09,3.1189 1006 | 2019-01-10,3.1092 1007 | 2019-01-11,3.1044 1008 | 2019-01-14,3.1344 1009 | 2019-01-15,3.1544 1010 | 2019-01-16,3.0999 1011 | 2019-01-17,3.0613 1012 | 2019-01-18,3.0813 1013 | 2019-01-21,3.12 1014 | 2019-01-22,3.1091 1015 | 2019-01-23,3.1128 1016 | 2019-01-24,3.1204 1017 | 2019-01-25,3.1156 1018 | 2019-01-28,3.1555 1019 | 2019-01-29,3.1234 1020 | 2019-01-30,3.1261 1021 | 2019-01-31,3.1063 1022 | 2019-02-01,3.1204 1023 | 2019-02-02,3.1355 1024 | 2019-02-03,3.1262 1025 | 2019-02-11,3.112 1026 | 2019-02-12,3.1049 1027 | 2019-02-13,3.1096 1028 | 2019-02-14,3.1138 1029 | 2019-02-15,3.1223 1030 | 2019-02-18,3.1336 1031 | 2019-02-19,3.1681 1032 | 2019-02-20,3.1637 1033 | 2019-02-21,3.1707 1034 | 2019-02-22,3.1669 1035 | 2019-02-25,3.1993 1036 | 2019-02-26,3.2344 1037 | 2019-02-27,3.2307 1038 | 2019-02-28,3.2386 1039 | 2019-03-01,3.1939 1040 | 2019-03-04,3.2152 1041 | 2019-03-05,3.2121 1042 | 2019-03-06,3.2139 1043 | 2019-03-07,3.1789 1044 | 2019-03-08,3.1502 1045 | 2019-03-11,3.1466 1046 | 2019-03-12,3.1606 1047 | 2019-03-13,3.1417 1048 | 2019-03-14,3.1465 1049 | 2019-03-15,3.159 1050 | 2019-03-18,3.1399 1051 | 2019-03-19,3.1448 1052 | 2019-03-20,3.1521 1053 | 2019-03-21,3.1453 1054 | 2019-03-22,3.1213 1055 | 2019-03-25,3.0951 1056 | 2019-03-26,3.091 1057 | 2019-03-27,3.0763 1058 | 2019-03-28,3.0881 1059 | 2019-03-29,3.0961 1060 | 2019-04-01,3.1335 1061 | 2019-04-02,3.2162 1062 | 2019-04-03,3.2364 1063 | 2019-04-04,3.2555 1064 | 2019-04-08,3.2879 1065 | 2019-04-09,3.3206 1066 | 2019-04-10,3.3152 1067 | 2019-04-11,3.3154 1068 | 2019-04-12,3.3358 1069 | 2019-04-15,3.3558 1070 | 2019-04-16,3.3903 1071 | 2019-04-17,3.4512 1072 | 2019-04-18,3.421 1073 | 2019-04-19,3.4084 1074 | 2019-04-22,3.436 1075 | 2019-04-23,3.4214 1076 | 2019-04-24,3.4461 1077 | 2019-04-25,3.4334 1078 | 2019-04-26,3.4227 1079 | 2019-04-28,3.4167 1080 | 2019-04-29,3.4796 1081 | 2019-04-30,3.4832 1082 | 2019-05-05,3.405 1083 | 2019-05-06,3.354 1084 | 2019-05-07,3.3711 1085 | 2019-05-08,3.3571 1086 | 2019-05-09,3.338 1087 | 2019-05-10,3.3366 1088 | 2019-05-13,3.2981 1089 | 2019-05-14,3.3072 1090 | 2019-05-15,3.2976 1091 | 2019-05-16,3.2745 1092 | 2019-05-17,3.2906 1093 | 2019-05-20,3.2878 1094 | 2019-05-21,3.3139 1095 | 2019-05-22,3.3156 1096 | 2019-05-23,3.3296 1097 | 2019-05-24,3.314 1098 | 2019-05-27,3.3385 1099 | 2019-05-28,3.364 1100 | 2019-05-29,3.3215 1101 | 2019-05-30,3.3001 1102 | 2019-05-31,3.3014 1103 | 2019-06-03,3.2861 1104 | 2019-06-04,3.2677 1105 | 2019-06-05,3.2641 1106 | 2019-06-06,3.2601 1107 | 2019-06-10,3.2374 1108 | 2019-06-11,3.2902 1109 | 2019-06-12,3.3147 1110 | 2019-06-13,3.2975 1111 | 2019-06-14,3.2763 1112 | 2019-06-17,3.2518 1113 | 2019-06-18,3.2567 1114 | 2019-06-19,3.2709 1115 | 2019-06-20,3.2634 1116 | 2019-06-21,3.2719 1117 | 2019-06-24,3.2682 1118 | 2019-06-25,3.2787 1119 | 2019-06-26,3.2778 1120 | 2019-06-27,3.297 1121 | 2019-06-28,3.2837 1122 | 2019-07-01,3.2731 1123 | 2019-07-02,3.2553 1124 | 2019-07-03,3.2044 1125 | 2019-07-04,3.2149 1126 | 2019-07-05,3.2034 1127 | 2019-07-08,3.2185 1128 | 2019-07-09,3.229 1129 | 2019-07-10,3.2103 1130 | 2019-07-11,3.1992 1131 | 2019-07-12,3.1966 1132 | 2019-07-15,3.23 1133 | 2019-07-16,3.2232 1134 | 2019-07-17,3.2215 1135 | 2019-07-18,3.2176 1136 | 2019-07-19,3.2211 1137 | 2019-07-22,3.2116 1138 | 2019-07-23,3.1763 1139 | 2019-07-24,3.1895 1140 | 2019-07-25,3.2189 1141 | 2019-07-26,3.2138 1142 | 2019-07-29,3.2098 1143 | 2019-07-30,3.2341 1144 | 2019-07-31,3.213 1145 | 2019-08-01,3.1613 1146 | 2019-08-02,3.1294 1147 | 2019-08-05,3.0874 1148 | 2019-08-06,3.0475 1149 | 2019-08-07,3.0576 1150 | 2019-08-08,3.053 1151 | 2019-08-09,3.0526 1152 | 2019-08-12,3.0376 1153 | 2019-08-13,3.0263 1154 | 2019-08-14,2.9889 1155 | 2019-08-15,2.998 1156 | 2019-08-16,3.0257 1157 | 2019-08-19,3.0422 1158 | 2019-08-20,3.0324 1159 | 2019-08-21,3.0571 1160 | 2019-08-22,3.0705 1161 | 2019-08-23,3.0681 1162 | 2019-08-26,3.056 1163 | 2019-08-27,3.0756 1164 | 2019-08-28,3.0543 1165 | 2019-08-29,3.0634 1166 | 2019-08-30,3.0462 1167 | 2019-09-02,3.06 1168 | 2019-09-03,3.0705 1169 | 2019-09-04,3.0607 1170 | 2019-09-05,3.0312 1171 | 2019-09-06,3.0246 1172 | 2019-09-09,3.0294 1173 | 2019-09-10,3.034 1174 | 2019-09-11,3.0583 1175 | 2019-09-12,3.0802 1176 | 2019-09-16,3.104 1177 | 2019-09-17,3.104 1178 | 2019-09-18,3.117 1179 | 2019-09-19,3.1222 1180 | 2019-09-20,3.1275 1181 | 2019-09-23,3.1106 1182 | 2019-09-24,3.129 1183 | 2019-09-25,3.1344 1184 | 2019-09-26,3.1369 1185 | 2019-09-27,3.1526 1186 | 2019-09-29,3.1627 1187 | 2019-09-30,3.1583 1188 | 2019-10-08,3.1433 1189 | 2019-10-09,3.1217 1190 | 2019-10-10,3.1417 1191 | 2019-10-11,3.1548 1192 | 2019-10-12,3.1751 1193 | 2019-10-14,3.1989 1194 | 2019-10-15,3.1823 1195 | 2019-10-16,3.1869 1196 | 2019-10-17,3.1824 1197 | 2019-10-18,3.1924 1198 | 2019-10-21,3.2298 1199 | 2019-10-22,3.2447 1200 | 2019-10-23,3.2355 1201 | 2019-10-24,3.2397 1202 | 2019-10-25,3.2434 1203 | 2019-10-28,3.2986 1204 | 2019-10-29,3.3147 1205 | 2019-10-30,3.3275 1206 | 2019-10-31,3.318 1207 | 2019-11-01,3.2947 1208 | 2019-11-04,3.3116 1209 | 2019-11-05,3.2776 1210 | 2019-11-06,3.2655 1211 | 2019-11-07,3.266 1212 | 2019-11-08,3.2935 1213 | 2019-11-11,3.2931 1214 | 2019-11-12,3.2628 1215 | 2019-11-13,3.2619 1216 | 2019-11-14,3.2679 1217 | 2019-11-15,3.2806 1218 | 2019-11-18,3.2278 1219 | 2019-11-19,3.2028 1220 | 2019-11-20,3.1925 1221 | 2019-11-21,3.1879 1222 | 2019-11-22,3.1967 1223 | 2019-11-25,3.2128 1224 | 2019-11-26,3.2219 1225 | 2019-11-27,3.2003 1226 | 2019-11-28,3.2005 1227 | 2019-11-29,3.2008 1228 | 2019-12-02,3.2206 1229 | 2019-12-03,3.2313 1230 | 2019-12-04,3.2086 1231 | 2019-12-05,3.2147 1232 | 2019-12-06,3.2211 1233 | 2019-12-09,3.2295 1234 | 2019-12-10,3.2237 1235 | 2019-12-11,3.2207 1236 | 2019-12-12,3.212 1237 | 2019-12-13,3.219 1238 | 2019-12-16,3.2212 1239 | 2019-12-17,3.2349 1240 | 2019-12-18,3.2502 1241 | 2019-12-19,3.2516 1242 | 2019-12-20,3.2414 1243 | 2019-12-23,3.2109 1244 | 2019-12-24,3.1856 1245 | 2019-12-25,3.1947 1246 | 2019-12-26,3.1701 1247 | 2019-12-27,3.1766 1248 | 2019-12-30,3.1846 1249 | 2019-12-31,3.1723 1250 | 2020-01-02,3.1956 1251 | 2020-01-03,3.2006 1252 | 2020-01-06,3.1869 1253 | 2020-01-07,3.1872 1254 | 2020-01-08,3.1933 1255 | 2020-01-09,3.1871 1256 | 2020-01-10,3.1455 1257 | 2020-01-13,3.1446 1258 | 2020-01-14,3.1559 1259 | 2020-01-15,3.1519 1260 | 2020-01-16,3.1503 1261 | 2020-01-17,3.1427 1262 | 2020-01-19,3.1387 1263 | 2020-01-20,3.1385 1264 | 2020-01-21,3.0959 1265 | 2020-01-22,3.0693 1266 | 2020-01-23,3.0366 1267 | 2020-02-03,2.8917 1268 | 2020-02-04,2.8917 1269 | 2020-02-05,2.9164 1270 | 2020-02-06,2.9011 1271 | 2020-02-07,2.8967 1272 | 2020-02-10,2.8552 1273 | 2020-02-11,2.8398 1274 | 2020-02-12,2.902 1275 | 2020-02-13,2.8977 1276 | 2020-02-14,2.8885 1277 | 2020-02-17,2.923 1278 | 2020-02-18,2.9322 1279 | 2020-02-19,2.9271 1280 | 2020-02-20,2.9404 1281 | 2020-02-21,2.923 1282 | 2020-02-24,2.8912 1283 | 2020-02-25,2.8753 1284 | 2020-02-26,2.8782 1285 | 2020-02-27,2.8589 1286 | 2020-02-28,2.8161 1287 | 2020-03-02,2.7242 1288 | 2020-03-03,2.7668 1289 | 2020-03-04,2.6955 1290 | 2020-03-05,2.6946 1291 | 2020-03-06,2.6451 1292 | 2020-03-09,2.5349 1293 | 2020-03-10,2.5818 1294 | 2020-03-11,2.6319 1295 | 2020-03-12,2.6143 1296 | 2020-03-13,2.6727 1297 | 2020-03-16,2.6622 1298 | 2020-03-17,2.6961 1299 | 2020-03-18,2.7218 1300 | 2020-03-19,2.7231 1301 | 2020-03-20,2.7187 1302 | 2020-03-23,2.6685 1303 | 2020-03-24,2.6292 1304 | 2020-03-25,2.6567 1305 | 2020-03-26,2.6117 1306 | 2020-03-27,2.6166 1307 | 2020-03-30,2.6346 1308 | 2020-03-31,2.6124 1309 | 2020-04-01,2.6729 1310 | 2020-04-02,2.6874 1311 | 2020-04-03,2.7166 1312 | 2020-04-07,2.6256 1313 | 2020-04-08,2.6355 1314 | 2020-04-09,2.5982 1315 | 2020-04-10,2.6388 1316 | 2020-04-13,2.6792 1317 | 2020-04-14,2.6667 1318 | 2020-04-15,2.6641 1319 | 2020-04-16,2.6416 1320 | 2020-04-17,2.6452 1321 | 2020-04-20,2.6741 1322 | 2020-04-21,2.7051 1323 | 2020-04-22,2.6773 1324 | 2020-04-23,2.6577 1325 | 2020-04-24,2.6002 1326 | 2020-04-26,2.583 1327 | 2020-04-27,2.6195 1328 | 2020-04-28,2.6162 1329 | 2020-04-29,2.5992 1330 | 2020-04-30,2.602 1331 | 2020-05-06,2.5625 1332 | 2020-05-07,2.6062 1333 | 2020-05-08,2.6298 1334 | 2020-05-09,2.6477 1335 | 2020-05-11,2.6679 1336 | 2020-05-12,2.6834 1337 | 2020-05-13,2.6799 1338 | 2020-05-14,2.7384 1339 | 2020-05-15,2.7111 1340 | 2020-05-18,2.7208 1341 | 2020-05-19,2.7566 1342 | 2020-05-20,2.7475 1343 | 2020-05-21,2.7062 1344 | 2020-05-22,2.6798 1345 | 2020-05-25,2.6658 1346 | 2020-05-26,2.7403 1347 | 2020-05-27,2.7584 1348 | 2020-05-28,2.7475 1349 | 2020-05-29,2.7251 1350 | 2020-06-01,2.7741 1351 | 2020-06-02,2.8145 1352 | 2020-06-03,2.8972 1353 | 2020-06-04,2.8439 1354 | 2020-06-05,2.906 1355 | 2020-06-08,2.9056 1356 | 2020-06-09,2.86 1357 | 2020-06-10,2.8734 1358 | 2020-06-11,2.8645 1359 | 2020-06-12,2.7901 1360 | 2020-06-15,2.7991 1361 | 2020-06-16,2.8801 1362 | 2020-06-17,2.9022 1363 | 2020-06-18,2.9133 1364 | 2020-06-19,2.9284 1365 | 2020-06-22,2.9334 1366 | 2020-06-23,2.9834 1367 | 2020-06-24,2.9606 1368 | 2020-06-28,2.9276 1369 | 2020-06-29,2.9247 1370 | 2020-06-30,2.9341 1371 | 2020-07-01,2.8415 1372 | 2020-07-02,2.858 1373 | 2020-07-03,2.8853 1374 | 2020-07-06,2.9552 1375 | 2020-07-07,3.0425 1376 | 2020-07-08,3.0217 1377 | 2020-07-09,3.0905 1378 | 2020-07-10,3.0653 1379 | 2020-07-13,3.0589 1380 | 2020-07-14,3.027 1381 | 2020-07-15,3.0066 1382 | 2020-07-16,2.9584 1383 | 2020-07-17,2.9487 1384 | 2020-07-20,2.9772 1385 | 2020-07-21,2.9169 1386 | 2020-07-22,2.9414 1387 | 2020-07-23,2.912 1388 | 2020-07-24,2.9117 1389 | 2020-07-27,2.8962 1390 | 2020-07-28,2.9197 1391 | 2020-07-29,2.937 1392 | 2020-07-30,2.9597 1393 | 2020-07-31,2.9768 1394 | 2020-08-03,2.9884 1395 | 2020-08-04,2.9736 1396 | 2020-08-05,2.9427 1397 | 2020-08-06,2.9842 1398 | 2020-08-07,3.0001 1399 | 2020-08-10,3.0014 1400 | 2020-08-11,2.9807 1401 | 2020-08-12,2.981 1402 | 2020-08-13,2.9864 1403 | 2020-08-14,2.9724 1404 | 2020-08-17,2.9457 1405 | 2020-08-18,2.972 1406 | 2020-08-19,2.9975 1407 | 2020-08-20,3.0127 1408 | 2020-08-21,3.0134 1409 | 2020-08-24,3.0128 1410 | 2020-08-25,3.0377 1411 | 2020-08-26,3.035 1412 | 2020-08-27,3.0722 1413 | 2020-08-28,3.0789 1414 | 2020-08-31,3.0818 1415 | 2020-09-01,3.048 1416 | 2020-09-02,3.083 1417 | 2020-09-03,3.1373 1418 | 2020-09-04,3.121 1419 | 2020-09-07,3.1629 1420 | 2020-09-08,3.1585 1421 | 2020-09-09,3.1238 1422 | 2020-09-10,3.1005 1423 | 2020-09-11,3.1062 1424 | 2020-09-14,3.1846 1425 | 2020-09-15,3.1554 1426 | 2020-09-16,3.1196 1427 | 2020-09-17,3.1533 1428 | 2020-09-18,3.1413 1429 | 2020-09-21,3.1345 1430 | 2020-09-22,3.1245 1431 | 2020-09-23,3.1088 1432 | 2020-09-24,3.1044 1433 | 2020-09-25,3.1059 1434 | 2020-09-27,3.1569 1435 | 2020-09-28,3.1576 1436 | 2020-09-29,3.1397 1437 | 2020-09-30,3.151 1438 | 2020-10-09,3.2106 1439 | 2020-10-10,3.2099 1440 | 2020-10-12,3.2161 1441 | 2020-10-13,3.2135 1442 | 2020-10-14,3.2407 1443 | 2020-10-15,3.2418 1444 | 2020-10-16,3.2632 1445 | 2020-10-19,3.2469 1446 | 2020-10-20,3.2403 1447 | 2020-10-21,3.2311 1448 | 2020-10-22,3.2007 1449 | 2020-10-23,3.2064 1450 | 2020-10-26,3.2239 1451 | 2020-10-27,3.2119 1452 | 2020-10-28,3.1944 1453 | 2020-10-29,3.2067 1454 | 2020-10-30,3.2243 1455 | 2020-11-02,3.2149 1456 | 2020-11-03,3.2056 1457 | 2020-11-04,3.2156 1458 | 2020-11-05,3.1978 1459 | 2020-11-06,3.2213 1460 | 2020-11-09,3.2573 1461 | 2020-11-10,3.2619 1462 | 2020-11-11,3.2585 1463 | 2020-11-12,3.2781 1464 | 2020-11-13,3.2987 1465 | 2020-11-16,3.294 1466 | 2020-11-17,3.3105 1467 | 2020-11-18,3.331 1468 | 2020-11-19,3.3584 1469 | 2020-11-20,3.3714 1470 | 2020-11-23,3.3336 1471 | 2020-11-24,3.3246 1472 | 2020-11-25,3.3242 1473 | 2020-11-26,3.3219 1474 | 2020-11-27,3.326 1475 | 2020-11-30,3.321 1476 | 2020-12-01,3.3146 1477 | 2020-12-02,3.3427 1478 | 2020-12-03,3.3407 1479 | 2020-12-04,3.3314 1480 | 2020-12-07,3.3352 1481 | 2020-12-08,3.307 1482 | 2020-12-09,3.3007 1483 | 2020-12-10,3.3123 1484 | 2020-12-11,3.3189 1485 | 2020-12-14,3.3397 1486 | 2020-12-15,3.3171 1487 | 2020-12-16,3.326 1488 | 2020-12-17,3.3238 1489 | 2020-12-18,3.3326 1490 | 2020-12-21,3.3219 1491 | 2020-12-22,3.2953 1492 | 2020-12-23,3.2763 1493 | 2020-12-24,3.2827 1494 | 2020-12-25,3.2953 1495 | 2020-12-28,3.2363 1496 | 2020-12-29,3.2352 1497 | 2020-12-30,3.222 1498 | 2020-12-31,3.2174 1499 | 2021-01-04,3.1713 1500 | 2021-01-05,3.1749 1501 | 2021-01-06,3.1401 1502 | 2021-01-07,3.1354 1503 | 2021-01-08,3.1574 1504 | 2021-01-11,3.1704 1505 | 2021-01-12,3.1713 1506 | 2021-01-13,3.1518 1507 | 2021-01-14,3.1075 1508 | 2021-01-15,3.1294 1509 | 2021-01-18,3.1662 1510 | 2021-01-19,3.1776 1511 | 2021-01-20,3.1777 1512 | 2021-01-21,3.1665 1513 | 2021-01-22,3.1494 1514 | 2021-01-25,3.1412 1515 | 2021-01-26,3.1671 1516 | 2021-01-27,3.174 1517 | 2021-01-28,3.1983 1518 | 2021-01-29,3.1969 1519 | 2021-02-01,3.1817 1520 | 2021-02-02,3.1868 1521 | 2021-02-03,3.2155 1522 | 2021-02-04,3.222 1523 | 2021-02-05,3.2315 1524 | 2021-02-07,3.2164 1525 | 2021-02-08,3.2404 1526 | 2021-02-09,3.2474 1527 | 2021-02-10,3.2436 1528 | 2021-02-18,3.292 1529 | 2021-02-19,3.271 1530 | 2021-02-20,3.2666 1531 | 2021-02-22,3.2917 1532 | 2021-02-23,3.2832 1533 | 2021-02-24,3.2611 1534 | 2021-02-25,3.2925 1535 | 2021-02-26,3.2908 1536 | 2021-03-01,3.2774 1537 | 2021-03-02,3.2557 1538 | 2021-03-03,3.2683 1539 | 2021-03-04,3.2762 1540 | 2021-03-05,3.2855 1541 | 2021-03-08,3.2692 1542 | 2021-03-09,3.2692 1543 | 2021-03-10,3.2649 1544 | 2021-03-11,3.2624 1545 | 2021-03-12,3.2711 1546 | 2021-03-15,3.2907 1547 | 2021-03-16,3.2811 1548 | 2021-03-17,3.2739 1549 | 2021-03-18,3.2744 1550 | 2021-03-19,3.2593 1551 | 2021-03-22,3.2522 1552 | 2021-03-23,3.2484 1553 | 2021-03-24,3.2127 1554 | 2021-03-25,3.2236 1555 | 2021-03-26,3.2165 1556 | 2021-03-29,3.2306 1557 | 2021-03-30,3.2145 1558 | 2021-03-31,3.2234 1559 | 2021-04-01,3.2176 1560 | 2021-04-02,3.2161 1561 | 2021-04-06,3.2285 1562 | 2021-04-07,3.2349 1563 | 2021-04-08,3.2485 1564 | 2021-04-09,3.2396 1565 | 2021-04-12,3.2268 1566 | 2021-04-13,3.1863 1567 | 2021-04-14,3.189 1568 | 2021-04-15,3.1866 1569 | 2021-04-16,3.1868 1570 | 2021-04-19,3.1795 1571 | 2021-04-20,3.1697 1572 | 2021-04-21,3.1799 1573 | 2021-04-22,3.1786 1574 | 2021-04-23,3.1811 1575 | 2021-04-25,3.2076 1576 | 2021-04-26,3.2119 1577 | 2021-04-27,3.2171 1578 | 2021-04-28,3.2157 1579 | 2021-04-29,3.2036 1580 | 2021-04-30,3.2039 1581 | 2021-05-06,3.1725 1582 | 2021-05-07,3.175 1583 | 2021-05-08,3.1798 1584 | 2021-05-10,3.1823 1585 | 2021-05-11,3.1646 1586 | 2021-05-12,3.1531 1587 | 2021-05-13,3.1749 1588 | 2021-05-14,3.1562 1589 | 2021-05-17,3.1683 1590 | 2021-05-18,3.1691 1591 | 2021-05-19,3.158 1592 | 2021-05-20,3.1366 1593 | 2021-05-21,3.1095 1594 | 2021-05-24,3.0987 1595 | 2021-05-25,3.1113 1596 | 2021-05-26,3.096 1597 | 2021-05-27,3.0994 1598 | 2021-05-28,3.1178 1599 | 2021-05-31,3.1084 1600 | 2021-06-01,3.0946 1601 | 2021-06-02,3.1053 1602 | 2021-06-03,3.1182 1603 | 2021-06-04,3.1208 1604 | 2021-06-07,3.1754 1605 | 2021-06-08,3.1613 1606 | 2021-06-09,3.1739 1607 | 2021-06-10,3.1541 1608 | 2021-06-11,3.1576 1609 | 2021-06-15,3.1603 1610 | 2021-06-16,3.1785 1611 | 2021-06-17,3.1842 1612 | 2021-06-18,3.1908 1613 | 2021-06-21,3.1558 1614 | 2021-06-22,3.1553 1615 | 2021-06-23,3.144 1616 | 2021-06-24,3.1358 1617 | 2021-06-25,3.1439 1618 | 2021-06-28,3.1439 1619 | 2021-06-29,3.1528 1620 | 2021-06-30,3.1368 1621 | 2021-07-01,3.0899 1622 | 2021-07-02,3.1425 1623 | 2021-07-05,3.1409 1624 | 2021-07-06,3.1388 1625 | 2021-07-07,3.1405 1626 | 2021-07-08,3.0659 1627 | 2021-07-09,3.0603 1628 | 2021-07-12,3.0491 1629 | 2021-07-13,3.0272 1630 | 2021-07-14,2.9932 1631 | 2021-07-15,3.0312 1632 | 2021-07-16,3.0195 1633 | 2021-07-19,3.0164 1634 | 2021-07-20,2.9917 1635 | 2021-07-21,2.9918 1636 | 2021-07-22,2.9931 1637 | 2021-07-23,2.9786 1638 | 2021-07-26,2.9595 1639 | 2021-07-27,2.9376 1640 | 2021-07-28,2.9585 1641 | 2021-07-29,2.9491 1642 | 2021-07-30,2.918 1643 | 2021-08-02,2.8241 1644 | 2021-08-03,2.8389 1645 | 2021-08-04,2.8516 1646 | 2021-08-05,2.8297 1647 | 2021-08-06,2.8214 1648 | 2021-08-09,2.8594 1649 | 2021-08-10,2.8745 1650 | 2021-08-11,2.8934 1651 | 2021-08-12,2.8842 1652 | 2021-08-13,2.8878 1653 | 2021-08-16,2.8941 1654 | 2021-08-17,2.9023 1655 | 2021-08-18,2.8729 1656 | 2021-08-19,2.8467 1657 | 2021-08-20,2.8589 1658 | 2021-08-23,2.8719 1659 | 2021-08-24,2.8845 1660 | 2021-08-25,2.852 1661 | 2021-08-26,2.8888 1662 | 2021-08-27,2.8813 1663 | 2021-08-30,2.8725 1664 | 2021-08-31,2.8637 1665 | 2021-09-01,2.8401 1666 | 2021-09-02,2.8413 1667 | 2021-09-03,2.8419 1668 | 2021-09-06,2.8426 1669 | 2021-09-07,2.8569 1670 | 2021-09-08,2.8775 1671 | 2021-09-09,2.8829 1672 | 2021-09-10,2.8902 1673 | 2021-09-13,2.8809 1674 | 2021-09-14,2.9181 1675 | 2021-09-15,2.8938 1676 | 2021-09-16,2.9155 1677 | 2021-09-17,2.8955 1678 | 2021-09-18,2.8844 1679 | 2021-09-22,2.8788 1680 | 2021-09-23,2.8818 1681 | 2021-09-24,2.8813 1682 | 2021-09-26,2.8872 1683 | 2021-09-27,2.8838 1684 | 2021-09-28,2.8981 1685 | 2021-09-29,2.8953 1686 | 2021-09-30,2.8807 1687 | 2021-10-08,2.9174 1688 | 2021-10-09,2.9293 1689 | 2021-10-11,2.9575 1690 | 2021-10-12,2.9746 1691 | 2021-10-13,2.9799 1692 | 2021-10-14,2.9768 1693 | 2021-10-15,2.9849 1694 | 2021-10-18,3.0376 1695 | 2021-10-19,3.048 1696 | 2021-10-20,3.0155 1697 | 2021-10-21,3.0085 1698 | 2021-10-22,2.9926 1699 | 2021-10-25,3.0031 1700 | 2021-10-26,2.9969 1701 | 2021-10-27,2.9931 1702 | 2021-10-28,2.9954 1703 | 2021-10-29,2.9899 1704 | 2021-11-01,2.9771 1705 | 2021-11-02,2.9608 1706 | 2021-11-03,2.9429 1707 | 2021-11-04,2.9557 1708 | 2021-11-05,2.9232 1709 | 2021-11-08,2.917 1710 | 2021-11-09,2.9315 1711 | 2021-11-10,2.9151 1712 | 2021-11-11,2.9407 1713 | 2021-11-12,2.9533 1714 | 2021-11-15,2.9542 1715 | 2021-11-16,2.9487 1716 | 2021-11-17,2.9458 1717 | 2021-11-18,2.9385 1718 | 2021-11-19,2.9275 1719 | 2021-11-22,2.9396 1720 | 2021-11-23,2.943 1721 | 2021-11-24,2.9334 1722 | 2021-11-25,2.9122 1723 | 2021-11-26,2.8881 1724 | 2021-11-29,2.8901 1725 | 2021-11-30,2.8948 1726 | 2021-12-01,2.8907 1727 | 2021-12-02,2.8991 1728 | 2021-12-03,2.9168 1729 | 2021-12-06,2.8818 1730 | 2021-12-07,2.8876 1731 | 2021-12-08,2.9082 1732 | 2021-12-09,2.9108 1733 | 2021-12-10,2.8961 1734 | 2021-12-13,2.9087 1735 | 2021-12-14,2.9005 1736 | 2021-12-15,2.9009 1737 | 2021-12-16,2.9127 1738 | 2021-12-17,2.9123 1739 | 2021-12-20,2.9135 1740 | 2021-12-21,2.9162 1741 | 2021-12-22,2.9073 1742 | 2021-12-23,2.8867 1743 | 2021-12-24,2.8887 1744 | 2021-12-27,2.8733 1745 | 2021-12-28,2.874 1746 | 2021-12-29,2.8538 1747 | 2021-12-30,2.8557 1748 | 2021-12-31,2.8352 1749 | 2022-01-04,2.8019 1750 | 2022-01-05,2.8042 1751 | 2022-01-06,2.822 1752 | 2022-01-07,2.8266 1753 | 2022-01-10,2.8153 1754 | 2022-01-11,2.8148 1755 | 2022-01-12,2.8013 1756 | 2022-01-13,2.8022 1757 | 2022-01-14,2.7946 1758 | 2022-01-17,2.7911 1759 | 2022-01-18,2.7759 1760 | 2022-01-19,2.723 1761 | 2022-01-20,2.737 1762 | 2022-01-21,2.7284 1763 | 2022-01-24,2.6998 1764 | 2022-01-25,2.6938 1765 | 2022-01-26,2.7188 1766 | 2022-01-27,2.734 1767 | 2022-01-28,2.7295 1768 | 2022-01-29,2.7232 1769 | 2022-01-30,2.7107 1770 | 2022-02-07,2.7353 1771 | 2022-02-08,2.7222 1772 | 2022-02-09,2.7386 1773 | 2022-02-10,2.7365 1774 | 2022-02-11,2.7951 1775 | 2022-02-14,2.7974 1776 | 2022-02-15,2.802 1777 | 2022-02-16,2.8019 1778 | 2022-02-17,2.7922 1779 | 2022-02-18,2.7897 1780 | 2022-02-21,2.8169 1781 | 2022-02-22,2.8465 1782 | 2022-02-23,2.8313 1783 | 2022-02-24,2.8065 1784 | 2022-02-25,2.8092 1785 | 2022-02-28,2.7938 1786 | 2022-03-01,2.798 1787 | 2022-03-02,2.8168 1788 | 2022-03-03,2.8306 1789 | 2022-03-04,2.8195 1790 | 2022-03-07,2.8346 1791 | 2022-03-08,2.8102 1792 | 2022-03-09,2.845 1793 | 2022-03-10,2.8446 1794 | 2022-03-11,2.8527 1795 | 2022-03-14,2.7587 1796 | 2022-03-15,2.8023 1797 | 2022-03-16,2.8298 1798 | 2022-03-17,2.8063 1799 | 2022-03-18,2.7894 1800 | 2022-03-21,2.8095 1801 | 2022-03-22,2.834 1802 | 2022-03-23,2.8349 1803 | 2022-03-24,2.8247 1804 | 2022-03-25,2.8038 1805 | 2022-03-28,2.7935 1806 | 2022-03-29,2.7981 1807 | 2022-03-30,2.7841 1808 | 2022-03-31,2.7844 1809 | 2022-04-01,2.7799 1810 | 2022-04-02,2.7783 1811 | 2022-04-06,2.7717 1812 | 2022-04-07,2.757 1813 | 2022-04-08,2.7509 1814 | 2022-04-11,2.7665 1815 | 2022-04-12,2.7772 1816 | 2022-04-13,2.7703 1817 | 2022-04-14,2.7572 1818 | 2022-04-15,2.7665 1819 | 2022-04-18,2.8032 1820 | 2022-04-19,2.8183 1821 | 2022-04-20,2.8411 1822 | 2022-04-21,2.839 1823 | 2022-04-22,2.8406 1824 | 2022-04-24,2.8476 1825 | 2022-04-25,2.8363 1826 | 2022-04-26,2.8339 1827 | 2022-04-27,2.8424 1828 | 2022-04-28,2.8594 1829 | 2022-04-29,2.8448 1830 | 2022-05-05,2.8434 1831 | 2022-05-06,2.8412 1832 | 2022-05-07,2.8413 1833 | 2022-05-09,2.8359 1834 | 2022-05-10,2.8191 1835 | 2022-05-11,2.8261 1836 | 2022-05-12,2.8293 1837 | 2022-05-13,2.8185 1838 | 2022-05-16,2.8359 1839 | 2022-05-17,2.8291 1840 | 2022-05-18,2.8226 1841 | 2022-05-19,2.8149 1842 | 2022-05-20,2.8243 1843 | 2022-05-23,2.8147 1844 | 2022-05-24,2.8065 1845 | 2022-05-25,2.7951 1846 | 2022-05-26,2.7606 1847 | 2022-05-27,2.7563 1848 | 2022-05-30,2.77 1849 | 2022-05-31,2.7986 1850 | 2022-06-01,2.7461 1851 | 2022-06-02,2.7561 1852 | 2022-06-06,2.766 1853 | 2022-06-07,2.7748 1854 | 2022-06-08,2.7608 1855 | 2022-06-09,2.7689 1856 | 2022-06-10,2.7591 1857 | 2022-06-13,2.7669 1858 | 2022-06-14,2.7835 1859 | 2022-06-15,2.7826 1860 | 2022-06-16,2.7809 1861 | 2022-06-17,2.7701 1862 | 2022-06-20,2.786 1863 | 2022-06-21,2.7884 1864 | 2022-06-22,2.7834 1865 | 2022-06-23,2.7788 1866 | 2022-06-24,2.7912 1867 | 2022-06-27,2.834 1868 | 2022-06-28,2.8367 1869 | 2022-06-29,2.8398 1870 | 2022-06-30,2.8264 1871 | 2022-07-01,2.821 1872 | 2022-07-04,2.8553 1873 | 2022-07-05,2.8526 1874 | 2022-07-06,2.8325 1875 | 2022-07-07,2.8428 1876 | 2022-07-08,2.8442 1877 | 2022-07-11,2.8385 1878 | 2022-07-12,2.8215 1879 | 2022-07-13,2.8135 1880 | 2022-07-14,2.8065 1881 | 2022-07-15,2.8032 1882 | 2022-07-18,2.7963 1883 | 2022-07-19,2.7966 1884 | 2022-07-20,2.7944 1885 | 2022-07-21,2.7723 1886 | 2022-07-22,2.7828 1887 | 2022-07-25,2.7851 1888 | 2022-07-26,2.7888 1889 | 2022-07-27,2.7787 1890 | 2022-07-28,2.7873 1891 | 2022-07-29,2.7664 1892 | 2022-08-01,2.7425 1893 | 2022-08-02,2.7303 1894 | 2022-08-03,2.7442 1895 | 2022-08-04,2.7203 1896 | 2022-08-05,2.7342 1897 | 2022-08-08,2.7452 1898 | 2022-08-09,2.7515 1899 | 2022-08-10,2.7412 1900 | 2022-08-11,2.7467 1901 | 2022-08-12,2.7418 1902 | 2022-08-15,2.6862 1903 | 2022-08-16,2.6439 1904 | 2022-08-17,2.6557 1905 | 2022-08-18,2.6374 1906 | 2022-08-19,2.6325 1907 | 2022-08-22,2.6344 1908 | 2022-08-23,2.6463 1909 | 2022-08-24,2.6488 1910 | 2022-08-25,2.6581 1911 | 2022-08-26,2.6726 1912 | 2022-08-29,2.6736 1913 | 2022-08-30,2.6468 1914 | 2022-08-31,2.6549 1915 | 2022-09-01,2.6326 1916 | 2022-09-02,2.6128 1917 | 2022-09-05,2.6198 1918 | 2022-09-06,2.6135 1919 | 2022-09-07,2.6107 1920 | 2022-09-08,2.6266 1921 | 2022-09-09,2.6263 1922 | 2022-09-13,2.6503 1923 | 2022-09-14,2.6567 1924 | 2022-09-15,2.67 1925 | 2022-09-16,2.6886 1926 | 2022-09-19,2.6831 1927 | 2022-09-20,2.6744 1928 | 2022-09-21,2.6552 1929 | 2022-09-22,2.6496 1930 | 2022-09-23,2.6617 1931 | 2022-09-26,2.6951 1932 | 2022-09-27,2.7009 1933 | 2022-09-28,2.7121 1934 | 2022-09-29,2.7296 1935 | 2022-09-30,2.7315 1936 | 2022-10-08,2.7726 1937 | 2022-10-09,2.7486 1938 | 2022-10-10,2.7446 1939 | 2022-10-11,2.744 1940 | 2022-10-12,2.7527 1941 | 2022-10-13,2.7347 1942 | 2022-10-14,2.7179 1943 | 2022-10-17,2.7107 1944 | 2022-10-18,2.71 1945 | 2022-10-19,2.709 1946 | 2022-10-20,2.7246 1947 | 2022-10-21,2.7287 1948 | 2022-10-24,2.7298 1949 | 2022-10-25,2.7282 1950 | 2022-10-26,2.7291 1951 | 2022-10-27,2.7039 1952 | 2022-10-28,2.6995 1953 | 2022-10-31,2.6553 1954 | 2022-11-01,2.6605 1955 | 2022-11-02,2.6786 1956 | 2022-11-03,2.6835 1957 | 2022-11-04,2.7054 1958 | 2022-11-07,2.7049 1959 | 2022-11-08,2.7157 1960 | 2022-11-09,2.7009 1961 | 2022-11-10,2.7014 1962 | 2022-11-11,2.7135 1963 | 2022-11-14,2.8267 1964 | 2022-11-15,2.8355 1965 | 2022-11-16,2.8187 1966 | 2022-11-17,2.8372 1967 | 2022-11-18,2.8269 1968 | 2022-11-21,2.8183 1969 | 2022-11-22,2.8439 1970 | 2022-11-23,2.8231 1971 | 2022-11-24,2.7968 1972 | 2022-11-25,2.822 1973 | 2022-11-28,2.8441 1974 | 2022-11-29,2.9108 1975 | 2022-11-30,2.9102 1976 | 2022-12-01,2.8762 1977 | 2022-12-02,2.8686 1978 | 2022-12-05,2.8776 1979 | 2022-12-06,2.9112 1980 | 2022-12-07,2.9189 1981 | 2022-12-08,2.8746 1982 | 2022-12-09,2.8984 1983 | 2022-12-12,2.8853 1984 | 2022-12-13,2.9173 1985 | 2022-12-14,2.8794 1986 | 2022-12-15,2.8753 1987 | 2022-12-16,2.9015 1988 | 2022-12-19,2.8661 1989 | 2022-12-20,2.8647 1990 | 2022-12-21,2.8797 1991 | 2022-12-22,2.8563 1992 | 2022-12-23,2.8488 1993 | 2022-12-26,2.8428 1994 | 2022-12-27,2.8622 1995 | 2022-12-28,2.863 1996 | 2022-12-29,2.8406 1997 | 2022-12-30,2.841 1998 | 2023-01-03,2.8402 1999 | 2023-01-04,2.8172 2000 | 2023-01-05,2.8234 2001 | 2023-01-06,2.8425 2002 | 2023-01-09,2.838 2003 | 2023-01-10,2.8558 2004 | 2023-01-11,2.8781 2005 | 2023-01-12,2.8722 2006 | 2023-01-13,2.8897 2007 | 2023-01-16,2.9256 2008 | 2023-01-17,2.9167 2009 | 2023-01-18,2.9066 2010 | 2023-01-19,2.9219 2011 | 2023-01-20,2.9114 2012 | 2023-01-28,2.9368 2013 | 2023-01-29,2.9225 2014 | 2023-01-30,2.9241 2015 | 2023-01-31,2.9092 2016 | 2023-02-01,2.9072 2017 | 2023-02-02,2.9148 2018 | 2023-02-03,2.9033 2019 | 2023-02-06,2.9029 2020 | 2023-02-07,2.9057 2021 | 2023-02-08,2.9035 2022 | 2023-02-09,2.9043 2023 | 2023-02-10,2.9001 2024 | 2023-02-13,2.8997 2025 | 2023-02-14,2.9056 2026 | 2023-02-15,2.9027 2027 | 2023-02-16,2.902 2028 | 2023-02-17,2.9009 2029 | 2023-02-20,2.9046 2030 | 2023-02-21,2.9303 2031 | 2023-02-22,2.9244 2032 | 2023-02-23,2.9259 2033 | 2023-02-24,2.9223 2034 | 2023-02-27,2.9228 2035 | 2023-02-28,2.9227 2036 | 2023-03-01,2.9187 2037 | 2023-03-02,2.9186 2038 | 2023-03-03,2.9258 2039 | 2023-03-06,2.9047 2040 | 2023-03-07,2.9001 2041 | 2023-03-08,2.8907 2042 | 2023-03-09,2.8919 2043 | 2023-03-10,2.883 2044 | 2023-03-13,2.8847 2045 | 2023-03-14,2.8777 2046 | 2023-03-15,2.8871 2047 | 2023-03-16,2.8785 2048 | 2023-03-17,2.8769 2049 | 2023-03-20,2.876 2050 | 2023-03-21,2.8718 2051 | 2023-03-22,2.8877 2052 | 2023-03-23,2.8802 2053 | 2023-03-24,2.8926 2054 | 2023-03-27,2.8835 2055 | 2023-03-28,2.8831 2056 | 2023-03-29,2.8832 2057 | 2023-03-30,2.8753 2058 | 2023-03-31,2.8855 2059 | 2023-04-03,2.862 2060 | 2023-04-04,2.8642 2061 | 2023-04-06,2.8643 2062 | 2023-04-07,2.8639 2063 | 2023-04-10,2.8502 2064 | 2023-04-11,2.8381 2065 | 2023-04-12,2.8197 2066 | 2023-04-13,2.8262 2067 | 2023-04-14,2.8266 2068 | 2023-04-17,2.8397 2069 | 2023-04-18,2.8396 2070 | 2023-04-19,2.8311 2071 | 2023-04-20,2.8366 2072 | 2023-04-21,2.8348 2073 | 2023-04-23,2.8264 2074 | 2023-04-24,2.8167 2075 | 2023-04-25,2.821 2076 | 2023-04-26,2.8179 2077 | 2023-04-27,2.7891 2078 | 2023-04-28,2.7973 2079 | 2023-05-04,2.7671 2080 | 2023-05-05,2.7514 2081 | 2023-05-06,2.7372 2082 | 2023-05-08,2.7439 2083 | 2023-05-09,2.7444 2084 | 2023-05-10,2.7277 2085 | 2023-05-11,2.7028 2086 | 2023-05-12,2.7139 2087 | 2023-05-15,2.7145 2088 | 2023-05-16,2.7225 2089 | 2023-05-17,2.7126 2090 | 2023-05-18,2.7344 2091 | 2023-05-19,2.7185 2092 | 2023-05-22,2.7202 2093 | 2023-05-23,2.7054 2094 | 2023-05-24,2.7048 2095 | 2023-05-25,2.7133 2096 | 2023-05-26,2.7127 2097 | 2023-05-29,2.7266 2098 | 2023-05-30,2.7142 2099 | 2023-05-31,2.7216 2100 | 2023-06-01,2.7089 2101 | 2023-06-02,2.7129 2102 | 2023-06-05,2.7232 2103 | 2023-06-06,2.7194 2104 | 2023-06-07,2.7057 2105 | 2023-06-08,2.7113 2106 | 2023-06-09,2.7081 2107 | 2023-06-12,2.6905 2108 | 2023-06-13,2.6583 2109 | 2023-06-14,2.6353 2110 | 2023-06-15,2.6654 2111 | 2023-06-16,2.7033 2112 | 2023-06-19,2.7145 2113 | 2023-06-20,2.7141 2114 | 2023-06-21,2.7028 2115 | 2023-06-25,2.6949 2116 | 2023-06-26,2.6977 2117 | 2023-06-27,2.709 2118 | 2023-06-28,2.6985 2119 | 2023-06-29,2.7036 2120 | 2023-06-30,2.6929 2121 | 2023-07-03,2.6444 2122 | 2023-07-04,2.6416 2123 | 2023-07-05,2.6455 2124 | 2023-07-06,2.638 2125 | 2023-07-07,2.6421 2126 | 2023-07-10,2.6451 2127 | 2023-07-11,2.6395 2128 | 2023-07-12,2.6427 2129 | 2023-07-13,2.6448 2130 | 2023-07-14,2.6486 2131 | 2023-07-17,2.6434 2132 | 2023-07-18,2.6293 2133 | 2023-07-19,2.6251 2134 | 2023-07-20,2.6272 2135 | 2023-07-21,2.62 2136 | 2023-07-24,2.6146 2137 | 2023-07-25,2.6529 2138 | 2023-07-26,2.6618 2139 | 2023-07-27,2.6425 2140 | 2023-07-28,2.6442 2141 | 2023-07-31,2.6716 2142 | 2023-08-01,2.658 2143 | 2023-08-02,2.6576 2144 | 2023-08-03,2.6507 2145 | 2023-08-04,2.6563 2146 | 2023-08-07,2.6493 2147 | 2023-08-08,2.6486 2148 | 2023-08-09,2.6473 2149 | 2023-08-10,2.6534 2150 | 2023-08-11,2.6488 2151 | 2023-08-14,2.625 2152 | 2023-08-15,2.5625 2153 | 2023-08-16,2.567 2154 | 2023-08-17,2.5699 2155 | 2023-08-18,2.5708 2156 | 2023-08-21,2.5521 2157 | 2023-08-22,2.5485 2158 | 2023-08-23,2.5553 2159 | 2023-08-24,2.5584 2160 | 2023-08-25,2.5619 2161 | 2023-08-28,2.607 2162 | 2023-08-29,2.5952 2163 | 2023-08-30,2.5998 2164 | 2023-08-31,2.5898 2165 | 2023-09-01,2.6069 2166 | 2023-09-04,2.6497 2167 | 2023-09-05,2.6401 2168 | 2023-09-06,2.6466 2169 | 2023-09-07,2.6767 2170 | 2023-09-08,2.6654 2171 | 2023-09-11,2.6785 2172 | 2023-09-12,2.6534 2173 | 2023-09-13,2.6536 2174 | 2023-09-14,2.6497 2175 | 2023-09-15,2.6405 2176 | 2023-09-18,2.682 2177 | 2023-09-19,2.6753 2178 | 2023-09-20,2.6838 2179 | 2023-09-21,2.6839 2180 | 2023-09-22,2.6802 2181 | 2023-09-25,2.7048 2182 | 2023-09-26,2.7174 2183 | 2023-09-27,2.7193 2184 | 2023-09-28,2.7006 2185 | 2023-10-07,2.6753 2186 | 2023-10-08,2.6717 2187 | 2023-10-09,2.664 2188 | 2023-10-10,2.6804 2189 | 2023-10-11,2.6971 2190 | 2023-10-12,2.71 2191 | 2023-10-13,2.6915 2192 | 2023-10-16,2.6768 2193 | 2023-10-17,2.6907 2194 | 2023-10-18,2.6903 2195 | 2023-10-19,2.7187 2196 | 2023-10-20,2.7163 2197 | 2023-10-23,2.7038 2198 | 2023-10-24,2.7221 2199 | 2023-10-25,2.729 2200 | 2023-10-26,2.705 2201 | 2023-10-27,2.7157 2202 | 2023-10-30,2.7134 2203 | 2023-10-31,2.6937 2204 | 2023-11-01,2.6874 2205 | 2023-11-02,2.6725 2206 | 2023-11-03,2.6658 2207 | 2023-11-06,2.6594 2208 | 2023-11-07,2.6498 2209 | 2023-11-08,2.6623 2210 | 2023-11-09,2.6412 2211 | 2023-11-10,2.6502 2212 | 2023-11-13,2.6443 2213 | 2023-11-14,2.6491 2214 | 2023-11-15,2.6574 2215 | 2023-11-16,2.6546 2216 | 2023-11-17,2.6531 2217 | 2023-11-20,2.6537 2218 | 2023-11-21,2.6579 2219 | 2023-11-22,2.6654 2220 | 2023-11-23,2.6876 2221 | 2023-11-24,2.6835 2222 | 2023-11-27,2.6926 2223 | 2023-11-28,2.6848 2224 | 2023-11-29,2.6776 2225 | 2023-11-30,2.6705 2226 | 2023-12-01,2.6733 2227 | 2023-12-04,2.6666 2228 | 2023-12-05,2.6707 2229 | 2023-12-06,2.6651 2230 | 2023-12-07,2.6679 2231 | 2023-12-08,2.6638 2232 | 2023-12-11,2.6405 2233 | 2023-12-12,2.6404 2234 | 2023-12-13,2.6233 2235 | 2023-12-14,2.6239 2236 | 2023-12-15,2.6336 2237 | 2023-12-18,2.6172 2238 | 2023-12-19,2.6147 2239 | 2023-12-20,2.6119 2240 | 2023-12-21,2.6196 2241 | 2023-12-22,2.5847 2242 | 2023-12-25,2.5793 2243 | 2023-12-26,2.5677 2244 | 2023-12-27,2.5679 2245 | 2023-12-28,2.5475 2246 | 2023-12-29,2.5652 2247 | 2024-01-02,2.5476 2248 | 2024-01-03,2.5594 2249 | 2024-01-04,2.538 2250 | 2024-01-05,2.5128 2251 | 2024-01-08,2.5104 2252 | 2024-01-09,2.4937 2253 | 2024-01-10,2.4907 2254 | 2024-01-11,2.5014 2255 | 2024-01-12,2.502 2256 | 2024-01-15,2.5114 2257 | 2024-01-16,2.5195 2258 | 2024-01-17,2.5124 2259 | 2024-01-18,2.4961 2260 | 2024-01-19,2.502 2261 | 2024-01-22,2.4933 2262 | 2024-01-23,2.4935 2263 | 2024-01-24,2.4966 2264 | 2024-01-25,2.4991 2265 | 2024-01-26,2.4889 2266 | 2024-01-29,2.4923 2267 | 2024-01-30,2.4631 2268 | 2024-01-31,2.4256 2269 | 2024-02-01,2.4268 2270 | 2024-02-02,2.4282 2271 | 2024-02-04,2.3994 2272 | 2024-02-05,2.3994 2273 | 2024-02-06,2.4099 2274 | 2024-02-07,2.4231 2275 | 2024-02-08,2.4175 2276 | 2024-02-09,2.4245 2277 | 2024-02-18,2.4306 2278 | 2024-02-19,2.4311 2279 | 2024-02-20,2.4189 2280 | 2024-02-21,2.4089 2281 | 2024-02-22,2.4057 2282 | 2024-02-23,2.3863 2283 | 2024-02-26,2.3905 2284 | 2024-02-27,2.3609 2285 | 2024-02-28,2.3637 2286 | 2024-02-29,2.3417 2287 | 2024-03-01,2.3649 2288 | 2024-03-04,2.3477 2289 | 2024-03-05,2.3314 2290 | 2024-03-06,2.2901 2291 | 2024-03-07,2.2616 2292 | 2024-03-08,2.2739 2293 | 2024-03-11,2.2792 2294 | 2024-03-12,2.3164 2295 | 2024-03-13,2.3441 2296 | 2024-03-14,2.3412 2297 | 2024-03-15,2.3232 2298 | 2024-03-18,2.3096 2299 | 2024-03-19,2.2868 2300 | 2024-03-20,2.284 2301 | 2024-03-21,2.284 2302 | 2024-03-22,2.2873 2303 | 2024-03-25,2.3134 2304 | 2024-03-26,2.3123 2305 | 2024-03-27,2.3146 2306 | 2024-03-28,2.2877 2307 | 2024-03-29,2.3011 2308 | 2024-04-01,2.3071 2309 | 2024-04-02,2.2989 2310 | 2024-04-03,2.2852 2311 | 2024-04-07,2.2903 2312 | 2024-04-08,2.2855 2313 | 2024-04-09,2.2813 2314 | 2024-04-10,2.2939 2315 | 2024-04-11,2.2945 2316 | 2024-04-12,2.28 2317 | 2024-04-15,2.2736 2318 | 2024-04-16,2.2799 2319 | 2024-04-17,2.2652 2320 | 2024-04-18,2.258 2321 | 2024-04-19,2.2564 2322 | 2024-04-22,2.2477 2323 | 2024-04-23,2.2232 2324 | 2024-04-24,2.2478 2325 | 2024-04-25,2.2616 2326 | 2024-04-26,2.2677 2327 | 2024-04-28,2.3052 2328 | 2024-04-29,2.3693 2329 | 2024-04-30,2.3152 2330 | 2024-05-06,2.3095 2331 | 2024-05-07,2.2965 2332 | 2024-05-08,2.2893 2333 | 2024-05-09,2.3068 2334 | 2024-05-10,2.318 2335 | 2024-05-11,2.3339 2336 | 2024-05-13,2.2951 2337 | 2024-05-14,2.2868 2338 | 2024-05-15,2.2882 2339 | 2024-05-16,2.302 2340 | 2024-05-17,2.3311 2341 | 2024-05-20,2.3039 2342 | 2024-05-21,2.3135 2343 | 2024-05-22,2.3113 2344 | 2024-05-23,2.3038 2345 | 2024-05-24,2.3074 2346 | 2024-05-27,2.3121 2347 | 2024-05-28,2.3028 2348 | 2024-05-29,2.292 2349 | 2024-05-30,2.2916 2350 | 2024-05-31,2.3176 2351 | 2024-06-03,2.3113 2352 | 2024-06-04,2.2865 2353 | 2024-06-05,2.2794 2354 | 2024-06-06,2.2862 2355 | 2024-06-07,2.2836 2356 | 2024-06-11,2.2787 2357 | 2024-06-12,2.2771 2358 | 2024-06-13,2.267 2359 | 2024-06-14,2.2606 2360 | 2024-06-17,2.2608 2361 | 2024-06-18,2.251 2362 | 2024-06-19,2.2541 2363 | 2024-06-20,2.2395 2364 | 2024-06-21,2.2541 2365 | 2024-06-24,2.2554 2366 | 2024-06-25,2.2365 2367 | 2024-06-26,2.2217 2368 | 2024-06-27,2.2143 2369 | 2024-06-28,2.2057 2370 | 2024-07-01,2.184 2371 | 2024-07-02,2.2454 2372 | 2024-07-03,2.2366 2373 | 2024-07-04,2.2445 2374 | 2024-07-05,2.2596 2375 | 2024-07-08,2.2947 2376 | 2024-07-09,2.2708 2377 | 2024-07-10,2.2665 2378 | 2024-07-11,2.2644 2379 | 2024-07-12,2.2503 2380 | 2024-07-15,2.2503 2381 | 2024-07-16,2.2676 2382 | 2024-07-17,2.2543 2383 | 2024-07-18,2.2595 2384 | 2024-07-19,2.2576 2385 | 2024-07-22,2.24 2386 | 2024-07-23,2.2331 2387 | 2024-07-24,2.227 2388 | 2024-07-25,2.2196 2389 | 2024-07-26,2.1801 2390 | 2024-07-29,2.1693 2391 | 2024-07-30,2.1431 2392 | 2024-07-31,2.1357 2393 | 2024-08-01,2.1354 2394 | 2024-08-02,2.1161 2395 | 2024-08-05,2.1105 2396 | 2024-08-06,2.1493 2397 | 2024-08-07,2.1307 2398 | 2024-08-08,2.1482 2399 | 2024-08-09,2.1784 2400 | 2024-08-12,2.2349 2401 | 2024-08-13,2.225 2402 | 2024-08-14,2.171 2403 | 2024-08-15,2.1734 2404 | 2024-08-16,2.1742 2405 | 2024-08-19,2.1761 2406 | 2024-08-20,2.1641 2407 | 2024-08-21,2.1701 2408 | 2024-08-22,2.1581 2409 | 2024-08-23,2.1518 2410 | 2024-08-26,2.1416 2411 | 2024-08-27,2.1602 2412 | 2024-08-28,2.172 2413 | 2024-08-29,2.1599 2414 | 2024-08-30,2.1704 2415 | 2024-09-02,2.1489 2416 | 2024-09-03,2.1367 2417 | 2024-09-04,2.1359 2418 | 2024-09-05,2.1229 2419 | 2024-09-06,2.1344 2420 | 2024-09-09,2.1332 2421 | 2024-09-10,2.1198 2422 | 2024-09-11,2.1056 2423 | 2024-09-12,2.099 2424 | 2024-09-13,2.0865 2425 | 2024-09-14,2.0399 2426 | 2024-09-18,2.0425 2427 | 2024-09-19,2.0286 2428 | 2024-09-20,2.0429 2429 | 2024-09-23,2.0342 2430 | 2024-09-24,2.0359 2431 | 2024-09-25,2.0503 2432 | 2024-09-26,2.0414 2433 | 2024-09-27,2.1158 2434 | 2024-09-29,2.22 2435 | 2024-09-30,2.1908 2436 | 2024-10-08,2.1532 2437 | 2024-10-09,2.1686 2438 | 2024-10-10,2.144 2439 | 2024-10-11,2.1072 2440 | 2024-10-12,2.1194 2441 | 2024-10-14,2.1183 2442 | 2024-10-15,2.1215 2443 | 2024-10-16,2.1042 2444 | 2024-10-17,2.1024 2445 | 2024-10-18,2.0841 2446 | 2024-10-21,2.1085 2447 | 2024-10-22,2.1048 2448 | 2024-10-23,2.1371 2449 | 2024-10-24,2.1228 2450 | 2024-10-25,2.1399 2451 | 2024-10-28,2.1405 2452 | 2024-10-29,2.1345 2453 | 2024-10-30,2.1286 2454 | 2024-10-31,2.1341 2455 | 2024-11-01,2.1436 2456 | 2024-11-04,2.1247 2457 | 2024-11-05,2.1204 2458 | 2024-11-06,2.1031 2459 | 2024-11-07,2.1094 2460 | 2024-11-08,2.0998 2461 | 2024-11-11,2.0946 2462 | 2024-11-12,2.0761 2463 | 2024-11-13,2.0744 2464 | 2024-11-14,2.0828 2465 | 2024-11-15,2.0772 2466 | 2024-11-18,2.1007 2467 | 2024-11-19,2.1016 2468 | 2024-11-20,2.0963 2469 | 2024-11-21,2.0902 2470 | 2024-11-22,2.0775 2471 | 2024-11-25,2.0705 2472 | 2024-11-26,2.0622 2473 | 2024-11-27,2.0575 2474 | 2024-11-28,2.0605 2475 | 2024-11-29,2.0331 2476 | 2024-12-02,2.0077 2477 | 2024-12-03,1.982 2478 | 2024-12-04,1.9697 2479 | 2024-12-05,1.9572 2480 | 2024-12-06,1.9486 2481 | 2024-12-09,1.9368 2482 | 2024-12-10,1.8655 2483 | 2024-12-11,1.8543 2484 | 2024-12-12,1.8169 2485 | 2024-12-13,1.7735 2486 | 2024-12-16,1.7204 2487 | 2024-12-17,1.7309 2488 | 2024-12-18,1.7169 2489 | 2024-12-19,1.7458 2490 | 2024-12-20,1.7235 2491 | 2024-12-23,1.6856 2492 | 2024-12-24,1.6994 2493 | 2024-12-25,1.7319 2494 | 2024-12-26,1.7345 2495 | 2024-12-27,1.705 2496 | 2024-12-30,1.7056 2497 | 2024-12-31,1.6774 2498 | 2025-01-02,1.6369 2499 | 2025-01-03,1.5895 2500 | 2025-01-06,1.6041 2501 | 2025-01-07,1.5973 2502 | 2025-01-08,1.6018 2503 | 2025-01-09,1.6127 2504 | 2025-01-10,1.6712 2505 | 2025-01-13,1.6442 2506 | 2025-01-14,1.6502 2507 | 2025-01-15,1.6268 2508 | 2025-01-16,1.642 2509 | 2025-01-17,1.6425 2510 | 2025-01-20,1.665 2511 | 2025-01-21,1.6753 2512 | 2025-01-22,1.6554 2513 | 2025-01-23,1.662 2514 | 2025-01-24,1.6779 2515 | 2025-01-26,1.6536 2516 | 2025-01-27,1.645 2517 | 2025-02-05,1.646 2518 | 2025-02-06,1.6335 2519 | 2025-02-07,1.6287 2520 | 2025-02-08,1.6366 2521 | 2025-02-10,1.6264 2522 | 2025-02-11,1.6352 2523 | 2025-02-12,1.6311 2524 | 2025-02-13,1.6382 2525 | 2025-02-14,1.6486 2526 | 2025-02-17,1.6787 2527 | 2025-02-18,1.7216 2528 | 2025-02-19,1.6992 2529 | 2025-02-20,1.7021 2530 | 2025-02-21,1.7317 2531 | 2025-02-24,1.77 2532 | 2025-02-25,1.7842 2533 | 2025-02-26,1.7659 2534 | 2025-02-27,1.7741 2535 | 2025-02-28,1.8 2536 | 2025-03-03,1.722 2537 | 2025-03-04,1.7049 2538 | 2025-03-05,1.7038 2539 | 2025-03-06,1.7301 2540 | 2025-03-07,1.7688 2541 | 2542 | 2543 | 2544 | 2545 | 2546 | 2547 | 2548 | 2549 | 2550 | 2551 | 2552 | 2553 | 2554 | 2555 | 2556 | 2557 | 2558 | 2559 | 2560 | 2561 | 2562 | 2563 | 2564 | 2565 | 2566 | 2567 | 2568 | 2569 | 2570 | 2571 | 2572 | 2573 | 2574 | 2575 | 2576 | 2577 | 2578 | 2579 | 2580 | 2581 | 2582 | 2583 | 2584 | 2585 | 2586 | 2587 | 2588 | 2589 | 2590 | 2591 | 2592 | 2593 | 2594 | 2595 | 2596 | 2597 | 2598 | 2599 | 2600 | 2601 | 2602 | 2603 | 2604 | 2605 | 2606 | 2607 | 2608 | 2609 | 2610 | 2611 | 2612 | 2613 | 2614 | 2615 | 2616 | 2617 | 2618 | 2619 | 2620 | 2621 | 2622 | 2623 | 2624 | 2625 | 2626 | 2627 | 2628 | 2629 | 2630 | 2631 | 2632 | 2633 | 2634 | 2635 | 2636 | 2637 | 2638 | 2639 | 2640 | 2641 | 2642 | 2643 | 2644 | 2645 | 2646 | 2647 | 2648 | 2649 | 2650 | 2651 | 2652 | 2653 | 2654 | 2655 | 2656 | 2657 | 2658 | 2659 | 2660 | 2661 | 2662 | 2663 | 2664 | 2665 | 2666 | 2667 | 2668 | 2669 | 2670 | 2671 | 2672 | 2673 | 2674 | 2675 | 2676 | 2677 | 2678 | 2679 | 2680 | 2681 | 2682 | 2683 | 2684 | 2685 | 2686 | 2687 | 2688 | 2689 | 2690 | 2691 | 2692 | 2693 | 2694 | 2695 | 2696 | 2697 | 2698 | 2699 | 2700 | 2701 | 2702 | 2703 | 2704 | 2705 | 2706 | 2707 | 2708 | 2709 | 2710 | 2711 | 2712 | 2713 | 2714 | 2715 | 2716 | 2717 | 2718 | 2719 | 2720 | 2721 | 2722 | 2723 | 2724 | 2725 | 2726 | 2727 | 2728 | 2729 | 2730 | 2731 | 2732 | 2733 | 2734 | 2735 | 2736 | 2737 | 2738 | 2739 | 2740 | 2741 | 2742 | 2743 | 2744 | 2745 | 2746 | 2747 | 2748 | 2749 | 2750 | 2751 | 2752 | 2753 | 2754 | 2755 | 2756 | 2757 | 2758 | 2759 | 2760 | 2761 | 2762 | 2763 | 2764 | 2765 | 2766 | 2767 | 2768 | 2769 | 2770 | 2771 | 2772 | 2773 | 2774 | 2775 | 2776 | 2777 | 2778 | 2779 | 2780 | 2781 | 2782 | 2783 | 2784 | 2785 | 2786 | 2787 | 2788 | 2789 | 2790 | 2791 | 2792 | 2793 | 2794 | 2795 | 2796 | 2797 | 2798 | 2799 | 2800 | 2801 | 2802 | 2803 | 2804 | 2805 | 2806 | 2807 | 2808 | 2809 | 2810 | 2811 | 2812 | 2813 | 2814 | 2815 | 2816 | 2817 | 2818 | 2819 | 2820 | 2821 | 2822 | 2823 | 2824 | 2825 | 2826 | 2827 | 2828 | 2829 | 2830 | 2831 | 2832 | 2833 | 2834 | 2835 | 2836 | 2837 | 2838 | 2839 | 2840 | 2841 | 2842 | 2843 | 2844 | 2845 | 2846 | 2847 | 2848 | 2849 | 2850 | 2851 | 2852 | 2853 | 2854 | 2855 | 2856 | 2857 | 2858 | 2859 | 2860 | 2861 | 2862 | 2863 | 2864 | 2865 | 2866 | 2867 | 2868 | 2869 | 2870 | 2871 | 2872 | 2873 | 2874 | 2875 | 2876 | 2877 | 2878 | 2879 | 2880 | 2881 | 2882 | 2883 | 2884 | 2885 | 2886 | 2887 | 2888 | 2889 | 2890 | 2891 | 2892 | 2893 | 2894 | 2895 | 2896 | 2897 | 2898 | 2899 | 2900 | 2901 | 2902 | 2903 | 2904 | 2905 | 2906 | 2907 | 2908 | 2909 | 2910 | 2911 | 2912 | 2913 | 2914 | 2915 | 2916 | 2917 | 2918 | 2919 | 2920 | 2921 | 2922 | 2923 | 2924 | 2925 | 2926 | 2927 | 2928 | 2929 | 2930 | 2931 | 2932 | 2933 | 2934 | 2935 | 2936 | 2937 | 2938 | 2939 | 2940 | 2941 | 2942 | 2943 | 2944 | 2945 | 2946 | 2947 | 2948 | 2949 | 2950 | 2951 | 2952 | 2953 | 2954 | 2955 | 2956 | 2957 | 2958 | 2959 | 2960 | 2961 | 2962 | 2963 | 2964 | 2965 | 2966 | 2967 | 2968 | 2969 | 2970 | 2971 | 2972 | 2973 | 2974 | 2975 | 2976 | 2977 | 2978 | 2979 | 2980 | 2981 | 2982 | 2983 | 2984 | 2985 | 2986 | 2987 | 2988 | 2989 | 2990 | 2991 | 2992 | 2993 | 2994 | 2995 | 2996 | 2997 | 2998 | 2999 | 3000 | 3001 | 3002 | 3003 | 3004 | 3005 | 3006 | 3007 | 3008 | 3009 | 3010 | 3011 | 3012 | 3013 | 3014 | 3015 | 3016 | 3017 | 3018 | 3019 | 3020 | 3021 | 3022 | 3023 | 3024 | 3025 | 3026 | 3027 | 3028 | 3029 | 3030 | 3031 | 3032 | 3033 | 3034 | 3035 | 3036 | 3037 | 3038 | 3039 | 3040 | 3041 | 3042 | 3043 | 3044 | 3045 | 3046 | 3047 | 3048 | 3049 | 3050 | 3051 | 3052 | 3053 | 3054 | 3055 | 3056 | 3057 | 3058 | 3059 | 3060 | 3061 | 3062 | 3063 | 3064 | 3065 | 3066 | 3067 | 3068 | 3069 | 3070 | 3071 | 3072 | 3073 | 3074 | 3075 | 3076 | 3077 | 3078 | 3079 | 3080 | 3081 | 3082 | 3083 | 3084 | 3085 | 3086 | 3087 | 3088 | 3089 | 3090 | 3091 | 3092 | 3093 | 3094 | 3095 | 3096 | 3097 | 3098 | 3099 | 3100 | 3101 | 3102 | 3103 | 3104 | 3105 | 3106 | 3107 | 3108 | 3109 | 3110 | 3111 | 3112 | 3113 | 3114 | 3115 | 3116 | 3117 | 3118 | 3119 | 3120 | 3121 | 3122 | 3123 | 3124 | 3125 | 3126 | 3127 | 3128 | 3129 | 3130 | 3131 | 3132 | 3133 | 3134 | 3135 | 3136 | 3137 | 3138 | 3139 | 3140 | 3141 | 3142 | 3143 | 3144 | 3145 | 3146 | 3147 | 3148 | 3149 | 3150 | 3151 | 3152 | 3153 | 3154 | 3155 | 3156 | 3157 | 3158 | 3159 | 3160 | 3161 | 3162 | 3163 | 3164 | 3165 | 3166 | 3167 | 3168 | 3169 | 3170 | 3171 | 3172 | 3173 | 3174 | 3175 | 3176 | 3177 | 3178 | 3179 | 3180 | 3181 | 3182 | 3183 | 3184 | 3185 | 3186 | 3187 | 3188 | 3189 | 3190 | 3191 | 3192 | 3193 | 3194 | 3195 | 3196 | 3197 | 3198 | 3199 | 3200 | 3201 | 3202 | 3203 | 3204 | 3205 | 3206 | 3207 | 3208 | 3209 | 3210 | 3211 | 3212 | 3213 | 3214 | 3215 | 3216 | 3217 | 3218 | 3219 | 3220 | 3221 | 3222 | 3223 | 3224 | 3225 | 3226 | 3227 | 3228 | 3229 | 3230 | 3231 | 3232 | 3233 | 3234 | 3235 | 3236 | 3237 | 3238 | 3239 | 3240 | 3241 | 3242 | 3243 | 3244 | 3245 | 3246 | 3247 | 3248 | 3249 | 3250 | 3251 | 3252 | 3253 | 3254 | 3255 | 3256 | 3257 | 3258 | 3259 | 3260 | 3261 | 3262 | 3263 | 3264 | 3265 | 3266 | 3267 | 3268 | 3269 | 3270 | 3271 | 3272 | 3273 | 3274 | 3275 | 3276 | 3277 | 3278 | 3279 | 3280 | 3281 | 3282 | 3283 | 3284 | 3285 | 3286 | 3287 | 3288 | 3289 | 3290 | 3291 | 3292 | 3293 | 3294 | 3295 | 3296 | 3297 | 3298 | 3299 | 3300 | 3301 | 3302 | 3303 | 3304 | 3305 | 3306 | 3307 | 3308 | 3309 | 3310 | 3311 | 3312 | 3313 | 3314 | 3315 | 3316 | 3317 | 3318 | 3319 | 3320 | 3321 | 3322 | 3323 | 3324 | 3325 | 3326 | 3327 | 3328 | 3329 | 3330 | 3331 | 3332 | 3333 | 3334 | 3335 | 3336 | 3337 | 3338 | 3339 | 3340 | 3341 | 3342 | 3343 | 3344 | 3345 | 3346 | 3347 | 3348 | 3349 | 3350 | 3351 | 3352 | 3353 | 3354 | 3355 | 3356 | 3357 | 3358 | 3359 | 3360 | 3361 | 3362 | 3363 | 3364 | 3365 | 3366 | 3367 | 3368 | 3369 | 3370 | 3371 | 3372 | 3373 | 3374 | 3375 | 3376 | 3377 | 3378 | 3379 | 3380 | 3381 | 3382 | 3383 | 3384 | 3385 | 3386 | 3387 | 3388 | 3389 | 3390 | 3391 | 3392 | 3393 | 3394 | 3395 | 3396 | 3397 | 3398 | 3399 | 3400 | 3401 | 3402 | 3403 | 3404 | 3405 | 3406 | 3407 | 3408 | 3409 | 3410 | 3411 | 3412 | 3413 | 3414 | 3415 | 3416 | 3417 | 3418 | 3419 | 3420 | 3421 | 3422 | 3423 | 3424 | 3425 | 3426 | 3427 | 3428 | 3429 | 3430 | 3431 | 3432 | 3433 | 3434 | 3435 | 3436 | 3437 | 3438 | 3439 | 3440 | 3441 | 3442 | 3443 | 3444 | 3445 | 3446 | 3447 | 3448 | 3449 | 3450 | 3451 | 3452 | 3453 | 3454 | 3455 | 3456 | 3457 | 3458 | 3459 | 3460 | 3461 | 3462 | 3463 | 3464 | 3465 | 3466 | 3467 | 3468 | 3469 | 3470 | 3471 | 3472 | 3473 | 3474 | 3475 | 3476 | 3477 | 3478 | 3479 | 3480 | 3481 | 3482 | 3483 | 3484 | 3485 | 3486 | 3487 | 3488 | 3489 | 3490 | 3491 | 3492 | 3493 | 3494 | 3495 | 3496 | 3497 | 3498 | 3499 | 3500 | 3501 | 3502 | 3503 | 3504 | 3505 | 3506 | 3507 | 3508 | 3509 | 3510 | 3511 | 3512 | 3513 | 3514 | 3515 | 3516 | 3517 | 3518 | 3519 | 3520 | 3521 | 3522 | 3523 | 3524 | 3525 | 3526 | 3527 | 3528 | 3529 | 3530 | 3531 | 3532 | 3533 | 3534 | 3535 | 3536 | 3537 | 3538 | 3539 | 3540 | 3541 | 3542 | 3543 | 3544 | 3545 | 3546 | 3547 | 3548 | 3549 | 3550 | 3551 | 3552 | 3553 | 3554 | 3555 | 3556 | 3557 | 3558 | 3559 | 3560 | 3561 | 3562 | 3563 | 3564 | 3565 | 3566 | 3567 | 3568 | 3569 | 3570 | 3571 | 3572 | 3573 | 3574 | 3575 | 3576 | 3577 | 3578 | 3579 | 3580 | 3581 | 3582 | 3583 | 3584 | 3585 | 3586 | 3587 | 3588 | 3589 | 3590 | 3591 | 3592 | 3593 | 3594 | 3595 | 3596 | 3597 | 3598 | 3599 | 3600 | 3601 | 3602 | 3603 | 3604 | 3605 | 3606 | 3607 | 3608 | 3609 | 3610 | 3611 | 3612 | 3613 | 3614 | 3615 | 3616 | 3617 | 3618 | 3619 | 3620 | 3621 | 3622 | 3623 | 3624 | 3625 | 3626 | 3627 | 3628 | 3629 | 3630 | 3631 | 3632 | 3633 | 3634 | 3635 | 3636 | 3637 | 3638 | 3639 | 3640 | 3641 | 3642 | 3643 | 3644 | 3645 | 3646 | 3647 | 3648 | 3649 | 3650 | 3651 | 3652 | 3653 | 3654 | 3655 | 3656 | 3657 | 3658 | 3659 | 3660 | 3661 | 3662 | 3663 | 3664 | 3665 | 3666 | 3667 | 3668 | 3669 | 3670 | 3671 | 3672 | 3673 | 3674 | 3675 | 3676 | 3677 | 3678 | 3679 | 3680 | 3681 | 3682 | 3683 | 3684 | 3685 | 3686 | 3687 | 3688 | 3689 | 3690 | 3691 | 3692 | 3693 | 3694 | 3695 | 3696 | 3697 | 3698 | 3699 | 3700 | 3701 | 3702 | 3703 | 3704 | 3705 | 3706 | 3707 | 3708 | 3709 | 3710 | 3711 | 3712 | 3713 | 3714 | 3715 | 3716 | 3717 | 3718 | 3719 | 3720 | 3721 | 3722 | 3723 | 3724 | 3725 | 3726 | 3727 | 3728 | 3729 | 3730 | 3731 | 3732 | 3733 | 3734 | 3735 | 3736 | 3737 | 3738 | 3739 | 3740 | 3741 | 3742 | 3743 | 3744 | 3745 | 3746 | 3747 | 3748 | 3749 | 3750 | 3751 | 3752 | 3753 | 3754 | 3755 | 3756 | 3757 | 3758 | 3759 | 3760 | 3761 | 3762 | 3763 | 3764 | 3765 | 3766 | 3767 | 3768 | 3769 | 3770 | 3771 | 3772 | 3773 | 3774 | 3775 | 3776 | 3777 | 3778 | 3779 | 3780 | 3781 | 3782 | 3783 | 3784 | 3785 | 3786 | 3787 | 3788 | 3789 | 3790 | 3791 | 3792 | 3793 | 3794 | 3795 | 3796 | 3797 | 3798 | 3799 | 3800 | 3801 | 3802 | 3803 | 3804 | 3805 | 3806 | 3807 | 3808 | 3809 | 3810 | 3811 | 3812 | 3813 | 3814 | 3815 | 3816 | 3817 | 3818 | 3819 | 3820 | 3821 | 3822 | 3823 | 3824 | 3825 | 3826 | 3827 | 3828 | 3829 | 3830 | 3831 | 3832 | 3833 | 3834 | 3835 | 3836 | 3837 | 3838 | 3839 | 3840 | 3841 | 3842 | 3843 | 3844 | 3845 | 3846 | 3847 | 3848 | 3849 | 3850 | 3851 | 3852 | 3853 | 3854 | 3855 | 3856 | 3857 | 3858 | 3859 | 3860 | 3861 | 3862 | 3863 | 3864 | 3865 | 3866 | 3867 | 3868 | 3869 | 3870 | 3871 | 3872 | 3873 | 3874 | 3875 | 3876 | 3877 | 3878 | 3879 | 3880 | 3881 | 3882 | 3883 | 3884 | 3885 | 3886 | 3887 | 3888 | 3889 | 3890 | 3891 | 3892 | 3893 | 3894 | 3895 | 3896 | 3897 | 3898 | 3899 | 3900 | 3901 | 3902 | 3903 | 3904 | 3905 | 3906 | 3907 | 3908 | 3909 | 3910 | 3911 | 3912 | 3913 | 3914 | 3915 | 3916 | 3917 | 3918 | 3919 | 3920 | 3921 | 3922 | 3923 | 3924 | 3925 | 3926 | 3927 | 3928 | 3929 | 3930 | 3931 | 3932 | 3933 | 3934 | 3935 | 3936 | 3937 | 3938 | 3939 | 3940 | 3941 | 3942 | 3943 | 3944 | 3945 | 3946 | 3947 | 3948 | 3949 | 3950 | 3951 | 3952 | 3953 | 3954 | 3955 | 3956 | 3957 | 3958 | 3959 | 3960 | 3961 | 3962 | 3963 | 3964 | 3965 | 3966 | 3967 | 3968 | 3969 | 3970 | 3971 | 3972 | 3973 | 3974 | 3975 | 3976 | 3977 | 3978 | 3979 | 3980 | 3981 | 3982 | 3983 | 3984 | 3985 | 3986 | 3987 | 3988 | 3989 | 3990 | 3991 | 3992 | 3993 | 3994 | 3995 | 3996 | 3997 | 3998 | 3999 | 4000 | 4001 | 4002 | 4003 | 4004 | 4005 | 4006 | 4007 | 4008 | 4009 | 4010 | 4011 | 4012 | 4013 | 4014 | 4015 | 4016 | 4017 | 4018 | 4019 | 4020 | 4021 | 4022 | 4023 | 4024 | 4025 | 4026 | 4027 | 4028 | 4029 | 4030 | 4031 | 4032 | 4033 | 4034 | 4035 | 4036 | 4037 | 4038 | 4039 | 4040 | 4041 | 4042 | 4043 | 4044 | 4045 | 4046 | 4047 | 4048 | 4049 | 4050 | 4051 | 4052 | 4053 | 4054 | 4055 | 4056 | 4057 | 4058 | 4059 | 4060 | 4061 | 4062 | 4063 | 4064 | 4065 | 4066 | 4067 | 4068 | 4069 | 4070 | 4071 | 4072 | 4073 | 4074 | 4075 | 4076 | 4077 | 4078 | 4079 | 4080 | 4081 | 4082 | 4083 | 4084 | 4085 | 4086 | 4087 | 4088 | 4089 | 4090 | 4091 | 4092 | 4093 | 4094 | 4095 | 4096 | 4097 | 4098 | 4099 | 4100 | 4101 | 4102 | 4103 | 4104 | 4105 | 4106 | 4107 | 4108 | 4109 | 4110 | 4111 | 4112 | 4113 | 4114 | 4115 | 4116 | 4117 | 4118 | 4119 | 4120 | 4121 | 4122 | 4123 | 4124 | 4125 | 4126 | 4127 | 4128 | 4129 | 4130 | 4131 | 4132 | 4133 | 4134 | 4135 | 4136 | 4137 | 4138 | 4139 | 4140 | 4141 | 4142 | 4143 | 4144 | 4145 | 4146 | 4147 | 4148 | 4149 | 4150 | 4151 | 4152 | 4153 | 4154 | 4155 | 4156 | 4157 | 4158 | 4159 | 4160 | 4161 | 4162 | 4163 | 4164 | 4165 | 4166 | 4167 | 4168 | 4169 | 4170 | 4171 | 4172 | 4173 | 4174 | 4175 | 4176 | 4177 | 4178 | 4179 | 4180 | 4181 | 4182 | 4183 | 4184 | 4185 | 4186 | 4187 | 4188 | 4189 | 4190 | 4191 | 4192 | 4193 | 4194 | 4195 | 4196 | 4197 | 4198 | 4199 | 4200 | 4201 | 4202 | 4203 | 4204 | 4205 | 4206 | 4207 | 4208 | 4209 | 4210 | 4211 | 4212 | 4213 | 4214 | 4215 | 4216 | 4217 | 4218 | 4219 | 4220 | 4221 | 4222 | 4223 | 4224 | 4225 | 4226 | 4227 | 4228 | 4229 | 4230 | 4231 | 4232 | 4233 | 4234 | 4235 | 4236 | 4237 | 4238 | 4239 | 4240 | 4241 | 4242 | 4243 | 4244 | 4245 | 4246 | 4247 | 4248 | 4249 | 4250 | 4251 | 4252 | 4253 | 4254 | 4255 | 4256 | 4257 | 4258 | 4259 | 4260 | 4261 | 4262 | 4263 | 4264 | 4265 | 4266 | 4267 | 4268 | 4269 | 4270 | 4271 | 4272 | 4273 | 4274 | 4275 | 4276 | 4277 | 4278 | 4279 | 4280 | 4281 | 4282 | 4283 | 4284 | 4285 | 4286 | 4287 | 4288 | 4289 | 4290 | 4291 | 4292 | 4293 | 4294 | 4295 | 4296 | 4297 | 4298 | 4299 | 4300 | 4301 | 4302 | 4303 | 4304 | 4305 | 4306 | 4307 | 4308 | 4309 | 4310 | 4311 | 4312 | 4313 | 4314 | 4315 | 4316 | 4317 | 4318 | 4319 | 4320 | 4321 | 4322 | 4323 | 4324 | 4325 | 4326 | 4327 | 4328 | 4329 | 4330 | 4331 | 4332 | 4333 | 4334 | 4335 | 4336 | 4337 | 4338 | 4339 | 4340 | 4341 | 4342 | 4343 | 4344 | 4345 | 4346 | 4347 | 4348 | 4349 | 4350 | 4351 | 4352 | 4353 | 4354 | 4355 | 4356 | 4357 | 4358 | 4359 | 4360 | 4361 | 4362 | 4363 | 4364 | 4365 | 4366 | 4367 | 4368 | 4369 | 4370 | 4371 | 4372 | 4373 | 4374 | 4375 | 4376 | 4377 | 4378 | 4379 | 4380 | 4381 | 4382 | 4383 | 4384 | 4385 | 4386 | 4387 | 4388 | 4389 | 4390 | 4391 | 4392 | 4393 | 4394 | 4395 | 4396 | 4397 | 4398 | 4399 | 4400 | 4401 | 4402 | 4403 | 4404 | 4405 | 4406 | 4407 | 4408 | 4409 | 4410 | 4411 | 4412 | 4413 | 4414 | 4415 | 4416 | 4417 | 4418 | 4419 | 4420 | 4421 | 4422 | 4423 | 4424 | 4425 | 4426 | 4427 | 4428 | 4429 | 4430 | 4431 | 4432 | 4433 | 4434 | 4435 | 4436 | 4437 | 4438 | 4439 | 4440 | 4441 | 4442 | 4443 | 4444 | 4445 | 4446 | 4447 | 4448 | 4449 | 4450 | 4451 | 4452 | 4453 | 4454 | 4455 | 4456 | 4457 | 4458 | 4459 | 4460 | 4461 | 4462 | 4463 | 4464 | 4465 | 4466 | 4467 | 4468 | 4469 | 4470 | 4471 | 4472 | 4473 | 4474 | 4475 | 4476 | 4477 | 4478 | 4479 | 4480 | 4481 | 4482 | 4483 | 4484 | 4485 | 4486 | 4487 | 4488 | 4489 | 4490 | 4491 | 4492 | 4493 | 4494 | 4495 | 4496 | 4497 | 4498 | 4499 | 4500 | 4501 | 4502 | 4503 | 4504 | 4505 | 4506 | 4507 | 4508 | 4509 | 4510 | 4511 | 4512 | 4513 | 4514 | 4515 | 4516 | 4517 | 4518 | 4519 | 4520 | 4521 | 4522 | 4523 | 4524 | 4525 | 4526 | 4527 | 4528 | 4529 | 4530 | 4531 | 4532 | 4533 | 4534 | 4535 | 4536 | 4537 | 4538 | 4539 | 4540 | 4541 | 4542 | 4543 | 4544 | 4545 | 4546 | 4547 | 4548 | 4549 | 4550 | 4551 | 4552 | 4553 | 4554 | 4555 | 4556 | 4557 | 4558 | 4559 | 4560 | 4561 | 4562 | 4563 | 4564 | 4565 | 4566 | 4567 | 4568 | 4569 | 4570 | 4571 | 4572 | 4573 | 4574 | 4575 | 4576 | 4577 | 4578 | 4579 | 4580 | 4581 | 4582 | 4583 | 4584 | 4585 | 4586 | 4587 | 4588 | 4589 | 4590 | 4591 | 4592 | 4593 | 4594 | 4595 | 4596 | 4597 | 4598 | 4599 | 4600 | 4601 | 4602 | 4603 | 4604 | 4605 | 4606 | 4607 | 4608 | 4609 | 4610 | 4611 | 4612 | 4613 | 4614 | 4615 | 4616 | 4617 | 4618 | 4619 | 4620 | 4621 | 4622 | 4623 | 4624 | 4625 | 4626 | 4627 | 4628 | 4629 | 4630 | 4631 | 4632 | 4633 | 4634 | 4635 | 4636 | 4637 | 4638 | 4639 | 4640 | 4641 | 4642 | 4643 | 4644 | 4645 | 4646 | 4647 | 4648 | 4649 | 4650 | 4651 | 4652 | 4653 | 4654 | 4655 | 4656 | 4657 | 4658 | 4659 | 4660 | 4661 | 4662 | 4663 | 4664 | 4665 | 4666 | 4667 | 4668 | 4669 | 4670 | 4671 | 4672 | 4673 | 4674 | 4675 | 4676 | 4677 | 4678 | 4679 | 4680 | 4681 | 4682 | 4683 | 4684 | 4685 | 4686 | 4687 | 4688 | 4689 | 4690 | 4691 | 4692 | 4693 | 4694 | 4695 | 4696 | 4697 | 4698 | 4699 | 4700 | 4701 | 4702 | 4703 | 4704 | 4705 | 4706 | 4707 | 4708 | 4709 | 4710 | 4711 | 4712 | 4713 | 4714 | 4715 | 4716 | 4717 | 4718 | 4719 | 4720 | 4721 | 4722 | 4723 | 4724 | 4725 | 4726 | 4727 | 4728 | 4729 | 4730 | 4731 | 4732 | 4733 | 4734 | 4735 | 4736 | 4737 | 4738 | 4739 | 4740 | 4741 | 4742 | 4743 | 4744 | 4745 | 4746 | 4747 | 4748 | 4749 | 4750 | 4751 | 4752 | 4753 | 4754 | 4755 | 4756 | 4757 | 4758 | 4759 | 4760 | 4761 | 4762 | 4763 | 4764 | 4765 | 4766 | 4767 | 4768 | 4769 | 4770 | 4771 | 4772 | 4773 | 4774 | 4775 | 4776 | 4777 | 4778 | 4779 | 4780 | 4781 | 4782 | 4783 | 4784 | 4785 | 4786 | 4787 | 4788 | 4789 | 4790 | 4791 | 4792 | 4793 | 4794 | 4795 | 4796 | 4797 | 4798 | 4799 | 4800 | 4801 | 4802 | 4803 | 4804 | 4805 | 4806 | 4807 | 4808 | 4809 | 4810 | 4811 | 4812 | 4813 | 4814 | 4815 | 4816 | 4817 | 4818 | 4819 | 4820 | 4821 | 4822 | 4823 | 4824 | 4825 | 4826 | 4827 | 4828 | 4829 | 4830 | 4831 | 4832 | 4833 | 4834 | 4835 | 4836 | 4837 | 4838 | 4839 | 4840 | 4841 | 4842 | 4843 | 4844 | 4845 | 4846 | 4847 | 4848 | 4849 | 4850 | 4851 | 4852 | 4853 | 4854 | 4855 | 4856 | 4857 | 4858 | 4859 | 4860 | 4861 | 4862 | 4863 | 4864 | 4865 | 4866 | 4867 | 4868 | 4869 | 4870 | 4871 | 4872 | 4873 | 4874 | 4875 | 4876 | 4877 | 4878 | 4879 | 4880 | 4881 | 4882 | 4883 | 4884 | 4885 | 4886 | 4887 | 4888 | 4889 | 4890 | 4891 | 4892 | 4893 | 4894 | 4895 | 4896 | 4897 | 4898 | 4899 | 4900 | 4901 | 4902 | 4903 | 4904 | 4905 | 4906 | 4907 | 4908 | 4909 | 4910 | 4911 | 4912 | 4913 | 4914 | 4915 | 4916 | 4917 | 4918 | 4919 | 4920 | 4921 | 4922 | 4923 | 4924 | 4925 | 4926 | 4927 | 4928 | 4929 | 4930 | 4931 | 4932 | 4933 | 4934 | 4935 | 4936 | 4937 | 4938 | 4939 | 4940 | 4941 | 4942 | 4943 | 4944 | 4945 | 4946 | 4947 | 4948 | 4949 | 4950 | 4951 | 4952 | 4953 | 4954 | 4955 | 4956 | 4957 | 4958 | 4959 | 4960 | 4961 | 4962 | 4963 | 4964 | 4965 | 4966 | 4967 | 4968 | 4969 | 4970 | 4971 | 4972 | 4973 | 4974 | 4975 | 4976 | 4977 | 4978 | 4979 | 4980 | 4981 | 4982 | 4983 | 4984 | 4985 | 4986 | 4987 | 4988 | 4989 | 4990 | 4991 | 4992 | 4993 | 4994 | 4995 | 4996 | 4997 | 4998 | 4999 | 5000 | 5001 | 5002 | 5003 | 5004 | 5005 | 5006 | 5007 | 5008 | 5009 | 5010 | 5011 | 5012 | 5013 | 5014 | 5015 | 5016 | 5017 | 5018 | 5019 | 5020 | 5021 | 5022 | 5023 | 5024 | 5025 | 5026 | 5027 | 5028 | 5029 | 5030 | 5031 | 5032 | 5033 | 5034 | 5035 | 5036 | 5037 | 5038 | 5039 | 5040 | 5041 | 5042 | 5043 | 5044 | 5045 | 5046 | 5047 | 5048 | 5049 | 5050 | 5051 | 5052 | 5053 | 5054 | 5055 | 5056 | 5057 | 5058 | 5059 | 5060 | 5061 | 5062 | 5063 | 5064 | 5065 | 5066 | 5067 | 5068 | 5069 | 5070 | 5071 | 5072 | 5073 | 5074 | 5075 | 5076 | 5077 | 5078 | 5079 | 5080 | -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/stock_basic_data.parq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/example_dataset/stock_basic_data.parq -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/sub_fudamental_data.parq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/example_dataset/sub_fudamental_data.parq -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/wind-financial-news-info.parq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/example_dataset/wind-financial-news-info.parq -------------------------------------------------------------------------------- /stock_disagreement/example_dataset/wind-financial-news-relationship.parq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gta0804/MASS/f6d9caf5628fa55924def65d0adf83cb81b12975/stock_disagreement/example_dataset/wind-financial-news-relationship.parq -------------------------------------------------------------------------------- /stock_disagreement/exp/__init__.py: -------------------------------------------------------------------------------- 1 | from .trainer import StockDisagreementTrainer -------------------------------------------------------------------------------- /stock_disagreement/exp/trainer.py: -------------------------------------------------------------------------------- 1 | from stock_disagreement import Modality, StockDisagreementAgent 2 | import pandas as pd 3 | import numpy as np 4 | from tqdm import tqdm 5 | from typing import Any, List 6 | import random 7 | from stock_disagreement import InvestmentAnalyzer, BaseOptimizer, SimulatedAnnealingOptimizer 8 | import threading 9 | import concurrent.futures 10 | from scipy.stats import percentileofscore 11 | 12 | ROOT_PATH = "" 13 | 14 | class StockDisagreementTrainer(): 15 | agent_distributions: dict[int, float] = {} 16 | date_agent_distributions: dict[int, Any] = {} 17 | def __init__(self, 18 | num_investor_type: int, 19 | num_agents_per_investor: int, 20 | stock_selector_for_per_investor: int, 21 | stock_pool: pd.DataFrame, 22 | stock_labels: pd.DataFrame, 23 | stock_num: int, 24 | look_back_window: int, 25 | start_date: int | None = None, 26 | end_date: int | None = None, 27 | use_prev_stock: bool = False, 28 | use_self_reflection: bool = False, 29 | use_macro_data: bool = False, 30 | use_agent_distribution_modification: bool = False, 31 | optimizer_look_back_window: int = 2, 32 | data_leakage: bool = False, 33 | ): 34 | self.interval = 4 35 | self.num_investor_type = num_investor_type 36 | self.stock_selector_for_per_investor = stock_selector_for_per_investor 37 | self.num_agents_per_investor = num_agents_per_investor 38 | self.stock_num = stock_num 39 | self.stock_pool = stock_pool 40 | self.stock_labels = stock_labels 41 | self.look_back_window = look_back_window 42 | self.stock_labels = self.stock_labels.merge(self.stock_pool[["Stock", "Date"]], on=["Stock", "Date"]) 43 | self.optimizer_look_back_window = optimizer_look_back_window 44 | self.use_agent_distribution_modification = use_agent_distribution_modification 45 | 46 | self.use_prev_stock = use_prev_stock 47 | if start_date is not None: 48 | self.start_date = start_date 49 | else: 50 | self.start_date = stock_pool["Date"].min() 51 | if end_date is not None: 52 | self.end_date = end_date 53 | else: 54 | self.end_date = stock_pool["Date"].max() 55 | self.stock_pool = self.stock_pool[(self.stock_pool["Date"] >= self.start_date) & (self.stock_pool["Date"] <= self.end_date)] 56 | 57 | self.stock_labels = self.stock_labels[(self.stock_labels["Date"] >= self.start_date) & (self.stock_labels["Date"] <= self.end_date)] 58 | self.dates = sorted(self.stock_pool[(self.stock_pool["Date"] >= self.start_date) & (self.stock_pool["Date"]<= self.end_date)]["Date"].unique().tolist()) 59 | 60 | self.agents: List[StockDisagreementAgent] = [] 61 | self.use_self_reflection = use_self_reflection 62 | self.use_macro_data = use_macro_data 63 | self.news_info = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/wind-financial-news-info.parq") 64 | self.news_relationship = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/wind-financial-news-relationship.parq") 65 | self.news_info["Date"] = self.news_info["Date"].astype("int32") 66 | self.news_relationship["Date"] = self.news_relationship["Date"].astype("int32") 67 | self._init_agents() 68 | self.data_leakage = data_leakage 69 | self.optimzer = SimulatedAnnealingOptimizer(look_back_window=optimizer_look_back_window) 70 | 71 | def _init_agents(self,) -> None: 72 | 73 | def cal_pe_quantile(data: pd.DataFrame, look_back_year: int = 10) -> pd.DataFrame: 74 | """计算沪深300指数的历史分位值.""" 75 | data_copy = data.copy() 76 | data_copy["dt"] = pd.to_datetime(data_copy["Date"].astype(str), format="%Y%m%d") 77 | data_copy.sort_values("dt", inplace=True) 78 | data_copy.reset_index(drop=True, inplace=True) 79 | 80 | min_periods = look_back_year * 250 81 | data_copy["quantile"] = data_copy["Value"].rolling( window= min_periods, closed="both").apply(lambda x: percentileofscore(x, x.iloc[-1]), raw=False) 82 | data_copy["quantile"] = data_copy["quantile"].round(1) 83 | data_copy["Date"] = data_copy["dt"].dt.strftime("%Y%m%d").astype(int) 84 | return data_copy[["Date", "Value", "quantile"]] 85 | 86 | 87 | loan_rate = pd.read_csv(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/macro_data/China_1-Year_Loan_Prime_Rate_LPR.csv") 88 | cpi = pd.read_csv(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/macro_data/China_CPI_YoY_Current_Month.csv") 89 | csi_300_pe = pd.read_csv(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/macro_data/csi_300_pe_ttm.csv") 90 | csi_300_pe = cal_pe_quantile(csi_300_pe) 91 | market_sentiment_index = pd.read_csv(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/macro_data/Market_Sentiment_Index.csv") 92 | yield_on_China_bonds = pd.read_csv(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/macro_data/yield_on_China_10_year_government_bonds.csv") 93 | for num in tqdm(range(self.num_investor_type), desc="Init agents"): 94 | modalities = list(Modality) 95 | selected_modalities = random.sample(modalities, k=random.randint(1, 3)) 96 | result = Modality(0) 97 | for modality in selected_modalities: 98 | result |= modality 99 | for i in range(self.num_agents_per_investor): 100 | current_agent = StockDisagreementAgent(stock_num= self.stock_num, 101 | stock_pool =self.stock_pool, 102 | stock_labels = self.stock_labels, 103 | is_self_reflective =True, 104 | max_reflective_times =10, 105 | start_date = self.start_date, 106 | end_date =self.end_date, 107 | modality = result, 108 | use_prev_stock = self.use_prev_stock, 109 | cpi = cpi, 110 | csi_300_pe = csi_300_pe, 111 | loan_rate = loan_rate, 112 | market_sentiment_index = market_sentiment_index, 113 | yield_on_China_bonds = yield_on_China_bonds, 114 | use_self_reflection = self.use_self_reflection, 115 | use_macro_data = self.use_macro_data) 116 | current_agent.prepare_data_source(self.news_info, self.news_relationship) 117 | # if not self.use_macro_data: 118 | # current_agent.generate_strategy_and_stock_selector() 119 | # else: 120 | # current_agent.generate_strategy_and_stock_selector(self.start_date) 121 | self.agent_distributions[result] = 1.0 122 | self.agents.append(current_agent) 123 | 124 | 125 | 126 | def run(self) -> pd.DataFrame: 127 | # 并行处理 agent 对每个日期的投资逻辑 128 | def _process_agent(agent:StockDisagreementAgent, date: int, stock_selector): 129 | agent.invest(date, stock_selector) 130 | 131 | if not self.use_agent_distribution_modification: 132 | total_agent_tasks = len(self.dates) * len(self.agents) 133 | with concurrent.futures.ThreadPoolExecutor(max_workers=32) as executor: 134 | futures = [ 135 | executor.submit(_process_agent, agent, date, self.stock_selector_for_per_investor) 136 | for date in self.dates 137 | for agent in self.agents 138 | ] 139 | for future in tqdm( 140 | concurrent.futures.as_completed(futures), 141 | total=total_agent_tasks, 142 | desc="Processing agents" 143 | ): 144 | future.result() 145 | else: 146 | for date in self.dates: 147 | total_tasks = len(self.agents) 148 | with concurrent.futures.ThreadPoolExecutor(max_workers=32) as executor: 149 | futures = [ 150 | executor.submit(_process_agent, agent, date, self.stock_selector_for_per_investor) 151 | for agent in self.agents 152 | ] 153 | for future in tqdm( 154 | concurrent.futures.as_completed(futures), 155 | total=total_tasks, 156 | desc= f"Processing agent on {date}" 157 | ): 158 | future.result() 159 | res = self.optimzer.is_adjusted(self.dates, date) 160 | if res > 0: 161 | self.date_agent_distributions[date] = self.agent_distributions.copy() 162 | best_distributions = self.optimzer.optimize(investment_analyzer=self.agents[0].investment_analyzer, 163 | dates = self.dates, 164 | start_date=res, 165 | current_date= date, 166 | stock_labels= self.stock_labels, 167 | stock_pool= self.stock_pool, 168 | distribution=self.agent_distributions) 169 | self.agent_distributions = best_distributions 170 | if self.data_leakage: 171 | self.date_agent_distributions[date] = best_distributions 172 | else: 173 | self.date_agent_distributions[date] = self.agent_distributions 174 | 175 | investment_analyzer = self.agents[0].investment_analyzer 176 | investment_res = self.stock_pool[(self.stock_pool["Date"] >= self.start_date) & (self.stock_pool["Date"] <= self.end_date) ].copy() 177 | 178 | 179 | def _calc_signal(date: int, agent_distributions: dict[int, float]): 180 | current_pool = self.stock_pool[self.stock_pool["Date"] == date]["Stock"].tolist() 181 | res = investment_analyzer.calculate_stock_disagreement_score(date, current_pool, agent_distributions=agent_distributions) 182 | return date, res 183 | 184 | date_signal_results = {} 185 | if not self.use_agent_distribution_modification: 186 | with concurrent.futures.ThreadPoolExecutor(max_workers=16) as executor: 187 | date_futures = {executor.submit(_calc_signal, date, self.agent_distributions): date for date in self.dates} 188 | for future in tqdm( 189 | concurrent.futures.as_completed(date_futures), 190 | total=len(self.dates), 191 | desc="Calculating signals" 192 | ): 193 | date, result = future.result() 194 | date_signal_results[date] = result 195 | else: 196 | for date in tqdm(self.dates, desc = "calc investment res in optimzing mode."): 197 | dt, res = _calc_signal(date, self.date_agent_distributions[date]) 198 | date_signal_results[dt] = res 199 | 200 | data_list = [] 201 | for date, res in date_signal_results.items(): 202 | for stock, values in res.items(): 203 | data_list.append([date, stock, values[0], values[1], values[2]]) 204 | result_df = pd.DataFrame(data_list, columns=['Date', 'Stock', 'Signal', 'Signal_mean', 'Signal_std']) 205 | investment_res = pd.merge(investment_res, result_df, on=['Date', 'Stock'], how='left') 206 | for date, res in date_signal_results.items(): 207 | for stock, values in res.items(): 208 | indexer = (investment_res["Date"] == date) & (investment_res["Stock"] == stock) 209 | investment_res.loc[indexer, "Signal"] = values[0] 210 | investment_res.loc[indexer, "Signal_mean"] = values[1] 211 | investment_res.loc[indexer, "Signal_std"] = values[2] 212 | return investment_res 213 | 214 | # def run(self) -> pd.DataFrame: 215 | # def _process_agent(agent:StockDisagreementAgent, date: int, stock_selector): 216 | # agent.stock_selector.get_next() 217 | # agent.invest(date, stock_selector) 218 | # with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: 219 | # for date in self.dates: 220 | # futures = [] 221 | # for agent in self.agents: 222 | # future = executor.submit( 223 | # _process_agent, 224 | # agent, 225 | # date, 226 | # self.stock_selector_for_per_investor) 227 | # futures.append(future) 228 | # for future in concurrent.futures.as_completed(futures): 229 | # future.result() 230 | # investment_analyzer = self.agents[0].investment_analyzer 231 | # investment_res = self.stock_pool.copy() 232 | # investment_res["Signal"] = 0 233 | # investment_res["Signal_mean"] = 0 234 | # investment_res["Signal_std"] = 0 235 | # for date in self.dates: 236 | # current_pool = self.stock_pool[self.stock_pool["Date"] == date]["Stock"].tolist() 237 | # res = investment_analyzer.calculate_stock_disagreement_score(date, current_pool) 238 | # for stock in res: 239 | # investment_res.loc[ 240 | # (investment_res["Date"] == date) & 241 | # (investment_res["Stock"] == stock), 242 | # "Signal" 243 | # ] = res[stock][0] 244 | # investment_res.loc[ 245 | # (investment_res["Date"] == date) & 246 | # (investment_res["Stock"] == stock), 247 | # "Signal_mean" 248 | # ] = res[stock][1] 249 | # investment_res.loc[ 250 | # (investment_res["Date"] == date) & 251 | # (investment_res["Stock"] == stock), 252 | # "Signal_std" 253 | # ] = res[stock][2] 254 | # return investment_res 255 | 256 | # def run(self, ) -> InvestmentAnalyzer: 257 | # for date in self.dates: 258 | # for agent in self.agents: 259 | # agent.stock_selector.get_next() 260 | # agent.invest(date, self.stock_selector_for_per_investor) 261 | 262 | # return self.agents[0].investment_analyzer 263 | -------------------------------------------------------------------------------- /stock_disagreement/main.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import pandas as pd 3 | import numpy as np 4 | import pickle as pkl 5 | from stock_disagreement import StockDisagreementTrainer 6 | ROOT_PATH = "" # Your root path 7 | 8 | def calculate_ic_rankic(res: pd.DataFrame, stock_labels: pd.DataFrame): 9 | 10 | label_cols = ["1_15_labelB", "5_15_labelB", "10_15_labelB"] 11 | sub_res = res[res["Date"] >= 20230102] 12 | df = sub_res[["Stock", "Date", "Signal", "Signal_mean", "Signal_std"]].merge(stock_labels[["Stock", "Date"] + label_cols], on=["Stock", "Date"]) 13 | for label_col in label_cols: 14 | temp_df = df[[label_col, "Signal", "Signal_mean", "Signal_std"] + ["Stock", "Date"]].copy() 15 | 16 | rankic_values = temp_df.groupby(by = ["Date"])[["Stock",label_col, "Signal"]].apply( 17 | lambda x: np.corrcoef(x[label_col].rank(), x["Signal"].rank())[0, 1] 18 | ) 19 | ic_values = temp_df.groupby(by = ["Date"])[["Stock",label_col, "Signal"]].apply( 20 | lambda x: np.corrcoef(x[label_col], x["Signal"])[0, 1] 21 | ) 22 | rankic_values_mean = temp_df.groupby(by = ["Date"])[["Stock",label_col, "Signal_mean"]].apply( 23 | lambda x: np.corrcoef(x[label_col].rank(), x["Signal_mean"].rank())[0, 1] 24 | ) 25 | ic_values_mean = temp_df.groupby(by = ["Date"])[["Stock",label_col, "Signal_mean"]].apply( 26 | lambda x: np.corrcoef(x[label_col], x["Signal_mean"])[0, 1] 27 | ) 28 | rankic_values_std = temp_df.groupby(by = ["Date"])[["Stock",label_col, "Signal_std"]].apply( 29 | lambda x: np.corrcoef(x[label_col].rank(), x["Signal_std"].rank())[0, 1] 30 | ) 31 | ic_values_std = temp_df.groupby(by = ["Date"])[["Stock", label_col, "Signal_std"]].apply( 32 | lambda x: np.corrcoef(x[label_col], x["Signal_std"])[0, 1] 33 | ) 34 | 35 | rankic_ir = rankic_values.mean() / rankic_values.std() 36 | rankic = rankic_values.mean() 37 | ic = ic_values.mean() 38 | icir = ic_values.mean() / ic_values.std() 39 | print(f"for {label_col}, ic: {ic}, icir: {icir}, rankic: {rankic}, rankicir: {rankic_ir}") 40 | print(f"for {label_col}, ic_mean: {ic_values_mean.mean()}, icir_mean: {ic_values_mean.mean() / ic_values_mean.std()}, rankic_mean: {rankic_values_mean.mean()}, rankicir_mean: {rankic_values_mean.mean() / rankic_values_mean.std()}") 41 | print(f"for {label_col}, ic_std: {ic_values_std.mean()}, icir_mean: {ic_values_std.mean() / ic_values_std.std()}, rankic_mean: {rankic_values_std.mean()}, rankicir_mean: {rankic_values_std.mean() / rankic_values_std.std()}") 42 | 43 | if __name__ == "__main__": 44 | parser = argparse.ArgumentParser("Stock disagreement argument parser.") 45 | parser.add_argument("--num_investor_type", type=int, default= 16) 46 | parser.add_argument("--num_agents_per_investor", type=int, default= 32) 47 | parser.add_argument("--stock_pool", type=str, default="ih", choices=["ih", "csi_300", "csi_500", "csi_1000", "start_up_100"]) 48 | parser.add_argument("--stock_num", type=int, default=20) 49 | parser.add_argument("--selected_stock_num", type=int, default=5) 50 | parser.add_argument("--start_date", type=int, default= 20221202) 51 | parser.add_argument("--end_date", type=int, default= 20240102) 52 | parser.add_argument("--use_prev_stock", type=bool, default=True) 53 | parser.add_argument("--use_self_reflection", type=bool, default=False) 54 | parser.add_argument("--use_macro_data", type=bool, default=True) 55 | parser.add_argument("--use_agent_distribution_modification", type=bool, default=True) 56 | parser.add_argument("--optimizer_look_back_window", type=int, default=5) 57 | parser.add_argument("--allow_possible_data_leakage", type=bool, default=False) 58 | 59 | args = parser.parse_args() 60 | 61 | stock_pool_name = args.stock_pool 62 | assert isinstance(stock_pool_name, str) 63 | stock_pool = pd.read_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/{stock_pool_name}.parq") 64 | industry = pd.read_parquet("{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/stock_basic_data.parq") 65 | stock_pool = stock_pool.merge(industry[["Stock", "Name", "Industry"]], on=["Stock"], how="left") 66 | # Change to your label file url here. 67 | stock_labels = pd.read_parquet("{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/dataset/all_ashare_label.parq") 68 | 69 | trainer = StockDisagreementTrainer( 70 | num_investor_type=args.num_investor_type, 71 | num_agents_per_investor=args.num_agents_per_investor, 72 | stock_selector_for_per_investor=args.selected_stock_num, 73 | stock_pool=stock_pool, 74 | stock_labels=stock_labels, 75 | stock_num = args.stock_num, 76 | start_date = args.start_date, 77 | end_date = args.end_date, 78 | use_prev_stock = args.use_prev_stock, 79 | use_self_reflection = args.use_self_reflection, 80 | use_macro_data = args.use_macro_data, 81 | use_agent_distribution_modification = args.use_agent_distribution_modification, 82 | look_back_window = 10, 83 | optimizer_look_back_window = args.optimizer_look_back_window, 84 | data_leakage = args.allow_possible_data_leakage 85 | ) 86 | res = trainer.run() 87 | res.to_parquet(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/res/{stock_pool_name}_{args.num_agents_per_investor}_{args.num_investor_type}_{args.use_macro_data}_{args.use_agent_distribution_modification}_{args.optimizer_look_back_window}_{args.allow_possible_data_leakage}_{args.start_date}_{args.end_date}_{args.use_self_reflection}_std.parq") 88 | with open(f"{ROOT_PATH}/stock_prediction_benchmark/stock_disagreement/res/dist_{stock_pool_name}_{args.num_agents_per_investor}_{args.num_investor_type}_{args.use_macro_data}_{args.use_agent_distribution_modification}_{args.optimizer_look_back_window}_{args.allow_possible_data_leakage}_{args.start_date}_{args.end_date}_{args.use_self_reflection}_{args.stock_num}_positive.pkl", "wb") as f: 89 | pkl.dump(trainer.agent_distributions, f) 90 | calculate_ic_rankic(res, stock_labels) 91 | -------------------------------------------------------------------------------- /stock_disagreement/prompts/__init__.py: -------------------------------------------------------------------------------- 1 | from .prompt_template import (SUMMARIZE_EXAMPLE, SUMMARIZE_INSTRUCTION, 2 | INVESTING_STYLE_INSTRUCTION, INVSETING_STYLE_EXAMPLE, 3 | INVESTING_STYLE_INSTRUCTION_WITH_MARCO_DATA, 4 | INVESTING_STYLE_WITH_MACRO_DATA_EXAMPLE, 5 | INVESTING_DECISION_INSTRUCTION, INVESTING_DECISION_EXAMPLE, 6 | INVESTING_DECISION_INSTRUCTION_USING_SELF_REFLECTION) -------------------------------------------------------------------------------- /stock_disagreement/prompts/prompt_template.py: -------------------------------------------------------------------------------- 1 | INVESTING_STYLE_INSTRUCTION = """Give following input data: 2 | 1.Input time-series data column name and their descriptions in json format(textual data example). 3 | Please try to analyze and summarize an abstract investing style description. 4 | The output format is a json. The specific format of the output JSON is: 5 | {{ 6 | "Outline": "The outline and general description for investment style within 50 words. The outline is a summarization, without any details below.", 7 | "Details": {{ 8 | "Risk Appetite": "conservative | moderate | moderately conservative | moderately aggressive | aggressive", 9 | "Holding Period": "one day | about one week | about one month | about half a year | more than one year", 10 | "Strategy Consistency": "[0, 1] (Refers to the investor's ability to adhere to and execute their investment strategy with persistence and coherence, regardless of short-term market fluctuations or emotional influences. Higher number means high consistency)", 11 | "Rationality": "[0, 1] (Refers to whether the investor's decision-making process is based on logic, data, and long-term objectives rather than emotions, biases, or short-term market noise. Higher number means high rationality)", 12 | "StockPoolSelector": "Specify what kind of preference you'd like to construct your watchlist stocks. The possible preferences are: 1. RandomStockSelector: Randomly construct your watchlist. 2. IndustryEqualStockSelector: Construct a stock pool with balanced distribution across industries. 3. MVEqualStockSelector: Construct a stock pool with balanced distribution across market capitalizations. 4. IndustryBasisStockSelector: Prefer stocks from specific industries and output the preferred industries. The result is presented in a list format.", 13 | }} 14 | }} 15 | {examples} 16 | (END_OF_EXAMPLES) 17 | Input data: 18 | {input_data} 19 | Your investing style: 20 | """ 21 | 22 | INVESTING_STYLE_INSTRUCTION_WITH_MARCO_DATA = """ 23 | Give following input data: 24 | 1. Input time-series data column name and their descriptions in json format(textual data example). 25 | 2. latest macroeconomic and market insights. 26 | Please try to analyze and summarize an abstract investing style description. 27 | The output format is a json. The specific format of the output JSON is: 28 | {{ 29 | "Outline": "The outline and general description for investment style within 50 words. The outline is a summarization about your investing strategy and your insights into the subsequent trend of the stock market, without any details below.", 30 | "Details": {{ 31 | "Risk Appetite": "conservative | moderate | moderately conservative | moderately aggressive | aggressive", 32 | "Holding Period": "one day | about one week | about one month | about half a year | more than one year", 33 | "Strategy Consistency": "[0, 1] (Refers to the investor's ability to adhere to and execute their investment strategy with persistence and coherence, regardless of short-term market fluctuations or emotional influences. Higher number means high consistency)", 34 | "Rationality": "[0, 1] (Refers to whether the investor's decision-making process is based on logic, data, and long-term objectives rather than emotions, biases, or short-term market noise. Higher number means high rationality)", 35 | "StockPoolSelector": "Specify what kind of preference you'd like to construct your watchlist stocks. The possible preferences are: 1. RandomStockSelector: Randomly construct your watchlist. 2. IndustryEqualStockSelector: Construct a stock pool with balanced distribution across industries. 3. MVEqualStockSelector: Construct a stock pool with balanced distribution across market capitalizations. 4. IndustryBasisStockSelector: Prefer stocks from specific industries and output the preferred industries. The result is presented in a list format.", 36 | "Others": "Extra information about your investing strategy, maybe correlated with latest market and macroeconmic information and others. No more than 30 words." 37 | }} 38 | }} 39 | {examples} 40 | (END_OF_EXAMPLES) 41 | Input data: 42 | {input_data} 43 | Macro data: 44 | {macro_data} 45 | Your investing style: 46 | """ 47 | 48 | INVESTING_STYLE_WITH_MACRO_DATA_EXAMPLE = """ 49 | Input data: 50 | E/P,B/P,CF/P, S/P,Log-orthogonalized E/P,Log-orthogonalized B/P,Log-orthogonalized CF/P,Log-orthogonalized S/P, 51 | Macro data: 52 | The latest 1 year loan prime rate is 3.45. The latest month China CPI YOY growth rate is -0.5. The latest yield of China ten year government bonds is 2.6733%, while yield increases 0 BP over past one day, increases -4 BP over past one month, increases -21 BP over past half an year. The latest csi_300 pe is 10.9478, and the current PE ratio of the CSI 300 is at the 5.4 percentile over the past 5 years(0 indicates most undervalued, and 100 indicates most overvalued). The latest market sentiement index got 0.63 % return. 53 | Your investing style: 54 | {'Outline': 'A value-oriented investment approach focusing on fundamentally strong companies with a long-term perspective, leveraging current market undervaluation and stable economic indicators to build a diversified portfolio.', 55 | 'Details': {'Risk Appetite': 'moderate', 56 | 'Holding Period': 'more than one year', 57 | 'Strategy Consistency': '0.85', 58 | 'Rationality': '0.9', 59 | 'StockPoolSelector': 'IndustryEqualStockSelector', 60 | 'Others': 'Leverage low CPI and undervalued CSI 300 PE for potential upside.'}} 61 | """ 62 | 63 | INVSETING_STYLE_EXAMPLE = """ 64 | Example1: 65 | Input data: 66 | E/P,B/P,CF/P, S/P,Log-orthogonalized E/P,Log-orthogonalized B/P,Log-orthogonalized CF/P,Log-orthogonalized S/P, 67 | Your investing style: 68 | {{ 69 | "Outline": "A value-driven investment approach focusing on stocks with strong fundamentals, undervalued valuations, and consistent cash flows over the long term.", 70 | "Details": {{ 71 | "Risk Appetite": "Moderately conservative", 72 | "Holding Period": "More than one year", 73 | "Strategy Consistency": "0.85", 74 | "Rationality": "0.9", 75 | "StockPoolSelector": {{ 76 | "IndustryBasisStockSelector": ["银行", "中药"] 77 | }} 78 | }} 79 | }} 80 | 81 | Example2: 82 | Input data: 83 | ROE, ROE_YEARLY, ROIC 84 | Your investing style: 85 | {{ 86 | "Outline": "A value-driven investment approach focusing on stocks with strong fundamentals, undervalued valuations, and consistent cash flows over the long term.", 87 | "Details": {{ 88 | "Risk Appetite": "Moderately conservative", 89 | "Holding Period": "More than one year", 90 | "Strategy Consistency": "0.85", 91 | "Rationality": "0.9", 92 | "StockPoolSelector": "MVEqualStockSelector" 93 | }} 94 | }} 95 | """ 96 | 97 | INVESTING_DECISION_INSTRUCTION = """ 98 | Giving following 99 | 1. input data in table format and their descriptions in json format. 100 | 2. investing style to make investment decisions in json format. 101 | Please output {num_stocks} stocks you tend to invest. The res is in json format, key is "Stock", and value is a list containing stock code.Please make sure: 102 | 1. You output legal stock code. The stock code is legal if and only if it is in the input data "Stock" list. 103 | 2. The number of stock code is correct, actually equal to {num_stocks}. 104 | Here is an example. 105 | {examples} 106 | (END OF EXAMPLES) 107 | {input_data} 108 | """ 109 | 110 | INVESTING_DECISION_INSTRUCTION_USING_SELF_REFLECTION = """ 111 | Giving following 112 | 1. input data in table format and decriptions in json format. 113 | 2. investing style to make investment decisions in json format. 114 | 3. investing decision history to make self reflections. You are accessible to history investing decision history, please make self reflections to make investment decisions. 115 | Please output {num_stocks} stocks you tend to invest. The res is in json format, key is "Stock", and value is a list containing stock code. Please make sure: 116 | 1. You output legal stock code. The stock code is legal if and only if it is in the input data "Stock" list. The stock not in input data but in decision history is also illegal. 117 | 2. The number of stock code is correct, actually equal to {num_stocks}. 118 | Here is an example. The example here does not use self reflection. However, in real cases, self reflection mechanism may be used. You should reflect and improve your decision process, then output the res. 119 | {examples} 120 | (END OF EXAMPLES) 121 | {input_data} 122 | (END OF INPUT data) 123 | Here are investing decision history: 124 | {decision_history} 125 | """ 126 | 127 | INVESTING_DECISION_EXAMPLE = """ 128 | For stock_nums in investing instructions, we use 3 in this example. 129 | Input Data for investing decision: 130 | 1. Input Data Description: 131 | {{ "E/P": "The inverse of the P/E ratio (E/P) indicates the earnings yield, showing the percentage of profit generated per dollar invested in the stock.", 132 | "B/P": "Inverse of P/B (B/P) indicates the book yield, showing the return on book value per dollar invested.", 133 | "S/P": "Inverse of P/S (S/P) reflects the sales yield, showing sales generated per dollar invested.", 134 | "CF/P": "Inverse of P/CF (CF/P) shows the cash flow yield, representing cash flow generated per dollar invested.", 135 | "Log-orthogonalized E/P": "Log-orthogonalized version of E/P, removing some kind of cap basis.", 136 | "Log-orthogonalized B/P": ""Log-orthogonalized version of B/P, removing some kind of cap basis.", 137 | "Log-orthogonalized CF/P": "Log-orthogonalized version of CF/P, removing some kind of cap basis.", 138 | "Log-orthogonalized S/P": "Log-orthogonalized version of S/P, removing some kind of cap basis.", 139 | "EBITDA/EV": "Measures a company's return on enterprise value, indicating operating earnings (EBITDA) generated per dollar of EV." 140 | }} 141 | 2. Investing Style: 142 | {{ 143 | "Outline": "A value-driven investment approach focusing on stocks with strong fundamentals, undervalued valuations, and consistent cash flows over the long term.", 144 | "Details": {{ 145 | "Risk Appetite": "Moderately conservative", 146 | "Holding Period": "More than one year", 147 | "Strategy Consistency": "0.85", 148 | "Rationality": "0.9", 149 | "StockPoolSelector": "MVEqualStockSelector" 150 | }} 151 | }} 152 | 3. Input data: 153 | ',Stock,Date,E/P,B/P,CF/P,S/P,Log-orthogonalized E/P,Log-orthogonalized B/P,Log-orthogonalized CF/P,Log-orthogonalized S/P,EBITDA/EV\n965494,000858,20190102,0.06295366,0.30744636,0.038947526,0.19324197,-4.032941,-1.1295723,3.594055,-1.2754831,0.12488604\n2941460,002594,20190102,0.020888906,0.37708813,0.09185906,0.9017491,-4.038043,-0.6966869,5.084233,0.3152281,0.09258402\n7162558,600519,20190102,0.042301364,0.13605072,0.036664255,0.09038502,-7.6968794,-2.2439895,1.2049837,-2.2207088,0.079757534\n8104294,600900,20190102,0.066111766,0.40523565,0.1182603,0.15322393,-5.3881683,-1.0025798,3.743841,-1.5840118,0.105035394\n8267292,601012,20190102,0.062190603,0.30756927,0.032795224,0.41643697,-0.72993636,-0.7708632,5.801872,-0.31826368,0.088739015\n8431868,601288,20190102,0.16604953,1.2584949,0.12149128,0.4757528,-7.5973797,-0.1158539,1.556502,-0.6272717,0.05945474\n8665067,601888,20190102,0.02850359,0.1358013,0.034710173,0.35662726,-3.433404,-1.7193639,4.34933,-0.59344673,0.051195413\n9068489,603259,20190102,0.024971908,0.12955885,0.018961666,0.10751114,-2.9358995,-1.8100101,4.314365,-1.7471998,0.04303389\n' 154 | 155 | LLM output: 156 | {{'Stock': ['000858', '600900', '601288']}} 157 | 158 | Note that in this example, we ask LLM to output 3 stocks. However, in real scenarios, you should follow the "num_stocks" args in the instruction. 159 | """ 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | SUMMARIZE_INSTRUCTION = """ 173 | 请用中文总结以下网页内容,要求总结简洁明了,不超过70个字,去除所有冗余文字,确保信息密度最大化。直接输出核心信息,无需额外解释或修饰。 174 | 你的输出格式应为: 对于新闻提到的每个上市公司主体 / 金融市场大盘, 及其简要地概括发生的具体事件,省略其他所有的冗余的,修饰性表述,只给出新闻主干。 175 | Here is an example. 176 | {example} 177 | Input data 178 | {input_data} 179 | Res 180 | """ 181 | 182 | SUMMARIZE_EXAMPLE = """ 183 | Input data 184 | '
01月01日消息,亿邦动力网第一时间了解到,
· 12月18日上午,
本文由亿邦智能机器人ebrunGo撰写,机器人还很年轻,如有纰漏,还望指正。