扩展指标
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
"""
|
||||
Example plugin: smoothed RSI (SMA of RSI).
|
||||
|
||||
Run this file to verify the plugin contract:
|
||||
python examples/custom_indicator.py
|
||||
|
||||
Registers "SMOOTH_RSI" and runs it on sample data.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import numpy as np
|
||||
|
||||
from ferro_ta import RSI, SMA
|
||||
from ferro_ta.core.registry import list_indicators, register, run
|
||||
|
||||
|
||||
def smooth_rsi(close, timeperiod=14, smooth=3):
|
||||
"""Smoothed RSI: RSI then SMA of the RSI series.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
close : array-like
|
||||
Close prices.
|
||||
timeperiod : int
|
||||
RSI period (default 14).
|
||||
smooth : int
|
||||
SMA period applied to RSI (default 3).
|
||||
|
||||
Returns
|
||||
-------
|
||||
numpy.ndarray
|
||||
Smoothed RSI values; same length as close.
|
||||
"""
|
||||
rsi = RSI(close, timeperiod=timeperiod)
|
||||
return SMA(rsi, timeperiod=smooth)
|
||||
|
||||
|
||||
def main():
|
||||
register("SMOOTH_RSI", smooth_rsi)
|
||||
close = np.array(
|
||||
[44.34, 44.09, 44.15, 43.61, 44.33, 44.83, 45.10, 45.15, 44.61, 44.33]
|
||||
)
|
||||
out = run("SMOOTH_RSI", close, timeperiod=5, smooth=2)
|
||||
print("SMOOTH_RSI:", out)
|
||||
assert "SMOOTH_RSI" in list_indicators(), (
|
||||
"SMOOTH_RSI should be in list_indicators()"
|
||||
)
|
||||
print("OK: plugin registered and run successfully.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user