Full Code of davidzr/freqtrade-strategies for AI

main 9623c1f3d8c7 cached
467 files
16.5 MB
4.4M tokens
5082 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (17,418K chars total). Download the full file to get everything.
Repository: davidzr/freqtrade-strategies
Branch: main
Commit: 9623c1f3d8c7
Files: 467
Total size: 16.5 MB

Directory structure:
gitextract_m9eikmuu/

├── LICENSE
├── README.md
└── strategies/
    ├── ADXMomentum/
    │   └── ADXMomentum.py
    ├── ADX_15M_USDT/
    │   └── ADX_15M_USDT.py
    ├── ADX_15M_USDT2/
    │   └── ADX_15M_USDT2.py
    ├── ASDTSRockwellTrading/
    │   └── ASDTSRockwellTrading.py
    ├── ActionZone/
    │   └── ActionZone.py
    ├── AdxSmas/
    │   └── AdxSmas.py
    ├── AlligatorStrat/
    │   └── AlligatorStrat.py
    ├── AlligatorStrategy/
    │   └── AlligatorStrategy.py
    ├── AlwaysBuy/
    │   └── AlwaysBuy.py
    ├── Apollo11/
    │   └── Apollo11.py
    ├── AverageStrategy/
    │   └── AverageStrategy.py
    ├── AwesomeMacd/
    │   └── AwesomeMacd.py
    ├── BBMod1/
    │   └── BBMod1.py
    ├── BBRSI/
    │   └── BBRSI.py
    ├── BBRSI2/
    │   └── BBRSI2.py
    ├── BBRSI21/
    │   └── BBRSI21.py
    ├── BBRSI3366/
    │   └── BBRSI3366.py
    ├── BBRSI4cust/
    │   └── BBRSI4cust.py
    ├── BBRSINaiveStrategy/
    │   └── BBRSINaiveStrategy.py
    ├── BBRSIOptim2020Strategy/
    │   └── BBRSIOptim2020Strategy.py
    ├── BBRSIOptimStrategy/
    │   └── BBRSIOptimStrategy.py
    ├── BBRSIOptimizedStrategy/
    │   └── BBRSIOptimizedStrategy.py
    ├── BBRSIS/
    │   └── BBRSIS.py
    ├── BBRSIStrategy/
    │   └── BBRSIStrategy.py
    ├── BBRSITV/
    │   └── BBRSITV.py
    ├── BBRSIoriginal/
    │   └── BBRSIoriginal.py
    ├── BBRSIv2/
    │   └── BBRSIv2.py
    ├── BB_RPB_TSL/
    │   └── BB_RPB_TSL.py
    ├── BB_RPB_TSL_2/
    │   └── BB_RPB_TSL_2.py
    ├── BB_RPB_TSL_BI/
    │   └── BB_RPB_TSL_BI.py
    ├── BB_RPB_TSL_BIV1/
    │   └── BB_RPB_TSL_BIV1.py
    ├── BB_RPB_TSL_RNG/
    │   └── BB_RPB_TSL_RNG.py
    ├── BB_RPB_TSL_RNG_2/
    │   └── BB_RPB_TSL_RNG_2.py
    ├── BB_RPB_TSL_RNG_TBS/
    │   └── BB_RPB_TSL_RNG_TBS.py
    ├── BB_RPB_TSL_RNG_TBS_GOLD/
    │   └── BB_RPB_TSL_RNG_TBS_GOLD.py
    ├── BB_RPB_TSL_RNG_VWAP/
    │   └── BB_RPB_TSL_RNG_VWAP.py
    ├── BB_RPB_TSL_SMA_Tranz/
    │   └── BB_RPB_TSL_SMA_Tranz.py
    ├── BB_RPB_TSL_SMA_Tranz_TB_1_1_1/
    │   └── BB_RPB_TSL_SMA_Tranz_TB_1_1_1.py
    ├── BB_RPB_TSL_SMA_Tranz_TB_MOD/
    │   └── BB_RPB_TSL_SMA_Tranz_TB_MOD.py
    ├── BB_RPB_TSL_Tranz/
    │   └── BB_RPB_TSL_Tranz.py
    ├── BB_RPB_TSL_c7c477d_20211030/
    │   └── BB_RPB_TSL_c7c477d_20211030.py
    ├── BB_RPB_TSLmeneguzzo/
    │   └── BB_RPB_TSLmeneguzzo.py
    ├── BB_RSI/
    │   └── BB_RSI.py
    ├── BB_Strategy04/
    │   └── BB_Strategy04.py
    ├── BBands/
    │   └── BBands.py
    ├── BBandsRSI/
    │   └── BBandsRSI.py
    ├── BBlower/
    │   └── BBlower.py
    ├── Babico_SMA5xBBmid/
    │   └── Babico_SMA5xBBmid.py
    ├── Bandtastic/
    │   └── Bandtastic.py
    ├── BbRoi/
    │   └── BbRoi.py
    ├── BbandRsi/
    │   └── BbandRsi.py
    ├── BbandRsiRolling/
    │   └── BbandRsiRolling.py
    ├── BcmbigzDevelop/
    │   └── BcmbigzDevelop.py
    ├── BcmbigzV1/
    │   └── BcmbigzV1.py
    ├── BigPete/
    │   └── BigPete.py
    ├── BigZ03/
    │   └── BigZ03.py
    ├── BigZ0307HO/
    │   └── BigZ0307HO.py
    ├── BigZ03HO/
    │   └── BigZ03HO.py
    ├── BigZ04/
    │   └── BigZ04.py
    ├── BigZ0407/
    │   └── BigZ0407.py
    ├── BigZ0407HO/
    │   └── BigZ0407HO.py
    ├── BigZ04HO/
    │   └── BigZ04HO.py
    ├── BigZ04HO2/
    │   └── BigZ04HO2.py
    ├── BigZ04_TSL3/
    │   └── BigZ04_TSL3.py
    ├── BigZ04_TSL4/
    │   └── BigZ04_TSL4.py
    ├── BigZ06/
    │   └── BigZ06.py
    ├── BigZ07/
    │   └── BigZ07.py
    ├── BigZ07Next/
    │   └── BigZ07Next.py
    ├── BigZ07Next2/
    │   └── BigZ07Next2.py
    ├── BinClucMad/
    │   └── BinClucMad.py
    ├── BinClucMadDevelop/
    │   └── BinClucMadDevelop.py
    ├── BinClucMadSMADevelop/
    │   └── BinClucMadSMADevelop.py
    ├── BinClucMadV1/
    │   └── BinClucMadV1.py
    ├── BinHV27/
    │   └── BinHV27.py
    ├── BinHV45/
    │   └── BinHV45.py
    ├── BinHV45HO/
    │   └── BinHV45HO.py
    ├── BreakEven/
    │   └── BreakEven.py
    ├── BuyAllSellAllStrategy/
    │   └── BuyAllSellAllStrategy.py
    ├── BuyOnly/
    │   └── BuyOnly.py
    ├── CBPete9/
    │   └── CBPete9.py
    ├── CCIStrategy/
    │   └── CCIStrategy.py
    ├── CMCWinner/
    │   └── CMCWinner.py
    ├── Cci/
    │   └── Cci.py
    ├── Chandem/
    │   └── Chandem.py
    ├── Chandemtwo/
    │   └── Chandemtwo.py
    ├── Chispei/
    │   └── Chispei.py
    ├── Cluc4/
    │   └── Cluc4.py
    ├── Cluc4werk/
    │   └── Cluc4werk.py
    ├── Cluc5werk/
    │   └── Cluc5werk.py
    ├── Cluc7werk/
    │   └── Cluc7werk.py
    ├── ClucFiatROI/
    │   └── ClucFiatROI.py
    ├── ClucFiatSlow/
    │   └── ClucFiatSlow.py
    ├── ClucHAnix/
    │   └── ClucHAnix.py
    ├── ClucHAnix5m/
    │   └── ClucHAnix5m.py
    ├── ClucHAnix_5m/
    │   └── ClucHAnix_5m.py
    ├── ClucHAnix_5m1/
    │   └── ClucHAnix_5m1.py
    ├── ClucHAnix_BB_RPB_MOD/
    │   └── ClucHAnix_BB_RPB_MOD.py
    ├── ClucHAnix_BB_RPB_MOD2_ROI/
    │   └── ClucHAnix_BB_RPB_MOD2_ROI.py
    ├── ClucHAnix_BB_RPB_MOD_CTT/
    │   └── ClucHAnix_BB_RPB_MOD_CTT.py
    ├── ClucHAnix_BB_RPB_MOD_E0V1E_ROI/
    │   └── ClucHAnix_BB_RPB_MOD_E0V1E_ROI.py
    ├── ClucHAnix_hhll/
    │   └── ClucHAnix_hhll.py
    ├── ClucHAwerk/
    │   └── ClucHAwerk.py
    ├── ClucMay72018/
    │   └── ClucMay72018.py
    ├── CofiBitStrategy/
    │   └── CofiBitStrategy.py
    ├── CombinedBinHAndCluc/
    │   └── CombinedBinHAndCluc.py
    ├── CombinedBinHAndCluc2021/
    │   └── CombinedBinHAndCluc2021.py
    ├── CombinedBinHAndCluc2021Bull/
    │   └── CombinedBinHAndCluc2021Bull.py
    ├── CombinedBinHAndClucHyperV0/
    │   └── CombinedBinHAndClucHyperV0.py
    ├── CombinedBinHAndClucHyperV3/
    │   └── CombinedBinHAndClucHyperV3.py
    ├── CombinedBinHAndClucV2/
    │   └── CombinedBinHAndClucV2.py
    ├── CombinedBinHAndClucV3/
    │   └── CombinedBinHAndClucV3.py
    ├── CombinedBinHAndClucV4/
    │   └── CombinedBinHAndClucV4.py
    ├── CombinedBinHAndClucV5/
    │   └── CombinedBinHAndClucV5.py
    ├── CombinedBinHAndClucV5Hyperoptable/
    │   └── CombinedBinHAndClucV5Hyperoptable.py
    ├── CombinedBinHAndClucV6/
    │   └── CombinedBinHAndClucV6.py
    ├── CombinedBinHAndClucV6H/
    │   └── CombinedBinHAndClucV6H.py
    ├── CombinedBinHAndClucV7/
    │   └── CombinedBinHAndClucV7.py
    ├── CombinedBinHAndClucV8/
    │   └── CombinedBinHAndClucV8.py
    ├── CombinedBinHAndClucV8Hyper/
    │   └── CombinedBinHAndClucV8Hyper.py
    ├── CombinedBinHAndClucV8XH/
    │   └── CombinedBinHAndClucV8XH.py
    ├── CombinedBinHAndClucV8XHO/
    │   └── CombinedBinHAndClucV8XHO.py
    ├── CombinedBinHClucAndMADV3/
    │   └── CombinedBinHClucAndMADV3.py
    ├── CombinedBinHClucAndMADV5/
    │   └── CombinedBinHClucAndMADV5.py
    ├── CombinedBinHClucAndMADV6/
    │   └── CombinedBinHClucAndMADV6.py
    ├── CombinedBinHClucAndMADV9/
    │   └── CombinedBinHClucAndMADV9.py
    ├── Combined_Indicators/
    │   └── Combined_Indicators.py
    ├── Combined_NFIv6_SMA/
    │   └── Combined_NFIv6_SMA.py
    ├── Combined_NFIv7_SMA/
    │   └── Combined_NFIv7_SMA.py
    ├── Combined_NFIv7_SMA_Rallipanos_20210707/
    │   └── Combined_NFIv7_SMA_Rallipanos_20210707.py
    ├── Combined_NFIv7_SMA_bAdBoY_20211204/
    │   └── Combined_NFIv7_SMA_bAdBoY_20211204.py
    ├── CoreStrategy/
    │   └── CoreStrategy.py
    ├── CrossEMAStrategy/
    │   └── CrossEMAStrategy.py
    ├── CryptoFrog/
    │   └── CryptoFrog.py
    ├── CryptoFrogHO/
    │   └── CryptoFrogHO.py
    ├── CryptoFrogHO2/
    │   └── CryptoFrogHO2.py
    ├── CryptoFrogHO2A/
    │   └── CryptoFrogHO2A.py
    ├── CryptoFrogHO3A1/
    │   └── CryptoFrogHO3A1.py
    ├── CryptoFrogHO3A2/
    │   └── CryptoFrogHO3A2.py
    ├── CryptoFrogHO3A3/
    │   └── CryptoFrogHO3A3.py
    ├── CryptoFrogHO3A4/
    │   └── CryptoFrogHO3A4.py
    ├── CryptoFrogNFI/
    │   └── CryptoFrogNFI.py
    ├── CryptoFrogNFIHO1A/
    │   └── CryptoFrogNFIHO1A.py
    ├── CryptoFrogOffset/
    │   └── CryptoFrogOffset.py
    ├── CustomStoplossWithPSAR/
    │   └── CustomStoplossWithPSAR.py
    ├── DCBBBounce/
    │   └── DCBBBounce.py
    ├── DD/
    │   └── DD.py
    ├── DIV_v1/
    │   └── DIV_v1.py
    ├── DevilStra/
    │   └── DevilStra.py
    ├── Diamond/
    │   └── Diamond.py
    ├── Divergences/
    │   └── Divergences.py
    ├── Dracula/
    │   └── Dracula.py
    ├── Dyna_opti/
    │   └── Dyna_opti.py
    ├── EI3v2_tag_cofi_green/
    │   └── EI3v2_tag_cofi_green.py
    ├── EMA50/
    │   └── EMA50.py
    ├── EMA520015_V17/
    │   └── EMA520015_V17.py
    ├── EMABBRSI/
    │   └── EMABBRSI.py
    ├── EMABreakout/
    │   └── EMABreakout.py
    ├── EMASkipPump/
    │   └── EMASkipPump.py
    ├── EMAVolume/
    │   └── EMAVolume.py
    ├── EMA_CROSSOVER_STRATEGY/
    │   └── EMA_CROSSOVER_STRATEGY.py
    ├── EXPERIMENTAL_STRATEGY/
    │   └── EXPERIMENTAL_STRATEGY.py
    ├── ElliotV2/
    │   └── ElliotV2.py
    ├── ElliotV4/
    │   └── ElliotV4.py
    ├── ElliotV531/
    │   └── ElliotV531.py
    ├── ElliotV5HO/
    │   └── ElliotV5HO.py
    ├── ElliotV5HOMod2/
    │   └── ElliotV5HOMod2.py
    ├── ElliotV5HOMod3/
    │   └── ElliotV5HOMod3.py
    ├── ElliotV7/
    │   └── ElliotV7.py
    ├── ElliotV8HO/
    │   └── ElliotV8HO.py
    ├── ElliotV8_original/
    │   └── ElliotV8_original.py
    ├── ElliotV8_original_ichiv2/
    │   └── ElliotV8_original_ichiv2.py
    ├── ElliotV8_original_ichiv3/
    │   └── ElliotV8_original_ichiv3.py
    ├── Elliotv8/
    │   └── Elliotv8.py
    ├── FRAYSTRAT/
    │   └── FRAYSTRAT.py
    ├── Fakebuy/
    │   └── Fakebuy.py
    ├── FastSupertrend/
    │   └── FastSupertrend.py
    ├── FastSupertrendOpt/
    │   └── FastSupertrendOpt.py
    ├── FiveMinCrossAbove/
    │   └── FiveMinCrossAbove.py
    ├── FixedRiskRewardLoss/
    │   └── FixedRiskRewardLoss.py
    ├── ForexSignal/
    │   └── ForexSignal.py
    ├── FrostAuraM115mStrategy/
    │   └── FrostAuraM115mStrategy.py
    ├── FrostAuraM11hStrategy/
    │   └── FrostAuraM11hStrategy.py
    ├── FrostAuraM21hStrategy/
    │   └── FrostAuraM21hStrategy.py
    ├── FrostAuraM315mStrategy/
    │   └── FrostAuraM315mStrategy.py
    ├── FrostAuraM31hStrategy/
    │   └── FrostAuraM31hStrategy.py
    ├── FrostAuraRandomStrategy/
    │   └── FrostAuraRandomStrategy.py
    ├── GodCard/
    │   └── GodCard.py
    ├── GodStraNew/
    │   └── GodStraNew.py
    ├── GodStraNew40/
    │   └── GodStraNew40.py
    ├── GodStraNew_SMAonly/
    │   └── GodStraNew_SMAonly.py
    ├── Guacamole/
    │   └── Guacamole.py
    ├── Gumbo1/
    │   └── Gumbo1.py
    ├── Hacklemore2/
    │   └── Hacklemore2.py
    ├── Hacklemore3/
    │   └── Hacklemore3.py
    ├── HansenSmaOffsetV1/
    │   └── HansenSmaOffsetV1.py
    ├── HarmonicDivergence/
    │   └── HarmonicDivergence.py
    ├── Heracles/
    │   └── Heracles.py
    ├── HourBasedStrategy/
    │   └── HourBasedStrategy.py
    ├── HyperStra_GSN_SMAOnly/
    │   └── HyperStra_GSN_SMAOnly.py
    ├── HyperStra_SMAOnly/
    │   └── HyperStra_SMAOnly.py
    ├── INSIDEUP/
    │   └── INSIDEUP.py
    ├── Ichess/
    │   └── Ichess.py
    ├── Ichi/
    │   └── Ichi.py
    ├── Ichimoku/
    │   └── Ichimoku.py
    ├── Ichimoku_SenkouSpanCross/
    │   └── Ichimoku_SenkouSpanCross.py
    ├── Ichimoku_v12/
    │   └── Ichimoku_v12.py
    ├── Ichimoku_v30/
    │   └── Ichimoku_v30.py
    ├── Ichimoku_v31/
    │   └── Ichimoku_v31.py
    ├── Ichimoku_v32/
    │   └── Ichimoku_v32.py
    ├── Ichimoku_v33/
    │   └── Ichimoku_v33.py
    ├── Ichimoku_v37/
    │   └── Ichimoku_v37.py
    ├── InformativeSample/
    │   └── InformativeSample.py
    ├── Inverse/
    │   └── Inverse.py
    ├── InverseV2/
    │   └── InverseV2.py
    ├── JustROCR/
    │   └── JustROCR.py
    ├── JustROCR3/
    │   └── JustROCR3.py
    ├── JustROCR5/
    │   └── JustROCR5.py
    ├── JustROCR6/
    │   └── JustROCR6.py
    ├── KAMACCIRSI/
    │   └── KAMACCIRSI.py
    ├── KC_BB/
    │   └── KC_BB.py
    ├── Kamaflage/
    │   └── Kamaflage.py
    ├── Leveraged/
    │   └── Leveraged.py
    ├── LookaheadStrategy/
    │   └── LookaheadStrategy.py
    ├── Low_BB/
    │   └── Low_BB.py
    ├── LuxOSC/
    │   └── LuxOSC.py
    ├── MAC/
    │   └── MAC.py
    ├── MACDCCI/
    │   └── MACDCCI.py
    ├── MACDRSI200/
    │   └── MACDRSI200.py
    ├── MACDStrategy/
    │   └── MACDStrategy.py
    ├── MACDStrategy_crossed/
    │   └── MACDStrategy_crossed.py
    ├── MACD_EMA/
    │   └── MACD_EMA.py
    ├── MACD_TRIPLE_MA/
    │   └── MACD_TRIPLE_MA.py
    ├── MACD_TRI_EMA/
    │   └── MACD_TRI_EMA.py
    ├── MADisplaceV3/
    │   └── MADisplaceV3.py
    ├── MFI/
    │   └── MFI.py
    ├── Macd/
    │   └── Macd.py
    ├── MacheteV8b/
    │   └── MacheteV8b.py
    ├── MacheteV8bRallimod2/
    │   └── MacheteV8bRallimod2.py
    ├── MarketChyperHyperStrategy/
    │   └── MarketChyperHyperStrategy.py
    ├── Maro4hMacdSd/
    │   └── Maro4hMacdSd.py
    ├── Martin/
    │   └── Martin.py
    ├── MiniLambo/
    │   └── MiniLambo.py
    ├── Minmax/
    │   └── Minmax.py
    ├── MomStrategy/
    │   └── MomStrategy.py
    ├── Momentumv2/
    │   └── Momentumv2.py
    ├── MontrealStrategy/
    │   └── MontrealStrategy.py
    ├── MostOfAll/
    │   └── MostOfAll.py
    ├── MultiMA_TSL/
    │   └── MultiMA_TSL.py
    ├── MultiMA_TSL3/
    │   └── MultiMA_TSL3.py
    ├── MultiMA_TSL3_Mod/
    │   └── MultiMA_TSL3_Mod.py
    ├── MultiMa/
    │   └── MultiMa.py
    ├── MultiOffsetLamboV0/
    │   └── MultiOffsetLamboV0.py
    ├── MultiRSI/
    │   └── MultiRSI.py
    ├── NASOSRv6_private_Reinuvader_20211121/
    │   └── NASOSRv6_private_Reinuvader_20211121.py
    ├── NASOSv4/
    │   └── NASOSv4.py
    ├── NASOSv5/
    │   └── NASOSv5.py
    ├── NASOSv5_mod1/
    │   └── NASOSv5_mod1.py
    ├── NASOSv5_mod1_DanMod/
    │   └── NASOSv5_mod1_DanMod.py
    ├── NASOSv5_mod2/
    │   └── NASOSv5_mod2.py
    ├── NASOSv5_mod3/
    │   └── NASOSv5_mod3.py
    ├── NFI46/
    │   └── NFI46.py
    ├── NFI46Frog/
    │   └── NFI46Frog.py
    ├── NFI46FrogZ/
    │   └── NFI46FrogZ.py
    ├── NFI46Offset/
    │   └── NFI46Offset.py
    ├── NFI46OffsetHOA1/
    │   └── NFI46OffsetHOA1.py
    ├── NFI46Z/
    │   └── NFI46Z.py
    ├── NFI47V2/
    │   └── NFI47V2.py
    ├── NFI4Frog/
    │   └── NFI4Frog.py
    ├── NFI5MOHO/
    │   └── NFI5MOHO.py
    ├── NFI5MOHO2/
    │   └── NFI5MOHO2.py
    ├── NFI5MOHO_WIP/
    │   └── NFI5MOHO_WIP.py
    ├── NFI5MOHO_WIP_1/
    │   └── NFI5MOHO_WIP_1.py
    ├── NFI5MOHO_WIP_2/
    │   └── NFI5MOHO_WIP_2.py
    ├── NFI731_BUSD/
    │   └── NFI731_BUSD.py
    ├── NFI7MOHO/
    │   └── NFI7MOHO.py
    ├── NFINextMOHO/
    │   └── NFINextMOHO.py
    ├── NFINextMOHO2/
    │   └── NFINextMOHO2.py
    ├── NFINextMultiOffsetAndHO/
    │   └── NFINextMultiOffsetAndHO.py
    ├── NFINextMultiOffsetAndHO2/
    │   └── NFINextMultiOffsetAndHO2.py
    ├── NFIX_BB_RPB/
    │   └── NFIX_BB_RPB.py
    ├── NFIX_BB_RPB_c7c477d_20211030/
    │   └── NFIX_BB_RPB_c7c477d_20211030.py
    ├── NfiNextModded/
    │   └── NfiNextModded.py
    ├── NormalizerStrategy/
    │   └── NormalizerStrategy.py
    ├── NormalizerStrategyHO2/
    │   └── NormalizerStrategyHO2.py
    ├── Nostalgia/
    │   └── Nostalgia.py
    ├── NostalgiaForInfinityNext/
    │   └── NostalgiaForInfinityNext.py
    ├── NostalgiaForInfinityNextGen/
    │   └── NostalgiaForInfinityNextGen.py
    ├── NostalgiaForInfinityNextGen_TSL/
    │   └── NostalgiaForInfinityNextGen_TSL.py
    ├── NostalgiaForInfinityNextV7155/
    │   └── NostalgiaForInfinityNextV7155.py
    ├── NostalgiaForInfinityNext_ChangeToTower_V5_2/
    │   └── NostalgiaForInfinityNext_ChangeToTower_V5_2.py
    ├── NostalgiaForInfinityNext_ChangeToTower_V5_3/
    │   └── NostalgiaForInfinityNext_ChangeToTower_V5_3.py
    ├── NostalgiaForInfinityNext_ChangeToTower_V6/
    │   └── NostalgiaForInfinityNext_ChangeToTower_V6.py
    ├── NostalgiaForInfinityNext_maximizer/
    │   └── NostalgiaForInfinityNext_maximizer.py
    ├── NostalgiaForInfinityV1/
    │   └── NostalgiaForInfinityV1.py
    ├── NostalgiaForInfinityV2/
    │   └── NostalgiaForInfinityV2.py
    ├── NostalgiaForInfinityV3/
    │   └── NostalgiaForInfinityV3.py
    ├── NostalgiaForInfinityV4/
    │   └── NostalgiaForInfinityV4.py
    ├── NostalgiaForInfinityV4HO/
    │   └── NostalgiaForInfinityV4HO.py
    ├── NostalgiaForInfinityV5/
    │   └── NostalgiaForInfinityV5.py
    ├── NostalgiaForInfinityV5MultiOffsetAndHO/
    │   └── NostalgiaForInfinityV5MultiOffsetAndHO.py
    ├── NostalgiaForInfinityV5MultiOffsetAndHO2/
    │   └── NostalgiaForInfinityV5MultiOffsetAndHO2.py
    ├── NostalgiaForInfinityV6/
    │   └── NostalgiaForInfinityV6.py
    ├── NostalgiaForInfinityV6HO/
    │   └── NostalgiaForInfinityV6HO.py
    ├── NostalgiaForInfinityV7/
    │   └── NostalgiaForInfinityV7.py
    ├── NostalgiaForInfinityV7_7_2/
    │   └── NostalgiaForInfinityV7_7_2.py
    ├── NostalgiaForInfinityV7_SMA/
    │   └── NostalgiaForInfinityV7_SMA.py
    ├── NostalgiaForInfinityV7_SMAv2/
    │   └── NostalgiaForInfinityV7_SMAv2.py
    ├── NostalgiaForInfinityV7_SMAv2_1/
    │   └── NostalgiaForInfinityV7_SMAv2_1.py
    ├── NostalgiaForInfinityX/
    │   └── NostalgiaForInfinityX.py
    ├── NostalgiaForInfinityX2/
    │   └── NostalgiaForInfinityX2.py
    ├── NostalgiaForInfinityXw/
    │   └── NostalgiaForInfinityXw.py
    ├── NotAnotherSMAOffSetStrategy_V2/
    │   └── NotAnotherSMAOffSetStrategy_V2.py
    ├── NotAnotherSMAOffsetStrategy/
    │   └── NotAnotherSMAOffsetStrategy.py
    ├── NotAnotherSMAOffsetStrategyHO/
    │   └── NotAnotherSMAOffsetStrategyHO.py
    ├── NotAnotherSMAOffsetStrategyHOv3/
    │   └── NotAnotherSMAOffsetStrategyHOv3.py
    ├── NotAnotherSMAOffsetStrategyLite/
    │   └── NotAnotherSMAOffsetStrategyLite.py
    ├── NotAnotherSMAOffsetStrategyModHO/
    │   └── NotAnotherSMAOffsetStrategyModHO.py
    ├── NotAnotherSMAOffsetStrategyModHO_LamineDz_20210901/
    │   └── NotAnotherSMAOffsetStrategyModHO_LamineDz_20210901.py
    ├── NotAnotherSMAOffsetStrategyX1/
    │   └── NotAnotherSMAOffsetStrategyX1.py
    ├── NotAnotherSMAOffsetStrategy_uzi/
    │   └── NotAnotherSMAOffsetStrategy_uzi.py
    ├── NotAnotherSMAOffsetStrategy_uzi3/
    │   └── NotAnotherSMAOffsetStrategy_uzi3.py
    ├── NowoIchimoku1hV1/
    │   └── NowoIchimoku1hV1.py
    ├── NowoIchimoku1hV2/
    │   └── NowoIchimoku1hV2.py
    ├── NowoIchimoku5mV2/
    │   └── NowoIchimoku5mV2.py
    ├── ONUR/
    │   └── ONUR.py
    ├── ObeliskIM_v1_1/
    │   └── ObeliskIM_v1_1.py
    ├── ObeliskRSI_v6_1/
    │   └── ObeliskRSI_v6_1.py
    ├── Obelisk_3EMA_StochRSI_ATR/
    │   └── Obelisk_3EMA_StochRSI_ATR.py
    ├── Obelisk_Ichimoku_Slow_v1_3/
    │   └── Obelisk_Ichimoku_Slow_v1_3.py
    ├── Obelisk_Ichimoku_ZEMA_v1/
    │   └── Obelisk_Ichimoku_ZEMA_v1.py
    ├── Obelisk_TradePro_Ichi_v1_1/
    │   └── Obelisk_TradePro_Ichi_v1_1.py
    ├── Obelisk_TradePro_Ichi_v2_1/
    │   └── Obelisk_TradePro_Ichi_v2_1.py
    ├── PRICEFOLLOWING/
    │   └── PRICEFOLLOWING.py
    ├── PRICEFOLLOWING2/
    │   └── PRICEFOLLOWING2.py
    ├── PRICEFOLLOWINGX/
    │   └── PRICEFOLLOWINGX.py
    ├── Persia/
    │   └── Persia.py
    ├── PrawnstarOBV/
    │   └── PrawnstarOBV.py
    ├── PumpDetector/
    │   └── PumpDetector.py
    ├── Quickie/
    │   └── Quickie.py
    ├── RSI/
    │   └── RSI.py
    ├── RSIBB02/
    │   └── RSIBB02.py
    ├── RSIv2/
    │   └── RSIv2.py
    ├── RalliV1/
    │   └── RalliV1.py
    ├── RalliV1_disable56/
    │   └── RalliV1_disable56.py
    ├── RaposaDivergenceV1/
    │   └── RaposaDivergenceV1.py
    ├── ReinforcedAverageStrategy/
    │   └── ReinforcedAverageStrategy.py
    ├── ReinforcedQuickie/
    │   └── ReinforcedQuickie.py
    ├── ReinforcedSmoothScalp/
    │   └── ReinforcedSmoothScalp.py
    ├── Renko/
    │   └── Renko.py
    ├── RobotradingBody/
    │   └── RobotradingBody.py
    ├── Roth01/
    │   └── Roth01.py
    ├── Roth03/
    │   └── Roth03.py
    ├── SAR/
    │   └── SAR.py
    ├── SMAIP3/
    │   └── SMAIP3.py
    ├── SMAIP3v2/
    │   └── SMAIP3v2.py
    ├── SMAOG/
    │   └── SMAOG.py
    ├── SMAOPv1_TTF/
    │   └── SMAOPv1_TTF.py
    ├── SMAOffset/
    │   └── SMAOffset.py
    ├── SMAOffsetProtectOpt/
    │   └── SMAOffsetProtectOpt.py
    ├── SMAOffsetProtectOptV0/
    │   └── SMAOffsetProtectOptV0.py
    ├── SMAOffsetProtectOptV1/
    │   └── SMAOffsetProtectOptV1.py
    ├── SMAOffsetProtectOptV1HO1/
    │   └── SMAOffsetProtectOptV1HO1.py
    ├── SMAOffsetProtectOptV1Mod/
    │   └── SMAOffsetProtectOptV1Mod.py
    ├── SMAOffsetProtectOptV1Mod2/
    │   └── SMAOffsetProtectOptV1Mod2.py
    ├── SMAOffsetProtectOptV1_kkeue_20210619/
    │   └── SMAOffsetProtectOptV1_kkeue_20210619.py
    ├── SMAOffsetV2/
    │   └── SMAOffsetV2.py
    ├── SMA_BBRSI/
    │   └── SMA_BBRSI.py
    ├── SRsi/
    │   └── SRsi.py
    ├── STRATEGY_RSI_BB_BOUNDS_CROSS/
    │   └── STRATEGY_RSI_BB_BOUNDS_CROSS.py
    ├── STRATEGY_RSI_BB_CROSS/
    │   └── STRATEGY_RSI_BB_CROSS.py
    ├── SampleStrategy/
    │   └── SampleStrategy.py
    ├── SampleStrategyV2/
    │   └── SampleStrategyV2.py
    ├── Saturn5/
    │   └── Saturn5.py
    ├── Scalp/
    │   └── Scalp.py
    ├── Schism/
    │   └── Schism.py
    ├── Schism2/
    │   └── Schism2.py
    ├── Schism2MM/
    │   └── Schism2MM.py
    ├── Schism3/
    │   └── Schism3.py
    ├── Schism4/
    │   └── Schism4.py
    ├── Schism5/
    │   └── Schism5.py
    ├── Schism6/
    │   └── Schism6.py
    ├── Seb/
    │   └── Seb.py
    ├── Simple/
    │   └── Simple.py
    ├── SlowPotato/
    │   └── SlowPotato.py
    ├── Slowbro/
    │   └── Slowbro.py
    ├── SmoothOperator/
    │   └── SmoothOperator.py
    ├── SmoothScalp/
    │   └── SmoothScalp.py
    ├── Stavix2/
    │   └── Stavix2.py
    ├── Stinkfist/
    │   └── Stinkfist.py
    ├── StochRSITEMA/
    │   └── StochRSITEMA.py
    ├── Strategy001/
    │   └── Strategy001.py
    ├── Strategy001_custom_sell/
    │   └── Strategy001_custom_sell.py
    ├── Strategy002/
    │   └── Strategy002.py
    ├── Strategy003/
    │   └── Strategy003.py
    ├── Strategy004/
    │   └── Strategy004.py
    ├── Strategy005/
    │   └── Strategy005.py
    ├── StrategyScalpingFast/
    │   └── StrategyScalpingFast.py
    ├── StrategyScalpingFast2/
    │   └── StrategyScalpingFast2.py
    ├── SuperHV27/
    │   └── SuperHV27.py
    ├── SuperTrend/
    │   └── SuperTrend.py
    ├── SuperTrendPure/
    │   └── SuperTrendPure.py
    ├── SupertrendStrategy/
    │   └── SupertrendStrategy.py
    ├── SwingHigh/
    │   └── SwingHigh.py
    ├── SwingHighToSky/
    │   └── SwingHighToSky.py
    ├── TDSequentialStrategy/
    │   └── TDSequentialStrategy.py
    ├── TEMA/
    │   └── TEMA.py
    ├── TechnicalExampleStrategy/
    │   └── TechnicalExampleStrategy.py
    ├── TemaMaster/
    │   └── TemaMaster.py
    ├── TemaMaster3/
    │   └── TemaMaster3.py
    ├── TemaPure/
    │   └── TemaPure.py
    ├── TemaPureNeat/
    │   └── TemaPureNeat.py
    ├── TemaPureTwo/
    │   └── TemaPureTwo.py
    ├── TenderEnter/
    │   └── TenderEnter.py
    ├── TheForce/
    │   └── TheForce.py
    ├── TheRealPullbackV2/
    │   └── TheRealPullbackV2.py
    ├── TrailingBuyStrat2/
    │   └── TrailingBuyStrat2.py
    ├── Trend_Strength_Directional/
    │   └── Trend_Strength_Directional.py
    ├── TrixStrategy/
    │   └── TrixStrategy.py
    ├── TrixV15Strategy/
    │   └── TrixV15Strategy.py
    ├── TrixV21Strategy/
    │   └── TrixV21Strategy.py
    ├── TrixV23Strategy/
    │   └── TrixV23Strategy.py
    ├── UltimateMomentumIndicator/
    │   └── UltimateMomentumIndicator.py
    ├── Uptrend/
    │   └── Uptrend.py
    ├── UziChan/
    │   └── UziChan.py
    ├── UziChan2/
    │   └── UziChan2.py
    ├── VWAP/
    │   └── VWAP.py
    ├── WaveTrendStra/
    │   └── WaveTrendStra.py
    ├── XebTradeStrat/
    │   └── XebTradeStrat.py
    ├── XtraThicc/
    │   └── XtraThicc.py
    ├── YOLO/
    │   └── YOLO.py
    ├── adaptive/
    │   └── adaptive.py
    ├── adx_opt_strat/
    │   └── adx_opt_strat.py
    ├── adxbbrsi2/
    │   └── adxbbrsi2.py
    ├── bb_rsi_opt_new/
    │   └── bb_rsi_opt_new.py
    ├── bbema/
    │   └── bbema.py
    ├── bbrsi1_strategy/
    │   └── bbrsi1_strategy.py
    ├── bbrsi4Freq/
    │   └── bbrsi4Freq.py
    ├── bestV2/
    │   └── bestV2.py
    ├── botbaby/
    │   └── botbaby.py
    ├── conny/
    │   └── conny.py
    ├── cryptohassle/
    │   └── cryptohassle.py
    ├── custom/
    │   └── custom.py
    ├── custom_sell/
    │   └── custom_sell.py
    ├── e6v34/
    │   └── e6v34.py
    ├── ema/
    │   └── ema.py
    ├── epretrace/
    │   └── epretrace.py
    ├── fahmibah/
    │   └── fahmibah.py
    ├── flawless_lambo/
    │   └── flawless_lambo.py
    ├── hansencandlepatternV1/
    │   └── hansencandlepatternV1.py
    ├── heikin/
    │   └── heikin.py
    ├── hlhb/
    │   └── hlhb.py
    ├── ichiV1/
    │   └── ichiV1.py
    ├── ichiV1_Marius/
    │   └── ichiV1_Marius.py
    ├── keltnerchannel/
    │   └── keltnerchannel.py
    ├── mabStra/
    │   └── mabStra.py
    ├── macd_recovery/
    │   └── macd_recovery.py
    ├── mark_strat/
    │   └── mark_strat.py
    ├── mark_strat_opt/
    │   └── mark_strat_opt.py
    ├── quantumfirst/
    │   └── quantumfirst.py
    ├── redditMA/
    │   └── redditMA.py
    ├── stoploss/
    │   └── stoploss.py
    ├── stratfib/
    │   └── stratfib.py
    ├── strato/
    │   └── strato.py
    ├── true_lambo/
    │   └── true_lambo.py
    └── wtc/
        └── wtc.py

================================================
FILE CONTENTS
================================================

================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    {one line to give the program's name and a brief idea of what it does.}
    Copyright (C) {year}  {name of author}

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    {project}  Copyright (C) {year}  {fullname}
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# Freqtrade Strategies Repository

This repository is dedicated to sharing open-source trading strategies for the Freqtrade cryptocurrency trading bot. We encourage contributors to help keep these strategies up to date with the latest Freqtrade versions and to add new strategies to benefit the community.

## About Freqtrade

[Freqtrade](https://www.freqtrade.io/) is an open-source cryptocurrency trading bot that allows users to create, backtest, and execute trading strategies on various cryptocurrency exchanges.

## Getting Started

### Prerequisites

Before you start contributing to this project, ensure you have the following:

- [Freqtrade](https://www.freqtrade.io/) installed on your machine.
- Basic knowledge of Python and Freqtrade.
- Familiarity with version control using Git.


================================================
FILE: strategies/ADXMomentum/ADXMomentum.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta


# --------------------------------


class ADXMomentum(IStrategy):
    """

    author@: Gert Wohlgemuth

    converted from:

        https://github.com/sthewissen/Mynt/blob/master/src/Mynt.Core/Strategies/AdxMomentum.cs

    """

    # Minimal ROI designed for the strategy.
    # adjust based on market conditions. We would recommend to keep it low for quick turn arounds
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "0": 0.01
    }

    # Optimal stoploss designed for the strategy
    stoploss = -0.25

    # Optimal timeframe for the strategy
    timeframe = '1h'

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 20

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['plus_di'] = ta.PLUS_DI(dataframe, timeperiod=25)
        dataframe['minus_di'] = ta.MINUS_DI(dataframe, timeperiod=25)
        dataframe['sar'] = ta.SAR(dataframe)
        dataframe['mom'] = ta.MOM(dataframe, timeperiod=14)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['adx'] > 25) &
                    (dataframe['mom'] > 0) &
                    (dataframe['plus_di'] > 25) &
                    (dataframe['plus_di'] > dataframe['minus_di'])

            ),
            'buy'] = 1
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['adx'] > 25) &
                    (dataframe['mom'] < 0) &
                    (dataframe['minus_di'] > 25) &
                    (dataframe['plus_di'] < dataframe['minus_di'])

            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/ADX_15M_USDT/ADX_15M_USDT.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# --------------------------------


class ADX_15M_USDT(IStrategy):
    ticker_interval = '15m'

    # ROI table:
    minimal_roi = {
        "0": 0.26552,
        "30": 0.10255,
        "210": 0.03545,
        "540": 0
    }

    # Stoploss:
    stoploss = -0.1255

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['plus_di'] = ta.PLUS_DI(dataframe, timeperiod=25)
        dataframe['minus_di'] = ta.MINUS_DI(dataframe, timeperiod=25)
        dataframe['sar'] = ta.SAR(dataframe)
        dataframe['mom'] = ta.MOM(dataframe, timeperiod=14)

        dataframe['sell-adx'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['sell-plus_di'] = ta.PLUS_DI(dataframe, timeperiod=25)
        dataframe['sell-minus_di'] = ta.MINUS_DI(dataframe, timeperiod=25)
        dataframe['sell-sar'] = ta.SAR(dataframe)
        dataframe['sell-mom'] = ta.MOM(dataframe, timeperiod=14)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['adx'] > 16) &
                    (dataframe['minus_di'] > 4) &
                    (dataframe['plus_di'] > 20) &
                    (qtpylib.crossed_above( dataframe['plus_di'],dataframe['minus_di']))

            ),
            'buy'] = 1
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['adx'] > 43) &
                    (dataframe['minus_di'] > 22) &
                    (dataframe['plus_di'] > 20) &
                    (qtpylib.crossed_above(dataframe['sell-minus_di'], dataframe['sell-plus_di']))

            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/ADX_15M_USDT2/ADX_15M_USDT2.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# --------------------------------


class ADX_15M_USDT2(IStrategy):
    ticker_interval = '15m'

    # ROI table:
    minimal_roi = {
        "0": 0.10313,
        "102": 0.07627,
        "275": 0.04228,
        "588": 0
    }

    # Stoploss:
    stoploss = -0.31941

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['plus_di'] = ta.PLUS_DI(dataframe, timeperiod=25)
        dataframe['minus_di'] = ta.MINUS_DI(dataframe, timeperiod=25)
        dataframe['sar'] = ta.SAR(dataframe)
        dataframe['mom'] = ta.MOM(dataframe, timeperiod=14)

        dataframe['sell-adx'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['sell-plus_di'] = ta.PLUS_DI(dataframe, timeperiod=25)
        dataframe['sell-minus_di'] = ta.MINUS_DI(dataframe, timeperiod=25)
        dataframe['sell-sar'] = ta.SAR(dataframe)
        dataframe['sell-mom'] = ta.MOM(dataframe, timeperiod=14)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    #(dataframe['adx'] > 45) &
                    #(dataframe['minus_di'] > 26) &
                    # (dataframe['plus_di'] > 33) &
                    (qtpylib.crossed_above(dataframe['minus_di'], dataframe['plus_di']))

            ),
            'buy'] = 1
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['adx'] > 91) &
                    # (dataframe['minus_di'] > 22) &
                    (dataframe['sell-minus_di'] > 91) &
                    #(dataframe['plus_di'] > 24) &
                    (qtpylib.crossed_above(dataframe['sell-plus_di'], dataframe['sell-minus_di']))

            ),
            'sell'] = 1
        return dataframe



================================================
FILE: strategies/ASDTSRockwellTrading/ASDTSRockwellTrading.py
================================================

# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from typing import Dict, List
from functools import reduce
from pandas import DataFrame
# --------------------------------

import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


class ASDTSRockwellTrading(IStrategy):
    """
    trading strategy based on the concept explained at https://www.youtube.com/watch?v=mmAWVmKN4J0
    author@: Gert Wohlgemuth

    idea:

        uptrend definition:
            MACD above 0 line AND above MACD signal


        downtrend definition:
            MACD below 0 line and below MACD signal

        sell definition:
            MACD below MACD signal

    it's basically a very simple MACD based strategy and we ignore the definition of the entry and exit points in this case, since the trading bot, will take of this already

    """

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "60":  0.01,
        "30":  0.03,
        "20":  0.04,
        "0":  0.05
    }

    # Optimal stoploss designed for the strategy
    # This attribute will be overridden if the config file contains "stoploss"
    stoploss = -0.3

    # Optimal timeframe for the strategy
    timeframe = '5m'

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        macd = ta.MACD(dataframe)
        dataframe['macd'] = macd['macd']
        dataframe['macdsignal'] = macd['macdsignal']
        dataframe['macdhist'] = macd['macdhist']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the buy signal for the given dataframe
        :param dataframe: DataFrame
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                (dataframe['macd'] > 0) &
                (dataframe['macd'] > dataframe['macdsignal'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the sell signal for the given dataframe
        :param dataframe: DataFrame
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                (dataframe['macd'] < dataframe['macdsignal'])
            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/ActionZone/ActionZone.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# flake8: noqa: F401
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy import IStrategy
from freqtrade.strategy import CategoricalParameter, DecimalParameter, IntParameter

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib
import datetime

class ActionZone(IStrategy):
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "0": 100000
    }

    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -1.00
    use_custom_stoploss = True

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured


    # Optimal timeframe for the strategy.
    timeframe = '1d'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Number of candles used for calculations in lowest price of period
    min_price_period: int = 14

    # max loss able for calculation position size
    max_loss_per_trade = 10 # USD

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    plot_config = {
        'main_plot': {
            'fastMA': {
                'color': 'red',
                'fill_to': 'slowMA',
                'fill_color': 'rgba(232, 232, 232,0.2)'
            }, 
            'slowMA': {
                'color': 'blue',
            },
        },
    }

    def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime, current_rate: float, current_profit: float, **kwargs) -> float:
        dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
        last_candle = dataframe.iloc[-1].squeeze()

        stoploss_price = last_candle['lowest']

        # Convert absolute price to percentage relative to current_rate
        if stoploss_price < current_rate:
            return (stoploss_price / current_rate) - 1

        # return maximum stoploss value, keeping current stoploss price unchanged
        return 1
    
    def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float, proposed_stake: float, min_stake: float, max_stake: float, **kwargs) -> float:
        dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
        last_candle = dataframe.iloc[-1].squeeze()

        stop_price = last_candle['lowest']
        volume_for_buy = self.max_loss_per_trade / (current_rate - stop_price)
        use_money = volume_for_buy * current_rate

        return use_money

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Adds several different TA indicators to the given DataFrame

        Performance Note: For the best performance be frugal on the number of indicators
        you are using. Let uncomment only the indicator you are using in your strategies
        or your hyperopt configuration, otherwise you will waste your memory and CPU usage.
        :param dataframe: Dataframe with data from the exchange
        :param metadata: Additional information, like the currently traded pair
        :return: a Dataframe with all mandatory indicators for the strategies
        """

        # MIN - Lowest value over a specified period
        lowest = ta.MIN(dataframe, timeperiod=self.min_price_period)
        dataframe['lowest'] = lowest

        # EMA - Exponential Moving Average
        fastEMA = ta.EMA(dataframe, timeperiod=12)
        slowEMA = ta.EMA(dataframe, timeperiod=26)
        dataframe['fastMA'] = fastEMA
        dataframe['slowMA'] = slowEMA


        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the buy signal for the given dataframe
        :param dataframe: DataFrame populated with indicators
        :param metadata: Additional information, like the currently traded pair
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                (dataframe['fastMA'] > dataframe['slowMA']) &  # Bull
                (dataframe['close'] > dataframe['fastMA'] ) & # Price Cross Up
                (dataframe['volume'] > 0)  # Make sure Volume is not 0
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the sell signal for the given dataframe
        :param dataframe: DataFrame populated with indicators
        :param metadata: Additional information, like the currently traded pair
        :return: DataFrame with sell column
        """
        dataframe.loc[
            (
                (dataframe['fastMA'] < dataframe['slowMA']) & # Bear
                (dataframe['close'] < dataframe['fastMA'] ) & # Price Cross Down
                (dataframe['volume'] > 0)  # Make sure Volume is not 0
            ),
            'sell'] = 1
        return dataframe
    
    



================================================
FILE: strategies/AdxSmas/AdxSmas.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# --------------------------------


class AdxSmas(IStrategy):
    """

    author@: Gert Wohlgemuth

    converted from:

    https://github.com/sthewissen/Mynt/blob/master/src/Mynt.Core/Strategies/AdxSmas.cs

    """

    # Minimal ROI designed for the strategy.
    # adjust based on market conditions. We would recommend to keep it low for quick turn arounds
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "0": 0.1
    }

    # Optimal stoploss designed for the strategy
    stoploss = -0.25

    # Optimal timeframe for the strategy
    timeframe = '1h'

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['short'] = ta.SMA(dataframe, timeperiod=3)
        dataframe['long'] = ta.SMA(dataframe, timeperiod=6)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['adx'] > 25) &
                    (qtpylib.crossed_above(dataframe['short'], dataframe['long']))

            ),
            'buy'] = 1
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['adx'] < 25) &
                    (qtpylib.crossed_above(dataframe['long'], dataframe['short']))

            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/AlligatorStrat/AlligatorStrat.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
# --------------------------------

import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


class AlligatorStrat(IStrategy):
    """

    author@: Gert Wohlgemuth

    idea:
        buys and sells on crossovers - doesn't really perfom that well and its just a proof of concept
    """

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "0": 0.1
        # "53": 0.06157,
        # "93": 0.0518,
        # "187": 0.03,
    }


    # Optimal stoploss designed for the strategy
    # This attribute will be overridden if the config file contains "stoploss"
    stoploss = -0.2

    # Optimal ticker interval for the strategy
    ticker_interval = '4h'

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:


        # CCIPeriod = 14
        # T3Period = 5
        # b = 0.618

        dataframe['SMAShort'] = ta.SMA(dataframe, timeperiod=5)
        dataframe['SMAMedium'] = ta.SMA(dataframe, timeperiod=8)
        dataframe['SMALong'] = ta.SMA(dataframe, timeperiod=13)

        macd = ta.MACD(dataframe)
        dataframe['macd'] = macd['macd']
        dataframe['macdsignal'] = macd['macdsignal']
        dataframe['macdhist'] = macd['macdhist']

        # b2 = b*b2b3 = b2 * b2c1 = -b3
        # c2 = (3 * (b2+b3))
        # c3 = -3 * (2*b2+b+b3)
        # c4 = (1+3*b+b3+3*b2)

        # nr = 1 + 0.5 * (T3period - 1)
        # w1 = 2 / (nr + 1)
        # w2 = 1 - w1

        # xcci = ta.CCI(CCIPeriod)




        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the buy signal for the given dataframe
        :param dataframe: DataFrame
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                #or cross above SMALong to be more conservative
                (
                qtpylib.crossed_above(dataframe['SMAShort'], dataframe['SMAMedium']) &
                ((dataframe['macd'] > -0.00001)) &
                (dataframe['macd'] > dataframe['macdsignal'])
                )
                |
                qtpylib.crossed_above(dataframe['macd'], dataframe['macdsignal'])
                # |
                # (
                # (dataframe['SMAShort'] > dataframe['SMAMedium']) &
                # ((dataframe['macd'] > -0.00006)) &
                # qtpylib.crossed_above(dataframe['macd'], dataframe['macdsignal'])
                # )
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the sell signal for the given dataframe
        :param dataframe: DataFrame
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                # qtpylib.crossed_below(dataframe['SMAShort'], dataframe['SMALong']) &
                ((dataframe['close'] < dataframe['SMAMedium']) &
                (dataframe['macd'] < dataframe['macdsignal'])
                )
                |
                qtpylib.crossed_below(dataframe['macd'], dataframe['macdsignal'])
                # (dataframe['cci'] >= 100.0)
            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/AlligatorStrategy/AlligatorStrategy.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# flake8: noqa: F401
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy import (BooleanParameter, CategoricalParameter, DecimalParameter,
                                IStrategy, IntParameter)

# --------------------------------
# Add your lib to import here
import ta


# This class is a sample. Feel free to customize it.
class AlligatorStrategy(IStrategy):
    """
    Sources
    Crypto Robot : https://www.youtube.com/watch?v=tHYs5135jUA
    Github : https://github.com/CryptoRobotFr/TrueStrategy/blob/main/AligatorStrategy/Aligator_Strategy_backtest.ipynb

    freqtrade backtesting -s AlligatorStrategy --timerange=20200903-20210826 --stake-amount unlimited -p EGLD/USDT --config user_data/config_binance.json --enable-position-stacking
    =============== SUMMARY METRICS ================
    | Metric                 | Value               |
    |------------------------+---------------------|
    | Backtesting from       | 2020-09-11 11:00:00 |
    | Backtesting to         | 2021-08-26 00:00:00 |
    | Max open trades        | 1                   |
    |                        |                     |
    | Total/Daily Avg Trades | 258 / 0.74          |
    | Starting balance       | 1000.000 USDT       |
    | Final balance          | 14245.054 USDT      |
    | Absolute profit        | 13245.054 USDT      |
    | Total profit %         | 1324.51%            |
    | Trades per day         | 0.74                |
    | Avg. daily profit %    | 3.81%               |
    | Avg. stake amount      | 829.268 USDT        |
    | Total trade volume     | 213951.164 USDT     |
    |                        |                     |
    | Best Pair              | EGLD/USDT 4287.66%  |
    | Worst Pair             | EGLD/USDT 4287.66%  |
    | Best trade             | EGLD/USDT 305.28%   |
    | Worst trade            | EGLD/USDT -10.69%   |
    | Best day               | 7078.313 USDT       |
    | Worst day              | -1052.860 USDT      |
    | Days win/draw/lose     | 8 / 275 / 19        |
    | Avg. Duration Winners  | 9 days, 18:58:00    |
    | Avg. Duration Loser    | 2 days, 9:00:00     |
    | Rejected Buy signals   | 3045                |
    |                        |                     |
    | Min balance            | 905.332 USDT        |
    | Max balance            | 16789.797 USDT      |
    | Drawdown               | 169.59%             |
    | Drawdown               | 2544.743 USDT       |
    | Drawdown high          | 15789.797 USDT      |
    | Drawdown low           | 13245.054 USDT      |
    | Drawdown Start         | 2021-08-12 18:00:00 |
    | Drawdown End           | 2021-08-24 18:00:00 |
    | Market change          | 497.97%             |
    ================================================

    You must keep:
    - the lib in the section "Do not remove these libs"
    - the methods: populate_indicators, populate_buy_trend, populate_sell_trend
    You should keep:
    - timeframe, minimal_roi, stoploss, trailing_*
    """
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "0": 100 # inactive
    }

    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.99 # inactive

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Hyperoptable parameters
    buy_stoch_rsi = DecimalParameter(0.5, 1, decimals=3, default=0.82, space="buy")
    sell_stoch_rsi = DecimalParameter(0, 0.5, decimals=3, default=0.2, space="sell")

    # Optimal timeframe for the strategy.
    timeframe = '1h'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count = 200 # EMA200

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    plot_config = {
        'main_plot': {
            'ema7':{},
            'ema30':{},
            'ema50':{},
            'ema100':{},
            'ema121':{},
            'ema200':{}
        },
        'subplots': {
            "STOCH RSI": {
                'stoch_rsi': {}
            }
        }
    }

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Adds several different TA indicators to the given DataFrame

        Performance Note: For the best performance be frugal on the number of indicators
        you are using. Let uncomment only the indicator you are using in your strategies
        or your hyperopt configuration, otherwise you will waste your memory and CPU usage.
        :param dataframe: Dataframe with data from the exchange
        :param metadata: Additional information, like the currently traded pair
        :return: a Dataframe with all mandatory indicators for the strategies
        """

        # Momentum Indicators
        # ------------------------------------

        # # Stochastic RSI
        dataframe['stoch_rsi'] = ta.momentum.stochrsi(close=dataframe['close'], window=14, smooth1=3, smooth2=3) #Non moyenné 

        # Overlap Studies
        # ------------------------------------

        # # EMA - Exponential Moving Average
        dataframe['ema7']=ta.trend.ema_indicator(close=dataframe['close'], window=7)
        dataframe['ema30']=ta.trend.ema_indicator(close=dataframe['close'], window=30)
        dataframe['ema50']=ta.trend.ema_indicator(close=dataframe['close'], window=50)
        dataframe['ema100']=ta.trend.ema_indicator(close=dataframe['close'], window=100)
        dataframe['ema121']=ta.trend.ema_indicator(close=dataframe['close'], window=121)
        dataframe['ema200']=ta.trend.ema_indicator(close=dataframe['close'], window=200)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the buy signal for the given dataframe
        :param dataframe: DataFrame populated with indicators
        :param metadata: Additional information, like the currently traded pair
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                (dataframe['ema7'] > dataframe['ema30']) &
                (dataframe['ema30'] > dataframe['ema50']) &
                (dataframe['ema50'] > dataframe['ema100']) &
                (dataframe['ema100'] > dataframe['ema121']) &
                (dataframe['ema121'] > dataframe['ema200']) &
                (dataframe['stoch_rsi'] < self.buy_stoch_rsi.value) &
                (dataframe['volume'] > 0)
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the sell signal for the given dataframe
        :param dataframe: DataFrame populated with indicators
        :param metadata: Additional information, like the currently traded pair
        :return: DataFrame with sell column
        """
        dataframe.loc[
            (
                (dataframe['ema121'] > dataframe['ema7']) &
                (dataframe['stoch_rsi'] > self.sell_stoch_rsi.value) &
                (dataframe['volume'] > 0)
            ),
            'sell'] = 1
        return dataframe

================================================
FILE: strategies/AlwaysBuy/AlwaysBuy.py
================================================
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame


class AlwaysBuy(IStrategy):

    INTERFACE_VERSION = 3

    # ROI table:
    # fmt: off
    minimal_roi = {
        "0": 1,
        "100": 2,
        "200": 3,
        "300": -1
        }
    # fmt: on

    # Stoploss:
    stoploss = -0.2

    # Trailing stop:
    trailing_stop = False
    trailing_stop_positive = 0.005
    trailing_stop_positive_offset = 0.03
    trailing_only_offset_is_reached = True
    # Buy hypers
    timeframe = "5m"
    use_exit_signal = False
    # #################### END OF RESULT PLACE ####################

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe.loc[:, ["enter_long", "enter_tag"]] = (1, "entry_reason")

        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        return dataframe


================================================
FILE: strategies/Apollo11/Apollo11.py
================================================
from datetime import datetime
from datetime import timedelta
from functools import reduce

import freqtrade.vendor.qtpylib.indicators as qtpylib
import talib.abstract as ta
from freqtrade.persistence import Trade
from freqtrade.strategy import IStrategy
from pandas import DataFrame


def to_minutes(**timdelta_kwargs):
    return int(timedelta(**timdelta_kwargs).total_seconds() / 60)


class Apollo11(IStrategy):
    # Strategy created by Shane Jones https://twitter.com/shanejones
    #
    # Assited by a number of contributors https://github.com/shanejones/goddard/graphs/contributors
    #
    # Original repo hosted at https://github.com/shanejones/goddard
    timeframe = "15m"

    # Stoploss
    stoploss = -0.16
    startup_candle_count: int = 480
    trailing_stop = False
    use_custom_stoploss = True
    use_sell_signal = False

    # signal controls
    buy_signal_1 = True
    buy_signal_2 = True
    buy_signal_3 = True

    # ROI table:
    minimal_roi = {
        "0": 10,  # This is 10000%, which basically disables ROI
    }

    # Indicator values:

    # Signal 1
    s1_ema_xs = 3
    s1_ema_sm = 5
    s1_ema_md = 10
    s1_ema_xl = 50
    s1_ema_xxl = 240

    # Signal 2
    s2_ema_input = 50
    s2_ema_offset_input = -1

    s2_bb_sma_length = 49
    s2_bb_std_dev_length = 64
    s2_bb_lower_offset = 3

    s2_fib_sma_len = 50
    s2_fib_atr_len = 14

    s2_fib_lower_value = 4.236

    s3_ema_long = 50
    s3_ema_short = 20
    s3_ma_fast = 10
    s3_ma_slow = 20

    @property
    def protections(self):
        return [
            {
                # Don't enter a trade right after selling a trade.
                "method": "CooldownPeriod",
                "stop_duration": to_minutes(minutes=0),
            },
            {
                # Stop trading if max-drawdown is reached.
                "method": "MaxDrawdown",
                "lookback_period": to_minutes(hours=12),
                "trade_limit": 20,  # Considering all pairs that have a minimum of 20 trades
                "stop_duration": to_minutes(hours=1),
                "max_allowed_drawdown": 0.2,  # If max-drawdown is > 20% this will activate
            },
            {
                # Stop trading if a certain amount of stoploss occurred within a certain time window.
                "method": "StoplossGuard",
                "lookback_period": to_minutes(hours=6),
                "trade_limit": 4,  # Considering all pairs that have a minimum of 4 trades
                "stop_duration": to_minutes(minutes=30),
                "only_per_pair": False,  # Looks at all pairs
            },
            {
                # Lock pairs with low profits
                "method": "LowProfitPairs",
                "lookback_period": to_minutes(hours=1, minutes=30),
                "trade_limit": 2,  # Considering all pairs that have a minimum of 2 trades
                "stop_duration": to_minutes(hours=15),
                "required_profit": 0.02,  # If profit < 2% this will activate for a pair
            },
            {
                # Lock pairs with low profits
                "method": "LowProfitPairs",
                "lookback_period": to_minutes(hours=6),
                "trade_limit": 4,  # Considering all pairs that have a minimum of 4 trades
                "stop_duration": to_minutes(minutes=30),
                "required_profit": 0.01,  # If profit < 1% this will activate for a pair
            },
        ]

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        # Adding EMA's into the dataframe
        dataframe["s1_ema_xs"] = ta.EMA(dataframe, timeperiod=self.s1_ema_xs)
        dataframe["s1_ema_sm"] = ta.EMA(dataframe, timeperiod=self.s1_ema_sm)
        dataframe["s1_ema_md"] = ta.EMA(dataframe, timeperiod=self.s1_ema_md)
        dataframe["s1_ema_xl"] = ta.EMA(dataframe, timeperiod=self.s1_ema_xl)
        dataframe["s1_ema_xxl"] = ta.EMA(dataframe, timeperiod=self.s1_ema_xxl)

        s2_ema_value = ta.EMA(dataframe, timeperiod=self.s2_ema_input)
        s2_ema_xxl_value = ta.EMA(dataframe, timeperiod=200)
        dataframe["s2_ema"] = s2_ema_value - s2_ema_value * self.s2_ema_offset_input
        dataframe["s2_ema_xxl_off"] = s2_ema_xxl_value - s2_ema_xxl_value * self.s2_fib_lower_value
        dataframe["s2_ema_xxl"] = ta.EMA(dataframe, timeperiod=200)

        s2_bb_sma_value = ta.SMA(dataframe, timeperiod=self.s2_bb_sma_length)
        s2_bb_std_dev_value = ta.STDDEV(dataframe, self.s2_bb_std_dev_length)
        dataframe["s2_bb_std_dev_value"] = s2_bb_std_dev_value
        dataframe["s2_bb_lower_band"] = s2_bb_sma_value - (s2_bb_std_dev_value * self.s2_bb_lower_offset)

        s2_fib_atr_value = ta.ATR(dataframe, timeframe=self.s2_fib_atr_len)
        s2_fib_sma_value = ta.SMA(dataframe, timeperiod=self.s2_fib_sma_len)

        dataframe["s2_fib_lower_band"] = s2_fib_sma_value - s2_fib_atr_value * self.s2_fib_lower_value

        s3_bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=3)
        dataframe["s3_bb_lowerband"] = s3_bollinger["lower"]

        dataframe["s3_ema_long"] = ta.EMA(dataframe, timeperiod=self.s3_ema_long)
        dataframe["s3_ema_short"] = ta.EMA(dataframe, timeperiod=self.s3_ema_short)
        dataframe["s3_fast_ma"] = ta.EMA(dataframe["volume"] * dataframe["close"], self.s3_ma_fast) / ta.EMA(
            dataframe["volume"], self.s3_ma_fast
        )
        dataframe["s3_slow_ma"] = ta.EMA(dataframe["volume"] * dataframe["close"], self.s3_ma_slow) / ta.EMA(
            dataframe["volume"], self.s3_ma_slow
        )

        # Volume weighted MACD
        dataframe["fastMA"] = ta.EMA(dataframe["volume"] * dataframe["close"], 12) / ta.EMA(dataframe["volume"], 12)
        dataframe["slowMA"] = ta.EMA(dataframe["volume"] * dataframe["close"], 26) / ta.EMA(dataframe["volume"], 26)
        dataframe["vwmacd"] = dataframe["fastMA"] - dataframe["slowMA"]
        dataframe["signal"] = ta.EMA(dataframe["vwmacd"], 9)
        dataframe["hist"] = dataframe["vwmacd"] - dataframe["signal"]

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # basic buy methods to keep the strategy simple

        if self.buy_signal_1:
            conditions = [
                dataframe["vwmacd"] < dataframe["signal"],
                dataframe["low"] < dataframe["s1_ema_xxl"],
                dataframe["close"] > dataframe["s1_ema_xxl"],
                qtpylib.crossed_above(dataframe["s1_ema_sm"], dataframe["s1_ema_md"]),
                dataframe["s1_ema_xs"] < dataframe["s1_ema_xl"],
                dataframe["volume"] > 0,
            ]
            dataframe.loc[reduce(lambda x, y: x & y, conditions), ["buy", "buy_tag"]] = (1, "buy_signal_1")

        if self.buy_signal_2:
            conditions = [
                qtpylib.crossed_above(dataframe["s2_fib_lower_band"], dataframe["s2_bb_lower_band"]),
                dataframe["close"] < dataframe["s2_ema"],
                dataframe["volume"] > 0,
            ]
            dataframe.loc[reduce(lambda x, y: x & y, conditions), ["buy", "buy_tag"]] = (1, "buy_signal_2")

        if self.buy_signal_3:
            conditions = [
                dataframe["low"] < dataframe["s3_bb_lowerband"],
                dataframe["high"] > dataframe["s3_slow_ma"],
                dataframe["high"] < dataframe["s3_ema_long"],
                dataframe["volume"] > 0,
            ]
            dataframe.loc[reduce(lambda x, y: x & y, conditions), ["buy", "buy_tag"]] = (1, "buy_signal_3")

        if not all([self.buy_signal_1, self.buy_signal_2, self.buy_signal_3]):
            dataframe.loc[(), "buy"] = 0

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # This is essentailly ignored as we're using strict ROI / Stoploss / TTP sale scenarios
        dataframe.loc[(), "sell"] = 0
        return dataframe

    def custom_stoploss(
        self, pair: str, trade: Trade, current_time: datetime, current_rate: float, current_profit: float, **kwargs
    ) -> float:

        if current_profit > 0.2:
            return 0.04
        if current_profit > 0.1:
            return 0.03
        if current_profit > 0.06:
            return 0.02
        if current_profit > 0.03:
            return 0.01

        # Let's try to minimize the loss
        if current_profit <= -0.10:
            if trade.open_date_utc + timedelta(hours=60) < current_time:
                # After 60H since buy
                return current_profit / 1.75

        if current_profit <= -0.08:
            if trade.open_date_utc + timedelta(hours=120) < current_time:
                # After 120H since buy
                return current_profit / 1.70

        return -1


================================================
FILE: strategies/AverageStrategy/AverageStrategy.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
# --------------------------------

import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


class AverageStrategy(IStrategy):
    """

    author@: Gert Wohlgemuth

    idea:
        buys and sells on crossovers - doesn't really perfom that well and its just a proof of concept
    """

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "0": 0.5
    }

    # Optimal stoploss designed for the strategy
    # This attribute will be overridden if the config file contains "stoploss"
    stoploss = -0.2

    # Optimal timeframe for the strategy
    timeframe = '4h'

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe['maShort'] = ta.EMA(dataframe, timeperiod=8)
        dataframe['maMedium'] = ta.EMA(dataframe, timeperiod=21)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the buy signal for the given dataframe
        :param dataframe: DataFrame
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                qtpylib.crossed_above(dataframe['maShort'], dataframe['maMedium'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the sell signal for the given dataframe
        :param dataframe: DataFrame
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                qtpylib.crossed_above(dataframe['maMedium'], dataframe['maShort'])
            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/AwesomeMacd/AwesomeMacd.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# --------------------------------


class AwesomeMacd(IStrategy):
    """

    author@: Gert Wohlgemuth

    converted from:

    https://github.com/sthewissen/Mynt/blob/master/src/Mynt.Core/Strategies/AwesomeMacd.cs

    """

    # Minimal ROI designed for the strategy.
    # adjust based on market conditions. We would recommend to keep it low for quick turn arounds
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "0": 0.1
    }

    # Optimal stoploss designed for the strategy
    stoploss = -0.25

    # Optimal timeframe for the strategy
    timeframe = '1h'

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['adx'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['ao'] = qtpylib.awesome_oscillator(dataframe)

        macd = ta.MACD(dataframe)
        dataframe['macd'] = macd['macd']
        dataframe['macdsignal'] = macd['macdsignal']
        dataframe['macdhist'] = macd['macdhist']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['macd'] > 0) &
                    (dataframe['ao'] > 0) &
                    (dataframe['ao'].shift() < 0)

            ),
            'buy'] = 1
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['macd'] < 0) &
                    (dataframe['ao'] < 0) &
                    (dataframe['ao'].shift() > 0)

            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/BBMod1/BBMod1.py
================================================
# --- Do not remove these libs ---
import freqtrade.vendor.qtpylib.indicators as qtpylib
import numpy as np
import talib.abstract as ta
import pandas_ta as pta

from freqtrade.persistence import Trade
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame, Series
from datetime import datetime
from freqtrade.strategy import merge_informative_pair, DecimalParameter, IntParameter, stoploss_from_open
from functools import reduce
from technical.indicators import RMI, zema, VIDYA


# --------------------------------
def ha_typical_price(bars):
    res = (bars['ha_high'] + bars['ha_low'] + bars['ha_close']) / 3.
    return Series(index=bars.index, data=res)


# Volume Weighted Moving Average
def vwma(dataframe: DataFrame, length: int = 10):
    """Indicator: Volume Weighted Moving Average (VWMA)"""
    # Calculate Result
    pv = dataframe['close'] * dataframe['volume']
    vwma = Series(ta.SMA(pv, timeperiod=length) / ta.SMA(dataframe['volume'], timeperiod=length))
    return vwma


# Modified Elder Ray Index
def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
    slow_ma = Series(ta.EMA(vwma(dataframe, length=len_slow_ma), timeperiod=len_slow_ma))
    return slow_ma >= slow_ma.shift(1)  # we just need true & false for ERI trend


def EWO(dataframe, ema_length=5, ema2_length=35):
    df = dataframe.copy()
    ema1 = ta.EMA(df, timeperiod=ema_length)
    ema2 = ta.EMA(df, timeperiod=ema2_length)
    emadif = (ema1 - ema2) / df['low'] * 100
    return emadif


def range_percent_change(dataframe: DataFrame, method, length: int) -> float:
    """
    Rolling Percentage Change Maximum across interval.

    :param dataframe: DataFrame The original OHLC dataframe
    :param method: High to Low / Open to Close
    :param length: int The length to look back
    """
    if method == 'HL':
        return (dataframe['high'].rolling(length).max() - dataframe['low'].rolling(length).min()) / dataframe[
            'low'].rolling(length).min()
    elif method == 'OC':
        return (dataframe['open'].rolling(length).max() - dataframe['close'].rolling(length).min()) / dataframe[
            'close'].rolling(length).min()
    else:
        raise ValueError(f"Method {method} not defined!")


# Williams %R
def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
    """Williams %R, or just %R, is a technical analysis oscillator showing the current closing price in relation to the
       high and low of the past N days (for a given N). It was developed by a publisher and promoter of trading
       materials, Larry Williams.Its purpose is to tell whether a stock or commodity market is trading near the high or
       the low, or somewhere in between,of its recent trading range.The oscillator is on a negative scale, from
       −100 (lowest) up to 0 (highest).
    """

    highest_high = dataframe["high"].rolling(center=False, window=period).max()
    lowest_low = dataframe["low"].rolling(center=False, window=period).min()

    wr = Series(
        (highest_high - dataframe["close"]) / (highest_high - lowest_low),
        name=f"{period} Williams %R",
        )

    return wr * -100


# Chaikin Money Flow
def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
    """Chaikin Money Flow (CMF)
    It measures the amount of Money Flow Volume over a specific period.
    http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:chaikin_money_flow_cmf
    Args:
        dataframe(pandas.Dataframe): dataframe containing ohlcv
        n(int): n period.
        fillna(bool): if fill nan values.
    Returns:
        pandas.Series: New feature generated.
    """
    mfv = ((dataframe['close'] - dataframe['low']) - (dataframe['high'] - dataframe['close'])) / (
                dataframe['high'] - dataframe['low'])
    mfv = mfv.fillna(0.0)  # float division by zero
    mfv *= dataframe['volume']
    cmf = (mfv.rolling(n, min_periods=0).sum()
           / dataframe['volume'].rolling(n, min_periods=0).sum())
    if fillna:
        cmf = cmf.replace([np.inf, -np.inf], np.nan).fillna(0)
    return Series(cmf, name='cmf')


def vmap_b(dataframe, window_size=20, num_of_std=1):
    df = dataframe.copy()
    df['vwap'] = qtpylib.rolling_vwap(df, window=window_size)
    rolling_std = df['vwap'].rolling(window=window_size).std()
    df['vwap_low'] = df['vwap'] - (rolling_std * num_of_std)
    df['vwap_high'] = df['vwap'] + (rolling_std * num_of_std)
    return df['vwap_low'], df['vwap'], df['vwap_high']


def top_percent_change(dataframe: DataFrame, length: int) -> float:
    """
    Percentage change of the current close from the range maximum Open price

    :param dataframe: DataFrame The original OHLC dataframe
    :param length: int The length to look back
    """
    if length == 0:
        return (dataframe['open'] - dataframe['close']) / dataframe['close']
    else:
        return (dataframe['open'].rolling(length).max() - dataframe['close']) / dataframe['close']


class BBMod1(IStrategy):
    """
        BBMod1 modified from BB_RPB_TSL ( https://github.com/jilv220/BB_RPB_TSL )
        @author jilv220
        Simple bollinger brand strategy inspired by this blog  ( https://hacks-for-life.blogspot.com/2020/12/freqtrade
        -notes.html )RPB, which stands for Real Pull Back, taken from ( https://github.com/GeorgeMurAlkh/freqtrade-stuff
        /blob/main/user_data/strategies/TheRealPullbackV2.py )The trailing custom stoploss taken from BigZ04_TSL from
        Perkmeister ( modded by ilya )I modified it to better suit my taste and added Hyperopt for this strategy.
    """

    # buy space
    buy_params = {
        ##
        "buy_bb_width_1h": 0.954,
        "buy_roc_1h": 86,
        ##
        "buy_threshold": 0.003,
        "buy_bb_factor": 0.999,
        #
        "buy_bb_delta": 0.025,
        "buy_bb_width": 0.095,
        ##
        "buy_cci": -116,
        "buy_cci_length": 25,
        "buy_rmi": 49,
        "buy_rmi_length": 17,
        "buy_srsi_fk": 32,
        ##
        # rng
        "buy_closedelta": 12.148,
        # rng
        "buy_ema_diff": 0.022,
        ##
        "buy_ema_high": 0.968,
        "buy_ema_low": 0.935,
        "buy_ewo": -5.001,
        "buy_rsi": 23,
        "buy_rsi_fast": 44,
        ##
        "buy_ema_high_2": 1.087,
        "buy_ema_low_2": 0.970,
        "buy_ewo_high_2": 4.179,
        "buy_rsi_ewo_2": 35,
        "buy_rsi_fast_ewo_2": 45,
        ##
        "buy_closedelta_local_dip": 12.044,
        "buy_ema_diff_local_dip": 0.024,
        "buy_ema_high_local_dip": 1.014,
        "buy_rsi_local_dip": 21,
        ##
        "buy_r_deadfish_bb_factor": 1.014,
        "buy_r_deadfish_bb_width": 0.299,
        "buy_r_deadfish_ema": 1.054,
        "buy_r_deadfish_volume_factor": 1.59,
        "buy_r_deadfish_cti": -0.115,
        "buy_r_deadfish_r14": -44.34,
        ##
        "buy_clucha_bbdelta_close": 0.01889,
        "buy_clucha_bbdelta_tail": 0.72235,
        "buy_clucha_close_bblower": 0.0127,
        "buy_clucha_closedelta_close": 0.00916,
        "buy_clucha_rocr_1h": 0.79492,
        ##
        "buy_adx": 13,
        "buy_cofi_r14": -85.016,
        "buy_cofi_cti": -0.892,
        "buy_ema_cofi": 1.147,
        "buy_ewo_high": 8.594,
        "buy_fastd": 28,
        "buy_fastk": 39,
        ##
        "buy_gumbo_ema": 1.121,
        "buy_gumbo_ewo_low": -9.442,
        "buy_gumbo_cti": -0.374,
        "buy_gumbo_r14": -51.971,
        ##
        "buy_sqzmom_ema": 0.981,
        "buy_sqzmom_ewo": -3.966,
        "buy_sqzmom_r14": -45.068,
        ##
        "buy_nfix_39_ema": 0.912,
        ##
        "buy_nfix_49_cti": -0.105,
        "buy_nfix_49_r14": -81.827,
    }

    # sell space
    sell_params = {
        ##
        "sell_cmf": -0.046,
        "sell_ema": 0.988,
        "sell_ema_close_delta": 0.022,
        ##
        "sell_deadfish_profit": -0.063,
        "sell_deadfish_bb_factor": 0.954,
        "sell_deadfish_bb_width": 0.043,
        "sell_deadfish_volume_factor": 2.37,
        ##
        "sell_cti_r_cti": 0.844,
        "sell_cti_r_r": -19.99,

        "high_offset_2": 0.997,

        "pHSL": -0.99,
        "pPF_1": 0.019,
        "pPF_2": 0.05,
        "pSL_1": 0.017,
        "pSL_2": 0.045,
    }

    minimal_roi = {
        "0": 100
    }

    # Optimal timeframe for the strategy
    timeframe = '5m'
    inf_1h = '1h'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = True
    startup_candle_count = 120

    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'emergencysell': 'limit',
        'forcebuy': "limit",
        'forcesell': 'limit',
        'stoploss': 'limit',
        'stoploss_on_exchange': False,

        'stoploss_on_exchange_interval': 60,
        'stoploss_on_exchange_limit_ratio': 0.99
    }

    # Disabled
    stoploss = -0.99

    # Custom stoploss
    use_custom_stoploss = True
    use_sell_signal = True

    lower_trailing_list = ["vwap", "clucHA", "clucHA2", "nfi_38", "nfi7_33", "nfi7_37", "cofi"]

    ############################################################################

    # Buy params
    is_optimize_dip = False
    buy_rmi = IntParameter(30, 50, default=35, optimize=is_optimize_dip)
    buy_cci = IntParameter(-135, -90, default=-133, optimize=is_optimize_dip)
    buy_srsi_fk = IntParameter(30, 50, default=25, optimize=is_optimize_dip)
    buy_cci_length = IntParameter(25, 45, default=25, optimize=is_optimize_dip)
    buy_rmi_length = IntParameter(8, 20, default=8, optimize=is_optimize_dip)

    is_optimize_break = False
    buy_bb_width = DecimalParameter(0.065, 0.135, default=0.095, optimize=is_optimize_break)
    buy_bb_delta = DecimalParameter(0.018, 0.035, default=0.025, optimize=is_optimize_break)

    is_optimize_local_uptrend = False
    buy_ema_diff = DecimalParameter(0.022, 0.027, default=0.025, optimize=is_optimize_local_uptrend)
    buy_bb_factor = DecimalParameter(0.990, 0.999, default=0.995, optimize=False)
    buy_closedelta = DecimalParameter(12.0, 18.0, default=15.0, optimize=is_optimize_local_uptrend)

    is_optimize_local_dip = False
    buy_ema_diff_local_dip = DecimalParameter(0.022, 0.027, default=0.025, optimize=is_optimize_local_dip)
    buy_ema_high_local_dip = DecimalParameter(0.90, 1.2, default=0.942, optimize=is_optimize_local_dip)
    buy_closedelta_local_dip = DecimalParameter(12.0, 18.0, default=15.0, optimize=is_optimize_local_dip)
    buy_rsi_local_dip = IntParameter(15, 45, default=28, optimize=is_optimize_local_dip)
    buy_crsi_local_dip = IntParameter(10, 18, default=10, optimize=False)

    is_optimize_ewo = False
    buy_rsi_fast = IntParameter(35, 50, default=45, optimize=is_optimize_ewo)
    buy_rsi = IntParameter(15, 35, default=35, optimize=is_optimize_ewo)
    buy_ewo = DecimalParameter(-6.0, 5, default=-5.585, optimize=is_optimize_ewo)
    buy_ema_low = DecimalParameter(0.9, 0.99, default=0.942, optimize=is_optimize_ewo)
    buy_ema_high = DecimalParameter(0.95, 1.2, default=1.084, optimize=is_optimize_ewo)

    is_optimize_ewo_2 = False
    buy_rsi_fast_ewo_2 = IntParameter(15, 50, default=45, optimize=is_optimize_ewo_2)
    buy_rsi_ewo_2 = IntParameter(15, 50, default=35, optimize=is_optimize_ewo_2)
    buy_ema_low_2 = DecimalParameter(0.90, 1.2, default=0.970, optimize=is_optimize_ewo_2)
    buy_ema_high_2 = DecimalParameter(0.90, 1.2, default=1.087, optimize=is_optimize_ewo_2)
    buy_ewo_high_2 = DecimalParameter(2, 12, default=4.179, optimize=is_optimize_ewo_2)

    is_optimize_r_deadfish = False
    buy_r_deadfish_ema = DecimalParameter(0.90, 1.2, default=1.087, optimize=is_optimize_r_deadfish)
    buy_r_deadfish_bb_width = DecimalParameter(0.03, 0.75, default=0.05, optimize=is_optimize_r_deadfish)
    buy_r_deadfish_bb_factor = DecimalParameter(0.90, 1.2, default=1.0, optimize=is_optimize_r_deadfish)
    buy_r_deadfish_volume_factor = DecimalParameter(1, 2.5, default=1.0, optimize=is_optimize_r_deadfish)

    is_optimize_r_deadfish_protection = False
    buy_r_deadfish_cti = DecimalParameter(-0.6, -0.0, default=-0.5, optimize=is_optimize_r_deadfish_protection)
    buy_r_deadfish_r14 = DecimalParameter(-60, -44, default=-60, optimize=is_optimize_r_deadfish_protection)

    is_optimize_clucha = False
    buy_clucha_bbdelta_close = DecimalParameter(0.01, 0.05, default=0.02206, optimize=is_optimize_clucha)
    buy_clucha_bbdelta_tail = DecimalParameter(0.7, 1.2, default=1.02515, optimize=is_optimize_clucha)
    buy_clucha_closedelta_close = DecimalParameter(0.001, 0.05, default=0.04401, optimize=is_optimize_clucha)
    buy_clucha_rocr_1h = DecimalParameter(0.1, 1.0, default=0.47782, optimize=is_optimize_clucha)
    buy_clucha_close_bblower = DecimalParameter(0.0005, 0.02, default=0.00799, optimize=is_optimize_clucha)

    is_optimize_cofi = False
    buy_ema_cofi = DecimalParameter(0.94, 1.2, default=0.97, optimize=is_optimize_cofi)
    buy_fastk = IntParameter(0, 40, default=20, optimize=is_optimize_cofi)
    buy_fastd = IntParameter(0, 40, default=20, optimize=is_optimize_cofi)
    buy_adx = IntParameter(0, 30, default=30, optimize=is_optimize_cofi)
    buy_ewo_high = DecimalParameter(2, 12, default=3.553, optimize=is_optimize_cofi)

    is_optimize_cofi_protection = False
    buy_cofi_cti = DecimalParameter(-0.9, -0.0, default=-0.5, optimize=is_optimize_cofi_protection)
    buy_cofi_r14 = DecimalParameter(-100, -44, default=-60, optimize=is_optimize_cofi_protection)

    is_optimize_gumbo = False
    buy_gumbo_ema = DecimalParameter(0.9, 1.2, default=0.97, optimize=is_optimize_gumbo)
    buy_gumbo_ewo_low = DecimalParameter(-12.0, 5, default=-5.585, optimize=is_optimize_gumbo)

    is_optimize_gumbo_protection = False
    buy_gumbo_cti = DecimalParameter(-0.9, -0.0, default=-0.5, optimize=is_optimize_gumbo_protection)
    buy_gumbo_r14 = DecimalParameter(-100, -44, default=-60, optimize=is_optimize_gumbo_protection)

    is_optimize_sqzmom_protection = False
    buy_sqzmom_ema = DecimalParameter(0.9, 1.2, default=0.97, optimize=is_optimize_sqzmom_protection)
    buy_sqzmom_ewo = DecimalParameter(-12, 12, default=0, optimize=is_optimize_sqzmom_protection)
    buy_sqzmom_r14 = DecimalParameter(-100, -22, default=-50, optimize=is_optimize_sqzmom_protection)

    is_optimize_nfix_39 = True
    buy_nfix_39_ema = DecimalParameter(0.9, 1.2, default=0.97, optimize=is_optimize_nfix_39)

    is_optimize_nfix_49_protection = False
    buy_nfix_49_cti = DecimalParameter(-0.9, -0.0, default=-0.5, optimize=is_optimize_nfix_49_protection)
    buy_nfix_49_r14 = DecimalParameter(-100, -44, default=-60, optimize=is_optimize_nfix_49_protection)

    is_optimize_btc_safe = False
    buy_btc_safe = IntParameter(-300, 50, default=-200, optimize=is_optimize_btc_safe)
    buy_btc_safe_1d = DecimalParameter(-0.075, -0.025, default=-0.05, optimize=is_optimize_btc_safe)
    buy_threshold = DecimalParameter(0.003, 0.012, default=0.008, optimize=is_optimize_btc_safe)

    is_optimize_check = False
    buy_roc_1h = IntParameter(-25, 200, default=10, optimize=is_optimize_check)
    buy_bb_width_1h = DecimalParameter(0.3, 2.0, default=0.3, optimize=is_optimize_check)

    # Sell params
    sell_btc_safe = IntParameter(-400, -300, default=-365, optimize=False)

    is_optimize_sell_stoploss = False
    sell_cmf = DecimalParameter(-0.4, 0.0, default=0.0, optimize=is_optimize_sell_stoploss)
    sell_ema_close_delta = DecimalParameter(0.022, 0.027, default=0.024, optimize=is_optimize_sell_stoploss)
    sell_ema = DecimalParameter(0.97, 0.99, default=0.987, optimize=is_optimize_sell_stoploss)

    is_optimize_deadfish = False
    sell_deadfish_bb_width = DecimalParameter(0.03, 0.75, default=0.05, optimize=is_optimize_deadfish)
    sell_deadfish_profit = DecimalParameter(-0.15, -0.05, default=-0.05, optimize=is_optimize_deadfish)
    sell_deadfish_bb_factor = DecimalParameter(0.90, 1.20, default=1.0, optimize=is_optimize_deadfish)
    sell_deadfish_volume_factor = DecimalParameter(1, 2.5, default=1.0, optimize=is_optimize_deadfish)

    is_optimize_bleeding = False
    sell_bleeding_cti = DecimalParameter(-0.9, -0.0, default=-0.5, optimize=is_optimize_bleeding)
    sell_bleeding_r14 = DecimalParameter(-100, -44, default=-60, optimize=is_optimize_bleeding)
    sell_bleeding_volume_factor = DecimalParameter(1, 2.5, default=1.0, optimize=is_optimize_bleeding)

    is_optimize_cti_r = False
    sell_cti_r_cti = DecimalParameter(0.55, 1, default=0.5, optimize=is_optimize_cti_r)
    sell_cti_r_r = DecimalParameter(-15, 0, default=-20, optimize=is_optimize_cti_r)

    # rng sell
    high_offset_2 = DecimalParameter(0.99, 1.5, default=sell_params['high_offset_2'], space='sell', optimize=True)

    # hard stoploss profit
    pHSL = DecimalParameter(-0.200, -0.040, default=-0.08, decimals=3, space='sell', load=True)
    # profit threshold 1, trigger point, SL_1 is used
    pPF_1 = DecimalParameter(0.008, 0.020, default=0.016, decimals=3, space='sell', load=True)
    pSL_1 = DecimalParameter(0.008, 0.020, default=0.011, decimals=3, space='sell', load=True)

    # profit threshold 2, SL_2 is used
    pPF_2 = DecimalParameter(0.040, 0.100, default=0.080, decimals=3, space='sell', load=True)
    pSL_2 = DecimalParameter(0.020, 0.070, default=0.040, decimals=3, space='sell', load=True)

    ############################################################################

    def informative_pairs(self):

        pairs = self.dp.current_whitelist()
        informative_pairs = [(pair, '1h') for pair in pairs]

        return informative_pairs

    def informative_1h_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        assert self.dp, "DataProvider is required for multiple timeframes."
        # Get the informative pair
        informative_1h = self.dp.get_pair_dataframe(pair=metadata['pair'], timeframe=self.inf_1h)

        # EMA
        informative_1h['ema_8'] = ta.EMA(informative_1h, timeperiod=8)
        informative_1h['ema_50'] = ta.EMA(informative_1h, timeperiod=50)
        informative_1h['ema_100'] = ta.EMA(informative_1h, timeperiod=100)
        informative_1h['ema_200'] = ta.EMA(informative_1h, timeperiod=200)

        # CTI
        informative_1h['cti'] = pta.cti(informative_1h["close"], length=20)
        informative_1h['cti_40'] = pta.cti(informative_1h["close"], length=40)

        # CRSI (3, 2, 100)
        crsi_closechange = informative_1h['close'] / informative_1h['close'].shift(1)
        crsi_updown = np.where(crsi_closechange.gt(1), 1.0, np.where(crsi_closechange.lt(1), -1.0, 0.0))
        informative_1h['crsi'] = (ta.RSI(informative_1h['close'], timeperiod=3) + ta.RSI(crsi_updown, timeperiod=2) +
                                  ta.ROC(informative_1h['close'], 100)) / 3

        # Williams %R
        informative_1h['r_96'] = williams_r(informative_1h, period=96)
        informative_1h['r_480'] = williams_r(informative_1h, period=480)

        # Bollinger bands
        bollinger2 = qtpylib.bollinger_bands(qtpylib.typical_price(informative_1h), window=20, stds=2)
        informative_1h['bb_lowerband2'] = bollinger2['lower']
        informative_1h['bb_middleband2'] = bollinger2['mid']
        informative_1h['bb_upperband2'] = bollinger2['upper']
        informative_1h['bb_width'] = ((informative_1h['bb_upperband2'] - informative_1h['bb_lowerband2']) /
                                      informative_1h['bb_middleband2'])

        # ROC
        informative_1h['roc'] = ta.ROC(dataframe, timeperiod=9)

        # MOMDIV
        mom = momdiv(informative_1h)
        informative_1h['momdiv_buy'] = mom['momdiv_buy']
        informative_1h['momdiv_sell'] = mom['momdiv_sell']
        informative_1h['momdiv_coh'] = mom['momdiv_coh']
        informative_1h['momdiv_col'] = mom['momdiv_col']

        # RSI
        informative_1h['rsi'] = ta.RSI(informative_1h, timeperiod=14)

        # CMF
        informative_1h['cmf'] = chaikin_money_flow(informative_1h, 20)

        # Heikin Ashi
        inf_heikinashi = qtpylib.heikinashi(informative_1h)
        informative_1h['ha_close'] = inf_heikinashi['close']
        informative_1h['rocr'] = ta.ROCR(informative_1h['ha_close'], timeperiod=168)

        # T3 Average
        informative_1h['T3'] = t3(informative_1h)

        # Elliot
        informative_1h['EWO'] = EWO(informative_1h, 50, 200)

        # nfi 37
        informative_1h['hl_pct_change_5'] = range_percent_change(informative_1h, 'HL', 5)
        informative_1h['low_5'] = informative_1h['low'].shift().rolling(5).min()
        informative_1h['safe_dump_50'] = (
                    (informative_1h['hl_pct_change_5'] < 0.66) | (informative_1h['close'] < informative_1h['low_5']) | (
                        informative_1h['close'] > informative_1h['open']))

        return informative_1h

    def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
                        current_rate: float, current_profit: float, **kwargs) -> float:

        # hard stoploss profit
        stoploss = self.pHSL.value
        pf_1 = self.pPF_1.value
        sl_1 = self.pSL_1.value
        pf_2 = self.pPF_2.value
        sl_2 = self.pSL_2.value

        buy_tag = ''
        if hasattr(trade, 'buy_tag') and trade.buy_tag is not None:
            buy_tag = trade.buy_tag
        buy_tags = buy_tag.split()

        if len(buy_tags) == 1:
            for i in self.lower_trailing_list:
                if i in buy_tags:
                    if current_profit >= 0.019:
                        break
                    elif current_profit >= 0.01:
                        return 0.009

        # For profits between PF_1 and PF_2 the stoploss (sl_profit) used is linearly interpolated
        # between the values of SL_1 and SL_2. For all profits above PL_2 the sl_profit value
        # rises linearly with current profit, for profits below PF_1 the hard stoploss profit is used.

        if current_profit > pf_2:
            sl_profit = sl_2 + (current_profit - pf_2)
        elif current_profit > pf_1:
            sl_profit = sl_1 + ((current_profit - pf_1) * (sl_2 - sl_1) / (pf_2 - pf_1))
        else:
            sl_profit = stoploss

        # Only for hyperopt invalid return
        if sl_profit >= current_profit:
            return -0.99

        return stoploss_from_open(sl_profit, current_profit)

    def custom_sell(self, pair: str, trade: 'Trade', current_time: 'datetime', current_rate: float,
                    current_profit: float, **kwargs):

        dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)

        last_candle = dataframe.iloc[-1]
        previous_candle_1 = dataframe.iloc[-2]
        previous_candle_2 = dataframe.iloc[-3]

        buy_tag = ''
        if hasattr(trade, 'buy_tag') and trade.buy_tag is not None:
            buy_tag = trade.buy_tag
        buy_tags = buy_tag.split()

        if current_profit >= 0.01 and len(buy_tags) == 1:
            for i in self.lower_trailing_list:
                if i in buy_tags:
                    return None

        if current_profit >= 0.019:
            return None

        if 0.019 > current_profit >= 0.0:
            if (last_candle['cti'] > self.sell_cti_r_cti.value) and (last_candle['r_14'] > self.sell_cti_r_r.value):
                return f"sell_profit_cti_r_0_1( {buy_tag})"

            elif buy_tag in ['nfix_39 ']:   # handle nfix_39 buy condition
                if (
                        (last_candle['fisher'] > 0.39075)
                        and (last_candle['ha_high'] <= previous_candle_1['ha_high'])
                        and (previous_candle_1['ha_high'] <= previous_candle_2['ha_high'])
                        and (last_candle['ha_close'] <= previous_candle_1['ha_close'])
                        and (last_candle['ema_4'] > last_candle['ha_close'])
                        and (last_candle['ha_close'] * 0.99754 > last_candle['bb_middleband2'])
                ):
                    return f"sell_scalp( {buy_tag})"

        # when loss is -,use sell signal.
        if (
                (current_profit < 0.0)
                and (last_candle['close'] > last_candle['sma_9'])
                and (last_candle['close'] > last_candle['ema_24'] * self.high_offset_2.value)
                and (last_candle['rsi'] > 50)
                and (last_candle['rsi_fast'] > last_candle['rsi_slow'])
        ):
            return f"sell_offset( {buy_tag})"

        if (
                (current_profit < 0.0)
                and (last_candle['close'] > last_candle['ema_49'] * 1.006)
        ):
            return f"sell_offset2( {buy_tag})"

    ############################################################################

    def normal_tf_indicators(self, dataframe: DataFrame) -> DataFrame:

        # Bollinger bands
        bollinger2 = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
        dataframe['bb_lowerband2'] = bollinger2['lower']
        dataframe['bb_middleband2'] = bollinger2['mid']
        dataframe['bb_upperband2'] = bollinger2['upper']

        bollinger3 = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=3)
        dataframe['bb_lowerband3'] = bollinger3['lower']
        dataframe['bb_middleband3'] = bollinger3['mid']
        dataframe['bb_upperband3'] = bollinger3['upper']

        # Other BB checks
        dataframe['bb_width'] = (
                    (dataframe['bb_upperband2'] - dataframe['bb_lowerband2']) / dataframe['bb_middleband2'])
        dataframe['bb_delta'] = ((dataframe['bb_lowerband2'] - dataframe['bb_lowerband3']) / dataframe['bb_lowerband2'])

        # CCI hyperopt
        for val in self.buy_cci_length.range:
            dataframe[f'cci_length_{val}'] = ta.CCI(dataframe, val)

        dataframe['cci'] = ta.CCI(dataframe, 26)
        dataframe['cci_long'] = ta.CCI(dataframe, 170)

        # RMI hyperopt
        for val in self.buy_rmi_length.range:
            dataframe[f'rmi_length_{val}'] = RMI(dataframe, length=val, mom=4)

        # SRSI hyperopt
        stoch = ta.STOCHRSI(dataframe, 15, 20, 2, 2)
        dataframe['srsi_fk'] = stoch['fastk']
        dataframe['srsi_fd'] = stoch['fastd']

        # BinH
        dataframe['closedelta'] = (dataframe['close'] - dataframe['close'].shift()).abs()
        dataframe['hma_50'] = qtpylib.hull_moving_average(dataframe['close'], window=50)

        # SMA
        dataframe['sma_9'] = ta.SMA(dataframe, timeperiod=9)
        dataframe['sma_15'] = ta.SMA(dataframe, timeperiod=15)
        dataframe['sma_20'] = ta.SMA(dataframe, timeperiod=20)
        dataframe['sma_21'] = ta.SMA(dataframe, timeperiod=21)
        dataframe['sma_28'] = ta.SMA(dataframe, timeperiod=28)
        dataframe['sma_30'] = ta.SMA(dataframe, timeperiod=30)
        dataframe['sma_75'] = ta.SMA(dataframe, timeperiod=75)

        # CTI
        dataframe['cti'] = pta.cti(dataframe["close"], length=20)

        # CMF
        dataframe['cmf'] = chaikin_money_flow(dataframe, 20)

        # CRSI (3, 2, 100)
        crsi_closechange = dataframe['close'] / dataframe['close'].shift(1)
        crsi_updown = np.where(crsi_closechange.gt(1), 1.0, np.where(crsi_closechange.lt(1), -1.0, 0.0))
        dataframe['crsi'] = (ta.RSI(dataframe['close'], timeperiod=3) + ta.RSI(crsi_updown, timeperiod=2) + ta.ROC(
            dataframe['close'], 100)) / 3

        # EMA
        dataframe['ema_4'] = ta.EMA(dataframe, timeperiod=4)
        dataframe['ema_8'] = ta.EMA(dataframe, timeperiod=8)
        dataframe['ema_12'] = ta.EMA(dataframe, timeperiod=12)
        dataframe['ema_13'] = ta.EMA(dataframe, timeperiod=13)
        dataframe['ema_16'] = ta.EMA(dataframe, timeperiod=16)
        dataframe['ema_20'] = ta.EMA(dataframe, timeperiod=20)
        dataframe['ema_24'] = ta.EMA(dataframe, timeperiod=24)
        dataframe['ema_26'] = ta.EMA(dataframe, timeperiod=26)
        dataframe['ema_49'] = ta.EMA(dataframe, timeperiod=49)
        dataframe['ema_50'] = ta.EMA(dataframe, timeperiod=50)
        dataframe['ema_100'] = ta.EMA(dataframe, timeperiod=100)
        dataframe['ema_200'] = ta.EMA(dataframe, timeperiod=200)

        # RSI
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
        dataframe['rsi_fast'] = ta.RSI(dataframe, timeperiod=4)
        dataframe['rsi_slow'] = ta.RSI(dataframe, timeperiod=20)
        dataframe['rsi_84'] = ta.RSI(dataframe, timeperiod=84)
        dataframe['rsi_112'] = ta.RSI(dataframe, timeperiod=112)

        # Elliot
        dataframe['EWO'] = EWO(dataframe, 50, 200)

        # Williams %R
        dataframe['r_14'] = williams_r(dataframe, period=14)
        dataframe['r_32'] = williams_r(dataframe, period=32)
        dataframe['r_64'] = williams_r(dataframe, period=64)
        dataframe['r_96'] = williams_r(dataframe, period=96)
        dataframe['r_480'] = williams_r(dataframe, period=480)

        # Volume
        dataframe['volume_mean_4'] = dataframe['volume'].rolling(4).mean().shift(1)
        dataframe['volume_mean_12'] = dataframe['volume'].rolling(12).mean().shift(1)
        dataframe['volume_mean_24'] = dataframe['volume'].rolling(24).mean().shift(1)

        # MFI
        dataframe['mfi'] = ta.MFI(dataframe)

        # Heiken Ashi
        heikinashi = qtpylib.heikinashi(dataframe)
        dataframe['ha_open'] = heikinashi['open']
        dataframe['ha_close'] = heikinashi['close']
        dataframe['ha_high'] = heikinashi['high']
        dataframe['ha_low'] = heikinashi['low']

        # BB 40
        bollinger2_40 = qtpylib.bollinger_bands(ha_typical_price(dataframe), window=40, stds=2)
        dataframe['bb_lowerband2_40'] = bollinger2_40['lower']
        dataframe['bb_middleband2_40'] = bollinger2_40['mid']
        dataframe['bb_upperband2_40'] = bollinger2_40['upper']

        # ClucHA
        dataframe['bb_delta_cluc'] = (dataframe['bb_middleband2_40'] - dataframe['bb_lowerband2_40']).abs()
        dataframe['ha_closedelta'] = (dataframe['ha_close'] - dataframe['ha_close'].shift()).abs()
        dataframe['tail'] = (dataframe['ha_close'] - dataframe['ha_low']).abs()
        dataframe['ema_slow'] = ta.EMA(dataframe['ha_close'], timeperiod=50)
        dataframe['rocr'] = ta.ROCR(dataframe['ha_close'], timeperiod=28)

        # Cofi
        stoch_fast = ta.STOCHF(dataframe, 5, 3, 0, 3, 0)
        dataframe['fastd'] = stoch_fast['fastd']
        dataframe['fastk'] = stoch_fast['fastk']
        dataframe['adx'] = ta.ADX(dataframe)

        # Profit Maximizer - PMAX
        dataframe['pm'], dataframe['pmx'] = pmax(heikinashi, ma_type=1, length=9, multiplier=27, period=10, src=3)
        dataframe['source'] = (dataframe['high'] + dataframe['low'] + dataframe['open'] + dataframe['close'])/4
        dataframe['pmax_thresh'] = ta.EMA(dataframe['source'], timeperiod=9)

        # MOMDIV
        mom = momdiv(dataframe)
        dataframe['momdiv_buy'] = mom['momdiv_buy']
        dataframe['momdiv_sell'] = mom['momdiv_sell']
        dataframe['momdiv_coh'] = mom['momdiv_coh']
        dataframe['momdiv_col'] = mom['momdiv_col']

        # T3 Average
        dataframe['T3'] = t3(dataframe)

        # True range
        dataframe['trange'] = ta.TRANGE(dataframe)

        # KC
        dataframe['range_ma_28'] = ta.SMA(dataframe['trange'], 28)
        dataframe['kc_upperband_28_1'] = dataframe['sma_28'] + dataframe['range_ma_28']
        dataframe['kc_lowerband_28_1'] = dataframe['sma_28'] - dataframe['range_ma_28']

        # KC 20
        dataframe['range_ma_20'] = ta.SMA(dataframe['trange'], 20)
        dataframe['kc_upperband_20_2'] = dataframe['sma_20'] + dataframe['range_ma_20'] * 2
        dataframe['kc_lowerband_20_2'] = dataframe['sma_20'] - dataframe['range_ma_20'] * 2
        dataframe['kc_bb_delta'] = (dataframe['kc_lowerband_20_2'] - dataframe['bb_lowerband2']) / dataframe[
            'bb_lowerband2'] * 100

        # Linreg
        dataframe['hh_20'] = ta.MAX(dataframe['high'], 20)
        dataframe['ll_20'] = ta.MIN(dataframe['low'], 20)
        dataframe['avg_hh_ll_20'] = (dataframe['hh_20'] + dataframe['ll_20']) / 2
        dataframe['avg_close_20'] = ta.SMA(dataframe['close'], 20)
        dataframe['avg_val_20'] = (dataframe['avg_hh_ll_20'] + dataframe['avg_close_20']) / 2
        dataframe['linreg_val_20'] = ta.LINEARREG(dataframe['close'] - dataframe['avg_val_20'], 20, 0)

        # fisher
        rsi = 0.1 * (dataframe['rsi'] - 50)
        dataframe["fisher"] = (np.exp(2 * rsi) - 1) / (np.exp(2 * rsi) + 1)

        # Modified Elder Ray Index
        dataframe['moderi_96'] = moderi(dataframe, 96)

        # vmap indicators
        vwap_low, vwap, vwap_high = vmap_b(dataframe, 20, 1)
        dataframe['vwap_low'] = vwap_low
        dataframe['tcp_percent_4'] = top_percent_change(dataframe, 4)

        return dataframe

    ############################################################################

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        # The indicators for the 1h informative timeframe
        informative_1h = self.informative_1h_indicators(dataframe, metadata)
        dataframe = merge_informative_pair(dataframe, informative_1h, self.timeframe, self.inf_1h, ffill=True)

        # The indicators for the normal (5m) timeframe
        dataframe = self.normal_tf_indicators(dataframe)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        conditions = []
        dataframe.loc[:, 'buy_tag'] = ''

        is_dip = (
                (dataframe[f'rmi_length_{self.buy_rmi_length.value}'] < self.buy_rmi.value) &
                (dataframe[f'cci_length_{self.buy_cci_length.value}'] <= self.buy_cci.value) &
                (dataframe['srsi_fk'] < self.buy_srsi_fk.value)
            )

        # is_sqz_off = (
        #         (dataframe['bb_lowerband2'] < dataframe['kc_lowerband_28_1']) &
        #         (dataframe['bb_upperband2'] > dataframe['kc_upperband_28_1'])
        #     )

        is_break = (

                (dataframe['bb_delta'] > self.buy_bb_delta.value) &
                (dataframe['bb_width'] > self.buy_bb_width.value) &
                (dataframe['closedelta'] > dataframe['close'] * 17.922 / 1000) &  # use origin bb_rpb_tsl value
                (dataframe['close'] < dataframe['bb_lowerband3'] * self.buy_bb_factor.value)
            )

        is_local_uptrend = (                                              # from NFI next gen, credit goes to @iterativ
                (dataframe['ema_26'] > dataframe['ema_12']) &
                (dataframe['ema_26'] - dataframe['ema_12'] > dataframe['open'] * self.buy_ema_diff.value) &
                (dataframe['ema_26'].shift() - dataframe['ema_12'].shift() > dataframe['open'] / 100) &
                (dataframe['close'] < dataframe['bb_lowerband2'] * self.buy_bb_factor.value) &
                (dataframe['closedelta'] > dataframe['close'] * self.buy_closedelta.value / 1000)
            )

        is_local_uptrend2 = (  # use origin bb_rpb_tsl value
                (dataframe['ema_26'] > dataframe['ema_12']) &
                (dataframe['ema_26'] - dataframe['ema_12'] > dataframe['open'] * 0.026) &
                (dataframe['ema_26'].shift() - dataframe['ema_12'].shift() > dataframe['open'] / 100) &
                (dataframe['close'] < dataframe['bb_lowerband2'] * self.buy_bb_factor.value) &
                (dataframe['closedelta'] > dataframe['close'] * 17.922 / 1000)
        )

        is_local_dip = (
                (dataframe['ema_26'] > dataframe['ema_12']) &
                (dataframe['ema_26'] - dataframe['ema_12'] > dataframe['open'] * self.buy_ema_diff_local_dip.value) &
                (dataframe['ema_26'].shift() - dataframe['ema_12'].shift() > dataframe['open'] / 100) &
                (dataframe['close'] < dataframe['ema_20'] * self.buy_ema_high_local_dip.value) &
                (dataframe['rsi'] < self.buy_rsi_local_dip.value) &
                (dataframe['crsi'] > self.buy_crsi_local_dip.value) &
                (dataframe['closedelta'] > dataframe['close'] * self.buy_closedelta_local_dip.value / 1000)
            )

        is_ewo = (                                                                                    # from SMA offset
                (dataframe['rsi_fast'] < self.buy_rsi_fast.value) &
                (dataframe['close'] < dataframe['ema_8'] * self.buy_ema_low.value) &
                (dataframe['EWO'] > self.buy_ewo.value) &
                (dataframe['close'] < dataframe['ema_16'] * self.buy_ema_high.value) &
                (dataframe['rsi'] < self.buy_rsi.value)
            )

        # is_ewo_2 = (
        #         (dataframe['rsi_fast'] < self.buy_rsi_fast_ewo_2.value) &
        #         (dataframe['close'] < dataframe['ema_8'] * self.buy_ema_low_2.value) &
        #         (dataframe['EWO'] > self.buy_ewo_high_2.value) &
        #         (dataframe['close'] < dataframe['ema_16'] * self.buy_ema_high_2.value) &
        #         (dataframe['rsi'] < self.buy_rsi_ewo_2.value)
        #     )

        # is_r_deadfish = (                                                                             # reverse deadfish
        #         (dataframe['ema_100'] < dataframe['ema_200'] * self.buy_r_deadfish_ema.value) &
        #         (dataframe['bb_width'] > self.buy_r_deadfish_bb_width.value) &
        #         (dataframe['close'] < dataframe['bb_middleband2'] * self.buy_r_deadfish_bb_factor.value) &
        #         (dataframe['volume_mean_12'] > dataframe['volume_mean_24'] * self.buy_r_deadfish_volume_factor.value) &
        #         (dataframe['cti'] < self.buy_r_deadfish_cti.value) &
        #         (dataframe['r_14'] < self.buy_r_deadfish_r14.value)
        #     )

        is_clucha = (
                (dataframe['rocr_1h'].gt(self.buy_clucha_rocr_1h.value)) &
                (dataframe['bb_lowerband2_40'].shift().gt(0)) &
                (dataframe['bb_delta_cluc'].gt(dataframe['ha_close'] * self.buy_clucha_bbdelta_close.value)) &
                (dataframe['ha_closedelta'].gt(dataframe['ha_close'] * self.buy_clucha_closedelta_close.value)) &
                (dataframe['tail'].lt(dataframe['bb_delta_cluc'] * self.buy_clucha_bbdelta_tail.value)) &
                (dataframe['ha_close'].lt(dataframe['bb_lowerband2_40'].shift())) &
                (dataframe['ha_close'].le(dataframe['ha_close'].shift()))
        )

        is_clucha2 = (
                (dataframe['rocr_1h'].gt(self.buy_clucha_rocr_1h.value)) &
                (dataframe['ha_close'] < dataframe['ema_slow']) &
                (dataframe['ha_close'] < self.buy_clucha_close_bblower.value * dataframe['bb_lowerband2_40'])
        )

        is_cofi = (                           # Modified from cofi, credit goes to original author "slack user CofiBit"
                (dataframe['open'] < dataframe['ema_8'] * self.buy_ema_cofi.value) &
                (qtpylib.crossed_above(dataframe['fastk'], dataframe['fastd'])) &
                (dataframe['fastk'] < self.buy_fastk.value) &
                (dataframe['fastd'] < self.buy_fastd.value) &
                (dataframe['adx'] > self.buy_adx.value) &
                (dataframe['EWO'] > self.buy_ewo_high.value) &
                (dataframe['cti'] < self.buy_cofi_cti.value) &
                (dataframe['r_14'] < self.buy_cofi_r14.value)
            )

        # is_gumbo = (                                     # Modified from gumbo1, creadit goes to original author @raph92
        #         (dataframe['EWO'] < self.buy_gumbo_ewo_low.value) &
        #         (dataframe['bb_middleband2_1h'] >= dataframe['T3_1h']) &
        #         (dataframe['T3'] <= dataframe['ema_8'] * self.buy_gumbo_ema.value) &
        #         (dataframe['cti'] < self.buy_gumbo_cti.value) &
        #         (dataframe['r_14'] < self.buy_gumbo_r14.value)
        #     )

        # is_sqzmom = (          # Modified from squeezeMomentum, credit goes to original author @LazyBear of TradingView
        #         is_sqz_off &
        #         (dataframe['linreg_val_20'].shift(2) > dataframe['linreg_val_20'].shift(1)) &
        #         (dataframe['linreg_val_20'].shift(1) < dataframe['linreg_val_20']) &
        #         (dataframe['linreg_val_20'] < 0) &
        #         (dataframe['close'] < dataframe['ema_13'] * self.buy_sqzmom_ema.value) &
        #         (dataframe['EWO'] < self.buy_sqzmom_ewo.value) &
        #         (dataframe['r_14'] < self.buy_sqzmom_r14.value)
        #     )

        # NFI quick mode, credit goes to @iterativ

        is_nfi_32 = (  # NFIX 26
                (dataframe['rsi_slow'] < dataframe['rsi_slow'].shift(1)) &
                (dataframe['rsi_fast'] < 46) &
                (dataframe['rsi'] > 19) &
                (dataframe['close'] < dataframe['sma_15'] * 0.942) &
                (dataframe['cti'] < -0.86)
            )

        is_nfi_33 = (
                (dataframe['close'] < (dataframe['ema_13'] * 0.978)) &
                (dataframe['EWO'] > 8) &
                (dataframe['cti'] < -0.88) &
                (dataframe['rsi'] < 32) &
                (dataframe['r_14'] < -98.0) &
                (dataframe['volume'] < (dataframe['volume_mean_4'] * 2.5))
            )

        is_nfi_38 = (
                (dataframe['pm'] > dataframe['pmax_thresh']) &
                (dataframe['close'] < dataframe['sma_75'] * 0.98) &
                (dataframe['EWO'] < -4.4) &
                (dataframe['cti'] < -0.95) &
                (dataframe['r_14'] < -97) &
                (dataframe['crsi_1h'] > 0.5)
            )

        is_nfix_5 = (
                (dataframe['ema_200_1h'] > dataframe['ema_200_1h'].shift(12)) &
                (dataframe['ema_200_1h'].shift(12) > dataframe['ema_200_1h'].shift(24)) &
                (dataframe['close'] < dataframe['sma_75'] * 0.932) &
                (dataframe['EWO'] > 3.6) &
                (dataframe['cti'] < -0.9) &
                (dataframe['r_14'] < -97.0)
            )

        is_nfix_39 = (
                (dataframe['ema_200_1h'] > dataframe['ema_200_1h'].shift(12)) &
                (dataframe['ema_200_1h'].shift(12) > dataframe['ema_200_1h'].shift(24)) &
                (dataframe['bb_lowerband2_40'].shift().gt(0)) &
                (dataframe['bb_delta_cluc'].gt(dataframe['close'] * 0.056)) &
                (dataframe['closedelta'].gt(dataframe['close'] * 0.01)) &
                (dataframe['tail'].lt(dataframe['bb_delta_cluc'] * 0.5)) &
                (dataframe['close'].lt(dataframe['bb_lowerband2_40'].shift())) &
                (dataframe['close'].le(dataframe['close'].shift())) &
                (dataframe['close'] > dataframe['ema_13'] * self.buy_nfix_39_ema.value)
            )

        is_nfix_49 = (
                (dataframe['ema_26'].shift(3) > dataframe['ema_12'].shift(3)) &
                (dataframe['ema_26'].shift(3) - dataframe['ema_12'].shift(3) > dataframe['open'].shift(3) * 0.032) &
                (dataframe['ema_26'].shift(9) - dataframe['ema_12'].shift(9) > dataframe['open'].shift(3) / 100) &
                (dataframe['close'].shift(3) < dataframe['ema_20'].shift(3) * 0.916) &
                (dataframe['rsi'].shift(3) < 32.5) &
                (dataframe['crsi'].shift(3) > 18.0) &
                (dataframe['cti'] < self.buy_nfix_49_cti.value) &
                (dataframe['r_14'] < self.buy_nfix_49_r14.value)
            )

        is_nfi7_33 = (
                (dataframe['moderi_96']) &
                (dataframe['cti'] < -0.88) &
                (dataframe['close'] < (dataframe['ema_13'] * 0.988)) &
                (dataframe['EWO'] > 6.4) &
                (dataframe['rsi'] < 32.0) &
                (dataframe['volume'] < (dataframe['volume_mean_4'] * 2.0))
            )

        is_nfi7_37 = (
                (dataframe['pm'] > dataframe['pmax_thresh']) &
                (dataframe['close'] < dataframe['sma_75'] * 0.98) &
                (dataframe['EWO'] > 9.8) &
                (dataframe['rsi'] < 56.0) &
                (dataframe['cti'] < -0.7) &
                (dataframe['safe_dump_50_1h'])
            )

        is_vwap = (
                (dataframe['close'] < dataframe['vwap_low']) &
                (dataframe['tcp_percent_4'] > 0.04) &
                (dataframe['cti'] < -0.8) &
                (dataframe['rsi'] < 35) &
                (dataframe['rsi_84'] < 60) &
                (dataframe['rsi_112'] < 60) &
                (dataframe['volume'] > 0)
        )

        # Additional Check
        is_bb_checked = is_dip & is_break

        # Condition Append
        conditions.append(is_bb_checked)                                           # ~2.32 / 91.1% / 46.27%      D
        dataframe.loc[is_bb_checked, 'buy_tag'] += 'bb '

        conditions.append(is_local_uptrend)                                        # ~3.28 / 92.4% / 69.72%
        dataframe.loc[is_local_uptrend, 'buy_tag'] += 'local_uptrend '

        conditions.append(is_local_dip)                                            # ~0.76 / 91.1% / 15.54%
        dataframe.loc[is_local_dip, 'buy_tag'] += 'local_dip '

        conditions.append(is_ewo)                                                  # ~0.92 / 92.0% / 43.74%      D
        dataframe.loc[is_ewo, 'buy_tag'] += 'ewo '

        # conditions.append(is_ewo_2)                                                 # ~2.86 / 91.5% / 33.31%     D
        # dataframe.loc[is_ewo_2, 'buy_tag'] += 'ewo2 '

        # conditions.append(is_r_deadfish)                                           # ~0.99 / 86.9% / 21.93%      D
        # dataframe.loc[is_r_deadfish, 'buy_tag'] += 'r_deadfish '

        conditions.append(is_clucha)                                               # ~7.2 / 92.5% / 97.98%       D
        dataframe.loc[is_clucha, 'buy_tag'] += 'clucHA '

        conditions.append(is_clucha2)
        dataframe.loc[is_clucha2, 'buy_tag'] += 'clucHA2 '

        conditions.append(is_cofi)                                                 # ~0.4 / 94.4% / 9.59%        D
        dataframe.loc[is_cofi, 'buy_tag'] += 'cofi '

        # conditions.append(is_gumbo)                                                # ~2.63 / 90.6% / 41.49%      D
        # dataframe.loc[is_gumbo, 'buy_tag'] += 'gumbo '

        # conditions.append(is_sqzmom)                                               # ~3.14 / 92.4% / 64.14%      D
        # dataframe.loc[is_sqzmom, 'buy_tag'] += 'sqzmom '

        conditions.append(is_nfi_32)                                               # ~0.78 / 92.0 % / 37.41%     D
        dataframe.loc[is_nfi_32, 'buy_tag'] += 'nfi_32 '

        conditions.append(is_nfi_33)                                               # ~0.11 / 100%                D
        dataframe.loc[is_nfi_33, 'buy_tag'] += 'nfi_33 '

        conditions.append(is_nfi_38)                                               # ~1.13 / 88.5% / 31.34%      D
        dataframe.loc[is_nfi_38, 'buy_tag'] += 'nfi_38 '

        conditions.append(is_nfix_5)                                               # ~0.25 / 97.7% / 6.53%       D
        dataframe.loc[is_nfix_5, 'buy_tag'] += 'nfix_5 '

        conditions.append(is_nfix_39)                                              # ~5.33 / 91.8% / 58.57%      D
        dataframe.loc[is_nfix_39, 'buy_tag'] += 'nfix_39 '

        conditions.append(is_nfix_49)                                              # ~0.33 / 100% / 0%           D
        dataframe.loc[is_nfix_49, 'buy_tag'] += 'nfix_49 '

        conditions.append(is_nfi7_33)                                              # ~0.71 / 91.3% / 28.94%      D
        dataframe.loc[is_nfi7_33, 'buy_tag'] += 'nfi7_33 '

        conditions.append(is_nfi7_37)                                              # ~0.46 / 92.6% / 17.05%      D
        dataframe.loc[is_nfi7_37, 'buy_tag'] += 'nfi7_37 '

        conditions.append(is_vwap)
        dataframe.loc[is_vwap, 'buy_tag'] += 'vwap '

        conditions.append(is_local_uptrend2)
        dataframe.loc[is_local_uptrend2, 'buy_tag'] += 'local_uptrend2 '

        if conditions:
            dataframe.loc[
                            reduce(lambda x, y: x | y, conditions),
                            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[(dataframe['volume'] > 0), 'sell'] = 0
        return dataframe


# PMAX
def pmax(df, period, multiplier, length, ma_type, src):

    period = int(period)
    multiplier = int(multiplier)
    length = int(length)
    ma_type = int(ma_type)
    src = int(src)

    mavalue = f'MA_{ma_type}_{length}'
    atr = f'ATR_{period}'

    if src == 1:
        masrc = df["close"]
    elif src == 2:
        masrc = (df["high"] + df["low"]) / 2
    elif src == 3:
        masrc = (df["high"] + df["low"] + df["close"] + df["open"]) / 4

    if ma_type == 1:
        mavalue = ta.EMA(masrc, timeperiod=length)
    elif ma_type == 2:
        mavalue = ta.DEMA(masrc, timeperiod=length)
    elif ma_type == 3:
        mavalue = ta.T3(masrc, timeperiod=length)
    elif ma_type == 4:
        mavalue = ta.SMA(masrc, timeperiod=length)
    elif ma_type == 5:
        mavalue = VIDYA(df, length=length)
    elif ma_type == 6:
        mavalue = ta.TEMA(masrc, timeperiod=length)
    elif ma_type == 7:
        mavalue = ta.WMA(df, timeperiod=length)
    elif ma_type == 8:
        mavalue = vwma(df, length)
    elif ma_type == 9:
        mavalue = zema(df, period=length)

    df[atr] = ta.ATR(df, timeperiod=period)
    df['basic_ub'] = mavalue + ((multiplier/10) * df[atr])
    df['basic_lb'] = mavalue - ((multiplier/10) * df[atr])

    basic_ub = df['basic_ub'].values
    final_ub = np.full(len(df), 0.00)
    basic_lb = df['basic_lb'].values
    final_lb = np.full(len(df), 0.00)

    for i in range(period, len(df)):
        final_ub[i] = basic_ub[i] if (
            basic_ub[i] < final_ub[i - 1]
            or mavalue[i - 1] > final_ub[i - 1]) else final_ub[i - 1]
        final_lb[i] = basic_lb[i] if (
            basic_lb[i] > final_lb[i - 1]
            or mavalue[i - 1] < final_lb[i - 1]) else final_lb[i - 1]

    df['final_ub'] = final_ub
    df['final_lb'] = final_lb

    pm_arr = np.full(len(df), 0.00)
    for i in range(period, len(df)):
        pm_arr[i] = (
            final_ub[i] if (pm_arr[i - 1] == final_ub[i - 1]
                            and mavalue[i] <= final_ub[i])
            else final_lb[i] if (
                    pm_arr[i - 1] == final_ub[i - 1]
                    and mavalue[i] > final_ub[i]) else final_lb[i]
            if (pm_arr[i - 1] == final_lb[i - 1]
                and mavalue[i] >= final_lb[i]) else final_ub[i]
            if (pm_arr[i - 1] == final_lb[i - 1]
                and mavalue[i] < final_lb[i]) else 0.00)

    pm = Series(pm_arr)

    # Mark the trend direction up/down
    pmx = np.where((pm_arr > 0.00), np.where((mavalue < pm_arr), 'down',  'up'), np.NaN)

    return pm, pmx


# Mom DIV
def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = 20, bb_dev: float = 2.0,
           lookback: int = 30) -> DataFrame:
    mom: Series = ta.MOM(dataframe, timeperiod=mom_length)
    upperband, middleband, lowerband = ta.BBANDS(mom, timeperiod=bb_length, nbdevup=bb_dev, nbdevdn=bb_dev, ma_type=0)
    buy = qtpylib.crossed_below(mom, lowerband)
    sell = qtpylib.crossed_above(mom, upperband)
    hh = dataframe['high'].rolling(lookback).max()
    ll = dataframe['low'].rolling(lookback).min()
    coh = dataframe['high'] >= hh
    col = dataframe['low'] <= ll
    df = DataFrame({
            "momdiv_mom": mom,
            "momdiv_upperb": upperband,
            "momdiv_lowerb": lowerband,
            "momdiv_buy": buy,
            "momdiv_sell": sell,
            "momdiv_coh": coh,
            "momdiv_col": col,
        }, index=dataframe['close'].index)
    return df


def t3(dataframe, length=5):
    """
    T3 Average by HPotter on Tradingview
    https://www.tradingview.com/script/qzoC9H1I-T3-Average/
    """
    df = dataframe.copy()

    df['xe1'] = ta.EMA(df['close'], timeperiod=length)
    df['xe2'] = ta.EMA(df['xe1'], timeperiod=length)
    df['xe3'] = ta.EMA(df['xe2'], timeperiod=length)
    df['xe4'] = ta.EMA(df['xe3'], timeperiod=length)
    df['xe5'] = ta.EMA(df['xe4'], timeperiod=length)
    df['xe6'] = ta.EMA(df['xe5'], timeperiod=length)
    b = 0.7
    c1 = -b * b * b
    c2 = 3 * b * b + 3 * b * b * b
    c3 = -6 * b * b - 3 * b - 3 * b * b * b
    c4 = 1 + 3 * b + b * b * b + 3 * b * b
    df['T3Average'] = c1 * df['xe6'] + c2 * df['xe5'] + c3 * df['xe4'] + c4 * df['xe3']

    return df['T3Average']


================================================
FILE: strategies/BBRSI/BBRSI.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy.interface import IStrategy

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib

class bbrsi(IStrategy):
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "0": 0.21547444718127343,
        "21": 0.054918778723794665,
        "48": 0.013037720775643222,
        "125": 0
    }

    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.3603667187598833

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Optimal ticker interval for the strategy.
    timeframe = '4h'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    # plot_config = {
    #     'main_plot': {
    #         'tema': {},
    #         'sar': {'color': 'white'},
    #     },
    #     'subplots': {
    #         "MACD": {
    #             'macd': {'color': 'blue'},
    #             'macdsignal': {'color': 'orange'},
    #         },
    #         "RSI": {
    #             'rsi': {'color': 'red'},
    #         }
    #     }
    # }

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # RSI
        dataframe['rsi'] = ta.RSI(dataframe)

        # Bollinger bands
        bollinger_1sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=1)
        dataframe['bb_upperband_1sd'] = bollinger_1sd['upper']
        dataframe['bb_lowerband_1sd'] = bollinger_1sd['lower']

        bollinger_4sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=4)
        dataframe['bb_lowerband_4sd'] = bollinger_4sd['lower']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 25) &
                (dataframe['close'] < dataframe['bb_lowerband_1sd'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 95) &
                (dataframe['close'] > dataframe['bb_upperband_1sd'])
            ),
            'sell'] = 1

        return dataframe

================================================
FILE: strategies/BBRSI2/BBRSI2.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from typing import Dict, List
from functools import reduce
from pandas import DataFrame
# --------------------------------

import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


class BBRSI2(IStrategy):
    minimal_roi = {
        "0": 0.30,
        "120": 0.20,
        "360": 0.15,
        "720": 0
    }

    stoploss = -0.20

    timeframe = '1m'

    trailing_stop = True

    order_types = {
        "buy": "limit",
        "sell": "limit",
        "emergencysell": "market",
        "forcebuy": "market",
        "forcesell": "market",
        "stoploss": "market",
        "stoploss_on_exchange": True,
        "stoploss_on_exchange_interval": 60,
        "stoploss_on_exchange_limit_ratio": 0.99,
    }

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # RSI
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)

        # Bollinger Bands
        bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
        dataframe['bb_lowerband'] = bollinger['lower']
        dataframe['bb_middleband'] = bollinger['mid']
        # dataframe['bb_upperband'] = bollinger['upper']


        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 35)
                & (dataframe['close'] < dataframe['bb_lowerband'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 75)
                & (dataframe['close'] > dataframe['bb_middleband'])
            ),
            'sell'] = 1

        return dataframe


================================================
FILE: strategies/BBRSI21/BBRSI21.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# --------------------------------


class BBRSI21(IStrategy):
    """

    author@: Gert Wohlgemuth

    converted from:

    https://github.com/sthewissen/Mynt/blob/master/src/Mynt.Core/Strategies/BbandRsi.cs

    """

    # Minimal ROI designed for the strategy.
    # adjust based on market conditions. We would recommend to keep it low for quick turn arounds
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "0": 0.22766,
        "31": 0.06155,
        "78": 0.03227,
        "105": 0
    }

    # Trailing stop:
    trailing_stop = True
    trailing_stop_positive = 0.17832
    trailing_stop_positive_offset = 0.24807
    trailing_only_offset_is_reached = True
    # Optimal stoploss designed for the strategy
    stoploss = -0.30054

    # Optimal timeframe for the strategy
    timeframe = '5m'

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)

        # Bollinger bands
        bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
        dataframe['bb_lowerband'] = bollinger['lower']
        dataframe['bb_middleband'] = bollinger['mid']
        dataframe['bb_upperband'] = bollinger['upper']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators.
        Can be a copy of the corresponding method from the strategy,
        or will be loaded from the strategy.
        Must align to populate_indicators used (either from this File, or from the strategy)
        Only used when --spaces does not include buy
        """
        dataframe.loc[
            (
                (dataframe['close'] < dataframe['bb_lowerband']) &
             #   (dataframe['mfi'] > 16) &
              #  (dataframe['adx'] > 25) &
                (dataframe['rsi'] < 21)
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators.
        Can be a copy of the corresponding method from the strategy,
        or will be loaded from the strategy.
        Must align to populate_indicators used (either from this File, or from the strategy)
        Only used when --spaces does not include sell
        """
        dataframe.loc[
            (
                (dataframe['close'] > dataframe['bb_upperband']) &
                (dataframe['rsi'] > 99)
                
                
                
          #      (qtpylib.crossed_above(
           #         dataframe['macdsignal'], dataframe['macd']
          #      )) &
          #      (dataframe['fastd'] > 54)
            ),
            'sell'] = 1
        return dataframe

================================================
FILE: strategies/BBRSI3366/BBRSI3366.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# --------------------------------


class BBRSI3366(IStrategy):
    """

    author@: Gert Wohlgemuth

    converted from:

    https://github.com/sthewissen/Mynt/blob/master/src/Mynt.Core/Strategies/BbandRsi.cs

    """

    # Minimal ROI designed for the strategy.
    # adjust based on market conditions. We would recommend to keep it low for quick turn arounds
    # This attribute will be overridden if the config file contains "minimal_roi"
    minimal_roi = {
        "0": 0.09521,
        "13": 0.07341,
        "30": 0.01468,
        "85": 0
    }

    # Trailing stop:
    trailing_stop = True
    trailing_stop_positive = 0.05069
    trailing_stop_positive_offset = 0.06189
    trailing_only_offset_is_reached = False
    # Optimal stoploss designed for the strategy
    stoploss = -0.33233

    # Optimal timeframe for the strategy
    timeframe = '5m'

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        
        # RSI
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)

        # Bollinger bands
        bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=1)
        dataframe['bb_lowerband'] = bollinger['lower']
        dataframe['bb_middleband'] = bollinger['mid']
        dataframe['bb_upperband'] = bollinger['upper']
        
        # SAR
        dataframe['sar'] = ta.SAR(dataframe)

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators.
        Can be a copy of the corresponding method from the strategy,
        or will be loaded from the strategy.
        Must align to populate_indicators used (either from this File, or from the strategy)
        Only used when --spaces does not include buy
        """
        dataframe.loc[
            (
              #  (qtpylib.crossed_above(
              #          dataframe['close'], dataframe['bb_lowerband'] 
           #     )) &
              #  (dataframe['close'] < dataframe['bb_lowerband']) &
             #   (dataframe['mfi'] < 16) &
              #  (dataframe['adx'] > 25) &
                (dataframe['rsi'] < 33)
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators.
        Can be a copy of the corresponding method from the strategy,
        or will be loaded from the strategy.
        Must align to populate_indicators used (either from this File, or from the strategy)
        Only used when --spaces does not include sell
        """
        dataframe.loc[
            (
              #  (qtpylib.crossed_above(
              #          dataframe['close'], dataframe['bb_upperband'] 
             #   )) &
                (dataframe['close'] > dataframe['bb_upperband']) &
                (dataframe['rsi'] > 66) #&
              #  (qtpylib.crossed_above(
              #          dataframe['sar'], dataframe['close']
              #  ))
                
                
          #      (qtpylib.crossed_above(
           #         dataframe['macdsignal'], dataframe['macd']
          #      )) &
          #      (dataframe['fastd'] > 54)
            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/BBRSI4cust/BBRSI4cust.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# flake8: noqa: F401
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy import (BooleanParameter, CategoricalParameter, DecimalParameter,
                                IStrategy, IntParameter)

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# This class is a sample. Feel free to customize it.
class BBRSI4cust(IStrategy):

    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 3

    # Can this strategy go short?
    can_short: bool = False

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        # "60": 0.01,
        # "30": 0.02,
        "0": 0.003
    }

    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.1

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Optimal timeframe for the strategy.
    timeframe = '15m'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the config.
    use_exit_signal = True
    exit_profit_only = False
    ignore_roi_if_entry_signal = False

    # Hyperoptable parameters
    # buy_rsi = IntParameter(low=25, high=35, default=35, space='buy', optimize=True, load=True)
    buy_bb = IntParameter(low=1, high=4, default=1, space='buy', optimize=True, load=True)
    buy_di = IntParameter(low=10, high=20, default=20, space='buy', optimize=True, load=True)

    sell_bb = IntParameter(low=1, high=4, default=1, space='sell', optimize=True, load=True)

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Optional order type mapping.
    order_types = {
        'entry': 'limit',
        'exit': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'entry': 'gtc',
        'exit': 'gtc'
    }

    plot_config = {
        'main_plot': {
            'bb_lowerband': {'color': 'blue'},
            'bb_middleband': {'color': 'orange'},            
            'bb_upperband': {'color': 'blue'},
        },
        'subplots': {
            "DI": {
                'plus_di': {'color': 'green'},
                'di_overbought': {'color': 'black'},
                
            },
            "RSI": {
                'rsi': {'color': 'red'},
            }
        }
    }


    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        # Momentum Indicators
        # ------------------------------------

        # Plus Directional Indicator / Movement
        dataframe['plus_di'] = ta.PLUS_DI(dataframe)
        dataframe['di_overbought'] = 20
        

        # RSI
        dataframe['rsi'] = ta.RSI(dataframe)

        # Bollinger Bands
        bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=self.buy_bb.value)
        dataframe['bb_lowerband'] = bollinger['lower']
        dataframe['bb_middleband'] = bollinger['mid']
        dataframe['bb_upperband'] = bollinger['upper']

        bollinger1 = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=self.sell_bb.value)
        dataframe['bb_lowerband1'] = bollinger1['lower']
        dataframe['bb_middleband1'] = bollinger1['mid']
        dataframe['bb_upperband1'] = bollinger1['upper']


        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe.loc[
            (
                # Signal: RSI crosses above 30
                (dataframe['plus_di'] > self.buy_di.value) &  
                (qtpylib.crossed_below(dataframe['low'], dataframe['bb_lowerband'])) &
                (dataframe['volume'] > 0)  # Make sure Volume is not 0
            ),
            'enter_long'] = 1

        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe.loc[
            (
                # Signal: RSI crosses above 70
                (qtpylib.crossed_above(dataframe['high'], dataframe['bb_middleband1'])) &
                (dataframe['volume'] > 0)  # Make sure Volume is not 0
            ),

            'exit_long'] = 1

        return dataframe


    def custom_exit(self, pair: str, trade: 'Trade', current_time: 'datetime', current_rate: float, current_profit: float, **kwargs):
        """
        Sell only when matching some criteria other than those used to generate the sell signal
        :return: str sell_reason, if any, otherwise None
        """
        # get dataframe
        dataframe, _ = self.dp.get_analyzed_dataframe(pair=pair, timeframe=self.timeframe)
        
        # get the current candle
        current_candle = dataframe.iloc[-1].squeeze()
        
        # if (qtpylib.crossed_above(current_candle['high'], dataframe['bb_middleband1'])) == True:

        if (qtpylib.crossed_above(current_rate, current_candle['bb_middleband1'])):

            return "bb_profit_sell"

        # else, hold
        return None

================================================
FILE: strategies/BBRSINaiveStrategy/BBRSINaiveStrategy.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy.interface import IStrategy

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


class BBRSINaiveStrategy(IStrategy):
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "60": 0.01,
        "30": 0.02,
        "0": 0.04
    }

    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.1

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Optimal ticker interval for the strategy.
    timeframe = '15m'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    plot_config = {
        'main_plot': {
            'bb_upperband': {'color': 'green'},
            'bb_midband': {'color': 'orange'},
            'bb_lowerband': {'color': 'red'},
        },
        'subplots': {
            "RSI": {
                'rsi': {'color': 'yellow'},
            }
        }
    }

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # RSI
        dataframe['rsi'] = ta.RSI(dataframe)

        # Bollinger bands
        bollinger = qtpylib.bollinger_bands(
            qtpylib.typical_price(dataframe), window=20, stds=2)
        dataframe['bb_upperband'] = bollinger['upper']
        dataframe['bb_midband'] = bollinger['mid']
        dataframe['bb_lowerband'] = bollinger['lower']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 25) &  # Signal: RSI is greater 25
                # Signal: price is less than lower bb
                (dataframe['close'] < dataframe['bb_lowerband'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 70) &  # Signal: RSI is greater 70
                # Signal: price is greater than mid bb
                (dataframe['close'] > dataframe['bb_midband'])
            ),
            'sell'] = 1

        return dataframe


================================================
FILE: strategies/BBRSIOptim2020Strategy/BBRSIOptim2020Strategy.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy.interface import IStrategy

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# This class is a sample. Feel free to customize it.
class BBRSIOptim2020Strategy(IStrategy):
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "0": 0.336,
        "40": 0.072,
        "218": 0.021,
        "459": 0
    }
    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.331

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Optimal ticker interval for the strategy.
    timeframe = '5m'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    plot_config = {
        'main_plot': {
            'tema': {},
            'sar': {'color': 'white'},
        },
        'subplots': {
            "MACD": {
                'macd': {'color': 'blue'},
                'macdsignal': {'color': 'orange'},
            },
            "RSI": {
                'rsi': {'color': 'red'},
            }
        }
    }

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        # RSI
        dataframe['rsi'] = ta.RSI(dataframe)

        # Bollinger Bands
        bollinger_1sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=1)
        dataframe['bb_middleband_1sd'] = bollinger_1sd['mid']

        bollinger_3sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=3)
        dataframe['bb_lowerband_3sd'] = bollinger_3sd['lower']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                # (dataframe['rsi'] > 12) & 
                (dataframe['close'] < dataframe['bb_lowerband_3sd'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                # (dataframe['rsi'] > 96) & 
                (dataframe['close'] > dataframe['bb_middleband_1sd'])
            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/BBRSIOptimStrategy/BBRSIOptimStrategy.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy.interface import IStrategy

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib


# This class is a sample. Feel free to customize it.
class BBRSIOptimStrategy(IStrategy):
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "0": 0.323,
        "107": 0.097,
        "150": 0.019,
        "238": 0
    }
    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.344

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Optimal ticker interval for the strategy.
    timeframe = '5m'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    plot_config = {
        'main_plot': {
            'tema': {},
            'sar': {'color': 'white'},
        },
        'subplots': {
            "MACD": {
                'macd': {'color': 'blue'},
                'macdsignal': {'color': 'orange'},
            },
            "RSI": {
                'rsi': {'color': 'red'},
            }
        }
    }

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        # RSI
        dataframe['rsi'] = ta.RSI(dataframe)

        # Bollinger Bands
        bollinger_1sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=1)
        dataframe['bb_lowerband_1sd'] = bollinger_1sd['lower']

        bollinger_2sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
        dataframe['bb_lowerband_2sd'] = bollinger_2sd['lower']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 12) & 
                (dataframe['close'] < dataframe['bb_lowerband_2sd'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 96) & 
                (dataframe['close'] > dataframe['bb_lowerband_1sd'])
            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/BBRSIOptimizedStrategy/BBRSIOptimizedStrategy.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy.interface import IStrategy

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib

# Based on the Hyperopt results when running against BBRISHyperopt
class BBRSIOptimizedStrategy(IStrategy):
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "0": 0.186,
        "37": 0.074,
        "89": 0.033,
        "195": 0
    }

    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.295

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Optimal ticker interval for the strategy.
    timeframe = '5m'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    plot_config = {
        'main_plot': {
            'bb_upperband': {'color': 'green'},
            'bb_midband': {'color': 'orange'},
            'bb_lowerband': {'color': 'red'},
        },
        'subplots': {
            "RSI": {
                'rsi': {'color': 'yellow'},
            }
        }
    }

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # RSI
        dataframe['rsi'] = ta.RSI(dataframe)

        # Bollinger bands
        bollinger_1sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=1)
        dataframe['bb_midband_1sd'] = bollinger_1sd['mid']

        bollinger_3sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=3)
        dataframe['bb_lowerband_3sd'] = bollinger_3sd['lower']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                # (dataframe['rsi'] > 38) &  # Signal: RSI is greater 38
                (dataframe['close'] < dataframe['bb_lowerband_3sd']) # Signal: price is less than lower bb 2sd
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                    (dataframe['rsi'] > 64) &  # Signal: RSI is greater 88
                    (dataframe['close'] > dataframe['bb_midband_1sd']) # Signal: price is greater than mid bb
            ),
            'sell'] = 1

        return dataframe


================================================
FILE: strategies/BBRSIS/BBRSIS.py
================================================
import talib.abstract as ta
from pandas import DataFrame
from technical.util import resample_to_interval, resampled_merge

import freqtrade.vendor.qtpylib.indicators as qtpylib
from freqtrade.strategy import IStrategy, merge_informative_pair


class BBRSIS(IStrategy):
    """
    Default Strategy provided by freqtrade bot.
    You can override it with your own strategy
    """

    # Minimal ROI designed for the strategy
    minimal_roi = {
	"0": 0.30,
    }

    # Optimal stoploss designed for the strategy
    stoploss = -0.99

    # Optimal ticker interval for the strategy
    ticker_interval = '5m'

    # Optional order type mapping
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'limit',
        'stoploss_on_exchange': False
    }

    # Optional time in force for orders
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc',
    }
    
    def get_ticker_indicator(self):
        return int(self.timeframe[:-1])

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Adds several different TA indicators to the given DataFrame
        Performance Note: For the best performance be frugal on the number of indicators
        you are using. Let uncomment only the indicator you are using in your strategies
        or your hyperopt configuration, otherwise you will waste your memory and CPU usage.
        :param dataframe: Raw data from the exchange and parsed by parse_ticker_dataframe()
        :param metadata: Additional information, like the currently traded pair
        :return: a Dataframe with all mandatory indicators for the strategies
        """

        # Momentum Indicator
        # ------------------------------------
        # RSIs
        dataframe['sma5'] = ta.SMA(dataframe, timeperiod=5)
        dataframe['sma75'] = ta.SMA(dataframe, timeperiod=75)
        dataframe['sma200'] = ta.SMA(dataframe, timeperiod=200)
        
        dataframe_short = resample_to_interval(dataframe, self.get_ticker_indicator() * 3)
        dataframe_medium = resample_to_interval(dataframe, self.get_ticker_indicator() * 6)
        dataframe_long = resample_to_interval(dataframe, self.get_ticker_indicator() * 10)
        
        dataframe_short['rsi'] = ta.RSI(dataframe_short, timeperiod=20)
        dataframe_medium['rsi'] = ta.RSI(dataframe_medium, timeperiod=20)
        dataframe_long['rsi'] = ta.RSI(dataframe_long, timeperiod=20)
        
        dataframe = resampled_merge(dataframe, dataframe_short)
        dataframe = resampled_merge(dataframe, dataframe_medium)
        dataframe = resampled_merge(dataframe, dataframe_long)
        
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=20)
        
        dataframe.fillna(method='ffill', inplace = True)
        
        # Bollinger bands
        bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=3)
        dataframe['bb_lowerband'] = bollinger['lower']
        dataframe['bb_middleband'] = bollinger['mid']
        dataframe['bb_upperband'] = bollinger['upper']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the buy signal for the given dataframe
        :param dataframe: DataFrame
        :param metadata: Additional information, like the currently traded pair
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                (dataframe['close'] < dataframe['bb_lowerband']) &
                (dataframe['sma5'] >= dataframe['sma75']) &
                (dataframe['sma75'] >= dataframe['sma200']) &
                (dataframe['rsi'] < (dataframe['resample_{}_rsi'.format(self.get_ticker_indicator() * 3)] - 5)) &
                (dataframe['volume'] > 0)
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Based on TA indicators, populates the sell signal for the given dataframe
        :param dataframe: DataFrame
        :param metadata: Additional information, like the currently traded pair
        :return: DataFrame with buy column
        """
        dataframe.loc[
            (
                (dataframe['close'] > dataframe['bb_middleband']) &
                (dataframe['rsi'] > dataframe['resample_{}_rsi'.format(self.get_ticker_indicator()*3)] + 5) &
                (dataframe['rsi'] > dataframe['resample_{}_rsi'.format(self.get_ticker_indicator()*6)]) &
                (dataframe['rsi'] > dataframe['resample_{}_rsi'.format(self.get_ticker_indicator()*10)]) &
                (dataframe['volume'] > 0)
            ),
            'sell'] = 1
        return dataframe


================================================
FILE: strategies/BBRSIStrategy/BBRSIStrategy.py
================================================
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# isort: skip_file
# --- Do not remove these libs ---
import numpy as np  # noqa
import pandas as pd  # noqa
from pandas import DataFrame

from freqtrade.strategy.interface import IStrategy

# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib

class BBRSIStrategy(IStrategy):
    # Strategy interface version - allow new iterations of the strategy interface.
    # Check the documentation or the Sample strategy to get the latest version.
    INTERFACE_VERSION = 2

    # Minimal ROI designed for the strategy.
    # This attribute will be overridden if the config file contains "minimal_roi".
    minimal_roi = {
        "0": 0.21547444718127343,
        "21": 0.054918778723794665,
        "48": 0.013037720775643222,
        "125": 0
    }

    # Optimal stoploss designed for the strategy.
    # This attribute will be overridden if the config file contains "stoploss".
    stoploss = -0.3603667187598833

    # Trailing stoploss
    trailing_stop = False
    # trailing_only_offset_is_reached = False
    # trailing_stop_positive = 0.01
    # trailing_stop_positive_offset = 0.0  # Disabled / not configured

    # Optimal ticker interval for the strategy.
    timeframe = '15m'

    # Run "populate_indicators()" only for new candle.
    process_only_new_candles = False

    # These values can be overridden in the "ask_strategy" section in the config.
    use_sell_signal = True
    sell_profit_only = False
    ignore_roi_if_buy_signal = False

    # Number of candles the strategy requires before producing valid signals
    startup_candle_count: int = 30

    # Optional order type mapping.
    order_types = {
        'buy': 'limit',
        'sell': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': False
    }

    # Optional order time in force.
    order_time_in_force = {
        'buy': 'gtc',
        'sell': 'gtc'
    }

    # plot_config = {
    #     'main_plot': {
    #         'tema': {},
    #         'sar': {'color': 'white'},
    #     },
    #     'subplots': {
    #         "MACD": {
    #             'macd': {'color': 'blue'},
    #             'macdsignal': {'color': 'orange'},
    #         },
    #         "RSI": {
    #             'rsi': {'color': 'red'},
    #         }
    #     }
    # }

    def informative_pairs(self):
        """
        Define additional, informative pair/interval combinations to be cached from the exchange.
        These pair/interval combinations are non-tradeable, unless they are part
        of the whitelist as well.
        For more information, please consult the documentation
        :return: List of tuples in the format (pair, interval)
            Sample: return [("ETH/USDT", "5m"),
                            ("BTC/USDT", "15m"),
                            ]
        """
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # RSI
        dataframe['rsi'] = ta.RSI(dataframe)

        # Bollinger bands
        bollinger_1sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=1)
        dataframe['bb_upperband_1sd'] = bollinger_1sd['upper']
        dataframe['bb_lowerband_1sd'] = bollinger_1sd['lower']

        bollinger_4sd = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=4)
        dataframe['bb_lowerband_4sd'] = bollinger_4sd['lower']

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 25) &
                (dataframe['close'] < dataframe['bb_lowerband_1sd'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 95) &
                (dataframe['close'] > dataframe['bb_upperband_1sd'])
            ),
            'sell'] = 1

        return dataframe


================================================
FILE: strategies/BBRSITV/BBRSITV.py
================================================
# --- Do not remove these libs ---
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame, Series
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib
import numpy as np
from freqtrade.strategy import DecimalParameter, IntParameter, stoploss_from_open
from datetime import datetime, timedelta
from functools import reduce

# --------------------------------
def EWO(dataframe, ema_length=5, ema2_length=35):
    df = dataframe.copy()
    ema1 = ta.EMA(df, timeperiod=ema_length)
    ema2 = ta.EMA(df, timeperiod=ema2_length)
    emadif = (ema1 - ema2) / df['close'] * 100
    return emadif

# Volume Weighted Moving Average
def vwma(dataframe: DataFrame, length: int = 10):
    """Indicator: Volume Weighted Moving Average (VWMA)"""
    # Calculate Result
    pv = dataframe['close'] * dataframe['volume']
    vwma = Series(ta.SMA(pv, timeperiod=length) / ta.SMA(dataframe['volume'], timeperiod=length))
    return vwma

# Modified Elder Ray Index
def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
    slow_ma = Series(ta.EMA(vwma(dataframe, length=len_slow_ma), timeperiod=len_slow_ma))
    return slow_ma >= slow_ma.shift(1)  # we just need true & false for ERI trend

class BBRSITV(IStrategy):
    INTERFACE_VERSION = 2

    # Buy hyperspace params:
    buy_params = {
        "ewo_high": 4.86,
        "for_ma_length": 22,
        "for_sigma": 1.74,
    }

    # Sell hyperspace params:
    sell_params = {
        "for_ma_length_sell": 65,
        "for_sigma_sell": 1.895,
        "rsi_high": 72,
    }

    # ROI table:  # value loaded from strategy
    minimal_roi = {
        "0": 0.1
    }

    # Stoploss:
    stoploss = -0.25  # value loaded from strategy

    # Trailing stop:
    trailing_stop = False  # value loaded from strategy
    trailing_stop_positive = 0.005  # value loaded from strategy
    trailing_stop_positive_offset = 0.025  # value loaded from strategy
    trailing_only_offset_is_reached = True  # value loaded from strategy

    # Sell signal
    use_sell_signal = True
    sell_profit_only = False
    sell_profit_offset = 0.01
    ignore_roi_if_buy_signal = False
    process_only_new_candles = True
    startup_candle_count = 30

    protections = [
        #   {
        #       "method": "StoplossGuard",
        #       "lookback_period_candles": 12,
        #       "trade_limit": 1,
        #       "stop_duration_candles": 6,
        #       "only_per_pair": True
        #   },
        #   {
        #       "method": "StoplossGuard",
        #       "lookback_period_candles": 12,
        #       "trade_limit": 2,
        #       "stop_duration_candles": 6,
        #       "only_per_pair": False
        #   },
        {
            "method": "LowProfitPairs",
            "lookback_period_candles": 60,
            "trade_limit": 1,
            "stop_duration": 60,
            "required_profit": -0.05
        },
        {
            "method": "MaxDrawdown",
            "lookback_period_candles": 24,
            "trade_limit": 1,
            "stop_duration_candles": 12,
            "max_allowed_drawdown": 0.2
        },
    ]

    ewo_high = DecimalParameter(0, 7.0, default=buy_params['ewo_high'], space='buy', optimize=True)
    for_sigma = DecimalParameter(0, 10.0, default=buy_params['for_sigma'], space='buy', optimize=True)
    for_sigma_sell = DecimalParameter(0, 10.0, default=sell_params['for_sigma_sell'], space='sell', optimize=True)
    rsi_high = IntParameter(60, 100, default=sell_params['rsi_high'], space='sell', optimize=True)
    for_ma_length = IntParameter(5, 80, default=buy_params['for_ma_length'], space='buy', optimize=True)
    for_ma_length_sell = IntParameter(5, 80, default=sell_params['for_ma_length_sell'], space='sell', optimize=True)

    # Optimal timeframe for the strategy
    timeframe = '5m'

    # Protection
    fast_ewo = 50
    slow_ewo = 200

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # //@version=3
        # study(" RSI + BB (EMA) + Dispersion (2.0)", overlay=false)
        #
        # // Инициализация параметров
        # src = input(title="Source", type=source, defval=close) // Устанавливаем тип цены для расчетов
        src = 'close'
        # for_rsi = input(title="RSI_period", type=integer, defval=14) // Период для RSI
        for_rsi = 14
        # for_ma = input(title="Basis_BB", type=integer, defval=20) // Период для MA внутри BB
        # for_ma = 20
        # for_mult = input(title="Stdev", type=integer, defval=2, minval=1, maxval=5) // Число стандартных отклонений для BB
        for_mult = 2
        # for_sigma = input(title="Dispersion", type=float, defval=0.1, minval=0.01, maxval=1) // Дисперсия вокруг MA
        for_sigma = 0.1
        #
        # // Условия работы скрипта
        # current_rsi = rsi(src, for_rsi) // Текущее положение индикатора RSI
        dataframe['rsi'] = ta.RSI(dataframe[src], for_rsi)
        dataframe['rsi_4'] = ta.RSI(dataframe[src], 4)
        if self.config['runmode'].value == 'hyperopt':
            for for_ma in range(5, 81):
                # basis = ema(current_rsi, for_ma)
                dataframe[f'basis_{for_ma}'] = ta.EMA(dataframe['rsi'], for_ma)
                # dev = for_mult * stdev(current_rsi, for_ma)
                dataframe[f'dev_{for_ma}'] = ta.STDDEV(dataframe['rsi'], for_ma)
                # upper = basis + dev
                #dataframe[f'upper_{for_ma}'] = (dataframe[f'basis_{for_ma}'] + (dataframe[f'dev_{for_ma}'] * for_mult))
                # lower = basis - dev
                #dataframe[f'lower_{for_ma}'] = dataframe[f'basis_{for_ma}'] - (dataframe[f'dev_{for_ma}'] * for_mult)
                # disp_up = basis + ((upper - lower) * for_sigma) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (сверху)
                # dataframe[f'disp_up_{for_ma}'] = dataframe[f'basis_{for_ma}'] + ((dataframe[f'upper_{for_ma}'] - dataframe[f'lower_{for_ma}']) * for_sigma)
                # disp_down = basis - ((upper - lower) * for_sigma) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (снизу)
                # dataframe[f'disp_down_{for_ma}'] = dataframe[f'basis_{for_ma}'] - ((dataframe[f'upper_{for_ma}'] - dataframe[f'lower_{for_ma}']) * for_sigma)
                # color_rsi = current_rsi >= disp_up ? lime : current_rsi <= disp_down ? red : #ffea00 // Текущий цвет RSI, в зависимости от его местоположения внутри BB
        else:
            dataframe[f'basis_{self.for_ma_length.value}'] = ta.EMA(dataframe['rsi'], self.for_ma_length.value)
            dataframe[f'basis_{self.for_ma_length_sell.value}'] = ta.EMA(dataframe['rsi'], self.for_ma_length_sell.value)
            # dev = for_mult * stdev(current_rsi, for_ma)
            dataframe[f'dev_{self.for_ma_length.value}'] = ta.STDDEV(dataframe['rsi'], self.for_ma_length.value)
            dataframe[f'dev_{self.for_ma_length_sell.value}'] = ta.STDDEV(dataframe['rsi'], self.for_ma_length_sell.value)

        #
        # // Дополнительные линии и заливка для областей для RSI
        # h1 = hline(70, color=#d4d4d4, linestyle=dotted, linewidth=1)
        h1 = 70
        # h2 = hline(30, color=#d4d4d4, linestyle=dotted, linewidth=1)
        h2 = 30
        # fill (h1, h2, transp=95)
        #
        # // Алерты и условия срабатывания
        # rsi_Green = crossover(current_rsi, disp_up)
        # rsi_Red = crossunder(current_rsi, disp_down)

        # alertcondition(condition=rsi_Green,
        #      title="RSI cross Above Dispersion Area",
        #      message="The RSI line closing crossed above the Dispersion area.")
        #
        # alertcondition(condition=rsi_Red,
        #      title="RSI cross Under Dispersion Area",
        #      message="The RSI line closing crossed below the Dispersion area")
        #
        # // Результаты и покраска
        # plot(basis, color=black)
        # plot(upper, color=#00fff0, linewidth=2)
        # plot(lower, color=#00fff0, linewidth=2)
        # s1 = plot(disp_up, color=white)
        # s2 = plot(disp_down, color=white)
        # fill(s1, s2, color=white, transp=80)
        # plot(current_rsi, color=color_rsi, linewidth=2)

        dataframe['EWO'] = EWO(dataframe, self.fast_ewo, self.slow_ewo)
        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                # upper = basis + dev
                # lower = basis - dev
                # disp_up = basis + ((upper - lower) * for_sigma) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (сверху)
                # disp_up = basis + ((basis + dev * for_mult) - (basis - dev * for_mult)) * for_sigma) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (сверху)
                # disp_up = basis + (basis + dev * for_mult - basis + dev * for_mult)) * for_sigma) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (сверху)
                # disp_up = basis + (2 * dev * for_sigma * for_mult) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (сверху)
                (dataframe['rsi'] < (dataframe[f'basis_{self.for_ma_length.value}'] - (dataframe[f'dev_{self.for_ma_length.value}'] * self.for_sigma.value))) &
                (dataframe['EWO'] >  self.ewo_high.value) &
                (dataframe['volume'] > 0)

            ),
            'buy'] = 1
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (
                    (dataframe['rsi'] > self.rsi_high.value) |
                    # upper = basis + dev
                    # lower = basis - dev
                    # disp_down = basis - ((upper - lower) * for_sigma) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (снизу)
                    # disp_down = basis - ((2* dev * for_sigma) // Минимально-допустимый порог в области мувинга, который должен преодолеть RSI (снизу)
                    (dataframe['rsi'] > dataframe[f'basis_{self.for_ma_length_sell.value}'] + ((dataframe[f'dev_{self.for_ma_length_sell.value}'] * self.for_sigma_sell.value)))
                ) &
                (dataframe['volume'] > 0)

            ),
            'sell'] = 1
        return dataframe

class BBRSITV4(BBRSITV):
    minimal_roi = {
        "0": 0.07
    }
    ignore_roi_if_buy_signal = True
    startup_candle_count = 400

    stoploss = -0.3  # value loaded from strategy

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] < (dataframe[f'basis_{self.for_ma_length.value}'] - (dataframe[f'dev_{self.for_ma_length.value}'] * self.for_sigma.value)))
                &
                (
                    (
                        (dataframe['EWO'] > self.ewo_high.value)
                        &
                        (dataframe['EWO'] < 10)
                    )
                    |
                    (
                        (dataframe['EWO'] >= 10)
                        &
                        (dataframe['rsi'] < 40)
                    )
                )
                &
                (dataframe['rsi_4'] < 25)
                &
                (dataframe['volume'] > 0)
                # &
                # (dataframe["roc_bbwidth_max"] < 70)
            ),
            'buy'] = 1

        return dataframe

class BBRSITV1(BBRSITV):
    """
    2021-07-01 00:00:00 -> 2021-09-28 00:00:00 | Max open trades : 4
============================================================================= STRATEGY SUMMARY =============================================================================
|              Strategy |   Buys |   Avg Profit % |   Cum Profit % |   Tot Profit USDT |   Tot Profit % |   Avg Duration |   Win  Draw  Loss  Win% |              Drawdown |
|-----------------------+--------+----------------+----------------+-------------------+----------------+----------------+-------------------------+-----------------------|
|         Elliotv8_08SL |    906 |           0.92 |         832.19 |         19770.304 |         659.01 |        0:38:00 |   717     0   189  79.1 | 2020.917 USDT  79.84% |
| SMAOffsetProtectOptV1 |    417 |           1.33 |         555.91 |          8423.809 |         280.79 |        1:44:00 |   300     0   117  71.9 | 1056.072 USDT  61.08% |
|               BBRSITV |    309 |           1.10 |         340.17 |          3869.800 |         128.99 |        2:53:00 |   223     0    86  72.2 |  261.984 USDT  25.84% |
============================================================================================================================================================================
    """
    INTERFACE_VERSION = 2

    # Buy hyperspace params:
    buy_params = {
        "ewo_high": 4.964,
        "for_ma_length": 12,
        "for_sigma": 2.313,
    }

    # Sell hyperspace params:
    sell_params = {
        "for_ma_length_sell": 78,
        "for_sigma_sell": 1.67,
        "rsi_high": 60,
    }

    # ROI table:  # value loaded from strategy
    minimal_roi = {
        "0": 0.1
    }

    # Stoploss:
    stoploss = -0.25  # value loaded from strategy

    # Trailing stop:
    trailing_stop = False  # value loaded from strategy
    trailing_stop_positive = 0.005  # value loaded from strategy
    trailing_stop_positive_offset = 0.025  # value loaded from strategy
    trailing_only_offset_is_reached = True  # value loaded from strategy

class BBRSITV2(BBRSITV):
    """
    2021-07-01 00:00:00 -> 2021-09-28 00:00:00 | Max open trades : 4
============================================================================= STRATEGY SUMMARY =============================================================================
|              Strategy |   Buys |   Avg Profit % |   Cum Profit % |   Tot Profit USDT |   Tot Profit % |   Avg Duration |   Win  Draw  Loss  Win% |              Drawdown |
|-----------------------+--------+----------------+----------------+-------------------+----------------+----------------+-------------------------+-----------------------|
|         Elliotv8_08SL |    906 |           0.92 |         832.19 |         19770.304 |         659.01 |        0:38:00 |   717     0   189  79.1 | 2020.917 USDT  79.84% |
| SMAOffsetProtectOptV1 |    417 |           1.33 |         555.91 |          8423.809 |         280.79 |        1:44:00 |   300     0   117  71.9 | 1056.072 USDT  61.08% |
|               BBRSITV |    486 |           1.11 |         537.58 |          7689.862 |         256.33 |        5:01:00 |   287     0   199  59.1 | 1279.461 USDT  75.45% |
============================================================================================================================================================================
    """
    # Buy hyperspace params:
    buy_params = {
        "ewo_high": 4.85,
        "for_ma_length": 11,
        "for_sigma": 2.066,
    }

    # Sell hyperspace params:
    sell_params = {
        "for_ma_length_sell": 61,
        "for_sigma_sell": 1.612,
        "rsi_high": 87,
    }

    # ROI table:  # value loaded from strategy
    minimal_roi = {
        "0": 0.1
    }

    # Stoploss:
    stoploss = -0.25  # value loaded from strategy

    # Trailing stop:
    trailing_stop = False  # value loaded from strategy
    trailing_stop_positive = 0.005  # value loaded from strategy
    trailing_stop_positive_offset = 0.025  # value loaded from strategy
    trailing_only_offset_is_reached = True  # value loaded from strategy


class BBRSITV3(BBRSITV):
    """

    2021-07-01 00:00:00 -> 2021-09-28 00:00:00 | Max open trades : 4
    ============================================================================== STRATEGY SUMMARY =============================================================================
    |              Strategy |   Buys |   Avg Profit % |   Cum Profit % |   Tot Profit USDT |   Tot Profit % |   Avg Duration |   Win  Draw  Loss  Win% |               Drawdown |
    |-----------------------+--------+----------------+----------------+-------------------+----------------+----------------+-------------------------+------------------------|
    |         Elliotv8_08SL |    906 |           0.92 |         832.19 |         19770.304 |         659.01 |        0:38:00 |   717     0   189  79.1 | 2020.917 USDT   79.84% |
    | SMAOffsetProtectOptV1 |    417 |           1.33 |         555.91 |          8423.809 |         280.79 |        1:44:00 |   300     0   117  71.9 | 1056.072 USDT   61.08% |
    |               BBRSITV |    627 |           1.14 |         715.85 |         12998.605 |         433.29 |        5:35:00 |   374     0   253  59.6 | 2294.408 USDT  100.60% |
    ============================================================================================================================================================================="""
    INTERFACE_VERSION = 2

    # Buy hyperspace params:
    buy_params = {
        "ewo_high": 4.86,
        "for_ma_length": 22,
        "for_sigma": 1.74,
    }

    # Sell hyperspace params:
    sell_params = {
        "for_ma_length_sell": 65,
        "for_sigma_sell": 1.895,
        "rsi_high": 72,
    }

    # ROI table:  # value loaded from strategy
    minimal_roi = {
        "0": 0.1
    }

    # Stoploss:
    stoploss = -0.25  # value loaded from strategy

    # Trailing stop:
    trailing_stop = True
    trailing_stop_positive = 0.078
    trailing_stop_positive_offset = 0.095
    trailing_only_offset_is_reached = False
    
class BBRSITV5(BBRSITV):
    minimal_roi = {
        "0": 0.04
    }
    ignore_roi_if_buy_signal = True
    startup_candle_count = 400
    use_custom_stoploss = True

    stoploss = -0.3  # value loaded from strategy
    sell_params = {
        ##
        "pHSL": -0.178,
        "pPF_1": 0.01,
        "pPF_2": 0.048,
        "pSL_1": 0.009,
        "pSL_2": 0.043,
    }
    
    is_optimize_trailing = True
    pHSL = DecimalParameter(-0.200, -0.040, default=-0.08, decimals=3, space='sell', optimize=is_optimize_trailing , load=True)
    # profit threshold 1, trigger point, SL_1 is used
    pPF_1 = DecimalParameter(0.008, 0.020, default=0.016, decimals=3, space='sell', optimize=is_optimize_trailing , load=True)
    pSL_1 = DecimalParameter(0.008, 0.020, default=0.011, decimals=3, space='sell', optimize=is_optimize_trailing , load=True)

    # profit threshold 2, SL_2 is used
    pPF_2 = DecimalParameter(0.040, 0.100, default=0.080, decimals=3, space='sell', optimize=is_optimize_trailing , load=True)
    pSL_2 = DecimalParameter(0.020, 0.070, default=0.040, decimals=3, space='sell', optimize=is_optimize_trailing , load=True)

    def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
                        current_rate: float, current_profit: float, **kwargs) -> float:

        # hard stoploss profit
        HSL = self.pHSL.value
        PF_1 = self.pPF_1.value
        SL_1 = self.pSL_1.value
        PF_2 = self.pPF_2.value
        SL_2 = self.pSL_2.value

        # For profits between PF_1 and PF_2 the stoploss (sl_profit) used is linearly interpolated
        # between the values of SL_1 and SL_2. For all profits above PL_2 the sl_profit value
        # rises linearly with current profit, for profits below PF_1 the hard stoploss profit is used.

        if (current_profit > PF_2):
            sl_profit = SL_2 + (current_profit - PF_2)
        elif (current_profit > PF_1):
            sl_profit = SL_1 + ((current_profit - PF_1) * (SL_2 - SL_1) / (PF_2 - PF_1))
        else:
            sl_profit = HSL

        # Only for hyperopt invalid return
        if (sl_profit >= current_profit):
            return -0.99

        return stoploss_from_open(sl_profit, current_profit)

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] < (dataframe[f'basis_{self.for_ma_length.value}'] - (dataframe[f'dev_{self.for_ma_length.value}'] * self.for_sigma.value)))
                &
                (
                    (
                        (dataframe['EWO'] > self.ewo_high.value)
                        &
                        (dataframe['EWO'] < 10)
                    )
                    |
                    (
                        (dataframe['EWO'] >= 10)
      
Download .txt
gitextract_m9eikmuu/

├── LICENSE
├── README.md
└── strategies/
    ├── ADXMomentum/
    │   └── ADXMomentum.py
    ├── ADX_15M_USDT/
    │   └── ADX_15M_USDT.py
    ├── ADX_15M_USDT2/
    │   └── ADX_15M_USDT2.py
    ├── ASDTSRockwellTrading/
    │   └── ASDTSRockwellTrading.py
    ├── ActionZone/
    │   └── ActionZone.py
    ├── AdxSmas/
    │   └── AdxSmas.py
    ├── AlligatorStrat/
    │   └── AlligatorStrat.py
    ├── AlligatorStrategy/
    │   └── AlligatorStrategy.py
    ├── AlwaysBuy/
    │   └── AlwaysBuy.py
    ├── Apollo11/
    │   └── Apollo11.py
    ├── AverageStrategy/
    │   └── AverageStrategy.py
    ├── AwesomeMacd/
    │   └── AwesomeMacd.py
    ├── BBMod1/
    │   └── BBMod1.py
    ├── BBRSI/
    │   └── BBRSI.py
    ├── BBRSI2/
    │   └── BBRSI2.py
    ├── BBRSI21/
    │   └── BBRSI21.py
    ├── BBRSI3366/
    │   └── BBRSI3366.py
    ├── BBRSI4cust/
    │   └── BBRSI4cust.py
    ├── BBRSINaiveStrategy/
    │   └── BBRSINaiveStrategy.py
    ├── BBRSIOptim2020Strategy/
    │   └── BBRSIOptim2020Strategy.py
    ├── BBRSIOptimStrategy/
    │   └── BBRSIOptimStrategy.py
    ├── BBRSIOptimizedStrategy/
    │   └── BBRSIOptimizedStrategy.py
    ├── BBRSIS/
    │   └── BBRSIS.py
    ├── BBRSIStrategy/
    │   └── BBRSIStrategy.py
    ├── BBRSITV/
    │   └── BBRSITV.py
    ├── BBRSIoriginal/
    │   └── BBRSIoriginal.py
    ├── BBRSIv2/
    │   └── BBRSIv2.py
    ├── BB_RPB_TSL/
    │   └── BB_RPB_TSL.py
    ├── BB_RPB_TSL_2/
    │   └── BB_RPB_TSL_2.py
    ├── BB_RPB_TSL_BI/
    │   └── BB_RPB_TSL_BI.py
    ├── BB_RPB_TSL_BIV1/
    │   └── BB_RPB_TSL_BIV1.py
    ├── BB_RPB_TSL_RNG/
    │   └── BB_RPB_TSL_RNG.py
    ├── BB_RPB_TSL_RNG_2/
    │   └── BB_RPB_TSL_RNG_2.py
    ├── BB_RPB_TSL_RNG_TBS/
    │   └── BB_RPB_TSL_RNG_TBS.py
    ├── BB_RPB_TSL_RNG_TBS_GOLD/
    │   └── BB_RPB_TSL_RNG_TBS_GOLD.py
    ├── BB_RPB_TSL_RNG_VWAP/
    │   └── BB_RPB_TSL_RNG_VWAP.py
    ├── BB_RPB_TSL_SMA_Tranz/
    │   └── BB_RPB_TSL_SMA_Tranz.py
    ├── BB_RPB_TSL_SMA_Tranz_TB_1_1_1/
    │   └── BB_RPB_TSL_SMA_Tranz_TB_1_1_1.py
    ├── BB_RPB_TSL_SMA_Tranz_TB_MOD/
    │   └── BB_RPB_TSL_SMA_Tranz_TB_MOD.py
    ├── BB_RPB_TSL_Tranz/
    │   └── BB_RPB_TSL_Tranz.py
    ├── BB_RPB_TSL_c7c477d_20211030/
    │   └── BB_RPB_TSL_c7c477d_20211030.py
    ├── BB_RPB_TSLmeneguzzo/
    │   └── BB_RPB_TSLmeneguzzo.py
    ├── BB_RSI/
    │   └── BB_RSI.py
    ├── BB_Strategy04/
    │   └── BB_Strategy04.py
    ├── BBands/
    │   └── BBands.py
    ├── BBandsRSI/
    │   └── BBandsRSI.py
    ├── BBlower/
    │   └── BBlower.py
    ├── Babico_SMA5xBBmid/
    │   └── Babico_SMA5xBBmid.py
    ├── Bandtastic/
    │   └── Bandtastic.py
    ├── BbRoi/
    │   └── BbRoi.py
    ├── BbandRsi/
    │   └── BbandRsi.py
    ├── BbandRsiRolling/
    │   └── BbandRsiRolling.py
    ├── BcmbigzDevelop/
    │   └── BcmbigzDevelop.py
    ├── BcmbigzV1/
    │   └── BcmbigzV1.py
    ├── BigPete/
    │   └── BigPete.py
    ├── BigZ03/
    │   └── BigZ03.py
    ├── BigZ0307HO/
    │   └── BigZ0307HO.py
    ├── BigZ03HO/
    │   └── BigZ03HO.py
    ├── BigZ04/
    │   └── BigZ04.py
    ├── BigZ0407/
    │   └── BigZ0407.py
    ├── BigZ0407HO/
    │   └── BigZ0407HO.py
    ├── BigZ04HO/
    │   └── BigZ04HO.py
    ├── BigZ04HO2/
    │   └── BigZ04HO2.py
    ├── BigZ04_TSL3/
    │   └── BigZ04_TSL3.py
    ├── BigZ04_TSL4/
    │   └── BigZ04_TSL4.py
    ├── BigZ06/
    │   └── BigZ06.py
    ├── BigZ07/
    │   └── BigZ07.py
    ├── BigZ07Next/
    │   └── BigZ07Next.py
    ├── BigZ07Next2/
    │   └── BigZ07Next2.py
    ├── BinClucMad/
    │   └── BinClucMad.py
    ├── BinClucMadDevelop/
    │   └── BinClucMadDevelop.py
    ├── BinClucMadSMADevelop/
    │   └── BinClucMadSMADevelop.py
    ├── BinClucMadV1/
    │   └── BinClucMadV1.py
    ├── BinHV27/
    │   └── BinHV27.py
    ├── BinHV45/
    │   └── BinHV45.py
    ├── BinHV45HO/
    │   └── BinHV45HO.py
    ├── BreakEven/
    │   └── BreakEven.py
    ├── BuyAllSellAllStrategy/
    │   └── BuyAllSellAllStrategy.py
    ├── BuyOnly/
    │   └── BuyOnly.py
    ├── CBPete9/
    │   └── CBPete9.py
    ├── CCIStrategy/
    │   └── CCIStrategy.py
    ├── CMCWinner/
    │   └── CMCWinner.py
    ├── Cci/
    │   └── Cci.py
    ├── Chandem/
    │   └── Chandem.py
    ├── Chandemtwo/
    │   └── Chandemtwo.py
    ├── Chispei/
    │   └── Chispei.py
    ├── Cluc4/
    │   └── Cluc4.py
    ├── Cluc4werk/
    │   └── Cluc4werk.py
    ├── Cluc5werk/
    │   └── Cluc5werk.py
    ├── Cluc7werk/
    │   └── Cluc7werk.py
    ├── ClucFiatROI/
    │   └── ClucFiatROI.py
    ├── ClucFiatSlow/
    │   └── ClucFiatSlow.py
    ├── ClucHAnix/
    │   └── ClucHAnix.py
    ├── ClucHAnix5m/
    │   └── ClucHAnix5m.py
    ├── ClucHAnix_5m/
    │   └── ClucHAnix_5m.py
    ├── ClucHAnix_5m1/
    │   └── ClucHAnix_5m1.py
    ├── ClucHAnix_BB_RPB_MOD/
    │   └── ClucHAnix_BB_RPB_MOD.py
    ├── ClucHAnix_BB_RPB_MOD2_ROI/
    │   └── ClucHAnix_BB_RPB_MOD2_ROI.py
    ├── ClucHAnix_BB_RPB_MOD_CTT/
    │   └── ClucHAnix_BB_RPB_MOD_CTT.py
    ├── ClucHAnix_BB_RPB_MOD_E0V1E_ROI/
    │   └── ClucHAnix_BB_RPB_MOD_E0V1E_ROI.py
    ├── ClucHAnix_hhll/
    │   └── ClucHAnix_hhll.py
    ├── ClucHAwerk/
    │   └── ClucHAwerk.py
    ├── ClucMay72018/
    │   └── ClucMay72018.py
    ├── CofiBitStrategy/
    │   └── CofiBitStrategy.py
    ├── CombinedBinHAndCluc/
    │   └── CombinedBinHAndCluc.py
    ├── CombinedBinHAndCluc2021/
    │   └── CombinedBinHAndCluc2021.py
    ├── CombinedBinHAndCluc2021Bull/
    │   └── CombinedBinHAndCluc2021Bull.py
    ├── CombinedBinHAndClucHyperV0/
    │   └── CombinedBinHAndClucHyperV0.py
    ├── CombinedBinHAndClucHyperV3/
    │   └── CombinedBinHAndClucHyperV3.py
    ├── CombinedBinHAndClucV2/
    │   └── CombinedBinHAndClucV2.py
    ├── CombinedBinHAndClucV3/
    │   └── CombinedBinHAndClucV3.py
    ├── CombinedBinHAndClucV4/
    │   └── CombinedBinHAndClucV4.py
    ├── CombinedBinHAndClucV5/
    │   └── CombinedBinHAndClucV5.py
    ├── CombinedBinHAndClucV5Hyperoptable/
    │   └── CombinedBinHAndClucV5Hyperoptable.py
    ├── CombinedBinHAndClucV6/
    │   └── CombinedBinHAndClucV6.py
    ├── CombinedBinHAndClucV6H/
    │   └── CombinedBinHAndClucV6H.py
    ├── CombinedBinHAndClucV7/
    │   └── CombinedBinHAndClucV7.py
    ├── CombinedBinHAndClucV8/
    │   └── CombinedBinHAndClucV8.py
    ├── CombinedBinHAndClucV8Hyper/
    │   └── CombinedBinHAndClucV8Hyper.py
    ├── CombinedBinHAndClucV8XH/
    │   └── CombinedBinHAndClucV8XH.py
    ├── CombinedBinHAndClucV8XHO/
    │   └── CombinedBinHAndClucV8XHO.py
    ├── CombinedBinHClucAndMADV3/
    │   └── CombinedBinHClucAndMADV3.py
    ├── CombinedBinHClucAndMADV5/
    │   └── CombinedBinHClucAndMADV5.py
    ├── CombinedBinHClucAndMADV6/
    │   └── CombinedBinHClucAndMADV6.py
    ├── CombinedBinHClucAndMADV9/
    │   └── CombinedBinHClucAndMADV9.py
    ├── Combined_Indicators/
    │   └── Combined_Indicators.py
    ├── Combined_NFIv6_SMA/
    │   └── Combined_NFIv6_SMA.py
    ├── Combined_NFIv7_SMA/
    │   └── Combined_NFIv7_SMA.py
    ├── Combined_NFIv7_SMA_Rallipanos_20210707/
    │   └── Combined_NFIv7_SMA_Rallipanos_20210707.py
    ├── Combined_NFIv7_SMA_bAdBoY_20211204/
    │   └── Combined_NFIv7_SMA_bAdBoY_20211204.py
    ├── CoreStrategy/
    │   └── CoreStrategy.py
    ├── CrossEMAStrategy/
    │   └── CrossEMAStrategy.py
    ├── CryptoFrog/
    │   └── CryptoFrog.py
    ├── CryptoFrogHO/
    │   └── CryptoFrogHO.py
    ├── CryptoFrogHO2/
    │   └── CryptoFrogHO2.py
    ├── CryptoFrogHO2A/
    │   └── CryptoFrogHO2A.py
    ├── CryptoFrogHO3A1/
    │   └── CryptoFrogHO3A1.py
    ├── CryptoFrogHO3A2/
    │   └── CryptoFrogHO3A2.py
    ├── CryptoFrogHO3A3/
    │   └── CryptoFrogHO3A3.py
    ├── CryptoFrogHO3A4/
    │   └── CryptoFrogHO3A4.py
    ├── CryptoFrogNFI/
    │   └── CryptoFrogNFI.py
    ├── CryptoFrogNFIHO1A/
    │   └── CryptoFrogNFIHO1A.py
    ├── CryptoFrogOffset/
    │   └── CryptoFrogOffset.py
    ├── CustomStoplossWithPSAR/
    │   └── CustomStoplossWithPSAR.py
    ├── DCBBBounce/
    │   └── DCBBBounce.py
    ├── DD/
    │   └── DD.py
    ├── DIV_v1/
    │   └── DIV_v1.py
    ├── DevilStra/
    │   └── DevilStra.py
    ├── Diamond/
    │   └── Diamond.py
    ├── Divergences/
    │   └── Divergences.py
    ├── Dracula/
    │   └── Dracula.py
    ├── Dyna_opti/
    │   └── Dyna_opti.py
    ├── EI3v2_tag_cofi_green/
    │   └── EI3v2_tag_cofi_green.py
    ├── EMA50/
    │   └── EMA50.py
    ├── EMA520015_V17/
    │   └── EMA520015_V17.py
    ├── EMABBRSI/
    │   └── EMABBRSI.py
    ├── EMABreakout/
    │   └── EMABreakout.py
    ├── EMASkipPump/
    │   └── EMASkipPump.py
    ├── EMAVolume/
    │   └── EMAVolume.py
    ├── EMA_CROSSOVER_STRATEGY/
    │   └── EMA_CROSSOVER_STRATEGY.py
    ├── EXPERIMENTAL_STRATEGY/
    │   └── EXPERIMENTAL_STRATEGY.py
    ├── ElliotV2/
    │   └── ElliotV2.py
    ├── ElliotV4/
    │   └── ElliotV4.py
    ├── ElliotV531/
    │   └── ElliotV531.py
    ├── ElliotV5HO/
    │   └── ElliotV5HO.py
    ├── ElliotV5HOMod2/
    │   └── ElliotV5HOMod2.py
    ├── ElliotV5HOMod3/
    │   └── ElliotV5HOMod3.py
    ├── ElliotV7/
    │   └── ElliotV7.py
    ├── ElliotV8HO/
    │   └── ElliotV8HO.py
    ├── ElliotV8_original/
    │   └── ElliotV8_original.py
    ├── ElliotV8_original_ichiv2/
    │   └── ElliotV8_original_ichiv2.py
    ├── ElliotV8_original_ichiv3/
    │   └── ElliotV8_original_ichiv3.py
    ├── Elliotv8/
    │   └── Elliotv8.py
    ├── FRAYSTRAT/
    │   └── FRAYSTRAT.py
    ├── Fakebuy/
    │   └── Fakebuy.py
    ├── FastSupertrend/
    │   └── FastSupertrend.py
    ├── FastSupertrendOpt/
    │   └── FastSupertrendOpt.py
    ├── FiveMinCrossAbove/
    │   └── FiveMinCrossAbove.py
    ├── FixedRiskRewardLoss/
    │   └── FixedRiskRewardLoss.py
    ├── ForexSignal/
    │   └── ForexSignal.py
    ├── FrostAuraM115mStrategy/
    │   └── FrostAuraM115mStrategy.py
    ├── FrostAuraM11hStrategy/
    │   └── FrostAuraM11hStrategy.py
    ├── FrostAuraM21hStrategy/
    │   └── FrostAuraM21hStrategy.py
    ├── FrostAuraM315mStrategy/
    │   └── FrostAuraM315mStrategy.py
    ├── FrostAuraM31hStrategy/
    │   └── FrostAuraM31hStrategy.py
    ├── FrostAuraRandomStrategy/
    │   └── FrostAuraRandomStrategy.py
    ├── GodCard/
    │   └── GodCard.py
    ├── GodStraNew/
    │   └── GodStraNew.py
    ├── GodStraNew40/
    │   └── GodStraNew40.py
    ├── GodStraNew_SMAonly/
    │   └── GodStraNew_SMAonly.py
    ├── Guacamole/
    │   └── Guacamole.py
    ├── Gumbo1/
    │   └── Gumbo1.py
    ├── Hacklemore2/
    │   └── Hacklemore2.py
    ├── Hacklemore3/
    │   └── Hacklemore3.py
    ├── HansenSmaOffsetV1/
    │   └── HansenSmaOffsetV1.py
    ├── HarmonicDivergence/
    │   └── HarmonicDivergence.py
    ├── Heracles/
    │   └── Heracles.py
    ├── HourBasedStrategy/
    │   └── HourBasedStrategy.py
    ├── HyperStra_GSN_SMAOnly/
    │   └── HyperStra_GSN_SMAOnly.py
    ├── HyperStra_SMAOnly/
    │   └── HyperStra_SMAOnly.py
    ├── INSIDEUP/
    │   └── INSIDEUP.py
    ├── Ichess/
    │   └── Ichess.py
    ├── Ichi/
    │   └── Ichi.py
    ├── Ichimoku/
    │   └── Ichimoku.py
    ├── Ichimoku_SenkouSpanCross/
    │   └── Ichimoku_SenkouSpanCross.py
    ├── Ichimoku_v12/
    │   └── Ichimoku_v12.py
    ├── Ichimoku_v30/
    │   └── Ichimoku_v30.py
    ├── Ichimoku_v31/
    │   └── Ichimoku_v31.py
    ├── Ichimoku_v32/
    │   └── Ichimoku_v32.py
    ├── Ichimoku_v33/
    │   └── Ichimoku_v33.py
    ├── Ichimoku_v37/
    │   └── Ichimoku_v37.py
    ├── InformativeSample/
    │   └── InformativeSample.py
    ├── Inverse/
    │   └── Inverse.py
    ├── InverseV2/
    │   └── InverseV2.py
    ├── JustROCR/
    │   └── JustROCR.py
    ├── JustROCR3/
    │   └── JustROCR3.py
    ├── JustROCR5/
    │   └── JustROCR5.py
    ├── JustROCR6/
    │   └── JustROCR6.py
    ├── KAMACCIRSI/
    │   └── KAMACCIRSI.py
    ├── KC_BB/
    │   └── KC_BB.py
    ├── Kamaflage/
    │   └── Kamaflage.py
    ├── Leveraged/
    │   └── Leveraged.py
    ├── LookaheadStrategy/
    │   └── LookaheadStrategy.py
    ├── Low_BB/
    │   └── Low_BB.py
    ├── LuxOSC/
    │   └── LuxOSC.py
    ├── MAC/
    │   └── MAC.py
    ├── MACDCCI/
    │   └── MACDCCI.py
    ├── MACDRSI200/
    │   └── MACDRSI200.py
    ├── MACDStrategy/
    │   └── MACDStrategy.py
    ├── MACDStrategy_crossed/
    │   └── MACDStrategy_crossed.py
    ├── MACD_EMA/
    │   └── MACD_EMA.py
    ├── MACD_TRIPLE_MA/
    │   └── MACD_TRIPLE_MA.py
    ├── MACD_TRI_EMA/
    │   └── MACD_TRI_EMA.py
    ├── MADisplaceV3/
    │   └── MADisplaceV3.py
    ├── MFI/
    │   └── MFI.py
    ├── Macd/
    │   └── Macd.py
    ├── MacheteV8b/
    │   └── MacheteV8b.py
    ├── MacheteV8bRallimod2/
    │   └── MacheteV8bRallimod2.py
    ├── MarketChyperHyperStrategy/
    │   └── MarketChyperHyperStrategy.py
    ├── Maro4hMacdSd/
    │   └── Maro4hMacdSd.py
    ├── Martin/
    │   └── Martin.py
    ├── MiniLambo/
    │   └── MiniLambo.py
    ├── Minmax/
    │   └── Minmax.py
    ├── MomStrategy/
    │   └── MomStrategy.py
    ├── Momentumv2/
    │   └── Momentumv2.py
    ├── MontrealStrategy/
    │   └── MontrealStrategy.py
    ├── MostOfAll/
    │   └── MostOfAll.py
    ├── MultiMA_TSL/
    │   └── MultiMA_TSL.py
    ├── MultiMA_TSL3/
    │   └── MultiMA_TSL3.py
    ├── MultiMA_TSL3_Mod/
    │   └── MultiMA_TSL3_Mod.py
    ├── MultiMa/
    │   └── MultiMa.py
    ├── MultiOffsetLamboV0/
    │   └── MultiOffsetLamboV0.py
    ├── MultiRSI/
    │   └── MultiRSI.py
    ├── NASOSRv6_private_Reinuvader_20211121/
    │   └── NASOSRv6_private_Reinuvader_20211121.py
    ├── NASOSv4/
    │   └── NASOSv4.py
    ├── NASOSv5/
    │   └── NASOSv5.py
    ├── NASOSv5_mod1/
    │   └── NASOSv5_mod1.py
    ├── NASOSv5_mod1_DanMod/
    │   └── NASOSv5_mod1_DanMod.py
    ├── NASOSv5_mod2/
    │   └── NASOSv5_mod2.py
    ├── NASOSv5_mod3/
    │   └── NASOSv5_mod3.py
    ├── NFI46/
    │   └── NFI46.py
    ├── NFI46Frog/
    │   └── NFI46Frog.py
    ├── NFI46FrogZ/
    │   └── NFI46FrogZ.py
    ├── NFI46Offset/
    │   └── NFI46Offset.py
    ├── NFI46OffsetHOA1/
    │   └── NFI46OffsetHOA1.py
    ├── NFI46Z/
    │   └── NFI46Z.py
    ├── NFI47V2/
    │   └── NFI47V2.py
    ├── NFI4Frog/
    │   └── NFI4Frog.py
    ├── NFI5MOHO/
    │   └── NFI5MOHO.py
    ├── NFI5MOHO2/
    │   └── NFI5MOHO2.py
    ├── NFI5MOHO_WIP/
    │   └── NFI5MOHO_WIP.py
    ├── NFI5MOHO_WIP_1/
    │   └── NFI5MOHO_WIP_1.py
    ├── NFI5MOHO_WIP_2/
    │   └── NFI5MOHO_WIP_2.py
    ├── NFI731_BUSD/
    │   └── NFI731_BUSD.py
    ├── NFI7MOHO/
    │   └── NFI7MOHO.py
    ├── NFINextMOHO/
    │   └── NFINextMOHO.py
    ├── NFINextMOHO2/
    │   └── NFINextMOHO2.py
    ├── NFINextMultiOffsetAndHO/
    │   └── NFINextMultiOffsetAndHO.py
    ├── NFINextMultiOffsetAndHO2/
    │   └── NFINextMultiOffsetAndHO2.py
    ├── NFIX_BB_RPB/
    │   └── NFIX_BB_RPB.py
    ├── NFIX_BB_RPB_c7c477d_20211030/
    │   └── NFIX_BB_RPB_c7c477d_20211030.py
    ├── NfiNextModded/
    │   └── NfiNextModded.py
    ├── NormalizerStrategy/
    │   └── NormalizerStrategy.py
    ├── NormalizerStrategyHO2/
    │   └── NormalizerStrategyHO2.py
    ├── Nostalgia/
    │   └── Nostalgia.py
    ├── NostalgiaForInfinityNext/
    │   └── NostalgiaForInfinityNext.py
    ├── NostalgiaForInfinityNextGen/
    │   └── NostalgiaForInfinityNextGen.py
    ├── NostalgiaForInfinityNextGen_TSL/
    │   └── NostalgiaForInfinityNextGen_TSL.py
    ├── NostalgiaForInfinityNextV7155/
    │   └── NostalgiaForInfinityNextV7155.py
    ├── NostalgiaForInfinityNext_ChangeToTower_V5_2/
    │   └── NostalgiaForInfinityNext_ChangeToTower_V5_2.py
    ├── NostalgiaForInfinityNext_ChangeToTower_V5_3/
    │   └── NostalgiaForInfinityNext_ChangeToTower_V5_3.py
    ├── NostalgiaForInfinityNext_ChangeToTower_V6/
    │   └── NostalgiaForInfinityNext_ChangeToTower_V6.py
    ├── NostalgiaForInfinityNext_maximizer/
    │   └── NostalgiaForInfinityNext_maximizer.py
    ├── NostalgiaForInfinityV1/
    │   └── NostalgiaForInfinityV1.py
    ├── NostalgiaForInfinityV2/
    │   └── NostalgiaForInfinityV2.py
    ├── NostalgiaForInfinityV3/
    │   └── NostalgiaForInfinityV3.py
    ├── NostalgiaForInfinityV4/
    │   └── NostalgiaForInfinityV4.py
    ├── NostalgiaForInfinityV4HO/
    │   └── NostalgiaForInfinityV4HO.py
    ├── NostalgiaForInfinityV5/
    │   └── NostalgiaForInfinityV5.py
    ├── NostalgiaForInfinityV5MultiOffsetAndHO/
    │   └── NostalgiaForInfinityV5MultiOffsetAndHO.py
    ├── NostalgiaForInfinityV5MultiOffsetAndHO2/
    │   └── NostalgiaForInfinityV5MultiOffsetAndHO2.py
    ├── NostalgiaForInfinityV6/
    │   └── NostalgiaForInfinityV6.py
    ├── NostalgiaForInfinityV6HO/
    │   └── NostalgiaForInfinityV6HO.py
    ├── NostalgiaForInfinityV7/
    │   └── NostalgiaForInfinityV7.py
    ├── NostalgiaForInfinityV7_7_2/
    │   └── NostalgiaForInfinityV7_7_2.py
    ├── NostalgiaForInfinityV7_SMA/
    │   └── NostalgiaForInfinityV7_SMA.py
    ├── NostalgiaForInfinityV7_SMAv2/
    │   └── NostalgiaForInfinityV7_SMAv2.py
    ├── NostalgiaForInfinityV7_SMAv2_1/
    │   └── NostalgiaForInfinityV7_SMAv2_1.py
    ├── NostalgiaForInfinityX/
    │   └── NostalgiaForInfinityX.py
    ├── NostalgiaForInfinityX2/
    │   └── NostalgiaForInfinityX2.py
    ├── NostalgiaForInfinityXw/
    │   └── NostalgiaForInfinityXw.py
    ├── NotAnotherSMAOffSetStrategy_V2/
    │   └── NotAnotherSMAOffSetStrategy_V2.py
    ├── NotAnotherSMAOffsetStrategy/
    │   └── NotAnotherSMAOffsetStrategy.py
    ├── NotAnotherSMAOffsetStrategyHO/
    │   └── NotAnotherSMAOffsetStrategyHO.py
    ├── NotAnotherSMAOffsetStrategyHOv3/
    │   └── NotAnotherSMAOffsetStrategyHOv3.py
    ├── NotAnotherSMAOffsetStrategyLite/
    │   └── NotAnotherSMAOffsetStrategyLite.py
    ├── NotAnotherSMAOffsetStrategyModHO/
    │   └── NotAnotherSMAOffsetStrategyModHO.py
    ├── NotAnotherSMAOffsetStrategyModHO_LamineDz_20210901/
    │   └── NotAnotherSMAOffsetStrategyModHO_LamineDz_20210901.py
    ├── NotAnotherSMAOffsetStrategyX1/
    │   └── NotAnotherSMAOffsetStrategyX1.py
    ├── NotAnotherSMAOffsetStrategy_uzi/
    │   └── NotAnotherSMAOffsetStrategy_uzi.py
    ├── NotAnotherSMAOffsetStrategy_uzi3/
    │   └── NotAnotherSMAOffsetStrategy_uzi3.py
    ├── NowoIchimoku1hV1/
    │   └── NowoIchimoku1hV1.py
    ├── NowoIchimoku1hV2/
    │   └── NowoIchimoku1hV2.py
    ├── NowoIchimoku5mV2/
    │   └── NowoIchimoku5mV2.py
    ├── ONUR/
    │   └── ONUR.py
    ├── ObeliskIM_v1_1/
    │   └── ObeliskIM_v1_1.py
    ├── ObeliskRSI_v6_1/
    │   └── ObeliskRSI_v6_1.py
    ├── Obelisk_3EMA_StochRSI_ATR/
    │   └── Obelisk_3EMA_StochRSI_ATR.py
    ├── Obelisk_Ichimoku_Slow_v1_3/
    │   └── Obelisk_Ichimoku_Slow_v1_3.py
    ├── Obelisk_Ichimoku_ZEMA_v1/
    │   └── Obelisk_Ichimoku_ZEMA_v1.py
    ├── Obelisk_TradePro_Ichi_v1_1/
    │   └── Obelisk_TradePro_Ichi_v1_1.py
    ├── Obelisk_TradePro_Ichi_v2_1/
    │   └── Obelisk_TradePro_Ichi_v2_1.py
    ├── PRICEFOLLOWING/
    │   └── PRICEFOLLOWING.py
    ├── PRICEFOLLOWING2/
    │   └── PRICEFOLLOWING2.py
    ├── PRICEFOLLOWINGX/
    │   └── PRICEFOLLOWINGX.py
    ├── Persia/
    │   └── Persia.py
    ├── PrawnstarOBV/
    │   └── PrawnstarOBV.py
    ├── PumpDetector/
    │   └── PumpDetector.py
    ├── Quickie/
    │   └── Quickie.py
    ├── RSI/
    │   └── RSI.py
    ├── RSIBB02/
    │   └── RSIBB02.py
    ├── RSIv2/
    │   └── RSIv2.py
    ├── RalliV1/
    │   └── RalliV1.py
    ├── RalliV1_disable56/
    │   └── RalliV1_disable56.py
    ├── RaposaDivergenceV1/
    │   └── RaposaDivergenceV1.py
    ├── ReinforcedAverageStrategy/
    │   └── ReinforcedAverageStrategy.py
    ├── ReinforcedQuickie/
    │   └── ReinforcedQuickie.py
    ├── ReinforcedSmoothScalp/
    │   └── ReinforcedSmoothScalp.py
    ├── Renko/
    │   └── Renko.py
    ├── RobotradingBody/
    │   └── RobotradingBody.py
    ├── Roth01/
    │   └── Roth01.py
    ├── Roth03/
    │   └── Roth03.py
    ├── SAR/
    │   └── SAR.py
    ├── SMAIP3/
    │   └── SMAIP3.py
    ├── SMAIP3v2/
    │   └── SMAIP3v2.py
    ├── SMAOG/
    │   └── SMAOG.py
    ├── SMAOPv1_TTF/
    │   └── SMAOPv1_TTF.py
    ├── SMAOffset/
    │   └── SMAOffset.py
    ├── SMAOffsetProtectOpt/
    │   └── SMAOffsetProtectOpt.py
    ├── SMAOffsetProtectOptV0/
    │   └── SMAOffsetProtectOptV0.py
    ├── SMAOffsetProtectOptV1/
    │   └── SMAOffsetProtectOptV1.py
    ├── SMAOffsetProtectOptV1HO1/
    │   └── SMAOffsetProtectOptV1HO1.py
    ├── SMAOffsetProtectOptV1Mod/
    │   └── SMAOffsetProtectOptV1Mod.py
    ├── SMAOffsetProtectOptV1Mod2/
    │   └── SMAOffsetProtectOptV1Mod2.py
    ├── SMAOffsetProtectOptV1_kkeue_20210619/
    │   └── SMAOffsetProtectOptV1_kkeue_20210619.py
    ├── SMAOffsetV2/
    │   └── SMAOffsetV2.py
    ├── SMA_BBRSI/
    │   └── SMA_BBRSI.py
    ├── SRsi/
    │   └── SRsi.py
    ├── STRATEGY_RSI_BB_BOUNDS_CROSS/
    │   └── STRATEGY_RSI_BB_BOUNDS_CROSS.py
    ├── STRATEGY_RSI_BB_CROSS/
    │   └── STRATEGY_RSI_BB_CROSS.py
    ├── SampleStrategy/
    │   └── SampleStrategy.py
    ├── SampleStrategyV2/
    │   └── SampleStrategyV2.py
    ├── Saturn5/
    │   └── Saturn5.py
    ├── Scalp/
    │   └── Scalp.py
    ├── Schism/
    │   └── Schism.py
    ├── Schism2/
    │   └── Schism2.py
    ├── Schism2MM/
    │   └── Schism2MM.py
    ├── Schism3/
    │   └── Schism3.py
    ├── Schism4/
    │   └── Schism4.py
    ├── Schism5/
    │   └── Schism5.py
    ├── Schism6/
    │   └── Schism6.py
    ├── Seb/
    │   └── Seb.py
    ├── Simple/
    │   └── Simple.py
    ├── SlowPotato/
    │   └── SlowPotato.py
    ├── Slowbro/
    │   └── Slowbro.py
    ├── SmoothOperator/
    │   └── SmoothOperator.py
    ├── SmoothScalp/
    │   └── SmoothScalp.py
    ├── Stavix2/
    │   └── Stavix2.py
    ├── Stinkfist/
    │   └── Stinkfist.py
    ├── StochRSITEMA/
    │   └── StochRSITEMA.py
    ├── Strategy001/
    │   └── Strategy001.py
    ├── Strategy001_custom_sell/
    │   └── Strategy001_custom_sell.py
    ├── Strategy002/
    │   └── Strategy002.py
    ├── Strategy003/
    │   └── Strategy003.py
    ├── Strategy004/
    │   └── Strategy004.py
    ├── Strategy005/
    │   └── Strategy005.py
    ├── StrategyScalpingFast/
    │   └── StrategyScalpingFast.py
    ├── StrategyScalpingFast2/
    │   └── StrategyScalpingFast2.py
    ├── SuperHV27/
    │   └── SuperHV27.py
    ├── SuperTrend/
    │   └── SuperTrend.py
    ├── SuperTrendPure/
    │   └── SuperTrendPure.py
    ├── SupertrendStrategy/
    │   └── SupertrendStrategy.py
    ├── SwingHigh/
    │   └── SwingHigh.py
    ├── SwingHighToSky/
    │   └── SwingHighToSky.py
    ├── TDSequentialStrategy/
    │   └── TDSequentialStrategy.py
    ├── TEMA/
    │   └── TEMA.py
    ├── TechnicalExampleStrategy/
    │   └── TechnicalExampleStrategy.py
    ├── TemaMaster/
    │   └── TemaMaster.py
    ├── TemaMaster3/
    │   └── TemaMaster3.py
    ├── TemaPure/
    │   └── TemaPure.py
    ├── TemaPureNeat/
    │   └── TemaPureNeat.py
    ├── TemaPureTwo/
    │   └── TemaPureTwo.py
    ├── TenderEnter/
    │   └── TenderEnter.py
    ├── TheForce/
    │   └── TheForce.py
    ├── TheRealPullbackV2/
    │   └── TheRealPullbackV2.py
    ├── TrailingBuyStrat2/
    │   └── TrailingBuyStrat2.py
    ├── Trend_Strength_Directional/
    │   └── Trend_Strength_Directional.py
    ├── TrixStrategy/
    │   └── TrixStrategy.py
    ├── TrixV15Strategy/
    │   └── TrixV15Strategy.py
    ├── TrixV21Strategy/
    │   └── TrixV21Strategy.py
    ├── TrixV23Strategy/
    │   └── TrixV23Strategy.py
    ├── UltimateMomentumIndicator/
    │   └── UltimateMomentumIndicator.py
    ├── Uptrend/
    │   └── Uptrend.py
    ├── UziChan/
    │   └── UziChan.py
    ├── UziChan2/
    │   └── UziChan2.py
    ├── VWAP/
    │   └── VWAP.py
    ├── WaveTrendStra/
    │   └── WaveTrendStra.py
    ├── XebTradeStrat/
    │   └── XebTradeStrat.py
    ├── XtraThicc/
    │   └── XtraThicc.py
    ├── YOLO/
    │   └── YOLO.py
    ├── adaptive/
    │   └── adaptive.py
    ├── adx_opt_strat/
    │   └── adx_opt_strat.py
    ├── adxbbrsi2/
    │   └── adxbbrsi2.py
    ├── bb_rsi_opt_new/
    │   └── bb_rsi_opt_new.py
    ├── bbema/
    │   └── bbema.py
    ├── bbrsi1_strategy/
    │   └── bbrsi1_strategy.py
    ├── bbrsi4Freq/
    │   └── bbrsi4Freq.py
    ├── bestV2/
    │   └── bestV2.py
    ├── botbaby/
    │   └── botbaby.py
    ├── conny/
    │   └── conny.py
    ├── cryptohassle/
    │   └── cryptohassle.py
    ├── custom/
    │   └── custom.py
    ├── custom_sell/
    │   └── custom_sell.py
    ├── e6v34/
    │   └── e6v34.py
    ├── ema/
    │   └── ema.py
    ├── epretrace/
    │   └── epretrace.py
    ├── fahmibah/
    │   └── fahmibah.py
    ├── flawless_lambo/
    │   └── flawless_lambo.py
    ├── hansencandlepatternV1/
    │   └── hansencandlepatternV1.py
    ├── heikin/
    │   └── heikin.py
    ├── hlhb/
    │   └── hlhb.py
    ├── ichiV1/
    │   └── ichiV1.py
    ├── ichiV1_Marius/
    │   └── ichiV1_Marius.py
    ├── keltnerchannel/
    │   └── keltnerchannel.py
    ├── mabStra/
    │   └── mabStra.py
    ├── macd_recovery/
    │   └── macd_recovery.py
    ├── mark_strat/
    │   └── mark_strat.py
    ├── mark_strat_opt/
    │   └── mark_strat_opt.py
    ├── quantumfirst/
    │   └── quantumfirst.py
    ├── redditMA/
    │   └── redditMA.py
    ├── stoploss/
    │   └── stoploss.py
    ├── stratfib/
    │   └── stratfib.py
    ├── strato/
    │   └── strato.py
    ├── true_lambo/
    │   └── true_lambo.py
    └── wtc/
        └── wtc.py
Download .txt
Showing preview only (531K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5082 symbols across 465 files)

FILE: strategies/ADXMomentum/ADXMomentum.py
  class ADXMomentum (line 10) | class ADXMomentum(IStrategy):
    method populate_indicators (line 37) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 46) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 58) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ADX_15M_USDT/ADX_15M_USDT.py
  class ADX_15M_USDT (line 11) | class ADX_15M_USDT(IStrategy):
    method populate_indicators (line 25) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 40) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 52) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ADX_15M_USDT2/ADX_15M_USDT2.py
  class ADX_15M_USDT2 (line 11) | class ADX_15M_USDT2(IStrategy):
    method populate_indicators (line 25) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 40) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 52) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ASDTSRockwellTrading/ASDTSRockwellTrading.py
  class ASDTSRockwellTrading (line 13) | class ASDTSRockwellTrading(IStrategy):
    method populate_indicators (line 50) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 59) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 74) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ActionZone/ActionZone.py
  class ActionZone (line 18) | class ActionZone(IStrategy):
    method custom_stoploss (line 88) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_stake_amount (line 101) | def custom_stake_amount(self, pair: str, current_time: datetime, curre...
    method informative_pairs (line 111) | def informative_pairs(self):
    method populate_indicators (line 124) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 149) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 166) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/AdxSmas/AdxSmas.py
  class AdxSmas (line 11) | class AdxSmas(IStrategy):
    method populate_indicators (line 35) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 42) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 52) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/AlligatorStrat/AlligatorStrat.py
  class AlligatorStrat (line 10) | class AlligatorStrat(IStrategy):
    method populate_indicators (line 36) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 68) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 95) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/AlligatorStrategy/AlligatorStrategy.py
  class AlligatorStrategy (line 18) | class AlligatorStrategy(IStrategy):
    method informative_pairs (line 138) | def informative_pairs(self):
    method populate_indicators (line 151) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 182) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 203) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/AlwaysBuy/AlwaysBuy.py
  class AlwaysBuy (line 5) | class AlwaysBuy(IStrategy):
    method populate_indicators (line 32) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_entry_trend (line 36) | def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -...
    method populate_exit_trend (line 42) | def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Apollo11/Apollo11.py
  function to_minutes (line 12) | def to_minutes(**timdelta_kwargs):
  class Apollo11 (line 16) | class Apollo11(IStrategy):
    method protections (line 69) | def protections(self):
    method populate_indicators (line 110) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 156) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 192) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 197) | def custom_stoploss(

FILE: strategies/AverageStrategy/AverageStrategy.py
  class AverageStrategy (line 10) | class AverageStrategy(IStrategy):
    method populate_indicators (line 32) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 39) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 53) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/AwesomeMacd/AwesomeMacd.py
  class AwesomeMacd (line 11) | class AwesomeMacd(IStrategy):
    method populate_indicators (line 35) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 46) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 57) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBMod1/BBMod1.py
  function ha_typical_price (line 17) | def ha_typical_price(bars):
  function vwma (line 23) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 32) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  function EWO (line 37) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function range_percent_change (line 45) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 64) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 84) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  function vmap_b (line 106) | def vmap_b(dataframe, window_size=20, num_of_std=1):
  function top_percent_change (line 115) | def top_percent_change(dataframe: DataFrame, length: int) -> float:
  class BBMod1 (line 128) | class BBMod1(IStrategy):
    method informative_pairs (line 407) | def informative_pairs(self):
    method informative_1h_indicators (line 414) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method custom_stoploss (line 484) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 524) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method normal_tf_indicators (line 579) | def normal_tf_indicators(self, dataframe: DataFrame) -> DataFrame:
    method populate_indicators (line 757) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 768) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1050) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function pmax (line 1056) | def pmax(df, period, multiplier, length, ma_type, src):
  function momdiv (line 1135) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...
  function t3 (line 1157) | def t3(dataframe, length=5):

FILE: strategies/BBRSI/BBRSI.py
  class bbrsi (line 15) | class bbrsi(IStrategy):
    method informative_pairs (line 83) | def informative_pairs(self):
    method populate_indicators (line 96) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 110) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 120) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSI2/BBRSI2.py
  class BBRSI2 (line 12) | class BBRSI2(IStrategy):
    method populate_indicators (line 38) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 51) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 61) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSI21/BBRSI21.py
  class BBRSI21 (line 11) | class BBRSI21(IStrategy):
    method populate_indicators (line 43) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 54) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 73) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSI3366/BBRSI3366.py
  class BBRSI3366 (line 11) | class BBRSI3366(IStrategy):
    method populate_indicators (line 43) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 59) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 81) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSI4cust/BBRSI4cust.py
  class BBRSI4cust (line 19) | class BBRSI4cust(IStrategy):
    method populate_indicators (line 100) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_entry_trend (line 127) | def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -...
    method populate_exit_trend (line 140) | def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_exit (line 154) | def custom_exit(self, pair: str, trade: 'Trade', current_time: 'dateti...

FILE: strategies/BBRSINaiveStrategy/BBRSINaiveStrategy.py
  class BBRSINaiveStrategy (line 16) | class BBRSINaiveStrategy(IStrategy):
    method informative_pairs (line 80) | def informative_pairs(self):
    method populate_indicators (line 93) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 106) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 117) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSIOptim2020Strategy/BBRSIOptim2020Strategy.py
  class BBRSIOptim2020Strategy (line 17) | class BBRSIOptim2020Strategy(IStrategy):
    method informative_pairs (line 84) | def informative_pairs(self):
    method populate_indicators (line 97) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 111) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 121) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSIOptimStrategy/BBRSIOptimStrategy.py
  class BBRSIOptimStrategy (line 17) | class BBRSIOptimStrategy(IStrategy):
    method informative_pairs (line 84) | def informative_pairs(self):
    method populate_indicators (line 97) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 111) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 121) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSIOptimizedStrategy/BBRSIOptimizedStrategy.py
  class BBRSIOptimizedStrategy (line 16) | class BBRSIOptimizedStrategy(IStrategy):
    method informative_pairs (line 81) | def informative_pairs(self):
    method populate_indicators (line 94) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 107) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 117) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSIS/BBRSIS.py
  class BBRSIS (line 9) | class BBRSIS(IStrategy):
    method get_ticker_indicator (line 40) | def get_ticker_indicator(self):
    method populate_indicators (line 43) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 85) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 104) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSIStrategy/BBRSIStrategy.py
  class BBRSIStrategy (line 15) | class BBRSIStrategy(IStrategy):
    method informative_pairs (line 83) | def informative_pairs(self):
    method populate_indicators (line 96) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 110) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 120) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSITV/BBRSITV.py
  function EWO (line 12) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function vwma (line 20) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 28) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  class BBRSITV (line 32) | class BBRSITV(IStrategy):
    method populate_indicators (line 116) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 190) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 207) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class BBRSITV4 (line 224) | class BBRSITV4(BBRSITV):
    method populate_buy_trend (line 233) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
  class BBRSITV1 (line 262) | class BBRSITV1(BBRSITV):
  class BBRSITV2 (line 303) | class BBRSITV2(BBRSITV):
  class BBRSITV3 (line 343) | class BBRSITV3(BBRSITV):
  class BBRSITV5 (line 384) | class BBRSITV5(BBRSITV):
    method custom_stoploss (line 412) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_buy_trend (line 439) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/BBRSIoriginal/BBRSIoriginal.py
  class BBRSIoriginal (line 11) | class BBRSIoriginal(IStrategy):
    method populate_indicators (line 45) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 79) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 95) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBRSIv2/BBRSIv2.py
  class BBRSIv2 (line 15) | class BBRSIv2(IStrategy):
    method custom_stoploss (line 68) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 86) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 107) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 142) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BB_RPB_TSL/BB_RPB_TSL.py
  function ha_typical_price (line 17) | def ha_typical_price(bars):
  function vwma (line 22) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 30) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  function EWO (line 34) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 41) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 50) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 66) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 85) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSL (line 105) | class BB_RPB_TSL(IStrategy):
    method informative_pairs (line 360) | def informative_pairs(self):
    method informative_1h_indicators (line 367) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method custom_stoploss (line 444) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 460) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 583) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method normal_tf_indicators (line 606) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 771) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 782) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1054) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function pmax (line 1062) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 1152) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...
  function T3 (line 1172) | def T3(dataframe, length=5):

FILE: strategies/BB_RPB_TSL_2/BB_RPB_TSL_2.py
  function ha_typical_price (line 17) | def ha_typical_price(bars):
  function EWO (line 21) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 28) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 37) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 53) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 72) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSL_2 (line 92) | class BB_RPB_TSL_2(IStrategy):
    method informative_pairs (line 312) | def informative_pairs(self):
    method custom_stoploss (line 328) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 344) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 432) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method informative_1h_indicators (line 460) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method informative_5m_indicators (line 520) | def informative_5m_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 652) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 782) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 796) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1204) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function pmax (line 1212) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 1302) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...

FILE: strategies/BB_RPB_TSL_BI/BB_RPB_TSL_BI.py
  function ha_typical_price (line 17) | def ha_typical_price(bars):
  function EWO (line 21) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 28) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 37) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 53) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 72) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSL_BI (line 92) | class BB_RPB_TSL_BI(IStrategy):
    method informative_pairs (line 313) | def informative_pairs(self):
    method informative_1h_indicators (line 320) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method custom_stoploss (line 384) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 400) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 488) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method normal_tf_indicators (line 516) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 646) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 657) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 878) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function pmax (line 886) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 976) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...

FILE: strategies/BB_RPB_TSL_BIV1/BB_RPB_TSL_BIV1.py
  function ha_typical_price (line 17) | def ha_typical_price(bars):
  function EWO (line 21) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 28) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 37) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 53) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 72) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSL_BIV1 (line 92) | class BB_RPB_TSL_BIV1(IStrategy):
    method informative_pairs (line 313) | def informative_pairs(self):
    method informative_1h_indicators (line 320) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method custom_stoploss (line 384) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 400) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 488) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method normal_tf_indicators (line 516) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 646) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 657) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 878) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function pmax (line 886) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 976) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...

FILE: strategies/BB_RPB_TSL_RNG/BB_RPB_TSL_RNG.py
  function EWO (line 16) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function williams_r (line 24) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  class BB_RPB_TSL_RNG (line 42) | class BB_RPB_TSL_RNG(IStrategy):
    method informative_pairs (line 183) | def informative_pairs(self):
    method custom_stoploss (line 192) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 221) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 327) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 452) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BB_RPB_TSL_RNG_2/BB_RPB_TSL_RNG_2.py
  function EWO (line 16) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function williams_r (line 24) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  class BB_RPB_TSL_RNG_2 (line 42) | class BB_RPB_TSL_RNG_2(IStrategy):
    method informative_pairs (line 183) | def informative_pairs(self):
    method custom_stoploss (line 192) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 221) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 327) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 452) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BB_RPB_TSL_RNG_TBS/BB_RPB_TSL_RNG_TBS.py
  function EWO (line 17) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function williams_r (line 25) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  class BB_RPB_TSL_RNG_TBS (line 43) | class BB_RPB_TSL_RNG_TBS(IStrategy):
    method informative_pairs (line 184) | def informative_pairs(self):
    method custom_stoploss (line 201) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 230) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 340) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 465) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class TrailingBuyStrat2 (line 497) | class TrailingBuyStrat2(BB_RPB_TSL_RNG_TBS):
    method trailing_buy (line 534) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 542) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 564) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 571) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 618) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 623) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 704) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/BB_RPB_TSL_RNG_TBS_GOLD/BB_RPB_TSL_RNG_TBS_GOLD.py
  function EWO (line 17) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function williams_r (line 25) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  class BB_RPB_TSL_RNG_TBS_GOLD (line 43) | class BB_RPB_TSL_RNG_TBS_GOLD(IStrategy):
    method informative_pairs (line 184) | def informative_pairs(self):
    method custom_stoploss (line 201) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 230) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 340) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 465) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class TrailingBuyStrat2 (line 497) | class TrailingBuyStrat2(BB_RPB_TSL_RNG_TBS_GOLD):
    method trailing_buy (line 534) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 542) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 564) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 571) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 618) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 623) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 704) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/BB_RPB_TSL_RNG_VWAP/BB_RPB_TSL_RNG_VWAP.py
  function EWO (line 16) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function williams_r (line 24) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function vmap_b (line 46) | def vmap_b(dataframe, window_size=20, num_of_std=1):
  function top_percent_change (line 55) | def top_percent_change(dataframe: DataFrame, length: int) -> float:
  class BB_RPB_TSL_RNG_VWAP (line 69) | class BB_RPB_TSL_RNG_VWAP(IStrategy):
    method informative_pairs (line 226) | def informative_pairs(self):
    method custom_stoploss (line 235) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 275) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 389) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 527) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BB_RPB_TSL_SMA_Tranz/BB_RPB_TSL_SMA_Tranz.py
  function ha_typical_price (line 32) | def ha_typical_price(bars):
  function VWAPB (line 36) | def VWAPB(dataframe, window_size=20, num_of_std=1):
  function vwma (line 45) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 53) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  function EWO (line 57) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 64) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 73) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 89) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 108) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  function HA (line 128) | def HA(dataframe, smoothing=None):
  function pump_warning (line 154) | def pump_warning(dataframe, perc=15):
  function pump_warning2 (line 162) | def pump_warning2(dataframe, params):
  function dump_warning (line 212) | def dump_warning(dataframe, buy_threshold):
  function ewo (line 233) | def ewo(dataframe, sma1_length=5, sma2_length=35):
  function ema_vwma_osc (line 240) | def ema_vwma_osc(dataframe, len_slow_ma):
  function pivot_points (line 244) | def pivot_points(dataframe: DataFrame, mode = 'fibonacci') -> Series:
  function heikin_ashi (line 264) | def heikin_ashi(dataframe, smooth_inputs = False, smooth_outputs = False...
  function pmax (line 298) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 388) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...
  function pct_change (line 408) | def pct_change(a, b):
  function T3 (line 411) | def T3(dataframe, length=5):
  class BB_RPB_TSL_SMA_Tranz (line 433) | class BB_RPB_TSL_SMA_Tranz(IStrategy):
    class HyperOpt (line 631) | class HyperOpt:
      method generate_roi_table (line 633) | def generate_roi_table(params: dict):
      method roi_space (line 654) | def roi_space() -> List[Dimension]:
    method get_ticker_indicator (line 1439) | def get_ticker_indicator(self):
    method range_percent_change (line 1444) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 1460) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 1473) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1483) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1493) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1503) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 1515) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 1532) | def informative_pairs(self):
    method informative_1h_indicators (line 1540) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method informative_15m_indicators (line 1702) | def informative_15m_indicators(self, dataframe: DataFrame, metadata: d...
    method custom_sell (line 1770) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 1936) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method confirm_trade_entry (line 1958) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method confirm_trade_exit (line 1981) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method normal_tf_indicators (line 1987) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_btc_indicators (line 2287) | def populate_btc_indicators(self, dataframe: DataFrame, metadata: dict...
    method populate_indicators (line 2302) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 2333) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 3371) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class UziChanTB2 (line 3460) | class UziChanTB2(BB_RPB_TSL_SMA_Tranz):
    method trailing_buy (line 3510) | def trailing_buy(self, pair, reinit=False):
    method trailing_sell (line 3518) | def trailing_sell(self, pair, reinit=False):
    method trailing_buy_info (line 3527) | def trailing_buy_info(self, pair: str, current_price: float):
    method trailing_sell_info (line 3551) | def trailing_sell_info(self, pair: str, current_price: float):
    method current_trailing_buy_profit_ratio (line 3573) | def current_trailing_buy_profit_ratio(self, pair: str, current_price: ...
    method current_trailing_sell_profit_ratio (line 3580) | def current_trailing_sell_profit_ratio(self, pair: str, current_price:...
    method trailing_buy_offset (line 3589) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method trailing_sell_offset (line 3636) | def trailing_sell_offset(self, dataframe, pair: str, current_price: fl...
    method populate_indicators (line 3685) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 3691) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method confirm_trade_exit (line 3766) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method populate_buy_trend (line 3845) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 3869) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BB_RPB_TSL_SMA_Tranz_TB_1_1_1/BB_RPB_TSL_SMA_Tranz_TB_1_1_1.py
  function ha_typical_price (line 29) | def ha_typical_price(bars):
  function vwma (line 34) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 42) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  function EWO (line 46) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 53) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 62) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 78) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 97) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSL_SMA_Tranz_TB_1_1_1 (line 117) | class BB_RPB_TSL_SMA_Tranz_TB_1_1_1(IStrategy):
    method get_ticker_indicator (line 952) | def get_ticker_indicator(self):
    method range_percent_change (line 957) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 973) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 986) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 996) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1006) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1016) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 1028) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 1045) | def informative_pairs(self):
    method informative_1h_indicators (line 1053) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method informative_15m_indicators (line 1216) | def informative_15m_indicators(self, dataframe: DataFrame, metadata: d...
    method custom_sell (line 1283) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 1449) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method normal_tf_indicators (line 1472) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1700) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 1714) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2641) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class BB_RPB_TSL_Tranz_TrailingBuy (line 2729) | class BB_RPB_TSL_Tranz_TrailingBuy(BB_RPB_TSL_SMA_Tranz_TB_1_1_1):
    method trailing_buy (line 2766) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 2774) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 2796) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 2803) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 2850) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 2855) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 2936) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
  function ewo (line 2962) | def ewo(dataframe, sma1_length=5, sma2_length=35):
  function ema_vwma_osc (line 2969) | def ema_vwma_osc(dataframe, len_slow_ma):
  function pivot_points (line 2973) | def pivot_points(dataframe: DataFrame, mode = 'fibonacci') -> Series:
  function heikin_ashi (line 2993) | def heikin_ashi(dataframe, smooth_inputs = False, smooth_outputs = False...
  function pmax (line 3027) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 3117) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...
  function T3 (line 3137) | def T3(dataframe, length=5):

FILE: strategies/BB_RPB_TSL_SMA_Tranz_TB_MOD/BB_RPB_TSL_SMA_Tranz_TB_MOD.py
  function ha_typical_price (line 30) | def ha_typical_price(bars):
  function vwma (line 35) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 43) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  function EWO (line 47) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 54) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 63) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 79) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 98) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  function HA (line 118) | def HA(dataframe, smoothing=None):
  function pump_warning (line 144) | def pump_warning(dataframe, perc=15):
  function ewo (line 154) | def ewo(dataframe, sma1_length=5, sma2_length=35):
  function ema_vwma_osc (line 161) | def ema_vwma_osc(dataframe, len_slow_ma):
  function pivot_points (line 165) | def pivot_points(dataframe: DataFrame, mode = 'fibonacci') -> Series:
  function heikin_ashi (line 185) | def heikin_ashi(dataframe, smooth_inputs = False, smooth_outputs = False...
  function pmax (line 219) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 309) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...
  function pct_change (line 329) | def pct_change(a, b):
  function T3 (line 332) | def T3(dataframe, length=5):
  class BB_RPB_TSL_SMA_Tranz_TB_MOD (line 354) | class BB_RPB_TSL_SMA_Tranz_TB_MOD(IStrategy):
    method protections (line 1284) | def protections(self):
    method pump_warning2 (line 1301) | def pump_warning2(self, dataframe):
    method get_ticker_indicator (line 1314) | def get_ticker_indicator(self):
    method range_percent_change (line 1319) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 1335) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 1348) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1358) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1368) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1378) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 1390) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 1407) | def informative_pairs(self):
    method informative_1h_indicators (line 1416) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method custom_stoploss (line 1579) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_15m_indicators (line 1593) | def informative_15m_indicators(self, dataframe: DataFrame, metadata: d...
    method custom_sell (line 1660) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 1826) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method normal_tf_indicators (line 1849) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 2113) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 2132) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2964) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class BB_RPB_TSL_Tranz_TrailingBuy (line 3052) | class BB_RPB_TSL_Tranz_TrailingBuy(BB_RPB_TSL_SMA_Tranz_TB):
    method trailing_buy (line 3089) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 3097) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 3119) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 3126) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 3173) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 3178) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 3259) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/BB_RPB_TSL_Tranz/BB_RPB_TSL_Tranz.py
  function ha_typical_price (line 28) | def ha_typical_price(bars):
  function vwma (line 33) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 41) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  function EWO (line 45) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 52) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 61) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 77) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 96) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSL_Tranz (line 116) | class BB_RPB_TSL_Tranz(IStrategy):
    method informative_pairs (line 389) | def informative_pairs(self):
    method informative_1h_indicators (line 397) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method informative_15m_indicators (line 491) | def informative_15m_indicators(self, dataframe: DataFrame, metadata: d...
    method custom_stoploss (line 558) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 574) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 697) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method normal_tf_indicators (line 720) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 911) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 925) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1544) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class BB_RPB_TSL_Tranz_TrailingBuy (line 1550) | class BB_RPB_TSL_Tranz_TrailingBuy(BB_RPB_TSL_Tranz):
    method trailing_buy (line 1587) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 1595) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 1617) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 1624) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 1671) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 1676) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 1757) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
  function ewo (line 1782) | def ewo(dataframe, sma1_length=5, sma2_length=35):
  function ema_vwma_osc (line 1789) | def ema_vwma_osc(dataframe, len_slow_ma):
  function pivot_points (line 1793) | def pivot_points(dataframe: DataFrame, mode = 'fibonacci') -> Series:
  function heikin_ashi (line 1813) | def heikin_ashi(dataframe, smooth_inputs = False, smooth_outputs = False...
  function pmax (line 1847) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 1937) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...
  function T3 (line 1957) | def T3(dataframe, length=5):

FILE: strategies/BB_RPB_TSL_c7c477d_20211030/BB_RPB_TSL_c7c477d_20211030.py
  function EWO (line 16) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function williams_r (line 24) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 43) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSL_c7c477d_20211030 (line 63) | class BB_RPB_TSL_c7c477d_20211030(IStrategy):
    method informative_pairs (line 206) | def informative_pairs(self):
    method informative_1h_indicators (line 214) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method custom_stoploss (line 237) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method normal_tf_indicators (line 266) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 367) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 377) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 503) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BB_RPB_TSLmeneguzzo/BB_RPB_TSLmeneguzzo.py
  function ha_typical_price (line 17) | def ha_typical_price(bars):
  function vwma (line 22) | def vwma(dataframe: DataFrame, length: int = 10):
  function moderi (line 30) | def moderi(dataframe: DataFrame, len_slow_ma: int = 32) -> Series:
  function EWO (line 34) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function SROC (line 41) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function range_percent_change (line 50) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function williams_r (line 65) | def williams_r(dataframe: DataFrame, period: int = 14) -> Series:
  function chaikin_money_flow (line 84) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class BB_RPB_TSLmeneguzzo (line 104) | class BB_RPB_TSLmeneguzzo(IStrategy):
    method informative_pairs (line 330) | def informative_pairs(self):
    method informative_1h_indicators (line 337) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method custom_stoploss (line 414) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 430) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method confirm_trade_entry (line 542) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method normal_tf_indicators (line 565) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 730) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 741) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 954) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function pmax (line 962) | def pmax(df, period, multiplier, length, MAtype, src):
  function momdiv (line 1052) | def momdiv(dataframe: DataFrame, mom_length: int = 10, bb_length: int = ...
  function T3 (line 1072) | def T3(dataframe, length=5):

FILE: strategies/BB_RSI/BB_RSI.py
  class BB_RSI (line 12) | class BB_RSI(IStrategy):
    method informative_pairs (line 60) | def informative_pairs(self):
    method populate_indicators (line 73) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 94) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 111) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BB_Strategy04/BB_Strategy04.py
  class BB_Strategy04 (line 16) | class BB_Strategy04(IStrategy):
    method informative_pairs (line 94) | def informative_pairs(self):
    method populate_indicators (line 107) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 130) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 149) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBands/BBands.py
  class BBands (line 19) | class BBands(IStrategy):
    method plot_config (line 91) | def plot_config(self):
    method informative_pairs (line 110) | def informative_pairs(self):
    method populate_indicators (line 123) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 343) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 360) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBandsRSI/BBandsRSI.py
  class BBandsRSI (line 19) | class BBandsRSI(IStrategy):
    method plot_config (line 89) | def plot_config(self):
    method populate_indicators (line 107) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 145) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 162) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BBlower/BBlower.py
  class BBlower (line 20) | class BBlower(IStrategy):
    method informative_pairs (line 63) | def informative_pairs(self):
    method populate_indicators (line 76) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 115) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 146) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Babico_SMA5xBBmid/Babico_SMA5xBBmid.py
  class Babico_SMA5xBBmid (line 8) | class Babico_SMA5xBBmid(IStrategy):
    method populate_indicators (line 38) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 49) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 57) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Bandtastic/Bandtastic.py
  class Bandtastic (line 22) | class Bandtastic(IStrategy):
    method populate_indicators (line 66) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 93) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 127) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BbRoi/BbRoi.py
  class BbRoi (line 11) | class BbRoi(IStrategy):
    method populate_indicators (line 41) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 57) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 70) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BbandRsi/BbandRsi.py
  class BbandRsi (line 11) | class BbandRsi(IStrategy):
    method populate_indicators (line 35) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 46) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 56) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BbandRsiRolling/BbandRsiRolling.py
  class BbandRsiRolling (line 12) | class BbandRsiRolling(IStrategy):
    method populate_indicators (line 45) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 59) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 69) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BcmbigzDevelop/BcmbigzDevelop.py
  class BcmbigzDevelop (line 23) | class BcmbigzDevelop(IStrategy):
    method confirm_trade_exit (line 348) | def confirm_trade_exit(
    method custom_sell (line 375) | def custom_sell(
    method custom_stoploss (line 439) | def custom_stoploss(
    method informative_pairs (line 485) | def informative_pairs(self):
    method informative_1h_indicators (line 490) | def informative_1h_indicators(
    method normal_tf_indicators (line 528) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 576) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 588) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1194) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function SSLChannels (line 1234) | def SSLChannels(dataframe, length=7):
  function MFV (line 1249) | def MFV(dataframe):

FILE: strategies/BcmbigzV1/BcmbigzV1.py
  class BcmbigzV1 (line 13) | class BcmbigzV1(IStrategy):
    method confirm_trade_exit (line 117) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 135) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 151) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 188) | def informative_pairs(self):
    method informative_1h_indicators (line 193) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 210) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 238) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 248) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 513) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function MFV (line 525) | def MFV(dataframe):

FILE: strategies/BigPete/BigPete.py
  function EWO (line 58) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class BigPete (line 66) | class BigPete(IStrategy):
    method confirm_trade_exit (line 235) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 240) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 248) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 272) | def informative_pairs(self):
    method informative_1h_indicators (line 277) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 294) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 328) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 338) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 506) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ03/BigZ03.py
  class BigZ03 (line 54) | class BigZ03(IStrategy):
    method custom_stoploss (line 158) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 196) | def informative_pairs(self):
    method informative_1h_indicators (line 201) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 213) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 240) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 250) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 443) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ0307HO/BigZ0307HO.py
  class BigZ0307HO (line 55) | class BigZ0307HO(IStrategy):
    method custom_sell (line 447) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 612) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method range_percent_change (line 650) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 666) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 679) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 689) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 699) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 709) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 721) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 736) | def informative_pairs(self):
    method informative_1h_indicators (line 741) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 800) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 871) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 881) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1074) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 1163) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 1171) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/BigZ03HO/BigZ03HO.py
  class BigZ03HO (line 54) | class BigZ03HO(IStrategy):
    method custom_stoploss (line 181) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 219) | def informative_pairs(self):
    method informative_1h_indicators (line 224) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 236) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 263) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 273) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 466) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ04/BigZ04.py
  class BigZ04 (line 54) | class BigZ04(IStrategy):
    method confirm_trade_exit (line 158) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 164) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 170) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 208) | def informative_pairs(self):
    method informative_1h_indicators (line 213) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 230) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 257) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 267) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 516) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ0407/BigZ0407.py
  class BigZ0407 (line 55) | class BigZ0407(IStrategy):
    method confirm_trade_exit (line 422) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 427) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 592) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method range_percent_change (line 630) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 646) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 659) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 669) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 679) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 689) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 701) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 716) | def informative_pairs(self):
    method informative_1h_indicators (line 721) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 780) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 851) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 861) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1109) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 1198) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 1206) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/BigZ0407HO/BigZ0407HO.py
  class BigZ0407HO (line 55) | class BigZ0407HO(IStrategy):
    method confirm_trade_exit (line 460) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 465) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 630) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method range_percent_change (line 668) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 684) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 697) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 707) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 717) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 727) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 739) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 754) | def informative_pairs(self):
    method informative_1h_indicators (line 759) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 818) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 889) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 899) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1147) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 1236) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 1244) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/BigZ04HO/BigZ04HO.py
  class BigZ04HO (line 54) | class BigZ04HO(IStrategy):
    method confirm_trade_exit (line 175) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 181) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 187) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 225) | def informative_pairs(self):
    method informative_1h_indicators (line 230) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 247) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 274) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 284) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 533) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ04HO2/BigZ04HO2.py
  class BigZ04HO2 (line 54) | class BigZ04HO2(IStrategy):
    method confirm_trade_exit (line 221) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 226) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 231) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 269) | def informative_pairs(self):
    method informative_1h_indicators (line 274) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 291) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 317) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 327) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 575) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ04_TSL3/BigZ04_TSL3.py
  class BigZ04_TSL3 (line 58) | class BigZ04_TSL3(IStrategy):
    method confirm_trade_exit (line 194) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 199) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 207) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 235) | def informative_pairs(self):
    method informative_1h_indicators (line 240) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 257) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 291) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 301) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 550) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ04_TSL4/BigZ04_TSL4.py
  function EWO (line 57) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class BigZ04_TSL4 (line 65) | class BigZ04_TSL4(IStrategy):
    method confirm_trade_exit (line 207) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 212) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 220) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 244) | def informative_pairs(self):
    method informative_1h_indicators (line 249) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 266) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 300) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 310) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 562) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BigZ06/BigZ06.py
  class BigZ06 (line 57) | class BigZ06(IStrategy):
    method confirm_trade_exit (line 161) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 167) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 183) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 221) | def informative_pairs(self):
    method informative_1h_indicators (line 226) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 243) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 274) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 284) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 549) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function MFV (line 561) | def MFV(dataframe):

FILE: strategies/BigZ07/BigZ07.py
  class BigZ07 (line 57) | class BigZ07(IStrategy):
    method confirm_trade_exit (line 161) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_sell (line 179) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method custom_stoploss (line 195) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 232) | def informative_pairs(self):
    method informative_1h_indicators (line 237) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 254) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 282) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 292) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 557) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function MFV (line 569) | def MFV(dataframe):

FILE: strategies/BigZ07Next/BigZ07Next.py
  class BigZ07Next (line 45) | class BigZ07Next(IStrategy):
    method confirm_trade_exit (line 400) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method get_ticker_indicator (line 417) | def get_ticker_indicator(self):
    method custom_sell (line 420) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method range_percent_change (line 587) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 603) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 616) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 626) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 636) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 646) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 658) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 673) | def informative_pairs(self):
    method informative_1h_indicators (line 682) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 739) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method resampled_tf_indicators (line 809) | def resampled_tf_indicators(self, dataframe: DataFrame, metadata: dict...
    method base_tf_btc_indicators (line 816) | def base_tf_btc_indicators(self, dataframe: DataFrame, metadata: dict)...
    method info_tf_btc_indicators (line 828) | def info_tf_btc_indicators(self, dataframe: DataFrame, metadata: dict)...
    method populate_indicators (line 840) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 889) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1154) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 1244) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 1252) | def chaikin_money_flow(dataframe, n=20, fillna=False):
  function MFV (line 1274) | def MFV(dataframe):

FILE: strategies/BigZ07Next2/BigZ07Next2.py
  class BigZ07Next2 (line 45) | class BigZ07Next2(IStrategy):
    method confirm_trade_exit (line 400) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method get_ticker_indicator (line 417) | def get_ticker_indicator(self):
    method custom_sell (line 420) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method range_percent_change (line 587) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 603) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 616) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 626) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 636) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 646) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 658) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 673) | def informative_pairs(self):
    method informative_1h_indicators (line 682) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 739) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method resampled_tf_indicators (line 809) | def resampled_tf_indicators(self, dataframe: DataFrame, metadata: dict...
    method base_tf_btc_indicators (line 816) | def base_tf_btc_indicators(self, dataframe: DataFrame, metadata: dict)...
    method info_tf_btc_indicators (line 828) | def info_tf_btc_indicators(self, dataframe: DataFrame, metadata: dict)...
    method populate_indicators (line 840) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 889) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1154) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 1244) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 1252) | def chaikin_money_flow(dataframe, n=20, fillna=False):
  function MFV (line 1274) | def MFV(dataframe):

FILE: strategies/BinClucMad/BinClucMad.py
  function SSLChannels (line 12) | def SSLChannels(dataframe, length=7):
  class BinClucMad (line 24) | class BinClucMad(IStrategy):
    method custom_stoploss (line 139) | def custom_stoploss(
    method informative_pairs (line 178) | def informative_pairs(self):
    method informative_1h_indicators (line 183) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 200) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 223) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 233) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 439) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BinClucMadDevelop/BinClucMadDevelop.py
  function SSLChannels (line 17) | def SSLChannels(dataframe, length=7):
  class BinClucMadDevelop (line 29) | class BinClucMadDevelop(IStrategy):
    method confirm_trade_exit (line 199) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_stoploss (line 222) | def custom_stoploss(
    method custom_sell (line 264) | def custom_sell(
    method informative_pairs (line 309) | def informative_pairs(self):
    method informative_1h_indicators (line 314) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 336) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 369) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 379) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 736) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function SSLChannels_ATR (line 768) | def SSLChannels_ATR(dataframe, length=7):

FILE: strategies/BinClucMadSMADevelop/BinClucMadSMADevelop.py
  class BinClucMadSMADevelop (line 23) | class BinClucMadSMADevelop(IStrategy):
    method custom_stoploss (line 362) | def custom_stoploss(
    method custom_sell (line 404) | def custom_sell(
    method informative_pairs (line 464) | def informative_pairs(self):
    method informative_1h_indicators (line 469) | def informative_1h_indicators(
    method normal_tf_indicators (line 497) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 548) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 564) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1122) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function SSLChannels_ATR (line 1171) | def SSLChannels_ATR(dataframe, length=7):
  function SSLChannels (line 1192) | def SSLChannels(dataframe, length=7):
  function EWO (line 1206) | def EWO(dataframe, ema_length=5, ema2_length=35):

FILE: strategies/BinClucMadV1/BinClucMadV1.py
  function SSLChannels (line 20) | def SSLChannels(dataframe, length=7):
  class BinClucMadV1 (line 32) | class BinClucMadV1(IStrategy):
    method custom_stoplossv8 (line 192) | def custom_stoplossv8(
    method custom_stoploss (line 232) | def custom_stoploss(
    method custom_sell (line 256) | def custom_sell(
    method informative_pairs (line 299) | def informative_pairs(self):
    method informative_1h_indicators (line 304) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 326) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 359) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 369) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 688) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BinHV27/BinHV27.py
  class BinHV27 (line 19) | class BinHV27(IStrategy):
    method populate_indicators (line 33) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 57) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 94) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BinHV45/BinHV45.py
  function bollinger_bands (line 12) | def bollinger_bands(stock_price, window_size, num_of_std):
  class BinHV45 (line 20) | class BinHV45(IStrategy):
    method populate_indicators (line 41) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 53) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 66) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BinHV45HO/BinHV45HO.py
  function bollinger_bands (line 14) | def bollinger_bands(stock_price, window_size, num_of_std):
  class BinHV45HO (line 22) | class BinHV45HO(IStrategy):
    method populate_indicators (line 40) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 50) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 63) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BreakEven/BreakEven.py
  class BreakEven (line 7) | class BreakEven(IStrategy):
    method populate_indicators (line 52) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 55) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 62) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/BuyAllSellAllStrategy/BuyAllSellAllStrategy.py
  class BuyAllSellAllStrategy (line 8) | class BuyAllSellAllStrategy(IStrategy):
    method populate_indicators (line 16) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 19) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 23) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_sell (line 27) | def custom_sell(

FILE: strategies/BuyOnly/BuyOnly.py
  class BuyOnly (line 16) | class BuyOnly(IStrategy):
    method informative_pairs (line 85) | def informative_pairs(self):
    method populate_indicators (line 98) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 319) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 340) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CBPete9/CBPete9.py
  function SSLChannels (line 57) | def SSLChannels(dataframe, length = 7):
  class CBPete9 (line 68) | class CBPete9(IStrategy):
    method custom_stoploss (line 162) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 192) | def informative_pairs(self):
    method informative_1h_indicators (line 197) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 214) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 237) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 248) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 379) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CCIStrategy/CCIStrategy.py
  class CCIStrategy (line 12) | class CCIStrategy(IStrategy):
    method populate_indicators (line 26) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 44) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 66) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method chaikin_mf (line 84) | def chaikin_mf(self, df, periods=20):
    method resample (line 97) | def resample(self, dataframe, interval, factor):

FILE: strategies/CMCWinner/CMCWinner.py
  class CMCWinner (line 14) | class CMCWinner(IStrategy):
    method populate_indicators (line 46) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 66) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 82) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Cci/Cci.py
  class Cci (line 12) | class Cci(IStrategy):
    method populate_indicators (line 29) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 36) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 50) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method resample (line 64) | def resample(self, dataframe, interval, factor):

FILE: strategies/Chandem/Chandem.py
  class Chandem (line 20) | class Chandem(IStrategy):
    method informative_pairs (line 61) | def informative_pairs(self):
    method populate_indicators (line 74) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 98) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 115) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Chandemtwo/Chandemtwo.py
  class Chandemtwo (line 20) | class Chandemtwo(IStrategy):
    method informative_pairs (line 62) | def informative_pairs(self):
    method populate_indicators (line 75) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 99) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 117) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Chispei/Chispei.py
  class Chispei (line 23) | class Chispei(IStrategy):
    method populate_indicators (line 39) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 46) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 56) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Cluc4/Cluc4.py
  function bollinger_bands (line 8) | def bollinger_bands(stock_price, window_size, num_of_std):
  class Cluc4 (line 14) | class Cluc4(IStrategy):
    method informative_pairs (line 29) | def informative_pairs(self):
    method populate_indicators (line 34) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 53) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 73) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Cluc4werk/Cluc4werk.py
  function bollinger_bands (line 8) | def bollinger_bands(stock_price, window_size, num_of_std):
  class Cluc4werk (line 14) | class Cluc4werk(IStrategy):
    method informative_pairs (line 71) | def informative_pairs(self):
    method populate_indicators (line 94) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 124) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 148) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Cluc5werk/Cluc5werk.py
  function bollinger_bands (line 8) | def bollinger_bands(stock_price, window_size, num_of_std):
  class Cluc5werk (line 14) | class Cluc5werk(IStrategy):
    method informative_pairs (line 68) | def informative_pairs(self):
    method populate_indicators (line 73) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 96) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 129) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class Cluc5werk_ETH (line 144) | class Cluc5werk_ETH(Cluc5werk):
  class Cluc5werk_BTC (line 183) | class Cluc5werk_BTC(Cluc5werk):
  class Cluc5werk_USD (line 227) | class Cluc5werk_USD(Cluc5werk):

FILE: strategies/Cluc7werk/Cluc7werk.py
  class Cluc7werk (line 8) | class Cluc7werk(IStrategy):
    method populate_indicators (line 63) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 90) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 114) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ClucFiatROI/ClucFiatROI.py
  class ClucFiatROI (line 11) | class ClucFiatROI(IStrategy):
    method populate_indicators (line 62) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 94) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 140) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method check_buy_timeout (line 159) | def check_buy_timeout(self, pair: str, trade: Trade, order: dict, **kw...
    method check_sell_timeout (line 168) | def check_sell_timeout(self, pair: str, trade: Trade, order: dict, **k...

FILE: strategies/ClucFiatSlow/ClucFiatSlow.py
  class ClucFiatSlow (line 10) | class ClucFiatSlow(IStrategy):
    method populate_indicators (line 61) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 88) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 112) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method check_buy_timeout (line 131) | def check_buy_timeout(self, pair: str, trade: Trade, order: dict, **kw...
    method check_sell_timeout (line 140) | def check_sell_timeout(self, pair: str, trade: Trade, order: dict, **k...

FILE: strategies/ClucHAnix/ClucHAnix.py
  function bollinger_bands (line 10) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 17) | def ha_typical_price(bars):
  class ClucHAnix (line 22) | class ClucHAnix(IStrategy):
    method informative_pairs (line 104) | def informative_pairs(self):
    method custom_stoploss (line 109) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 136) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 179) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 203) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ClucHAnix5m/ClucHAnix5m.py
  function bollinger_bands (line 24) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 30) | def ha_typical_price(bars):
  class ClucHAnix5m (line 34) | class ClucHAnix5m(IStrategy):
    method informative_pairs (line 215) | def informative_pairs(self):
    method custom_stoploss (line 226) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 255) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 341) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 458) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_exit (line 475) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
  function pct_change (line 483) | def pct_change(a, b):
  function EWO (line 486) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ClucHAnix_BB_RPB_MOD2_ROI_DYNAMIC_TB (line 493) | class ClucHAnix_BB_RPB_MOD2_ROI_DYNAMIC_TB(ClucHAnix5m):
    method trailing_buy (line 522) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 530) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 552) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 559) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 609) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 614) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 688) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/ClucHAnix_5m/ClucHAnix_5m.py
  function bollinger_bands (line 9) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 15) | def ha_typical_price(bars):
  class ClucHAnix_5m (line 19) | class ClucHAnix_5m(IStrategy):
    method informative_pairs (line 113) | def informative_pairs(self):
    method custom_stoploss (line 119) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 146) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 189) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 212) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ClucHAnix_5m1/ClucHAnix_5m1.py
  function bollinger_bands (line 17) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 24) | def ha_typical_price(bars):
  class ClucHAnix_5m1 (line 29) | class ClucHAnix_5m1(IStrategy):
    method informative_pairs (line 123) | def informative_pairs(self):
    method custom_stoploss (line 129) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 156) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 205) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 228) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class ClucHAnix_5mTB1 (line 245) | class ClucHAnix_5mTB1(ClucHAnix_5m1):
    method trailing_buy (line 274) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 282) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 304) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 311) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 361) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 366) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 440) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/ClucHAnix_BB_RPB_MOD/ClucHAnix_BB_RPB_MOD.py
  function bollinger_bands (line 18) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 24) | def ha_typical_price(bars):
  class ClucHAnix_BB_RPB_MOD (line 28) | class ClucHAnix_BB_RPB_MOD(IStrategy):
    method informative_pairs (line 203) | def informative_pairs(self):
    method custom_stoploss (line 214) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 243) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 324) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 441) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_exit (line 458) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
  function pct_change (line 466) | def pct_change(a, b):
  function EWO (line 469) | def EWO(dataframe, ema_length=5, ema2_length=35):

FILE: strategies/ClucHAnix_BB_RPB_MOD2_ROI/ClucHAnix_BB_RPB_MOD2_ROI.py
  function bollinger_bands (line 25) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 31) | def ha_typical_price(bars):
  class ClucHAnix_BB_RPB_MOD2_ROI (line 35) | class ClucHAnix_BB_RPB_MOD2_ROI(IStrategy):
    method informative_pairs (line 216) | def informative_pairs(self):
    method custom_stoploss (line 227) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 256) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 342) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 459) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_exit (line 476) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
  function pct_change (line 484) | def pct_change(a, b):
  function EWO (line 487) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ClucHAnix_BB_RPB_MOD2_ROI_DYNAMIC_TB (line 494) | class ClucHAnix_BB_RPB_MOD2_ROI_DYNAMIC_TB(ClucHAnix_BB_RPB_MOD2_ROI):
    method trailing_buy (line 523) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 531) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 553) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 560) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 610) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 615) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 689) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/ClucHAnix_BB_RPB_MOD_CTT/ClucHAnix_BB_RPB_MOD_CTT.py
  function bollinger_bands (line 22) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 28) | def ha_typical_price(bars):
  class ClucHAnix_BB_RPB_MOD_CTT (line 32) | class ClucHAnix_BB_RPB_MOD_CTT(IStrategy):
    method informative_pairs (line 213) | def informative_pairs(self):
    method custom_stoploss (line 224) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 253) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 355) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 484) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_exit (line 501) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
  function pct_change (line 509) | def pct_change(a, b):
  function EWO (line 512) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ClucHAnix_BB_RPB_MOD_CTT_STB (line 519) | class ClucHAnix_BB_RPB_MOD_CTT_STB(ClucHAnix_BB_RPB_MOD_CTT):
    method trailing_buy (line 556) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 564) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 586) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 593) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 640) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 645) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 726) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
  class ClucHAnix_BB_RPB_MOD_CTT_DTB (line 750) | class ClucHAnix_BB_RPB_MOD_CTT_DTB(ClucHAnix_BB_RPB_MOD_CTT):
    method trailing_buy (line 779) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 787) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 809) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 816) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 866) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 871) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 945) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/ClucHAnix_BB_RPB_MOD_E0V1E_ROI/ClucHAnix_BB_RPB_MOD_E0V1E_ROI.py
  function bollinger_bands (line 25) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 31) | def ha_typical_price(bars):
  class ClucHAnix_BB_RPB_MOD_E0V1E_ROI (line 35) | class ClucHAnix_BB_RPB_MOD_E0V1E_ROI(IStrategy):
    class HyperOpt (line 41) | class HyperOpt:
      method generate_roi_table (line 43) | def generate_roi_table(params: Dict) -> Dict[int, float]:
      method roi_space (line 64) | def roi_space() -> List[Dimension]:
    method informative_pairs (line 259) | def informative_pairs(self):
    method custom_stoploss (line 270) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 299) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 385) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 502) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_exit (line 519) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
  function pct_change (line 527) | def pct_change(a, b):
  function EWO (line 530) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ClucHAnix_BB_RPB_MOD_E0V1E_ROI_DYNAMIC_TB (line 537) | class ClucHAnix_BB_RPB_MOD_E0V1E_ROI_DYNAMIC_TB(ClucHAnix_BB_RPB_MOD_E0V...
    method trailing_buy (line 566) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 574) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 596) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 603) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 653) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 658) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 732) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/ClucHAnix_hhll/ClucHAnix_hhll.py
  function bollinger_bands (line 15) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 22) | def ha_typical_price(bars):
  class ClucHAnix_hhll (line 27) | class ClucHAnix_hhll(IStrategy):
    method informative_pairs (line 139) | def informative_pairs(self):
    method custom_stoploss (line 145) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method confirm_trade_entry (line 174) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method custom_sell (line 195) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method populate_indicators (line 295) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 393) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 420) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function vwma (line 454) | def vwma(dataframe: DataFrame, length: int = 10):
  function ema_vwma_osc (line 463) | def ema_vwma_osc(dataframe, len_slow_ma):
  function range_percent_change (line 467) | def range_percent_change(dataframe: DataFrame, method, length: int) -> f...
  function chaikin_money_flow (line 483) | def chaikin_money_flow(dataframe, n=20, fillna=False) -> Series:
  class ClucHAnix_hhll_TB (line 503) | class ClucHAnix_hhll_TB(ClucHAnix_hhll):
    method trailing_buy (line 540) | def trailing_buy(self, pair, reinit=False):
    method trailing_buy_info (line 548) | def trailing_buy_info(self, pair: str, current_price: float):
    method current_trailing_profit_ratio (line 570) | def current_trailing_profit_ratio(self, pair: str, current_price: floa...
    method trailing_buy_offset (line 577) | def trailing_buy_offset(self, dataframe, pair: str, current_price: flo...
    method populate_indicators (line 624) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_entry (line 629) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...
    method populate_buy_trend (line 710) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...

FILE: strategies/ClucHAwerk/ClucHAwerk.py
  function bollinger_bands (line 8) | def bollinger_bands(stock_price, window_size, num_of_std):
  function ha_typical_price (line 14) | def ha_typical_price(bars):
  class ClucHAwerk (line 18) | class ClucHAwerk(IStrategy):
    method informative_pairs (line 74) | def informative_pairs(self):
    method populate_indicators (line 79) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 115) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 140) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  class ClucHAwerk_ETH (line 153) | class ClucHAwerk_ETH(ClucHAwerk):
  class ClucHAwerk_BTC (line 206) | class ClucHAwerk_BTC(ClucHAwerk):
  class ClucHAwerk_USD (line 254) | class ClucHAwerk_USD(ClucHAwerk):

FILE: strategies/ClucMay72018/ClucMay72018.py
  class ClucMay72018 (line 20) | class ClucMay72018(IStrategy):
    method populate_indicators (line 42) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 56) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 72) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CofiBitStrategy/CofiBitStrategy.py
  class CofiBitStrategy (line 12) | class CofiBitStrategy(IStrategy):
    method populate_indicators (line 48) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 59) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 77) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndCluc/CombinedBinHAndCluc.py
  function bollinger_bands (line 10) | def bollinger_bands(stock_price, window_size, num_of_std):
  class CombinedBinHAndCluc (line 17) | class CombinedBinHAndCluc(IStrategy):
    method populate_indicators (line 33) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 49) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 68) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndCluc2021/CombinedBinHAndCluc2021.py
  function bollinger_bands (line 10) | def bollinger_bands(stock_price, window_size, num_of_std):
  class CombinedBinHAndCluc2021 (line 17) | class CombinedBinHAndCluc2021(IStrategy):
    method populate_indicators (line 40) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 59) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 84) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndCluc2021Bull/CombinedBinHAndCluc2021Bull.py
  function bollinger_bands (line 10) | def bollinger_bands(stock_price, window_size, num_of_std):
  class CombinedBinHAndCluc2021Bull (line 17) | class CombinedBinHAndCluc2021Bull(IStrategy):
    method populate_indicators (line 40) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 59) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 84) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucHyperV0/CombinedBinHAndClucHyperV0.py
  class CombinedBinHAndClucHyperV0 (line 15) | class CombinedBinHAndClucHyperV0(IStrategy):
    method custom_stoploss (line 75) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 101) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 127) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 162) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucHyperV3/CombinedBinHAndClucHyperV3.py
  class CombinedBinHAndClucHyperV3 (line 15) | class CombinedBinHAndClucHyperV3(IStrategy):
    method custom_stoploss (line 86) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 112) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 141) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 180) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV2/CombinedBinHAndClucV2.py
  function bollinger_bands (line 14) | def bollinger_bands(stock_price, window_size, num_of_std):
  function SSLChannels (line 21) | def SSLChannels(dataframe, length = 7):
  class CombinedBinHAndClucV2 (line 33) | class CombinedBinHAndClucV2(IStrategy):
    method informative_pairs (line 62) | def informative_pairs(self):
    method get_informative_indicators (line 68) | def get_informative_indicators(dataframe: DataFrame, metadata: dict):
    method populate_indicators (line 91) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 129) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 152) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV3/CombinedBinHAndClucV3.py
  function bollinger_bands (line 9) | def bollinger_bands(stock_price, window_size, num_of_std):
  class CombinedBinHAndClucV3 (line 16) | class CombinedBinHAndClucV3(IStrategy):
    method custom_stoploss (line 52) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 58) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 78) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 98) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV4/CombinedBinHAndClucV4.py
  function bollinger_bands (line 9) | def bollinger_bands(stock_price, window_size, num_of_std):
  class CombinedBinHAndClucV4 (line 16) | class CombinedBinHAndClucV4(IStrategy):
    method custom_stoploss (line 56) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 63) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 81) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 103) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV5/CombinedBinHAndClucV5.py
  class CombinedBinHAndClucV5 (line 36) | class CombinedBinHAndClucV5(IStrategy):
    method custom_stoploss (line 76) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 83) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 102) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 124) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV5Hyperoptable/CombinedBinHAndClucV5Hyperoptable.py
  class CombinedBinHAndClucV5Hyperoptable (line 39) | class CombinedBinHAndClucV5Hyperoptable(IStrategy):
    method custom_stoploss (line 83) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 93) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 112) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 134) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    class HyperOpt (line 147) | class HyperOpt:
      method sell_indicator_space (line 152) | def sell_indicator_space() -> List[Dimension]:

FILE: strategies/CombinedBinHAndClucV6/CombinedBinHAndClucV6.py
  function SSLChannels (line 39) | def SSLChannels(dataframe, length = 7):
  class CombinedBinHAndClucV6 (line 51) | class CombinedBinHAndClucV6(IStrategy):
    method custom_stoploss (line 92) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method confirm_trade_exit (line 99) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method informative_pairs (line 109) | def informative_pairs(self):
    method informative_1h_indicators (line 114) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 130) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 159) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 169) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 208) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV6H/CombinedBinHAndClucV6H.py
  class CombinedBinHAndClucV6H (line 52) | class CombinedBinHAndClucV6H(IStrategy):
    method informative_pairs (line 181) | def informative_pairs(self):
    method get_informative_indicators (line 192) | def get_informative_indicators(self, dataframe: DataFrame, metadata: d...
    method get_main_indicators (line 215) | def get_main_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_indicators (line 253) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 270) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 370) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 392) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method confirm_trade_exit (line 403) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
  function SSLChannels_ATR (line 432) | def SSLChannels_ATR(dataframe, length=7):

FILE: strategies/CombinedBinHAndClucV7/CombinedBinHAndClucV7.py
  function SSLChannels (line 41) | def SSLChannels(dataframe, length = 7):
  class CombinedBinHAndClucV7 (line 53) | class CombinedBinHAndClucV7(IStrategy):
    method custom_stoploss (line 125) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method confirm_trade_exit (line 132) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method informative_pairs (line 151) | def informative_pairs(self):
    method informative_1h_indicators (line 156) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 174) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 207) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 217) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 293) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV8/CombinedBinHAndClucV8.py
  function SSLChannels (line 41) | def SSLChannels(dataframe, length = 7):
  class CombinedBinHAndClucV8 (line 53) | class CombinedBinHAndClucV8(IStrategy):
    method custom_stoploss (line 143) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 156) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 180) | def informative_pairs(self):
    method informative_1h_indicators (line 185) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 205) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 240) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 250) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 349) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV8Hyper/CombinedBinHAndClucV8Hyper.py
  function SSLChannels (line 41) | def SSLChannels(dataframe, length = 7):
  class CombinedBinHAndClucV8Hyper (line 53) | class CombinedBinHAndClucV8Hyper(IStrategy):
    method custom_stoploss (line 180) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 193) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 217) | def informative_pairs(self):
    method informative_1h_indicators (line 222) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 242) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 277) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 287) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 386) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV8XH/CombinedBinHAndClucV8XH.py
  function SSLChannels (line 42) | def SSLChannels(dataframe, length=7):
  class CombinedBinHAndClucV8XH (line 55) | class CombinedBinHAndClucV8XH(IStrategy):
    method custom_stoploss (line 227) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 250) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 274) | def informative_pairs(self):
    method informative_1h_indicators (line 279) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 301) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 340) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 351) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 451) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHAndClucV8XHO/CombinedBinHAndClucV8XHO.py
  function SSLChannels (line 42) | def SSLChannels(dataframe, length=7):
  class CombinedBinHAndClucV8XHO (line 55) | class CombinedBinHAndClucV8XHO(IStrategy):
    method custom_stoploss (line 206) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method custom_sell (line 229) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 253) | def informative_pairs(self):
    method informative_1h_indicators (line 258) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 280) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 319) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 330) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 430) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHClucAndMADV3/CombinedBinHClucAndMADV3.py
  class CombinedBinHClucAndMADV3 (line 32) | class CombinedBinHClucAndMADV3(IStrategy):
    method custom_stoploss (line 73) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 81) | def informative_pairs(self):
    method informative_1h_indicators (line 86) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 98) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 129) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 140) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 177) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHClucAndMADV5/CombinedBinHClucAndMADV5.py
  function SSLChannels (line 48) | def SSLChannels(dataframe, length = 7):
  class CombinedBinHClucAndMADV5 (line 59) | class CombinedBinHClucAndMADV5(IStrategy):
    method custom_stoploss (line 101) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 109) | def informative_pairs(self):
    method informative_1h_indicators (line 114) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 131) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 165) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 176) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 236) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHClucAndMADV6/CombinedBinHClucAndMADV6.py
  function SSLChannels (line 56) | def SSLChannels(dataframe, length = 7):
  class CombinedBinHClucAndMADV6 (line 67) | class CombinedBinHClucAndMADV6(IStrategy):
    method custom_stoploss (line 110) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 118) | def informative_pairs(self):
    method informative_1h_indicators (line 123) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 140) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 165) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 176) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 239) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CombinedBinHClucAndMADV9/CombinedBinHClucAndMADV9.py
  function SSLChannels (line 57) | def SSLChannels(dataframe, length=7):
  class CombinedBinHClucAndMADV9 (line 69) | class CombinedBinHClucAndMADV9(IStrategy):
    method custom_stoploss (line 163) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 193) | def informative_pairs(self):
    method informative_1h_indicators (line 198) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 215) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 237) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 247) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 386) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Combined_Indicators/Combined_Indicators.py
  function bollinger_bands (line 10) | def bollinger_bands(stock_price, window_size, num_of_std):
  class Combined_Indicators (line 17) | class Combined_Indicators(IStrategy):
    method populate_indicators (line 41) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 57) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 76) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Combined_NFIv6_SMA/Combined_NFIv6_SMA.py
  class Combined_NFIv6_SMA (line 43) | class Combined_NFIv6_SMA(IStrategy):
    method get_ticker_indicator (line 940) | def get_ticker_indicator(self):
    method custom_sell (line 943) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method range_percent_change (line 1087) | def range_percent_change(self, dataframe: DataFrame, length: int) -> f...
    method range_maxgap (line 1097) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1107) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1117) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1127) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method informative_pairs (line 1139) | def informative_pairs(self):
    method informative_1h_indicators (line 1146) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 1216) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1293) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 1304) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2170) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 2262) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 2270) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/Combined_NFIv7_SMA/Combined_NFIv7_SMA.py
  class Combined_NFIv7_SMA (line 44) | class Combined_NFIv7_SMA(IStrategy):
    method get_ticker_indicator (line 1121) | def get_ticker_indicator(self):
    method custom_sell (line 1124) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method range_percent_change (line 1289) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 1305) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 1318) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1328) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1338) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1348) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 1360) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 1375) | def informative_pairs(self):
    method informative_1h_indicators (line 1382) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 1491) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1571) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 1582) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2487) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 2577) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 2585) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/Combined_NFIv7_SMA_Rallipanos_20210707/Combined_NFIv7_SMA_Rallipanos_20210707.py
  class Combined_NFIv7_SMA_Rallipanos_20210707 (line 44) | class Combined_NFIv7_SMA_Rallipanos_20210707(IStrategy):
    method get_ticker_indicator (line 1121) | def get_ticker_indicator(self):
    method custom_sell (line 1124) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method range_percent_change (line 1289) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 1305) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 1318) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1328) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1338) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1348) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 1360) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 1375) | def informative_pairs(self):
    method informative_1h_indicators (line 1382) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 1491) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1571) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 1582) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2487) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 2577) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 2585) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/Combined_NFIv7_SMA_bAdBoY_20211204/Combined_NFIv7_SMA_bAdBoY_20211204.py
  class Combined_NFIv7_SMA_bAdBoY_20211204 (line 44) | class Combined_NFIv7_SMA_bAdBoY_20211204(IStrategy):
    method get_ticker_indicator (line 1121) | def get_ticker_indicator(self):
    method custom_sell (line 1124) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method range_percent_change (line 1289) | def range_percent_change(self, dataframe: DataFrame, method, length: i...
    method top_percent_change (line 1305) | def top_percent_change(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap (line 1318) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1328) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1338) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1348) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method safe_dips (line 1360) | def safe_dips(self, dataframe: DataFrame, thresh_0, thresh_2, thresh_1...
    method informative_pairs (line 1375) | def informative_pairs(self):
    method informative_1h_indicators (line 1382) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method normal_tf_indicators (line 1491) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1571) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 1582) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2487) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function EWO (line 2577) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 2585) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/CoreStrategy/CoreStrategy.py
  class CoreStrategy (line 23) | class CoreStrategy(IStrategy):
    method custom_stoploss (line 362) | def custom_stoploss(
    method custom_sell (line 404) | def custom_sell(
    method informative_pairs (line 464) | def informative_pairs(self):
    method informative_1h_indicators (line 469) | def informative_1h_indicators(
    method normal_tf_indicators (line 497) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 548) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 564) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 1122) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function SSLChannels_ATR (line 1171) | def SSLChannels_ATR(dataframe, length=7):
  function SSLChannels (line 1192) | def SSLChannels(dataframe, length=7):
  function EWO (line 1206) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class BinClucMadv1 (line 1214) | class BinClucMadv1(CoreStrategy):
  class BinClucMadv2 (line 1254) | class BinClucMadv2(CoreStrategy):
  class BinClucMadSMAv1 (line 1295) | class BinClucMadSMAv1(CoreStrategy):
  class BinClucMadSMAv2 (line 1339) | class BinClucMadSMAv2(CoreStrategy):

FILE: strategies/CrossEMAStrategy/CrossEMAStrategy.py
  class CrossEMAStrategy (line 19) | class CrossEMAStrategy(IStrategy):
    method informative_pairs (line 136) | def informative_pairs(self):
    method populate_indicators (line 149) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 172) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 189) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/CryptoFrog/CryptoFrog.py
  class CryptoFrog (line 20) | class CryptoFrog(IStrategy):
    method informative_pairs (line 133) | def informative_pairs(self):
    method HA (line 141) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 167) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 181) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 194) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 261) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 295) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 358) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 395) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 420) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 469) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 482) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 504) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 528) | class HyperOpt:
      method indicator_space (line 533) | def indicator_space() -> List[Dimension]:
  function RMI (line 538) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 556) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 573) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogHO/CryptoFrogHO.py
  class CryptoFrogHO (line 20) | class CryptoFrogHO(IStrategy):
    method informative_pairs (line 144) | def informative_pairs(self):
    method HA (line 152) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 178) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 192) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 205) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 272) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 406) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 431) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 480) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 493) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 515) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 539) | class HyperOpt:
      method indicator_space (line 544) | def indicator_space() -> List[Dimension]:
  function RMI (line 549) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 567) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 584) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogHO2/CryptoFrogHO2.py
  class CryptoFrogHO2 (line 20) | class CryptoFrogHO2(IStrategy):
    method informative_pairs (line 144) | def informative_pairs(self):
    method HA (line 152) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 178) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 192) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 205) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 272) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 406) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 431) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 480) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 493) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 515) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 539) | class HyperOpt:
      method indicator_space (line 544) | def indicator_space() -> List[Dimension]:
  function RMI (line 549) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 567) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 584) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogHO2A/CryptoFrogHO2A.py
  class CryptoFrogHO2A (line 20) | class CryptoFrogHO2A(IStrategy):
    method informative_pairs (line 144) | def informative_pairs(self):
    method HA (line 152) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 178) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 192) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 205) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 272) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 406) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 431) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 480) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 493) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 515) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 539) | class HyperOpt:
      method indicator_space (line 544) | def indicator_space() -> List[Dimension]:
  function RMI (line 549) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 567) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 584) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogHO3A1/CryptoFrogHO3A1.py
  class CryptoFrogHO3A1 (line 20) | class CryptoFrogHO3A1(IStrategy):
    method informative_pairs (line 144) | def informative_pairs(self):
    method HA (line 152) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 178) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 192) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 205) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 272) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 406) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 431) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 480) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 493) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 515) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 539) | class HyperOpt:
      method indicator_space (line 544) | def indicator_space() -> List[Dimension]:
  function RMI (line 549) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 567) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 584) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogHO3A2/CryptoFrogHO3A2.py
  class CryptoFrogHO3A2 (line 20) | class CryptoFrogHO3A2(IStrategy):
    method informative_pairs (line 144) | def informative_pairs(self):
    method HA (line 152) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 178) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 192) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 205) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 272) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 406) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 431) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 480) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 493) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 515) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 539) | class HyperOpt:
      method indicator_space (line 544) | def indicator_space() -> List[Dimension]:
  function RMI (line 549) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 567) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 584) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogHO3A3/CryptoFrogHO3A3.py
  class CryptoFrogHO3A3 (line 20) | class CryptoFrogHO3A3(IStrategy):
    method informative_pairs (line 144) | def informative_pairs(self):
    method HA (line 152) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 178) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 192) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 205) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 272) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 406) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 431) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 480) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 493) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 515) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 539) | class HyperOpt:
      method indicator_space (line 544) | def indicator_space() -> List[Dimension]:
  function RMI (line 549) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 567) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 584) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogHO3A4/CryptoFrogHO3A4.py
  class CryptoFrogHO3A4 (line 20) | class CryptoFrogHO3A4(IStrategy):
    method informative_pairs (line 144) | def informative_pairs(self):
    method HA (line 152) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 178) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 192) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 205) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method populate_indicators (line 272) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 406) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 431) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 480) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 493) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 515) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 539) | class HyperOpt:
      method indicator_space (line 544) | def indicator_space() -> List[Dimension]:
  function RMI (line 549) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 567) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 584) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):

FILE: strategies/CryptoFrogNFI/CryptoFrogNFI.py
  class CryptoFrogNFI (line 21) | class CryptoFrogNFI(IStrategy):
    method custom_sell (line 1004) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 1148) | def informative_pairs(self):
    method HA (line 1154) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 1180) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 1194) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 1207) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method informative_1h_indicators (line 1273) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method range_percent_change (line 1331) | def range_percent_change(self, dataframe: DataFrame, length: int) -> f...
    method range_maxgap (line 1341) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1351) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1361) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1371) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method normal_tf_indicators (line 1383) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1448) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 1490) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2369) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 2493) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 2518) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 2567) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 2580) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 2602) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 2626) | class HyperOpt:
      method indicator_space (line 2631) | def indicator_space() -> List[Dimension]:
  function RMI (line 2636) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 2654) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 2671) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function EWO (line 2681) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 2689) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/CryptoFrogNFIHO1A/CryptoFrogNFIHO1A.py
  class CryptoFrogNFIHO1A (line 21) | class CryptoFrogNFIHO1A(IStrategy):
    method custom_sell (line 1546) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 1690) | def informative_pairs(self):
    method HA (line 1696) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 1722) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 1736) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 1749) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method informative_1h_indicators (line 1815) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method range_percent_change (line 1873) | def range_percent_change(self, dataframe: DataFrame, length: int) -> f...
    method range_maxgap (line 1883) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1893) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1903) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1913) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method normal_tf_indicators (line 1925) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1990) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 2032) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2911) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 3035) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 3060) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 3109) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 3122) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 3144) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 3168) | class HyperOpt:
      method indicator_space (line 3173) | def indicator_space() -> List[Dimension]:
  function RMI (line 3178) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 3196) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 3213) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function EWO (line 3223) | def EWO(dataframe, sma1_length=5, sma2_length=35):
  function chaikin_money_flow (line 3231) | def chaikin_money_flow(dataframe, n=20, fillna=False):

FILE: strategies/CryptoFrogOffset/CryptoFrogOffset.py
  class CryptoFrogOffset (line 21) | class CryptoFrogOffset(IStrategy):
    method custom_sell (line 1528) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 1650) | def informative_pairs(self):
    method HA (line 1658) | def HA(self, dataframe, smoothing=None):
    method hansen_HA (line 1684) | def hansen_HA(self, informative_df, period=6):
    method bbw_expansion (line 1698) | def bbw_expansion(self, bbw_rolling, mult=1.1):
    method do_indicators (line 1711) | def do_indicators(self, dataframe: DataFrame, metadata: dict) -> DataF...
    method informative_1h_indicators (line 1777) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method range_percent_change (line 1830) | def range_percent_change(self, dataframe: DataFrame, length: int) -> f...
    method range_maxgap (line 1840) | def range_maxgap(self, dataframe: DataFrame, length: int) -> float:
    method range_maxgap_adjusted (line 1850) | def range_maxgap_adjusted(self, dataframe: DataFrame, length: int, adj...
    method range_height (line 1860) | def range_height(self, dataframe: DataFrame, length: int) -> float:
    method safe_pump (line 1870) | def safe_pump(self, dataframe: DataFrame, length: int, thresh: float, ...
    method normal_tf_indicators (line 1882) | def normal_tf_indicators(self, dataframe: DataFrame, metadata: dict) -...
    method populate_indicators (line 1947) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 1989) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 2052) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 2146) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 2171) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 2220) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method get_current_price (line 2233) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 2255) | def populate_trades(self, pair: str) -> dict:
    class HyperOpt (line 2279) | class HyperOpt:
      method indicator_space (line 2284) | def indicator_space() -> List[Dimension]:
  function RMI (line 2289) | def RMI(dataframe, *, length=20, mom=5):
  function SSLChannels_ATR (line 2307) | def SSLChannels_ATR(dataframe, length=7):
  function SROC (line 2324) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  function EWO (line 2334) | def EWO(dataframe, sma1_length=5, sma2_length=35):

FILE: strategies/CustomStoplossWithPSAR/CustomStoplossWithPSAR.py
  class CustomStoplossWithPSAR (line 18) | class CustomStoplossWithPSAR(IStrategy):
    method custom_stoploss (line 31) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 57) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 67) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 82) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/DCBBBounce/DCBBBounce.py
  class DCBBBounce (line 16) | class DCBBBounce(IStrategy):
    method informative_pairs (line 106) | def informative_pairs(self):
    method populate_indicators (line 119) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 179) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 227) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/DD/DD.py
  class DD (line 11) | class DD(IStrategy):
    method populate_indicators (line 43) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 54) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 73) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/DIV_v1/DIV_v1.py
  class DIV_v1 (line 10) | class DIV_v1(IStrategy):
    method get_ticker_indicator (line 70) | def get_ticker_indicator(self):
    method populate_indicators (line 73) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 82) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 93) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
  function divergence (line 97) | def divergence(dataframe: DataFrame, source='rsi'):

FILE: strategies/DevilStra/DevilStra.py
  function spell_finder (line 327) | def spell_finder(index, space):
  function normalize (line 331) | def normalize(df):
  function gene_calculator (line 336) | def gene_calculator(dataframe, indicator):
  function condition_generator (line 404) | def condition_generator(dataframe, operator, indicator, crossed_indicato...
  class DevilStra (line 536) | class DevilStra(IStrategy):
    method populate_indicators (line 582) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 586) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 656) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Diamond/Diamond.py
  class Diamond (line 54) | class Diamond(IStrategy):
    method populate_indicators (line 117) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 125) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 142) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Divergences/Divergences.py
  class Divergences (line 16) | class Divergences(IStrategy):
    method informative_pairs (line 100) | def informative_pairs(self):
    method populate_indicators (line 113) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 367) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 385) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Dracula/Dracula.py
  function EWO (line 40) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function chaikin_money_flow (line 47) | def chaikin_money_flow(dataframe, n=20, fillna=False):
  class SupResFinder (line 68) | class SupResFinder():
    method isSupport (line 69) | def isSupport(self, df, i):
    method isResistance (line 75) | def isResistance(self, df, i):
    method getSupport (line 81) | def getSupport(self, df):
    method getResistance (line 96) | def getResistance(self, df):
  class Dracula (line 112) | class Dracula(IStrategy):
    method populate_indicators (line 152) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 172) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method custom_sell (line 206) | def custom_sell(self, pair: str, trade: Trade, current_time: datetime,...
    method populate_sell_trend (line 235) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Dyna_opti/Dyna_opti.py
  function same_length (line 33) | def same_length(bigger, shorter):
  function linear_growth (line 39) | def linear_growth(start: float, end: float, start_time: int, end_time: i...
  function linear_decay (line 48) | def linear_decay(start: float, end: float, start_time: int, end_time: in...
  function zema (line 61) | def zema(dataframe, period, field='close'):
  function RMI (line 75) | def RMI(dataframe, *, length=20, mom=5):
  function mastreak (line 93) | def mastreak(dataframe: DataFrame, period: int = 4, field='close') -> Se...
  function pcc (line 112) | def pcc(dataframe: DataFrame, period: int = 20, mult: int = 2):
  function SSLChannels (line 136) | def SSLChannels(dataframe, length=10, mode='sma'):
  function SSLChannels_ATR (line 161) | def SSLChannels_ATR(dataframe, length=7):
  function WaveTrend (line 178) | def WaveTrend(dataframe, chlen=10, avg=21, smalen=4):
  function T3 (line 197) | def T3(dataframe, length=5):
  function SROC (line 220) | def SROC(dataframe, roclen=21, emalen=13, smooth=21):
  class Dyna_opti (line 241) | class Dyna_opti(IStrategy):
    method informative_pairs (line 332) | def informative_pairs(self):
    method populate_indicators (line 342) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 429) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 465) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 474) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method min_roi_reached_dynamic (line 500) | def min_roi_reached_dynamic(self, trade: Trade, current_profit: float,...
    method min_roi_reached (line 550) | def min_roi_reached(self, trade: Trade, current_profit: float, current...
    method check_buy_timeout (line 566) | def check_buy_timeout(self, pair: str, trade: Trade, order: dict, **kw...
    method check_sell_timeout (line 574) | def check_sell_timeout(self, pair: str, trade: Trade, order: dict, **k...
    method get_pair_params (line 587) | def get_pair_params(self, pair: str, params: str) -> Dict:
    method get_current_price (line 623) | def get_current_price(self, pair: str, refresh: bool) -> float:
    method populate_trades (line 645) | def populate_trades(self, pair: str) -> dict:

FILE: strategies/EI3v2_tag_cofi_green/EI3v2_tag_cofi_green.py
  function EWO (line 24) | def EWO(dataframe, ema_length=5, ema2_length=3):
  class EI3v2_tag_cofi_green (line 33) | class EI3v2_tag_cofi_green(IStrategy):
    method protections (line 72) | def protections(self):
    method custom_sell (line 179) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...
    method informative_pairs (line 185) | def informative_pairs(self):
    method pump_dump_protection (line 199) | def pump_dump_protection(self, dataframe: DataFrame, metadata: dict) -...
    method base_tf_btc_indicators (line 217) | def base_tf_btc_indicators(self, dataframe: DataFrame, metadata: dict)...
    method info_tf_btc_indicators (line 229) | def info_tf_btc_indicators(self, dataframe: DataFrame, metadata: dict)...
    method populate_indicators (line 242) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 306) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 375) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method confirm_trade_exit (line 404) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
  function pct_change (line 412) | def pct_change(a, b):
  class EI3v2_tag_cofi_dca_green (line 415) | class EI3v2_tag_cofi_dca_green(EI3v2_tag_cofi_green):
    method populate_indicators (line 432) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method adjust_trade_position (line 437) | def adjust_trade_position(self, trade: Trade, current_time: datetime,

FILE: strategies/EMA50/EMA50.py
  class EMA50 (line 20) | class EMA50(IStrategy):
    method informative_pairs (line 119) | def informative_pairs(self):
    method populate_indicators (line 132) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 352) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 379) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/EMA520015_V17/EMA520015_V17.py
  class EMA520015_V17 (line 11) | class EMA520015_V17(IStrategy):
    method populate_indicators (line 36) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 58) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 70) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_sell (line 81) | def custom_sell(self, pair: str, trade: 'Trade', current_time: 'dateti...

FILE: strategies/EMABBRSI/EMABBRSI.py
  class EMABBRSI (line 10) | class EMABBRSI(IStrategy):
    method populate_indicators (line 43) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 81) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 112) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/EMABreakout/EMABreakout.py
  class EMABreakout (line 20) | class EMABreakout(IStrategy):
    method informative_pairs (line 105) | def informative_pairs(self):
    method populate_indicators (line 118) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 340) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 371) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/EMASkipPump/EMASkipPump.py
  class EMASkipPump (line 12) | class EMASkipPump(IStrategy):
    method populate_indicators (line 36) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 62) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 75) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/EMAVolume/EMAVolume.py
  class EMAVolume (line 10) | class EMAVolume(IStrategy):
    method populate_indicators (line 32) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 42) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 57) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/EMA_CROSSOVER_STRATEGY/EMA_CROSSOVER_STRATEGY.py
  class EMA_CROSSOVER_STRATEGY (line 16) | class EMA_CROSSOVER_STRATEGY(IStrategy):
    method informative_pairs (line 97) | def informative_pairs(self):
    method populate_indicators (line 110) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 129) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 148) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/EXPERIMENTAL_STRATEGY/EXPERIMENTAL_STRATEGY.py
  class EXPERIMENTAL_STRATEGY (line 16) | class EXPERIMENTAL_STRATEGY(IStrategy):
    method informative_pairs (line 54) | def informative_pairs(self):
    method populate_indicators (line 67) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 119) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 141) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV2/ElliotV2.py
  function EWO (line 32) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function populate_indicators (line 39) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> D...
  class ElliotV2 (line 260) | class ElliotV2(IStrategy):
    method informative_pairs (line 327) | def informative_pairs(self):
    method get_informative_indicators (line 334) | def get_informative_indicators(self, metadata: dict):
    method populate_indicators (line 341) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 359) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 387) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV4/ElliotV4.py
  function EWO (line 18) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function populate_indicators (line 26) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> D...
  class ElliotV4 (line 219) | class ElliotV4(IStrategy):
    method informative_pairs (line 287) | def informative_pairs(self):
    method get_informative_indicators (line 295) | def get_informative_indicators(self, metadata: dict):
    method populate_indicators (line 302) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 320) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 348) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV531/ElliotV531.py
  function EWO (line 50) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function populate_indicators (line 58) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> D...
  class ElliotV531 (line 227) | class ElliotV531(IStrategy):
    method confirm_trade_exit (line 339) | def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str,...
    method custom_stoploss (line 370) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 430) | def informative_pairs(self):
    method get_informative_indicators (line 437) | def get_informative_indicators(self, metadata: dict):
    method populate_indicators (line 444) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 465) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 493) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV5HO/ElliotV5HO.py
  function EWO (line 48) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function populate_indicators (line 56) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> D...
  class ElliotV5HO (line 225) | class ElliotV5HO(IStrategy):
    method custom_stoploss (line 331) | def custom_stoploss(self, pair: str, trade: Trade, current_time: datet...
    method informative_pairs (line 349) | def informative_pairs(self):
    method get_informative_indicators (line 356) | def get_informative_indicators(self, metadata: dict):
    method populate_indicators (line 363) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 381) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 409) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV5HOMod2/ElliotV5HOMod2.py
  function EWO (line 18) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ElliotV5HOMod2 (line 26) | class ElliotV5HOMod2(IStrategy):
    method informative_pairs (line 119) | def informative_pairs(self):
    method get_informative_indicators (line 127) | def get_informative_indicators(self, metadata: dict):
    method populate_indicators (line 134) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 171) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 200) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 218) | def custom_stoploss(self, pair: str, trade: Trade, current_time: datet...

FILE: strategies/ElliotV5HOMod3/ElliotV5HOMod3.py
  function EWO (line 18) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ElliotV5HOMod3 (line 26) | class ElliotV5HOMod3(IStrategy):
    method informative_pairs (line 113) | def informative_pairs(self):
    method get_informative_indicators (line 121) | def get_informative_indicators(self, metadata: dict):
    method populate_indicators (line 128) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 154) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 182) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method custom_stoploss (line 200) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...

FILE: strategies/ElliotV7/ElliotV7.py
  function EWO (line 35) | def EWO(dataframe, ema_length=5, ema2_length=35):
  function populate_indicators (line 42) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> D...
  class ElliotV7 (line 47) | class ElliotV7(IStrategy):
    method custom_stoploss (line 116) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method informative_pairs (line 125) | def informative_pairs(self):
    method informative_1h_indicators (line 132) | def informative_1h_indicators(self, dataframe: DataFrame, metadata: di...
    method populate_indicators (line 148) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 179) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 217) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV8HO/ElliotV8HO.py
  function EWO (line 12) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ElliotV8HO (line 20) | class ElliotV8HO(IStrategy):
    method informative_pairs (line 120) | def informative_pairs(self):
    method get_informative_indicators (line 128) | def get_informative_indicators(self, metadata: dict):
    method populate_indicators (line 135) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 167) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 207) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV8_original/ElliotV8_original.py
  function EWO (line 35) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class ElliotV8_original (line 44) | class ElliotV8_original(IStrategy):
    method populate_indicators (line 113) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 138) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 176) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV8_original_ichiv2/ElliotV8_original_ichiv2.py
  function EWO (line 35) | def EWO(dataframe, ema_length=5, ema2_length=3):
  class ElliotV8_original_ichiv2 (line 44) | class ElliotV8_original_ichiv2(IStrategy):
    method protections (line 57) | def protections(self):
    method populate_indicators (line 149) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 174) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 212) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ElliotV8_original_ichiv3/ElliotV8_original_ichiv3.py
  function EWO (line 35) | def EWO(dataframe, ema_length=5, ema2_length=3):
  class ElliotV8_original_ichiv3 (line 44) | class ElliotV8_original_ichiv3(IStrategy):
    method protections (line 58) | def protections(self):
    method populate_indicators (line 151) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 176) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 214) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Elliotv8/Elliotv8.py
  function EWO (line 38) | def EWO(dataframe, ema_length=5, ema2_length=35):
  class Elliotv8 (line 47) | class Elliotv8(IStrategy):
    method populate_indicators (line 116) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 141) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 179) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FRAYSTRAT/FRAYSTRAT.py
  class FRAYSTRAT (line 19) | class FRAYSTRAT(IStrategy):
    method protections (line 37) | def protections(self):
    method informative_pairs (line 145) | def informative_pairs(self):
    method populate_indicators (line 158) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 377) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 412) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Fakebuy/Fakebuy.py
  function bollinger_bands (line 19) | def bollinger_bands(stock_price, window_size, num_of_std):
  class Fakebuy (line 25) | class Fakebuy(IStrategy):
    method informative_pairs (line 58) | def informative_pairs(self):
    method populate_indicators (line 63) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 122) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 169) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method get_current_price (line 205) | def get_current_price(self, pair: str) -> float:
    method check_buy_timeout (line 225) | def check_buy_timeout(self, pair: str, trade: Trade, order: dict, **kw...
    method check_sell_timeout (line 233) | def check_sell_timeout(self, pair: str, trade: Trade, order: dict, **k...
    method confirm_trade_entry (line 241) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...

FILE: strategies/FastSupertrend/FastSupertrend.py
  class FastSupertrend (line 25) | class FastSupertrend(IStrategy):
    method populate_indicators (line 84) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 111) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 123) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method supertrend (line 139) | def supertrend(self, dataframe: DataFrame, multiplier, period):

FILE: strategies/FastSupertrendOpt/FastSupertrendOpt.py
  class FastSupertrendOpt (line 25) | class FastSupertrendOpt(IStrategy):
    method populate_indicators (line 85) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 88) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 107) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method supertrend (line 123) | def supertrend(self, dataframe: DataFrame, multiplier, period):

FILE: strategies/FiveMinCrossAbove/FiveMinCrossAbove.py
  class FiveMinCrossAbove (line 13) | class FiveMinCrossAbove(IStrategy):
    method informative_pairs (line 60) | def informative_pairs(self):
    method populate_indicators (line 73) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 90) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 107) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FixedRiskRewardLoss/FixedRiskRewardLoss.py
  class FixedRiskRewardLoss (line 20) | class FixedRiskRewardLoss(IStrategy):
    method custom_stoploss (line 40) | def custom_stoploss(self, pair: str, trade: 'Trade', current_time: dat...
    method populate_indicators (line 90) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 100) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 111) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/ForexSignal/ForexSignal.py
  class ForexSignal (line 18) | class ForexSignal(IStrategy):
    method informative_pairs (line 100) | def informative_pairs(self):
    method populate_indicators (line 110) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 139) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 157) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FrostAuraM115mStrategy/FrostAuraM115mStrategy.py
  class FrostAuraM115mStrategy (line 8) | class FrostAuraM115mStrategy(IStrategy):
    method informative_pairs (line 81) | def informative_pairs(self):
    method populate_indicators (line 84) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 106) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 119) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FrostAuraM11hStrategy/FrostAuraM11hStrategy.py
  class FrostAuraM11hStrategy (line 8) | class FrostAuraM11hStrategy(IStrategy):
    method informative_pairs (line 81) | def informative_pairs(self):
    method populate_indicators (line 84) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 106) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 119) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FrostAuraM21hStrategy/FrostAuraM21hStrategy.py
  class FrostAuraM21hStrategy (line 8) | class FrostAuraM21hStrategy(IStrategy):
    method informative_pairs (line 81) | def informative_pairs(self):
    method populate_indicators (line 84) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 95) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 109) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FrostAuraM315mStrategy/FrostAuraM315mStrategy.py
  class FrostAuraM315mStrategy (line 8) | class FrostAuraM315mStrategy(IStrategy):
    method informative_pairs (line 81) | def informative_pairs(self):
    method populate_indicators (line 84) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 116) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 132) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FrostAuraM31hStrategy/FrostAuraM31hStrategy.py
  class FrostAuraM31hStrategy (line 8) | class FrostAuraM31hStrategy(IStrategy):
    method informative_pairs (line 81) | def informative_pairs(self):
    method populate_indicators (line 84) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 116) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 132) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/FrostAuraRandomStrategy/FrostAuraRandomStrategy.py
  class FrostAuraRandomStrategy (line 7) | class FrostAuraRandomStrategy(IStrategy):
    method populate_indicators (line 78) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 86) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 100) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/GodCard/GodCard.py
  class GodCard (line 13) | class GodCard(IStrategy):
    method protections (line 24) | def protections(self):
    method informative_pairs (line 105) | def informative_pairs(self):
    method populate_indicators (line 109) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 135) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 161) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/GodStraNew/GodStraNew.py
  function normalize (line 251) | def normalize(df):
  function gene_calculator (line 256) | def gene_calculator(dataframe, indicator):
  function condition_generator (line 324) | def condition_generator(dataframe, operator, indicator, crossed_indicato...
  class GodStraNew (line 451) | class GodStraNew(IStrategy):
    method populate_indicators (line 508) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 518) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 572) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/GodStraNew40/GodStraNew40.py
  function normalize (line 251) | def normalize(df):
  function gene_calculator (line 256) | def gene_calculator(dataframe, indicator):
  function condition_generator (line 324) | def condition_generator(dataframe, operator, indicator, crossed_indicato...
  class GodStraNew40 (line 483) | class GodStraNew40(IStrategy):
    method populate_indicators (line 540) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 550) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 604) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/GodStraNew_SMAonly/GodStraNew_SMAonly.py
  function normalize (line 251) | def normalize(df):
  function gene_calculator (line 256) | def gene_calculator(dataframe, indicator):
  function condition_generator (line 324) | def condition_generator(dataframe, operator, indicator, crossed_indicato...
  class GodStraNew_SMAonly (line 451) | class GodStraNew_SMAonly(IStrategy):
    method populate_indicators (line 554) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 564) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 618) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...

FILE: strategies/Guacamole/Guacamole.py
  class Guacamole (line 14) | class Guacamole(IStrategy):
    method populate_indicators (line 68) | def populate_indicators(self, dataframe: DataFrame, metadata: dict) ->...
    method populate_buy_trend (line 85) | def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> ...
    method populate_sell_trend (line 114) | def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) ->...
    method check_buy_timeout (line 142) | def check_buy_timeout(self, pair: str, trade: Trade, order: dict, **kw...
    method check_sell_timeout (line 150) | def check_sell_timeout(self, pair: str, trade: Trade, order: dict, **k...
    method confirm_trade_entry (line 158) | def confirm_trade_entry(self, pair: str, order_type: str, amount: floa...

FILE: strategies/Gumbo1/Gumbo1.py
  class Gumbo1 (line 27) | class Gumbo1(IStrategy):
    method informative_pairs (line 49) | def informative_pairs(self) -> ListPairs
Copy disabled (too large) Download .json
Condensed preview — 467 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (17,803K chars).
[
  {
    "path": "LICENSE",
    "chars": 35141,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 794,
    "preview": "# Freqtrade Strategies Repository\n\nThis repository is dedicated to sharing open-source trading strategies for the Freqtr"
  },
  {
    "path": "strategies/ADXMomentum/ADXMomentum.py",
    "chars": 2102,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/ADX_15M_USDT/ADX_15M_USDT.py",
    "chars": 2067,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/ADX_15M_USDT2/ADX_15M_USDT2.py",
    "chars": 2135,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/ASDTSRockwellTrading/ASDTSRockwellTrading.py",
    "chars": 2540,
    "preview": "\n# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfro"
  },
  {
    "path": "strategies/ActionZone/ActionZone.py",
    "chars": 6666,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n# isort: skip_"
  },
  {
    "path": "strategies/AdxSmas/AdxSmas.py",
    "chars": 1749,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/AlligatorStrat/AlligatorStrat.py",
    "chars": 3502,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\n# ---"
  },
  {
    "path": "strategies/AlligatorStrategy/AlligatorStrategy.py",
    "chars": 8852,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n# isort: skip_"
  },
  {
    "path": "strategies/AlwaysBuy/AlwaysBuy.py",
    "chars": 1039,
    "preview": "from freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\n\n\nclass AlwaysBuy(IStrategy):\n\n    INTER"
  },
  {
    "path": "strategies/Apollo11/Apollo11.py",
    "chars": 8834,
    "preview": "from datetime import datetime\nfrom datetime import timedelta\nfrom functools import reduce\n\nimport freqtrade.vendor.qtpyl"
  },
  {
    "path": "strategies/AverageStrategy/AverageStrategy.py",
    "chars": 1964,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\n# ---"
  },
  {
    "path": "strategies/AwesomeMacd/AwesomeMacd.py",
    "chars": 1900,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/BBMod1/BBMod1.py",
    "chars": 52576,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BBRSI/BBRSI.py",
    "chars": 4154,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/BBRSI2/BBRSI2.py",
    "chars": 1897,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/BBRSI21/BBRSI21.py",
    "chars": 3052,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/BBRSI3366/BBRSI3366.py",
    "chars": 3526,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/BBRSI4cust/BBRSI4cust.py",
    "chars": 5709,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n# isort: skip_"
  },
  {
    "path": "strategies/BBRSINaiveStrategy/BBRSINaiveStrategy.py",
    "chars": 4046,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/BBRSIOptim2020Strategy/BBRSIOptim2020Strategy.py",
    "chars": 4082,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/BBRSIOptimStrategy/BBRSIOptimStrategy.py",
    "chars": 4075,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/BBRSIOptimizedStrategy/BBRSIOptimizedStrategy.py",
    "chars": 4182,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/BBRSIS/BBRSIS.py",
    "chars": 4812,
    "preview": "import talib.abstract as ta\nfrom pandas import DataFrame\nfrom technical.util import resample_to_interval, resampled_merg"
  },
  {
    "path": "strategies/BBRSIStrategy/BBRSIStrategy.py",
    "chars": 4164,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/BBRSITV/BBRSITV.py",
    "chars": 20936,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame, Seri"
  },
  {
    "path": "strategies/BBRSIoriginal/BBRSIoriginal.py",
    "chars": 3653,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n\nimport talib.abstract as ta\nimport"
  },
  {
    "path": "strategies/BBRSIv2/BBRSIv2.py",
    "chars": 5532,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/BB_RPB_TSL/BB_RPB_TSL.py",
    "chars": 55228,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_2/BB_RPB_TSL_2.py",
    "chars": 62546,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_BI/BB_RPB_TSL_BI.py",
    "chars": 45255,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_BIV1/BB_RPB_TSL_BIV1.py",
    "chars": 45257,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_RNG/BB_RPB_TSL_RNG.py",
    "chars": 20828,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_RNG_2/BB_RPB_TSL_RNG_2.py",
    "chars": 20818,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_RNG_TBS/BB_RPB_TSL_RNG_TBS.py",
    "chars": 35038,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_RNG_TBS_GOLD/BB_RPB_TSL_RNG_TBS_GOLD.py",
    "chars": 35050,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_RNG_VWAP/BB_RPB_TSL_RNG_VWAP.py",
    "chars": 23333,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSL_SMA_Tranz/BB_RPB_TSL_SMA_Tranz.py",
    "chars": 225254,
    "preview": "# --- Do not remove these libs ---\nimport pandas_ta as pta\nimport copy\nimport logging\nimport pathlib\nimport rapidjson\nim"
  },
  {
    "path": "strategies/BB_RPB_TSL_SMA_Tranz_TB_1_1_1/BB_RPB_TSL_SMA_Tranz_TB_1_1_1.py",
    "chars": 189397,
    "preview": "# --- Do not remove these libs ---\nimport pandas_ta as pta\nimport copy\nimport logging\nimport pathlib\nimport rapidjson\nim"
  },
  {
    "path": "strategies/BB_RPB_TSL_SMA_Tranz_TB_MOD/BB_RPB_TSL_SMA_Tranz_TB_MOD.py",
    "chars": 193528,
    "preview": "# --- Do not remove these libs ---\nimport pandas_ta as pta\nimport copy\nimport logging\nimport pathlib\nimport rapidjson\nim"
  },
  {
    "path": "strategies/BB_RPB_TSL_Tranz/BB_RPB_TSL_Tranz.py",
    "chars": 96261,
    "preview": "# --- Do not remove these libs ---\nimport pandas_ta as pta\nimport copy\nimport logging\nimport pathlib\nimport rapidjson\nim"
  },
  {
    "path": "strategies/BB_RPB_TSL_c7c477d_20211030/BB_RPB_TSL_c7c477d_20211030.py",
    "chars": 23343,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RPB_TSLmeneguzzo/BB_RPB_TSLmeneguzzo.py",
    "chars": 49391,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib"
  },
  {
    "path": "strategies/BB_RSI/BB_RSI.py",
    "chars": 3929,
    "preview": "\n# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfro"
  },
  {
    "path": "strategies/BB_Strategy04/BB_Strategy04.py",
    "chars": 6262,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n\n# --- Do not remove these libs ---"
  },
  {
    "path": "strategies/BBands/BBands.py",
    "chars": 15379,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n\n# --- Do not "
  },
  {
    "path": "strategies/BBandsRSI/BBandsRSI.py",
    "chars": 6295,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n\n# --- Do not "
  },
  {
    "path": "strategies/BBlower/BBlower.py",
    "chars": 5941,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nCreated on Wed Dec  2 13:50:49 2020\n\n@author: alex\n\"\"\"\n\n# --- Do not "
  },
  {
    "path": "strategies/Babico_SMA5xBBmid/Babico_SMA5xBBmid.py",
    "chars": 1813,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/Bandtastic/Bandtastic.py",
    "chars": 7104,
    "preview": "import talib.abstract as ta\nimport numpy as np  # noqa\nimport pandas as pd\nfrom functools import reduce\nfrom pandas impo"
  },
  {
    "path": "strategies/BbRoi/BbRoi.py",
    "chars": 2466,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/BbandRsi/BbandRsi.py",
    "chars": 1819,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/BbandRsiRolling/BbandRsiRolling.py",
    "chars": 2051,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/BcmbigzDevelop/BcmbigzDevelop.py",
    "chars": 53815,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BcmbigzV1/BcmbigzV1.py",
    "chars": 23739,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigPete/BigPete.py",
    "chars": 32080,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom typing import "
  },
  {
    "path": "strategies/BigZ03/BigZ03.py",
    "chars": 24775,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ0307HO/BigZ0307HO.py",
    "chars": 80815,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ03HO/BigZ03HO.py",
    "chars": 25507,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ04/BigZ04.py",
    "chars": 25981,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ0407/BigZ0407.py",
    "chars": 80705,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ0407HO/BigZ0407HO.py",
    "chars": 82269,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ04HO/BigZ04HO.py",
    "chars": 26742,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ04HO2/BigZ04HO2.py",
    "chars": 30377,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ04_TSL3/BigZ04_TSL3.py",
    "chars": 28684,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ04_TSL4/BigZ04_TSL4.py",
    "chars": 29070,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ06/BigZ06.py",
    "chars": 27659,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ07/BigZ07.py",
    "chars": 27940,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BigZ07Next/BigZ07Next.py",
    "chars": 81775,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/BigZ07Next2/BigZ07Next2.py",
    "chars": 81775,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/BinClucMad/BinClucMad.py",
    "chars": 22666,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BinClucMadDevelop/BinClucMadDevelop.py",
    "chars": 42857,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BinClucMadSMADevelop/BinClucMadSMADevelop.py",
    "chars": 50925,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BinClucMadV1/BinClucMadV1.py",
    "chars": 38236,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/BinHV27/BinHV27.py",
    "chars": 5843,
    "preview": "from freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom functools import reduce\nfrom panda"
  },
  {
    "path": "strategies/BinHV45/BinHV45.py",
    "chars": 2622,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy import IStrategy\nfrom freqtrade.strategy import IntParameter\n"
  },
  {
    "path": "strategies/BinHV45HO/BinHV45HO.py",
    "chars": 2687,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/BreakEven/BreakEven.py",
    "chars": 2222,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\n# ---"
  },
  {
    "path": "strategies/BuyAllSellAllStrategy/BuyAllSellAllStrategy.py",
    "chars": 1151,
    "preview": "from freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nfrom freqtrade.persistence import Trade\n"
  },
  {
    "path": "strategies/BuyOnly/BuyOnly.py",
    "chars": 13949,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n\n# --- Do not remove these libs ---"
  },
  {
    "path": "strategies/CBPete9/CBPete9.py",
    "chars": 20118,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/CCIStrategy/CCIStrategy.py",
    "chars": 4424,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/CMCWinner/CMCWinner.py",
    "chars": 3157,
    "preview": "\n# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\n# --"
  },
  {
    "path": "strategies/Cci/Cci.py",
    "chars": 2979,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/Chandem/Chandem.py",
    "chars": 4416,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nCreated on Wed Dec  2 13:50:49 2020\n\n@author: alex\n\"\"\"\n\n# --- Do not "
  },
  {
    "path": "strategies/Chandemtwo/Chandemtwo.py",
    "chars": 4552,
    "preview": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\"\"\"\nCreated on Wed Dec  2 13:50:49 2020\n\n@author: alex\n\"\"\"\n\n# --- Do not "
  },
  {
    "path": "strategies/Chispei/Chispei.py",
    "chars": 1930,
    "preview": "# Freqtrade_backtest_validation_freqtrade1.py\n# This script is 1 of a pair the other being freqtrade_backtest_validation"
  },
  {
    "path": "strategies/Cluc4/Cluc4.py",
    "chars": 3494,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/Cluc4werk/Cluc4werk.py",
    "chars": 5966,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/Cluc5werk/Cluc5werk.py",
    "chars": 9793,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/Cluc7werk/Cluc7werk.py",
    "chars": 4224,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/ClucFiatROI/ClucFiatROI.py",
    "chars": 6157,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nfrom functools import reduce\nimport talib.abstr"
  },
  {
    "path": "strategies/ClucFiatSlow/ClucFiatSlow.py",
    "chars": 4958,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/ClucHAnix/ClucHAnix.py",
    "chars": 7878,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/ClucHAnix5m/ClucHAnix5m.py",
    "chars": 34272,
    "preview": "from datetime import datetime, timedelta, timezone\nfrom functools import reduce\nfrom typing import List\n# --- Do not rem"
  },
  {
    "path": "strategies/ClucHAnix_5m/ClucHAnix_5m.py",
    "chars": 8517,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/ClucHAnix_5m1/ClucHAnix_5m1.py",
    "chars": 21764,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\r\nimport numpy as np\r\nimport talib.abstract as ta\r\nfrom freqtrade.s"
  },
  {
    "path": "strategies/ClucHAnix_BB_RPB_MOD/ClucHAnix_BB_RPB_MOD.py",
    "chars": 21311,
    "preview": "from datetime import datetime, timedelta, timezone\nfrom functools import reduce\nfrom typing import List\n\nimport freqtrad"
  },
  {
    "path": "strategies/ClucHAnix_BB_RPB_MOD2_ROI/ClucHAnix_BB_RPB_MOD2_ROI.py",
    "chars": 34277,
    "preview": "from datetime import datetime, timedelta, timezone\nfrom functools import reduce\nfrom typing import List\n# --- Do not rem"
  },
  {
    "path": "strategies/ClucHAnix_BB_RPB_MOD_CTT/ClucHAnix_BB_RPB_MOD_CTT.py",
    "chars": 50611,
    "preview": "from datetime import datetime, timedelta, timezone\r\nfrom functools import reduce\r\nfrom freqtrade.strategy.interface impo"
  },
  {
    "path": "strategies/ClucHAnix_BB_RPB_MOD_E0V1E_ROI/ClucHAnix_BB_RPB_MOD_E0V1E_ROI.py",
    "chars": 37392,
    "preview": "from datetime import datetime, timedelta, timezone\r\nfrom functools import reduce\r\nfrom typing import List\r\n# --- Do not "
  },
  {
    "path": "strategies/ClucHAnix_hhll/ClucHAnix_hhll.py",
    "chars": 34704,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\r\nimport numpy as np\r\nimport talib.abstract as ta\r\nimport time\r\nimp"
  },
  {
    "path": "strategies/ClucHAwerk/ClucHAwerk.py",
    "chars": 13933,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/ClucMay72018/ClucMay72018.py",
    "chars": 2858,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/CofiBitStrategy/CofiBitStrategy.py",
    "chars": 3027,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport talib.abstract as ta\nfro"
  },
  {
    "path": "strategies/CombinedBinHAndCluc/CombinedBinHAndCluc.py",
    "chars": 3228,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\n# ----------"
  },
  {
    "path": "strategies/CombinedBinHAndCluc2021/CombinedBinHAndCluc2021.py",
    "chars": 3790,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\n# ----------"
  },
  {
    "path": "strategies/CombinedBinHAndCluc2021Bull/CombinedBinHAndCluc2021Bull.py",
    "chars": 3804,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\n# ----------"
  },
  {
    "path": "strategies/CombinedBinHAndClucHyperV0/CombinedBinHAndClucHyperV0.py",
    "chars": 8965,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\n# ----------"
  },
  {
    "path": "strategies/CombinedBinHAndClucHyperV3/CombinedBinHAndClucHyperV3.py",
    "chars": 10056,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\n# ----------"
  },
  {
    "path": "strategies/CombinedBinHAndClucV2/CombinedBinHAndClucV2.py",
    "chars": 6119,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\n# ----------"
  },
  {
    "path": "strategies/CombinedBinHAndClucV3/CombinedBinHAndClucV3.py",
    "chars": 4402,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV4/CombinedBinHAndClucV4.py",
    "chars": 4729,
    "preview": "# Definition of Bollinger Bands\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.ab"
  },
  {
    "path": "strategies/CombinedBinHAndClucV5/CombinedBinHAndClucV5.py",
    "chars": 6798,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV5Hyperoptable/CombinedBinHAndClucV5Hyperoptable.py",
    "chars": 8137,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV6/CombinedBinHAndClucV6.py",
    "chars": 10525,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV6H/CombinedBinHAndClucV6H.py",
    "chars": 20405,
    "preview": "# --- Do not remove these libs --------------------------------------------------------------------\nimport freqtrade.ven"
  },
  {
    "path": "strategies/CombinedBinHAndClucV7/CombinedBinHAndClucV7.py",
    "chars": 16156,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV8/CombinedBinHAndClucV8.py",
    "chars": 20587,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV8Hyper/CombinedBinHAndClucV8Hyper.py",
    "chars": 21408,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV8XH/CombinedBinHAndClucV8XH.py",
    "chars": 23737,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHAndClucV8XHO/CombinedBinHAndClucV8XHO.py",
    "chars": 24318,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CombinedBinHClucAndMADV3/CombinedBinHClucAndMADV3.py",
    "chars": 8682,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/CombinedBinHClucAndMADV5/CombinedBinHClucAndMADV5.py",
    "chars": 12759,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/CombinedBinHClucAndMADV6/CombinedBinHClucAndMADV6.py",
    "chars": 13559,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/CombinedBinHClucAndMADV9/CombinedBinHClucAndMADV9.py",
    "chars": 20540,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/Combined_Indicators/Combined_Indicators.py",
    "chars": 3387,
    "preview": "# --- Do not remove these libs ---\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\n# ----------"
  },
  {
    "path": "strategies/Combined_NFIv6_SMA/Combined_NFIv6_SMA.py",
    "chars": 193637,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/Combined_NFIv7_SMA/Combined_NFIv7_SMA.py",
    "chars": 221631,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/Combined_NFIv7_SMA_Rallipanos_20210707/Combined_NFIv7_SMA_Rallipanos_20210707.py",
    "chars": 221651,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/Combined_NFIv7_SMA_bAdBoY_20211204/Combined_NFIv7_SMA_bAdBoY_20211204.py",
    "chars": 221647,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/CoreStrategy/CoreStrategy.py",
    "chars": 57008,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.pers"
  },
  {
    "path": "strategies/CrossEMAStrategy/CrossEMAStrategy.py",
    "chars": 7825,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n# isort: skip_"
  },
  {
    "path": "strategies/CryptoFrog/CryptoFrog.py",
    "chars": 25118,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogHO/CryptoFrogHO.py",
    "chars": 25401,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogHO2/CryptoFrogHO2.py",
    "chars": 25376,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogHO2A/CryptoFrogHO2A.py",
    "chars": 25377,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogHO3A1/CryptoFrogHO3A1.py",
    "chars": 25453,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogHO3A2/CryptoFrogHO3A2.py",
    "chars": 25451,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogHO3A3/CryptoFrogHO3A3.py",
    "chars": 25450,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogHO3A4/CryptoFrogHO3A4.py",
    "chars": 25449,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogNFI/CryptoFrogNFI.py",
    "chars": 210328,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogNFIHO1A/CryptoFrogNFIHO1A.py",
    "chars": 236623,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CryptoFrogOffset/CryptoFrogOffset.py",
    "chars": 168296,
    "preview": "from typing import Dict, List, Optional, Tuple\nfrom datetime import datetime, timedelta\nfrom cachetools import TTLCache\n"
  },
  {
    "path": "strategies/CustomStoplossWithPSAR/CustomStoplossWithPSAR.py",
    "chars": 3731,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/DCBBBounce/DCBBBounce.py",
    "chars": 8676,
    "preview": "\n# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfro"
  },
  {
    "path": "strategies/DD/DD.py",
    "chars": 3048,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/DIV_v1/DIV_v1.py",
    "chars": 4047,
    "preview": "from pandas import DataFrame\nimport talib.abstract as ta\nfrom functools import reduce\nimport numpy as np\nfrom freqtrade."
  },
  {
    "path": "strategies/DevilStra/DevilStra.py",
    "chars": 26616,
    "preview": "# DevilStra Strategy\n# 𝔇𝔢𝔳𝔦𝔩 𝔦𝔰 𝔞𝔩𝔴𝔞𝔶𝔰 𝔰𝔱𝔯𝔬𝔫𝔤𝔢𝔯 𝔱𝔥𝔞𝔫 𝔊𝔬𝔡.\n# 𝔅𝔲𝔱 𝔱𝔥𝔢 𝔬𝔫𝔩𝔶 𝔬𝔫𝔢 𝔴𝔥𝔬 𝔥𝔞𝔰 𝔱𝔥𝔢 𝔞𝔟𝔦𝔩𝔦𝔱𝔶\n# 𝔗𝔬 𝔠𝔯𝔢𝔞𝔱𝔢 𝔫𝔢𝔴 𝔠𝔯𝔢𝔞𝔱𝔲𝔯"
  },
  {
    "path": "strategies/Diamond/Diamond.py",
    "chars": 8211,
    "preview": "# 𝐼𝓉 𝒾𝓈 𝒟𝒾𝒶𝓂𝑜𝓃𝒹 𝒮𝓉𝓇𝒶𝓉𝑒𝑔𝓎.\n# 𝒯𝒽𝒶𝓉 𝓉𝒶𝓀𝑒𝓈 𝒽𝑒𝓇 𝑜𝓌𝓃 𝓇𝒾𝑔𝒽𝓉𝓈 𝓁𝒾𝓀𝑒 𝒜𝒻𝑔𝒽𝒶𝓃𝒾𝓈𝓉𝒶𝓃 𝓌𝑜𝓂𝑒𝓃\n# 𝒯𝒽𝑜𝓈𝑒 𝓌𝒽𝑜 𝓈𝓉𝒾𝓁𝓁 𝓅𝓇𝑜𝓊𝒹 𝒶𝓃𝒹 𝒽𝑜𝓅𝑒𝒻𝓊𝓁.\n# 𝒯𝒽𝑜𝓈"
  },
  {
    "path": "strategies/Divergences/Divergences.py",
    "chars": 15834,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/Dracula/Dracula.py",
    "chars": 10345,
    "preview": "\nfrom freqtrade.strategy import DecimalParameter, IntParameter\n\nfrom freqtrade.strategy.interface import IStrategy\nfrom "
  },
  {
    "path": "strategies/Dyna_opti/Dyna_opti.py",
    "chars": 27805,
    "preview": "import numpy as np\r\nimport talib.abstract as ta\r\nimport freqtrade.vendor.qtpylib.indicators as qtpylib\r\nimport arrow\r\n\r\n"
  },
  {
    "path": "strategies/EI3v2_tag_cofi_green/EI3v2_tag_cofi_green.py",
    "chars": 18747,
    "preview": "# --- Do not remove these libs ---\r\nfrom freqtrade.strategy.interface import IStrategy\r\nfrom typing import Dict, List\r\nf"
  },
  {
    "path": "strategies/EMA50/EMA50.py",
    "chars": 16301,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n\n# --- Do not "
  },
  {
    "path": "strategies/EMA520015_V17/EMA520015_V17.py",
    "chars": 2593,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\nimpor"
  },
  {
    "path": "strategies/EMABBRSI/EMABBRSI.py",
    "chars": 4664,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n\nimport talib.abstract as ta\nfrom p"
  },
  {
    "path": "strategies/EMABreakout/EMABreakout.py",
    "chars": 15492,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n\n# --- Do not "
  },
  {
    "path": "strategies/EMASkipPump/EMASkipPump.py",
    "chars": 2985,
    "preview": "from freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom functools import reduce\nfrom panda"
  },
  {
    "path": "strategies/EMAVolume/EMAVolume.py",
    "chars": 2364,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom pandas import DataFrame\n# ---"
  },
  {
    "path": "strategies/EMA_CROSSOVER_STRATEGY/EMA_CROSSOVER_STRATEGY.py",
    "chars": 6308,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n\n# --- Do not remove these libs ---"
  },
  {
    "path": "strategies/EXPERIMENTAL_STRATEGY/EXPERIMENTAL_STRATEGY.py",
    "chars": 5482,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n\n# --- Do not remove these libs ---"
  },
  {
    "path": "strategies/ElliotV2/ElliotV2.py",
    "chars": 15193,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV4/ElliotV4.py",
    "chars": 12088,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV531/ElliotV531.py",
    "chars": 16942,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV5HO/ElliotV5HO.py",
    "chars": 13768,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV5HOMod2/ElliotV5HOMod2.py",
    "chars": 7234,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV5HOMod3/ElliotV5HOMod3.py",
    "chars": 6409,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV7/ElliotV7.py",
    "chars": 8611,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV8HO/ElliotV8HO.py",
    "chars": 7317,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom functools import reduce\nfrom "
  },
  {
    "path": "strategies/ElliotV8_original/ElliotV8_original.py",
    "chars": 6421,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV8_original_ichiv2/ElliotV8_original_ichiv2.py",
    "chars": 7613,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/ElliotV8_original_ichiv3/ElliotV8_original_ichiv3.py",
    "chars": 7650,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/Elliotv8/Elliotv8.py",
    "chars": 6548,
    "preview": "# for live trailing_stop = False and use_custom_stoploss = True\n# for backtest trailing_stop = True and use_custom_stopl"
  },
  {
    "path": "strategies/FRAYSTRAT/FRAYSTRAT.py",
    "chars": 18086,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# flake8: noqa: F401\n# isort: skip_"
  },
  {
    "path": "strategies/Fakebuy/Fakebuy.py",
    "chars": 10281,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/FastSupertrend/FastSupertrend.py",
    "chars": 7817,
    "preview": "\"\"\"\nSupertrend strategy:\n* Description: Generate a 3 supertrend indicators for 'buy' strategies & 3 supertrend indicator"
  },
  {
    "path": "strategies/FastSupertrendOpt/FastSupertrendOpt.py",
    "chars": 7475,
    "preview": "\"\"\"\nSupertrend strategy:\n* Description: Generate a 3 supertrend indicators for 'buy' strategies & 3 supertrend indicator"
  },
  {
    "path": "strategies/FiveMinCrossAbove/FiveMinCrossAbove.py",
    "chars": 3851,
    "preview": "# --- Do not remove these libs ---\nfrom freqtrade.strategy.interface import IStrategy\nfrom typing import Dict, List\nfrom"
  },
  {
    "path": "strategies/FixedRiskRewardLoss/FixedRiskRewardLoss.py",
    "chars": 4912,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/ForexSignal/ForexSignal.py",
    "chars": 5862,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\n# isort: skip_file\n# --- Do not rem"
  },
  {
    "path": "strategies/FrostAuraM115mStrategy/FrostAuraM115mStrategy.py",
    "chars": 3918,
    "preview": "import numpy as np\nimport pandas as pd\nfrom pandas import DataFrame\nfrom freqtrade.strategy.interface import IStrategy\ni"
  },
  {
    "path": "strategies/FrostAuraM11hStrategy/FrostAuraM11hStrategy.py",
    "chars": 3952,
    "preview": "import numpy as np\nimport pandas as pd\nfrom pandas import DataFrame\nfrom freqtrade.strategy.interface import IStrategy\ni"
  },
  {
    "path": "strategies/FrostAuraM21hStrategy/FrostAuraM21hStrategy.py",
    "chars": 3296,
    "preview": "import numpy as np\nimport pandas as pd\nfrom pandas import DataFrame\nfrom freqtrade.strategy.interface import IStrategy\ni"
  },
  {
    "path": "strategies/FrostAuraM315mStrategy/FrostAuraM315mStrategy.py",
    "chars": 4564,
    "preview": "import numpy as np\nimport pandas as pd\nfrom pandas import DataFrame\nfrom freqtrade.strategy.interface import IStrategy\ni"
  },
  {
    "path": "strategies/FrostAuraM31hStrategy/FrostAuraM31hStrategy.py",
    "chars": 4610,
    "preview": "import numpy as np\nimport pandas as pd\nfrom pandas import DataFrame\nfrom freqtrade.strategy.interface import IStrategy\ni"
  },
  {
    "path": "strategies/FrostAuraRandomStrategy/FrostAuraRandomStrategy.py",
    "chars": 3374,
    "preview": "from pandas import DataFrame\nfrom freqtrade.strategy.interface import IStrategy\nfrom freqtrade.strategy import (IntParam"
  },
  {
    "path": "strategies/GodCard/GodCard.py",
    "chars": 6241,
    "preview": "from freqtrade.strategy import IStrategy\nfrom freqtrade.strategy import (BooleanParameter, CategoricalParameter, Decimal"
  },
  {
    "path": "strategies/GodStraNew/GodStraNew.py",
    "chars": 25442,
    "preview": "# GodStraNew Strategy\n# Author: @Mablue (Masoud Azizi)\n# github: https://github.com/mablue/\n# freqtrade hyperopt --hyper"
  },
  {
    "path": "strategies/GodStraNew40/GodStraNew40.py",
    "chars": 26784,
    "preview": "# GodStraNew Strategy\n# Author: @Mablue (Masoud Azizi)\n# github: https://github.com/mablue/\n# freqtrade hyperopt --hyper"
  },
  {
    "path": "strategies/GodStraNew_SMAonly/GodStraNew_SMAonly.py",
    "chars": 26714,
    "preview": "# GodStraNew Strategy\n# Author: @Mablue (Masoud Azizi)\n# github: https://github.com/mablue/\n# freqtrade hyperopt --hyper"
  },
  {
    "path": "strategies/Guacamole/Guacamole.py",
    "chars": 5806,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\nimport freqtrade.vendor.qtpylib.ind"
  },
  {
    "path": "strategies/Gumbo1/Gumbo1.py",
    "chars": 5264,
    "preview": "\"\"\"\nhttps://github.com/raph92?tab=repositories\n\"\"\"\nimport logging\n\n# --- Do not remove these libs ---\nimport sys\nfrom fu"
  },
  {
    "path": "strategies/Hacklemore2/Hacklemore2.py",
    "chars": 5856,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/Hacklemore3/Hacklemore3.py",
    "chars": 6600,
    "preview": "import freqtrade.vendor.qtpylib.indicators as qtpylib\nimport numpy as np\nimport talib.abstract as ta\nfrom freqtrade.stra"
  },
  {
    "path": "strategies/HansenSmaOffsetV1/HansenSmaOffsetV1.py",
    "chars": 2482,
    "preview": "# --- Do not remove these libs --- freqtrade backtesting --strategy SmoothScalp --timerange 20210110-20210410\nfrom freqt"
  },
  {
    "path": "strategies/HarmonicDivergence/HarmonicDivergence.py",
    "chars": 34770,
    "preview": "# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement\r\n# flake8: noqa: F401\r\n\r\n# --- Do n"
  },
  {
    "path": "strategies/Heracles/Heracles.py",
    "chars": 3680,
    "preview": "# Heracles Strategy: Strongest Son of GodStra\n# ( With just 1 Genome! its a bacteria :D )\n# Author: @Mablue (Masoud Aziz"
  },
  {
    "path": "strategies/HourBasedStrategy/HourBasedStrategy.py",
    "chars": 4280,
    "preview": "# Hour Strategy\n# In this strategy we try to find the best hours to buy and sell in a day.(in hourly timeframe)\n# Becaus"
  }
]

// ... and 267 more files (download for full content)

About this extraction

This page contains the full source code of the davidzr/freqtrade-strategies GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 467 files (16.5 MB), approximately 4.4M tokens, and a symbol index with 5082 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!