30-Fisher-Transform
Sat 17 May 2025
# Created: 20250104
import pyutil as pyu
pyu.get_local_pyinfo()
'conda env: ml312-2024; pyv: 3.12.7 | packaged by Anaconda, Inc. | (main, Oct 4 2024, 13:27:36) [GCC 11.2.0]'
print(pyu.ps2("yfinance pandas matplotlib"))
yfinance==0.2.51
pandas==2.2.3
matplotlib==3.9.3
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Step 1: Download historical data
symbol = "^GSPC" # S&P 500 as an example
start = "2020-01-01"
end = "2023-12-31"
data = yf.download(symbol, start=start, end=end)
# Step 2: Calculate Fisher Transform
def calculate_fisher(data, period=10):
# Ensure Lowest Low and Highest High are single-column Series
data['Lowest Low'] = data['Low'].rolling(window=period, min_periods=1).min()
data['Highest High'] = data['High'].rolling(window=period, min_periods=1).max()
# Calculate normalized price (x) as a single-column Series
data['x'] = 2 * ((data['Close'] - data['Lowest Low']) /
(data['Highest High'] - data['Lowest Low']) - 0.5)
# Clip x to stay within the range [-0.999, 0.999]
data['x'] = data['x'].clip(lower=-0.999, upper=0.999)
# Apply Fisher Transform
data['Fisher'] = 0.5 * np.log((1 + data['x']) / (1 - data['x']))
data['Fisher Signal'] = data['Fisher'].shift(1) # Signal line
return data
# Apply Fisher Transform calculation
period = 10
data = calculate_fisher(data, period)
# Step 3: Plot Close Price and Fisher Transform
plt.figure(figsize=(14, 7))
# Plot Close Price
plt.subplot(2, 1, 1)
plt.plot(data['Close'], label='Close Price', color='blue')
plt.title(f'{symbol} Close Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
# Plot Fisher Transform
plt.subplot(2, 1, 2)
plt.plot(data['Fisher'], label='Fisher Transform', color='purple', linewidth=1.5)
plt.plot(data['Fisher Signal'], label='Fisher Signal', color='orange', linestyle='--', linewidth=1.5)
plt.axhline(0, color='black', linestyle='--', linewidth=1, label='Zero Line')
plt.title(f'Fisher Transform for {symbol}')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend(loc='best')
plt.grid(True)
plt.tight_layout()
plt.show()
[*********************100%***********************] 1 of 1 completed
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/tmp/ipykernel_1236625/3302577336.py in ?()
29 return data
30
31 # Apply Fisher Transform calculation
32 period = 10
---> 33 data = calculate_fisher(data, period)
34
35 # Step 3: Plot Close Price and Fisher Transform
36 plt.figure(figsize=(14, 7))
/tmp/ipykernel_1236625/3302577336.py in ?(data, period)
15 data['Lowest Low'] = data['Low'].rolling(window=period, min_periods=1).min()
16 data['Highest High'] = data['High'].rolling(window=period, min_periods=1).max()
17
18 # Calculate normalized price (x) as a single-column Series
---> 19 data['x'] = 2 * ((data['Close'] - data['Lowest Low']) /
20 (data['Highest High'] - data['Lowest Low']) - 0.5)
21
22 # Clip x to stay within the range [-0.999, 0.999]
~/miniconda3/envs/ml312-2024/lib/python3.12/site-packages/pandas/core/frame.py in ?(self, key, value)
4297 self._setitem_frame(key, value)
4298 elif isinstance(key, (Series, np.ndarray, list, Index)):
4299 self._setitem_array(key, value)
4300 elif isinstance(value, DataFrame):
-> 4301 self._set_item_frame_value(key, value)
4302 elif (
4303 is_list_like(value)
4304 and not self.columns.is_unique
~/miniconda3/envs/ml312-2024/lib/python3.12/site-packages/pandas/core/frame.py in ?(self, key, value)
4455
4456 return self.isetitem(locs, value)
4457
4458 if len(value.columns) > 1:
-> 4459 raise ValueError(
4460 "Cannot set a DataFrame with multiple columns to the single "
4461 f"column {key}"
4462 )
ValueError: Cannot set a DataFrame with multiple columns to the single column x
def show_graph(symbol):
pass
show_graph("AMZN")
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[5], line 1
----> 1 show_graph("AMZN")
NameError: name 'show_graph' is not defined
Score: 5
Category: stockmarket