扩展指标
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# ferro-ta Quick Start\n",
|
||||
"\n",
|
||||
"This notebook demonstrates the core ferro-ta API.\n",
|
||||
"\n",
|
||||
"Install:\n",
|
||||
"```bash\n",
|
||||
"pip install ferro-ta\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"from ferro_ta import BBANDS, EMA, MACD, RSI, SMA\n",
|
||||
"\n",
|
||||
"# Synthetic OHLCV data\n",
|
||||
"np.random.seed(42)\n",
|
||||
"n = 200\n",
|
||||
"close = np.cumprod(1 + np.random.randn(n) * 0.01) * 100\n",
|
||||
"high = close * (1 + np.abs(np.random.randn(n)) * 0.005)\n",
|
||||
"low = close * (1 - np.abs(np.random.randn(n)) * 0.005)\n",
|
||||
"volume = np.random.randint(1_000, 10_000, n).astype(float)\n",
|
||||
"\n",
|
||||
"print(f\"Generated {n} bars\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Moving Averages"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"sma_20 = SMA(close, timeperiod=20)\n",
|
||||
"ema_20 = EMA(close, timeperiod=20)\n",
|
||||
"\n",
|
||||
"print(\"SMA(20):\", sma_20[-5:])\n",
|
||||
"print(\"EMA(20):\", ema_20[-5:])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## RSI"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rsi = RSI(close, timeperiod=14)\n",
|
||||
"print(\"RSI(14):\", rsi[-5:])\n",
|
||||
"print(f\"RSI range: [{np.nanmin(rsi):.2f}, {np.nanmax(rsi):.2f}]\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## MACD"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"macd_line, signal, hist = MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)\n",
|
||||
"print(\"MACD line: \", macd_line[-5:])\n",
|
||||
"print(\"Signal: \", signal[-5:])\n",
|
||||
"print(\"Histogram: \", hist[-5:])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Bollinger Bands"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"upper, middle, lower = BBANDS(close, timeperiod=20, nbdevup=2.0, nbdevdn=2.0)\n",
|
||||
"print(\"Upper band: \", upper[-5:])\n",
|
||||
"print(\"Middle band:\", middle[-5:])\n",
|
||||
"print(\"Lower band: \", lower[-5:])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Batch API — multiple symbols at once"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from ferro_ta.batch import batch_rsi, batch_sma\n",
|
||||
"\n",
|
||||
"# Simulate 5 symbols\n",
|
||||
"data = np.random.default_rng(0).random((200, 5)) * 100 + 50\n",
|
||||
"sma_result = batch_sma(data, timeperiod=20)\n",
|
||||
"rsi_result = batch_rsi(data, timeperiod=14)\n",
|
||||
"\n",
|
||||
"print(\"Batch SMA shape:\", sma_result.shape) # (200, 5)\n",
|
||||
"print(\"Batch RSI shape:\", rsi_result.shape) # (200, 5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Pipeline API — compose multiple indicators"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from ferro_ta.pipeline import Pipeline\n",
|
||||
"\n",
|
||||
"pipe = (\n",
|
||||
" Pipeline()\n",
|
||||
" .add(\"sma_20\", SMA, timeperiod=20)\n",
|
||||
" .add(\"ema_20\", EMA, timeperiod=20)\n",
|
||||
" .add(\"rsi_14\", RSI, timeperiod=14)\n",
|
||||
" .add(\n",
|
||||
" \"bb\",\n",
|
||||
" BBANDS,\n",
|
||||
" output_keys=[\"bb_upper\", \"bb_mid\", \"bb_lower\"],\n",
|
||||
" timeperiod=20,\n",
|
||||
" nbdevup=2.0,\n",
|
||||
" nbdevdn=2.0,\n",
|
||||
" )\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"results = pipe.run(close)\n",
|
||||
"print(\"Pipeline outputs:\", list(results.keys()))\n",
|
||||
"print(\"SMA last 3:\", results[\"sma_20\"][-3:])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Pandas Integration"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"try:\n",
|
||||
" import pandas as pd\n",
|
||||
"\n",
|
||||
" s = pd.Series(close, name=\"close\")\n",
|
||||
" sma_pd = SMA(s, timeperiod=20)\n",
|
||||
" print(\"Result type:\", type(sma_pd)) # pandas.Series\n",
|
||||
" print(\"Index preserved:\", list(sma_pd.index[:3]))\n",
|
||||
"except ImportError:\n",
|
||||
" print(\"pandas not installed\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Error Handling"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from ferro_ta.exceptions import check_timeperiod\n",
|
||||
"\n",
|
||||
"from ferro_ta import FerroTAValueError\n",
|
||||
"\n",
|
||||
"try:\n",
|
||||
" check_timeperiod(0)\n",
|
||||
"except FerroTAValueError as e:\n",
|
||||
" print(\"Caught:\", e)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"name": "python",
|
||||
"version": "3.11.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
Reference in New Issue
Block a user