matplotlib / matplotlib/mplfinance
Bug Report:
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 4.4k
- Forks
- 678
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Bug when using box_size = 'atr' in pnf charts in mplfinance : FutureWarning: Series.__getitem__ treating keys as positions is deprecated
OS Win 11 Pro 24H2 Desktop
IDE Visual Studio Code 1.96.2
Python 3.12.8
mplfinance 0.12.10b0
When using the 'atr' box_size parameter in creating pnf charts in mplfinance the `_utils.py script` throws this warning
\mplfinance\_utils.py:129: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]` high = highs[i]
\mplfinance\_utils.py:130: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]` low = lows[i]
\_utils.py:131: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]` close_prev = closes[i-1]
This is the responsible function:
```
def _calculate_atr(atr_length, highs, lows, closes):
"""Calculate the average true range
atr_length : time period to calculate over
all_highs : list of highs
all_lows : list of lows
all_closes : list of closes
"""
if atr_length < 1:
raise ValueError("Specified atr_length may not be less than 1")
elif atr_length >= len(closes):
raise ValueError("Specified atr_length is larger than the length of the dataset: " + str(len(closes)))
atr = 0
for i in range(len(highs)-atr_length, len(highs)):
high = highs[i]
low = lows[i]
close_prev = closes[i-1]
tr = max(abs(high-low), abs(high-close_prev), abs(low-close_prev))
atr += tr
return atr/atr_length
```
This warning is suppressed when you modify the code like so
```
high = highs.iloc[i]
low = lows.iloc[i]
close_prev = closes.iloc[i-1]
```
This however creates a new problem if you subsequently run a Renko chart, you get this error
LocalCache\local-packages\Python312\site-pa
high = highs.iloc[i]
^^^^^^^^^^
AttributeError: 'numpy.ndarray' object has no attribute 'iloc'
To fix this I created a small helper function
```
def safe_indexing(data, index):
if isinstance(data, pd.Series):
return data.iloc[index]
else:
return data[index]
```
and placed it in _utils.py
and updated _utils.py
```
high = highs[i]
low = lows[i]
close_prev = closes[i-1]
```
to
```
high = safe_indexing(highs, i)
low = safe_indexing(lows, i)
close_prev = safe_indexing(closes, i-1)
```
Now both charts render with no messages
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne in _utils.py bei _calculate_atr und verfolge, wie dessen Eingaben highs, lows und closes für PNF- und Renko-Charts bereitgestellt werden. Reproduziere beide Chart-Fälle aus dem Bericht und überprüfe anschließend, dass die Warnung für PNF verschwunden ist und der Renko-Pfad nicht mehr den gemeldeten ndarray-Attributfehler auslöst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- pandas, python
- Bereich
- data-visualization
- Issue-Typ
- Bug
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 55/100