Combining Indicators into Studies¶
pandas only
In [9]:
Copied!
import pandas as pd
from mintalib.samples import sample_prices
from mintalib.indicators import SMA, EMA, MACD
from mintalib.studies import Study
import pandas as pd
from mintalib.samples import sample_prices
from mintalib.indicators import SMA, EMA, MACD
from mintalib.studies import Study
In [10]:
Copied!
prices = sample_prices()
prices
prices = sample_prices()
prices
Out[10]:
| open | high | low | close | volume | |
|---|---|---|---|---|---|
| date | |||||
| 1980-12-12 | 0.098207 | 0.098634 | 0.098207 | 0.098207 | 469033600 |
| 1980-12-15 | 0.093510 | 0.093510 | 0.093083 | 0.093083 | 175884800 |
| 1980-12-16 | 0.086678 | 0.086678 | 0.086251 | 0.086251 | 105728000 |
| 1980-12-17 | 0.088386 | 0.088813 | 0.088386 | 0.088386 | 86441600 |
| 1980-12-18 | 0.090949 | 0.091376 | 0.090949 | 0.090949 | 73449600 |
| ... | ... | ... | ... | ... | ... |
| 2026-07-31 | 304.809998 | 310.690002 | 300.000000 | 308.910004 | 132489100 |
| 2026-08-03 | 309.579987 | 311.799988 | 302.559998 | 303.420013 | 75052000 |
| 2026-08-04 | 302.730011 | 310.420013 | 301.320007 | 309.380005 | 68001000 |
| 2026-08-05 | 309.359985 | 311.709991 | 305.670013 | 311.000000 | 49178700 |
| 2026-08-06 | 314.339996 | 316.289398 | 313.489990 | 314.260010 | 7165536 |
11504 rows × 5 columns
Study¶
In [11]:
Copied!
study = Study(MACD(), sma50=SMA(50), sma200=SMA(200))
print(study)
study = Study(MACD(), sma50=SMA(50), sma200=SMA(200))
print(study)
Study(MACD(12, 26, 9), sma50=SMA(50), sma200=SMA(200))
In [12]:
Copied!
prices.pipe(study)
prices.pipe(study)
Out[12]:
| macd | macdsignal | macdhist | sma50 | sma200 | |
|---|---|---|---|---|---|
| date | |||||
| 1980-12-12 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-15 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-16 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-17 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-18 | NaN | NaN | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... |
| 2026-07-31 | 6.894136 | 8.260785 | -1.366649 | 309.499400 | 277.661274 |
| 2026-08-03 | 4.536518 | 7.515932 | -2.979414 | 309.522800 | 277.943019 |
| 2026-08-04 | 3.113124 | 6.635370 | -3.522246 | 309.610601 | 278.246737 |
| 2026-08-05 | 2.091683 | 5.726633 | -3.634950 | 309.654200 | 278.567977 |
| 2026-08-06 | 1.527629 | 4.886832 | -3.359203 | 309.772801 | 278.881386 |
11504 rows × 5 columns
In [13]:
Copied!
prices.pipe(study, merge=True)
prices.pipe(study, merge=True)
Out[13]:
| open | high | low | close | volume | macd | macdsignal | macdhist | sma50 | sma200 | |
|---|---|---|---|---|---|---|---|---|---|---|
| date | ||||||||||
| 1980-12-12 | 0.098207 | 0.098634 | 0.098207 | 0.098207 | 469033600 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-15 | 0.093510 | 0.093510 | 0.093083 | 0.093083 | 175884800 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-16 | 0.086678 | 0.086678 | 0.086251 | 0.086251 | 105728000 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-17 | 0.088386 | 0.088813 | 0.088386 | 0.088386 | 86441600 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-18 | 0.090949 | 0.091376 | 0.090949 | 0.090949 | 73449600 | NaN | NaN | NaN | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2026-07-31 | 304.809998 | 310.690002 | 300.000000 | 308.910004 | 132489100 | 6.894136 | 8.260785 | -1.366649 | 309.499400 | 277.661274 |
| 2026-08-03 | 309.579987 | 311.799988 | 302.559998 | 303.420013 | 75052000 | 4.536518 | 7.515932 | -2.979414 | 309.522800 | 277.943019 |
| 2026-08-04 | 302.730011 | 310.420013 | 301.320007 | 309.380005 | 68001000 | 3.113124 | 6.635370 | -3.522246 | 309.610601 | 278.246737 |
| 2026-08-05 | 309.359985 | 311.709991 | 305.670013 | 311.000000 | 49178700 | 2.091683 | 5.726633 | -3.634950 | 309.654200 | 278.567977 |
| 2026-08-06 | 314.339996 | 316.289398 | 313.489990 | 314.260010 | 7165536 | 1.527629 | 4.886832 | -3.359203 | 309.772801 | 278.881386 |
11504 rows × 10 columns
Multi-symbol dataset¶
In [17]:
Copied!
dataset = pd.concat({k:prices for k in ("AAA", "BBB", "CCC")}, names=["symbol"])
dataset
dataset = pd.concat({k:prices for k in ("AAA", "BBB", "CCC")}, names=["symbol"])
dataset
Out[17]:
| open | high | low | close | volume | ||
|---|---|---|---|---|---|---|
| symbol | date | |||||
| AAA | 1980-12-12 | 0.098207 | 0.098634 | 0.098207 | 0.098207 | 469033600 |
| 1980-12-15 | 0.093510 | 0.093510 | 0.093083 | 0.093083 | 175884800 | |
| 1980-12-16 | 0.086678 | 0.086678 | 0.086251 | 0.086251 | 105728000 | |
| 1980-12-17 | 0.088386 | 0.088813 | 0.088386 | 0.088386 | 86441600 | |
| 1980-12-18 | 0.090949 | 0.091376 | 0.090949 | 0.090949 | 73449600 | |
| ... | ... | ... | ... | ... | ... | ... |
| CCC | 2026-07-31 | 304.809998 | 310.690002 | 300.000000 | 308.910004 | 132489100 |
| 2026-08-03 | 309.579987 | 311.799988 | 302.559998 | 303.420013 | 75052000 | |
| 2026-08-04 | 302.730011 | 310.420013 | 301.320007 | 309.380005 | 68001000 | |
| 2026-08-05 | 309.359985 | 311.709991 | 305.670013 | 311.000000 | 49178700 | |
| 2026-08-06 | 314.339996 | 316.289398 | 313.489990 | 314.260010 | 7165536 |
34512 rows × 5 columns
In [18]:
Copied!
dataset.groupby("symbol", group_keys=False).apply(study)
dataset.groupby("symbol", group_keys=False).apply(study)
Out[18]:
| macd | macdsignal | macdhist | sma50 | sma200 | ||
|---|---|---|---|---|---|---|
| symbol | date | |||||
| AAA | 1980-12-12 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-15 | NaN | NaN | NaN | NaN | NaN | |
| 1980-12-16 | NaN | NaN | NaN | NaN | NaN | |
| 1980-12-17 | NaN | NaN | NaN | NaN | NaN | |
| 1980-12-18 | NaN | NaN | NaN | NaN | NaN | |
| ... | ... | ... | ... | ... | ... | ... |
| CCC | 2026-07-31 | 6.894136 | 8.260785 | -1.366649 | 309.499400 | 277.661274 |
| 2026-08-03 | 4.536518 | 7.515932 | -2.979414 | 309.522800 | 277.943019 | |
| 2026-08-04 | 3.113124 | 6.635370 | -3.522246 | 309.610601 | 278.246737 | |
| 2026-08-05 | 2.091683 | 5.726633 | -3.634950 | 309.654200 | 278.567977 | |
| 2026-08-06 | 1.527629 | 4.886832 | -3.359203 | 309.772801 | 278.881386 |
34512 rows × 5 columns
In [19]:
Copied!
dataset.groupby("symbol", group_keys=False).apply(study, merge=True)
dataset.groupby("symbol", group_keys=False).apply(study, merge=True)
Out[19]:
| open | high | low | close | volume | macd | macdsignal | macdhist | sma50 | sma200 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|
| symbol | date | ||||||||||
| AAA | 1980-12-12 | 0.098207 | 0.098634 | 0.098207 | 0.098207 | 469033600 | NaN | NaN | NaN | NaN | NaN |
| 1980-12-15 | 0.093510 | 0.093510 | 0.093083 | 0.093083 | 175884800 | NaN | NaN | NaN | NaN | NaN | |
| 1980-12-16 | 0.086678 | 0.086678 | 0.086251 | 0.086251 | 105728000 | NaN | NaN | NaN | NaN | NaN | |
| 1980-12-17 | 0.088386 | 0.088813 | 0.088386 | 0.088386 | 86441600 | NaN | NaN | NaN | NaN | NaN | |
| 1980-12-18 | 0.090949 | 0.091376 | 0.090949 | 0.090949 | 73449600 | NaN | NaN | NaN | NaN | NaN | |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| CCC | 2026-07-31 | 304.809998 | 310.690002 | 300.000000 | 308.910004 | 132489100 | 6.894136 | 8.260785 | -1.366649 | 309.499400 | 277.661274 |
| 2026-08-03 | 309.579987 | 311.799988 | 302.559998 | 303.420013 | 75052000 | 4.536518 | 7.515932 | -2.979414 | 309.522800 | 277.943019 | |
| 2026-08-04 | 302.730011 | 310.420013 | 301.320007 | 309.380005 | 68001000 | 3.113124 | 6.635370 | -3.522246 | 309.610601 | 278.246737 | |
| 2026-08-05 | 309.359985 | 311.709991 | 305.670013 | 311.000000 | 49178700 | 2.091683 | 5.726633 | -3.634950 | 309.654200 | 278.567977 | |
| 2026-08-06 | 314.339996 | 316.289398 | 313.489990 | 314.260010 | 7165536 | 1.527629 | 4.886832 | -3.359203 | 309.772801 | 278.881386 |
34512 rows × 10 columns
In [ ]:
Copied!