# GodStra Strategy # Author: @Mablue (Masoud Azizi) # github: https://github.com/mablue/ # IMPORTANT:Add to your pairlists inside config.json (Under StaticPairList): # { # "method": "AgeFilter", # "min_days_listed": 30 # }, # IMPORTANT: INSTALL TA BEFOUR RUN(pip install ta) # IMPORTANT: Use Smallest "max_open_trades" for getting best results inside config.json # --- Do not remove these libs --- import logging from numpy.lib import math from freqtrade.strategy.interface import IStrategy from pandas import DataFrame # -------------------------------- # Add your lib to import here # import talib.abstract as ta import pandas as pd # import talib.abstract as ta 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 GodStra(IStrategy): # Buy hyperspace params: buy_params = { 'buy-cross-0': 'volatility_kcc', 'buy-indicator-0': 'trend_ichimoku_base', 'buy-int-0': 42, 'buy-oper-0': ' DataFrame: # Add all ta features dataframe = dropna(dataframe) dataframe = add_all_ta_features( dataframe, open="open", high="high", low="low", close="close", volume="volume", fillna=True) # dataframe.to_csv("df.csv", index=True) return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions = list() # /5: Cuz We have 5 Group of variables inside buy_param 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 == "