Why do i not see a plot when using the following code, arima model?

from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.stattools import acf, pacf
from statsmodels.tsa.holtwinters import ExponentialSmoothing
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.seasonal import seasonal_decompose
from datetime import timedelta, datetime
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import refinitiv.data as rd
import warnings
warnings.filterwarnings('ignore')
plt.style.use('dark_background')
rd.open_session()
def get_data(ric, s_date):
spot_df = rd.get_history(
ric, 'TRDPRC_1', interval='daily', start=s_date, count=10000)
_e_date = datetime.fromtimestamp(datetime.timestamp(spot_df.index[-1]))
e_date = _e_date + timedelta(days=1)
e_date = e_date.strftime('%Y-%m-%d')
_e_date = _e_date + timedelta(days=30)
fce_date = _e_date.strftime('%Y-%m-%d')
decomposition = seasonal_decompose(spot_df.TRDPRC_1, period=12)
trend = decomposition.trend
seasonal = decomposition.seasonal
residual = decomposition.resid
spot_df['spot_1diff'] = spot_df['TRDPRC_1'].diff()
spot_df = spot_df[spot_df['spot_1diff'].notnull()] # drop null rows
lag_acf = acf(spot_df['spot_1diff'], nlags=50)
lag_pacf = pacf(spot_df['spot_1diff'], nlags=50, method='ols')
new_spot = spot_df['spot_1diff'].resample(
'D').ffill() # resample per day and fill the gaps
new_spot = new_spot.bfill()
new_spot = new_spot.astype('float')
arma_model = ARIMA(new_spot, order=(1, 0, 1))
results = arma_model.fit()
residuals = pd.DataFrame(results.resid)
predictions_ARIMA = pd.Series(results.fittedvalues, copy=True)
predictions_ARIMA_cumsum = predictions_ARIMA.cumsum()
predictions_ARIMA_final = pd.Series(
spot_df['TRDPRC_1'].iloc[0], index=new_spot.index)
predictions_ARIMA_final = predictions_ARIMA_final.add(
predictions_ARIMA_cumsum, fill_value=0)
new_spot = spot_df.TRDPRC_1.resample(
'D', label='right').ffill().astype('float')
es_model = ExponentialSmoothing(
new_spot, trend='add', damped=False, seasonal='mul', seasonal_periods=30)
es_results = es_model.fit()
predicted_values = es_model.predict(
params=es_results.params, start=e_date, end=fce_date)
preds = pd.DataFrame(index=pd.date_range(
start=e_date, end=fce_date), data=predicted_values, columns=['TRDPRC_1'])
plt.figure(figsize=(16, 7))
plt.plot(new_spot, label='Actual')
plt.plot(preds, label='Forecast', color='pink')
plt.legend(loc='best')
plt.show()
return preds
Best Answers
-
Thank you reaching out to us.
I tested the code with IBM.N and it can display the chart properly.
spot_df = rd.get_history( "IBM.N", 'TRDPRC_1', interval='daily', start="2024-01-01", count=10000) print(spot_df) _e_date = datetime.fromtimestamp(datetime.timestamp(spot_df.index[-1])) e_date = _e_date + timedelta(days=1) e_date = e_date.strftime('%Y-%m-%d') _e_date = _e_date + timedelta(days=30) fce_date = _e_date.strftime('%Y-%m-%d') decomposition = seasonal_decompose(spot_df.TRDPRC_1, period=1) trend = decomposition.trend seasonal = decomposition.seasonal residual = decomposition.resid spot_df['spot_1diff'] = spot_df['TRDPRC_1'].diff() spot_df = spot_df[spot_df['spot_1diff'].notnull()] # drop null rows lag_acf = acf(spot_df['spot_1diff'], nlags=50) lag_pacf = pacf(spot_df['spot_1diff'], nlags=50, method='ols') new_spot = spot_df['spot_1diff'].resample('D').ffill() # resample per day and fill the gaps new_spot = new_spot.bfill() new_spot = new_spot.astype('float') arma_model = ARIMA(new_spot, order=(1, 0, 1)) results = arma_model.fit() residuals = pd.DataFrame(results.resid) predictions_ARIMA = pd.Series(results.fittedvalues, copy=True) predictions_ARIMA_cumsum = predictions_ARIMA.cumsum() predictions_ARIMA_final = pd.Series( spot_df['TRDPRC_1'].iloc[0], index=new_spot.index) predictions_ARIMA_final = predictions_ARIMA_final.add( predictions_ARIMA_cumsum, fill_value=0) new_spot = spot_df.TRDPRC_1.resample( 'D', label='right').ffill().astype('float') es_model = ExponentialSmoothing( new_spot, trend='add', damped=False, seasonal='mul', seasonal_periods=30) es_results = es_model.fit() predicted_values = es_model.predict( params=es_results.params, start=e_date, end=fce_date) preds = pd.DataFrame(index=pd.date_range( start=e_date, end=fce_date), data=predicted_values, columns=['TRDPRC_1']) plt.figure(figsize=(16, 7)) plt.plot(new_spot, label='Actual') plt.plot(preds, label='Forecast', color='pink') plt.legend(loc='best') plt.show()
The output is:
You may need to use the print(spot_df) command to print the dataframe after calling the get_history method to make sure that the data is valid.
0 -
You may need to use another fields, such as BID or ASK instead.
spot_df = ld.get_history( "CHF=", 'BID', interval='daily', start="2024-01-01", count=10000) print(spot_df) _e_date = datetime.fromtimestamp(datetime.timestamp(spot_df.index[-1])) e_date = _e_date + timedelta(days=1) e_date = e_date.strftime('%Y-%m-%d') _e_date = _e_date + timedelta(days=30) fce_date = _e_date.strftime('%Y-%m-%d') decomposition = seasonal_decompose(spot_df.BID, period=1) trend = decomposition.trend seasonal = decomposition.seasonal residual = decomposition.resid spot_df['spot_1diff'] = spot_df['BID'].diff() spot_df = spot_df[spot_df['spot_1diff'].notnull()] # drop null rows lag_acf = acf(spot_df['spot_1diff'], nlags=50) lag_pacf = pacf(spot_df['spot_1diff'], nlags=50, method='ols') new_spot = spot_df['spot_1diff'].resample('D').ffill() # resample per day and fill the gaps new_spot = new_spot.bfill() new_spot = new_spot.astype('float') arma_model = ARIMA(new_spot, order=(1, 0, 1)) results = arma_model.fit() residuals = pd.DataFrame(results.resid) predictions_ARIMA = pd.Series(results.fittedvalues, copy=True) predictions_ARIMA_cumsum = predictions_ARIMA.cumsum() predictions_ARIMA_final = pd.Series( spot_df['BID'].iloc[0], index=new_spot.index) predictions_ARIMA_final = predictions_ARIMA_final.add( predictions_ARIMA_cumsum, fill_value=0) new_spot = spot_df.BID.resample( 'D', label='right').ffill().astype('float') es_model = ExponentialSmoothing( new_spot, trend='add', damped=False, seasonal='mul', seasonal_periods=30) es_results = es_model.fit() predicted_values = es_model.predict( params=es_results.params, start=e_date, end=fce_date) preds = pd.DataFrame(index=pd.date_range( start=e_date, end=fce_date), data=predicted_values, columns=['BID']) plt.figure(figsize=(16, 7)) plt.plot(new_spot, label='Actual') plt.plot(preds, label='Forecast', color='pink') plt.legend(loc='best') plt.show()
1
Answers
-
This helps, perfect! Second question is, how is it possible to use currencies for this arima model, for ex. CHF/USD, Ticker "CHF=" does not work
0
Categories
- All Categories
- 3 Polls
- 6 AHS
- 36 Alpha
- 166 App Studio
- 6 Block Chain
- 4 Bot Platform
- 18 Connected Risk APIs
- 47 Data Fusion
- 34 Data Model Discovery
- 685 Datastream
- 1.4K DSS
- 615 Eikon COM
- 5.2K Eikon Data APIs
- 10 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- 3 Trading API
- 2.9K Elektron
- 1.4K EMA
- 252 ETA
- 556 WebSocket API
- 38 FX Venues
- 14 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 23 Messenger Bot
- 3 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 60 Open Calais
- 275 Open PermID
- 44 Entity Search
- 2 Org ID
- 1 PAM
- PAM - Logging
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 22 RDMS
- 1.9K Refinitiv Data Platform
- 652 Refinitiv Data Platform Libraries
- 4 LSEG Due Diligence
- LSEG Due Diligence Portal API
- 4 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.2K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 12 World-Check Customer Risk Screener
- 1K World-Check One
- 46 World-Check One Zero Footprint
- 45 Side by Side Integration API
- 2 Test Space
- 3 Thomson One Smart
- 10 TR Knowledge Graph
- 151 Transactions
- 143 REDI API
- 1.8K TREP APIs
- 4 CAT
- 27 DACS Station
- 121 Open DACS
- 1.1K RFA
- 104 UPA
- 193 TREP Infrastructure
- 228 TRKD
- 917 TRTH
- 5 Velocity Analytics
- 9 Wealth Management Web Services
- 90 Workspace SDK
- 11 Element Framework
- 5 Grid
- 18 World-Check Data File
- 1 Yield Book Analytics
- 46 中文论坛