# source: https://raw.githubusercontent.com/Elmata2/freqtrade-TenKate-old/61a7fd6760a8f231382c1bbca536e95dafef8844/freqtrade/templates/heisenberg.py
# Start hyperopt with the following command:
# freqtrade hyperopt --config config.json --hyperopt-loss SharpeHyperOptLoss --strategy RsiStrat -e 500 --spaces  buy sell --random-state 8711

# --- Do not remove these libs ---
from operator import truediv
import numpy as np  # noqa
import pandas as pd  # noqa
from functools import reduce
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

# --- Generic strategy settings ---

class github_Elmata2_freqtrade_TenKate_old__heisenberg__20230209_080951(IStrategy):
    INTERFACE_VERSION = 3
    # Determine timeframe and # of candles before strategysignals becomes valid
    timeframe = '4h'
    startup_candle_count: int = 25
    # Determine roi take profit and stop loss points
    minimal_roi = {
        "0": 0.03
    }

    stoploss = -0.15
    can_short = True
    trailing_stop = False
    use_exit_signal = False
    exit_profit_only = False
    exit_profit_offset = 0.0
    ignore_roi_if_entry_signal = False
    trailing_stop_positive: 0.27
    trailing_stop_positive_offset: 0.29000000000000004
    trailing_only_offset_is_reached: False
    

    # Protection hyperspace params:

    @property
    def protections(self):
        prot = []

        cooldown_lookback: 46
        stop_duration: 20
        use_stop_protection: True

        return prot


    
    

    

# --- Used indicators of strategy code ----

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        
        # mfi index voor de koop en verkoop

        dataframe['mfi'] = ta.MFI(dataframe)
        
        # RSI voor de strategy
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=2)



        return dataframe

# --- Buy settings ---

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] > 80) &
                (dataframe['mfi'] > 50)
            ),
            'enter_long'] = 1

        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe['rsi'] < 20) &
                (dataframe['mfi'] < 50)
            ),
            'enter_short'] = 1

        return dataframe
