import logging from numpy.lib import math from freqtrade.strategy.interface import IStrategy from pandas import DataFrame import pandas as pd from ta import add_all_ta_features from ta.utils import dropna import freqtrade.vendor.qtpylib.indicators as qtpylib from functools import reduce import numpy as np class GodStraOpt2(IStrategy): buy_params = { "buy-indicator-0": "volatility_bbli", "buy-cross-0": "trend_stc", "buy-int-0": 44, "buy-real-0": -0.0345, "buy-oper-0": ">R", } sell_params = { "sell-indicator-0": "trend_adx", "sell-cross-0": "volume_vwap", "sell-int-0": 75, "sell-real-0": 0.65115, "sell-oper-0": " DataFrame: dataframe = dropna(dataframe) dataframe = add_all_ta_features( dataframe, open="open", high="high", low="low", close="close", volume="volume", fillna=True) return dataframe def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions = list() for i in range(self.dna_size(self.buy_params)): OPR = self.buy_params[f'buy-oper-{i}'] IND = self.buy_params[f'buy-indicator-{i}'] CRS = self.buy_params[f'buy-cross-{i}'] INT = self.buy_params[f'buy-int-{i}'] REAL = self.buy_params[f'buy-real-{i}'] DFIND = dataframe[IND] DFCRS = dataframe[CRS] if OPR == ">": conditions.append(DFIND > DFCRS) elif OPR == "=": conditions.append(np.isclose(DFIND, DFCRS)) elif OPR == "<": conditions.append(DFIND < DFCRS) elif OPR == "CA": conditions.append(qtpylib.crossed_above(DFIND, DFCRS)) elif OPR == "CB": conditions.append(qtpylib.crossed_below(DFIND, DFCRS)) elif OPR == ">I": conditions.append(DFIND > INT) elif OPR == "=I": conditions.append(DFIND == INT) elif OPR == "R": conditions.append(DFIND > REAL) elif OPR == "=R": conditions.append(np.isclose(DFIND, REAL)) elif OPR == " DataFrame: conditions = list() for i in range(self.dna_size(self.sell_params)): OPR = self.sell_params[f'sell-oper-{i}'] IND = self.sell_params[f'sell-indicator-{i}'] CRS = self.sell_params[f'sell-cross-{i}'] INT = self.sell_params[f'sell-int-{i}'] REAL = self.sell_params[f'sell-real-{i}'] DFIND = dataframe[IND] DFCRS = dataframe[CRS] if OPR == ">": conditions.append(DFIND > DFCRS) elif OPR == "=": conditions.append(np.isclose(DFIND, DFCRS)) elif OPR == "<": conditions.append(DFIND < DFCRS) elif OPR == "CA": conditions.append(qtpylib.crossed_above(DFIND, DFCRS)) elif OPR == "CB": conditions.append(qtpylib.crossed_below(DFIND, DFCRS)) elif OPR == ">I": conditions.append(DFIND > INT) elif OPR == "=I": conditions.append(DFIND == INT) elif OPR == "R": conditions.append(DFIND > REAL) elif OPR == "=R": conditions.append(np.isclose(DFIND, REAL)) elif OPR == "