Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
AI4Finance-Foundation
GitHub Repository: AI4Finance-Foundation/FinRL
Path: blob/master/finrl/meta/preprocessor/example_of_shioaji_api.py
732 views
1
from __future__ import annotations
2
3
import gc
4
5
import pandas as pd
6
7
from finrl.config_tickers import TAI_0050_TICKER
8
from finrl.meta.data_processors.processor_sinopac import SinopacProcessor
9
from finrl.meta.preprocessor.preprocessors import data_split
10
from finrl.meta.preprocessor.shioajidownloader import SinopacDownloader
11
12
13
TRAIN_START_DATE = "2023-04-13"
14
TRAIN_END_DATE = "2024-04-13"
15
TRADE_START_DATE = "2024-04-13"
16
TRADE_END_DATE = "2024-07-31"
17
18
19
def process_ticker_data(ticker):
20
print(f"Processing data for ticker: {ticker}")
21
df_raw = SinopacDownloader(
22
start_date=TRAIN_START_DATE, end_date=TRADE_END_DATE, ticker_list=[ticker]
23
).fetch_data()
24
25
df_raw.rename(
26
columns={
27
"open": "Open",
28
"high": "High",
29
"low": "Low",
30
"close": "Close",
31
"volume": "Volume",
32
"amount": "Amount",
33
},
34
inplace=True,
35
)
36
37
processor = SinopacProcessor(
38
API_KEY="3Tn2BbtCzbaU1KSy8yyqLa4m7LEJJyhkRCDrK2nknbcu",
39
API_SECRET="Epakqh1Nt4inC3hsqowE2XjwQicPNzswkuLjtzj2WKpR",
40
)
41
42
cleaned_df = processor.clean_data(df_raw)
43
df_with_indicators = processor.add_technical_indicator(cleaned_df)
44
df_with_vix = processor.add_vix(df_with_indicators)
45
df_with_turbulence = processor.add_turbulence(df_with_vix, time_period=252)
46
47
# Save processed data for each ticker to a separate file
48
df_with_turbulence.to_csv(f"data_{ticker}.csv")
49
50
# Explicitly delete unused objects and collect garbage
51
del df_raw, cleaned_df, df_with_indicators, df_with_vix, df_with_turbulence
52
gc.collect()
53
54
55
df_final = pd.DataFrame()
56
for ticker in TAI_0050_TICKER:
57
process_ticker_data(ticker)
58
# Load processed data from file and concatenate
59
df_ticker = pd.read_csv(f"data_{ticker}.csv")
60
df_final = pd.concat([df_final, df_ticker], ignore_index=True)
61
del df_ticker # free up memory
62
gc.collect()
63
64
train = data_split(df_final, TRAIN_START_DATE, TRAIN_END_DATE)
65
trade = data_split(df_final, TRADE_START_DATE, TRADE_END_DATE)
66
train.to_csv("train_data.csv")
67
trade.to_csv("trade_data.csv")
68
69