Timeframe
5m
Direction
Long & Short
Stoploss
-99.0%
Trailing Stop
No
ROI
N/A
Interface Version
3
Startup Candles
480
Indicators
13
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
import copy
import logging
import pathlib
import rapidjson
import numpy as np
import talib.abstract as ta
import pandas as pd
from freqtrade.strategy.interface import IStrategy
from freqtrade.strategy import merge_informative_pair
from pandas import DataFrame, Series
from functools import reduce
from freqtrade.persistence import Trade, Order
from datetime import datetime, timedelta
import time
from typing import Optional
import warnings
log = logging.getLogger(__name__)
# log.setLevel(logging.DEBUG)
warnings.simplefilter(action="ignore", category=pd.errors.PerformanceWarning)
#############################################################################################################
## NostalgiaForInfinityX7 by iterativ ##
## https://github.com/iterativv/NostalgiaForInfinity ##
## ##
## Strategy for Freqtrade https://github.com/freqtrade/freqtrade ##
## ##
#############################################################################################################
## GENERAL RECOMMENDATIONS ##
## ##
## For optimal performance, suggested to use between 6 and 12 open trades, with unlimited stake. ##
## A pairlist with 40 to 80 pairs. Volume pairlist works well. ##
## Prefer stable coin (USDT, USDC etc) pairs, instead of BTC or ETH pairs. ##
## Highly recommended to blacklist leveraged tokens (*BULL, *BEAR, *UP, *DOWN etc). ##
## Ensure that you don't override any variables in you config.json. Especially ##
## the timeframe (must be 5m). ##
## use_exit_signal must set to true (or not set at all). ##
## exit_profit_only must set to false (or not set at all). ##
## ignore_roi_if_entry_signal must set to true (or not set at all). ##
## ##
#############################################################################################################
## DONATIONS ##
## ##
## BTC: bc1qvflsvddkmxh7eqhc4jyu5z5k6xcw3ay8jl49sk ##
## ETH (ERC20): 0x83D3cFb8001BDC5d2211cBeBB8cB3461E5f7Ec91 ##
## BEP20/BSC (USDT, ETH, BNB, ...): 0x86A0B21a20b39d16424B7c8003E4A7e12d78ABEe ##
## TRC20/TRON (USDT, TRON, ...): TTAa9MX6zMLXNgWMhg7tkNormVHWCoq8Xk ##
## ##
## Patreon: https://www.patreon.com/iterativ ##
## ##
## REFERRAL LINKS ##
## ##
## Binance: https://www.binance.com/join?ref=C68K26A9 (20% discount on trading fees) ##
## Kucoin: https://www.kucoin.com/r/af/QBSSS5J2 (20% lifetime discount on trading fees) ##
## Gate: https://www.gate.io/share/nfinfinity (20% lifetime discount on trading fees) ##
## OKX: https://www.okx.com/join/11749725931 (20% discount on trading fees) ##
## MEXC: https://promote.mexc.com/b/nfinfinity (10% discount on trading fees) ##
## ByBit: https://partner.bybit.com/b/nfi ##
## Bitget: https://bonus.bitget.com/nfinfinity (lifetime 20% +10% extra spot rebate) ##
## Kraken: https://proinvite.kraken.com/9f1e/cctimhte ##
## BitMart: https://www.bitmart.com/invite/nfinfinity (20% lifetime discount on trading fees) ##
## HTX: https://www.htx.com/invite/en-us/1f?invite_code=ubpt2223 ##
## (Welcome Bonus worth 241 USDT upon completion of a deposit and trade) ##
## Bitvavo: https://bitvavo.com/invite?a=D22103A4BC (no fees for the first € 10000) ##
#############################################################################################################
class NostalgiaForInfinityX7(IStrategy):
INTERFACE_VERSION = 3
def version(self) -> str:
return "v17.4.248"
stoploss = -0.99
# Trailing stoploss (not used)
trailing_stop = False
trailing_only_offset_is_reached = True
trailing_stop_positive = 0.01
trailing_stop_positive_offset = 0.03
use_custom_stoploss = False
stoploss_on_exchange = False
# Optimal timeframe for the strategy.
timeframe = "5m"
info_timeframes = ["15m", "1h", "4h", "1d"]
# BTC informatives
# btc_info_timeframes = ["5m", "15m", "1h", "4h", "1d"]
btc_info_timeframes = ["1h", "4h", "1d"]
stable_stake_currencies = frozenset(
("USDT", "BUSD", "USDC", "DAI", "TUSD", "FDUSD", "PAX", "USD", "EUR", "GBP", "TRY")
)
informative_ohlcv_columns = frozenset(("open", "high", "low", "close", "volume"))
# Backtest Age Filter emulation
has_bt_agefilter = False
bt_min_age_days = 3
# Exchange Downtime protection
has_downtime_protection = False
# Do you want to use the hold feature? (with hold-trades.json)
hold_support_enabled = True
# Run "populate_indicators()" only for new candle.
process_only_new_candles = True
# These values can be overridden in the "ask_strategy" section in the config.
use_exit_signal = True
exit_profit_only = False
ignore_roi_if_entry_signal = True
# Number of candles the strategy requires before producing valid signals
startup_candle_count: int = 800
# Number of cores to use for pandas_ta indicators calculations
num_cores_indicators_calc = 0
# Long Normal mode tags
long_normal_mode_tags = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"]
# Long Pump mode tags
long_pump_mode_tags = ["21", "22", "23", "24", "25", "26"]
# Long Quick mode tags
long_quick_mode_tags = ["41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53"]
# Long rebuy mode tags
long_rebuy_mode_tags = ["61", "62", "63"]
# Long high profit mode tags
long_high_profit_mode_tags = ["81", "82"]
# Long rapid mode tags
long_rapid_mode_tags = ["101", "102", "103", "104", "105", "106", "107", "108", "109", "110"]
# Long grind mode tags
long_grind_mode_tags = ["120"]
# Long btc mode tags
long_btc_mode_tags = ["121"]
# Long top coins mode tags
long_top_coins_mode_tags = ["141", "142", "143", "144", "145"]
# Long scalp mode tags
long_scalp_mode_tags = ["161", "162", "163"]
long_rebuy_grind_mode_tags = long_rebuy_mode_tags + long_grind_mode_tags
long_scalp_rebuy_grind_mode_tags = long_scalp_mode_tags + long_rebuy_mode_tags + long_grind_mode_tags
long_rapid_rebuy_grind_mode_tags = long_rapid_mode_tags + long_rebuy_mode_tags + long_grind_mode_tags
long_rapid_rebuy_grind_scalp_mode_tags = (
long_rapid_mode_tags + long_rebuy_mode_tags + long_grind_mode_tags + long_scalp_mode_tags
)
long_adjust_mode_tags = (
long_normal_mode_tags
+ long_pump_mode_tags
+ long_quick_mode_tags
+ long_high_profit_mode_tags
+ long_rapid_mode_tags
+ long_top_coins_mode_tags
+ long_scalp_mode_tags
)
long_known_mode_tags = (
long_normal_mode_tags
+ long_pump_mode_tags
+ long_quick_mode_tags
+ long_rebuy_mode_tags
+ long_high_profit_mode_tags
+ long_rapid_mode_tags
+ long_grind_mode_tags
+ long_btc_mode_tags
+ long_top_coins_mode_tags
+ long_scalp_mode_tags
)
long_normal_mode_name = "long_normal"
long_pump_mode_name = "long_pump"
long_quick_mode_name = "long_quick"
long_rebuy_mode_name = "long_rebuy"
long_high_profit_mode_name = "long_hp"
long_rapid_mode_name = "long_rapid"
long_grind_mode_name = "long_grind"
long_btc_mode_name = "long_btc"
long_top_coins_mode_name = "long_tc"
long_scalp_mode_name = "long_scalp"
# Shorting
# Short normal mode tags
short_normal_mode_tags = ["501", "502"]
# Short Pump mode tags
short_pump_mode_tags = ["521", "522", "523", "524", "525", "526"]
# Short Quick mode tags
short_quick_mode_tags = ["541", "542", "543", "544", "545", "546", "547", "548", "549", "550"]
# Short rebuy mode tags
short_rebuy_mode_tags = ["561"]
# Short mode tags
short_high_profit_mode_tags = ["581", "582"]
# Short rapid mode tags
short_rapid_mode_tags = ["601", "602", "603", "604", "605", "606", "607", "608", "609", "610"]
# Short grind mode tags
short_grind_mode_tags = ["620"]
# Short top coins mode tags
short_top_coins_mode_tags = ["641", "642"]
# Short scalp mode tags
short_scalp_mode_tags = ["661"]
short_rebuy_grind_mode_tags = short_rebuy_mode_tags + short_grind_mode_tags
short_scalp_rebuy_grind_mode_tags = short_scalp_mode_tags + short_rebuy_mode_tags + short_grind_mode_tags
short_rapid_rebuy_grind_mode_tags = short_rapid_mode_tags + short_rebuy_mode_tags + short_grind_mode_tags
short_adjust_mode_tags = (
short_normal_mode_tags
+ short_pump_mode_tags
+ short_quick_mode_tags
+ short_high_profit_mode_tags
+ short_rapid_mode_tags
+ short_top_coins_mode_tags
+ short_scalp_mode_tags
)
short_known_mode_tags = (
short_normal_mode_tags
+ short_pump_mode_tags
+ short_quick_mode_tags
+ short_rebuy_mode_tags
+ short_high_profit_mode_tags
+ short_rapid_mode_tags
+ short_grind_mode_tags
+ short_top_coins_mode_tags
+ short_scalp_mode_tags
)
short_exit_known_mode_tags = (
short_normal_mode_tags
+ short_pump_mode_tags
+ short_quick_mode_tags
+ short_rebuy_mode_tags
+ short_high_profit_mode_tags
+ short_rapid_mode_tags
+ short_grind_mode_tags
+ short_scalp_mode_tags
)
short_normal_mode_name = "short_normal"
short_pump_mode_name = "short_pump"
short_quick_mode_name = "short_quick"
short_rebuy_mode_name = "short_rebuy"
short_high_profit_mode_name = "short_hp"
short_rapid_mode_name = "short_rapid"
short_top_coins_mode_name = "short_tc"
short_scalp_mode_name = "short_scalp"
is_futures_mode = False
futures_mode_leverage = 3.0
futures_mode_leverage_rebuy_mode = 3.0
futures_mode_leverage_grind_mode = 3.0
# Limit the number of long/short trades for futures (0 for no limit)
futures_max_open_trades_long = 0
futures_max_open_trades_short = 0
# Based on the the first entry (regardless of rebuys)
stop_threshold_spot = 0.10
stop_threshold_futures = 0.10
stop_threshold_doom_spot = 0.20
stop_threshold_doom_futures = 0.20
stop_threshold_spot_rebuy = 1.0
stop_threshold_futures_rebuy = 1.0
stop_threshold_rapid_spot = 0.20
stop_threshold_rapid_futures = 0.20
stop_threshold_scalp_spot = 0.20
stop_threshold_scalp_futures = 0.20
# user specified fees to be used for profit calculations
custom_fee_open_rate = None
custom_fee_close_rate = None
# Rebuy mode minimum number of free slots
rebuy_mode_min_free_slots = 2
# Position adjust feature
position_adjustment_enable = True
# Grinding feature
grinding_enable = True
derisk_enable = True
stops_enable = True
doom_stops_enable = True
u_e_stops_enable = False
# Grinding
grinding_v1_max_stake = 1.0 # ratio of first entry
derisk_use_grind_stops = False
grind_1_stop_grinds_spot = -0.50
grind_1_profit_threshold_spot = 0.018
grind_1_stakes_spot = [0.24, 0.26, 0.28]
grind_1_sub_thresholds_spot = [-0.12, -0.16, -0.20]
grind_1_stop_grinds_futures = -0.50
grind_1_profit_threshold_futures = 0.018
grind_1_stakes_futures = [0.24, 0.26, 0.28]
grind_1_sub_thresholds_futures = [-0.12, -0.16, -0.20]
grind_2_stop_grinds_spot = -0.50
grind_2_profit_threshold_spot = 0.018
grind_2_stakes_spot = [0.20, 0.24, 0.28]
grind_2_sub_thresholds_spot = [-0.12, -0.16, -0.20]
grind_2_stop_grinds_futures = -0.50
grind_2_profit_threshold_futures = 0.018
grind_2_stakes_futures = [0.20, 0.24, 0.28]
grind_2_sub_thresholds_futures = [-0.12, -0.16, -0.20]
grind_3_stop_grinds_spot = -0.50
grind_3_profit_threshold_spot = 0.018
grind_3_stakes_spot = [0.20, 0.22, 0.24]
grind_3_sub_thresholds_spot = [-0.12, -0.16, -0.20]
grind_3_stop_grinds_futures = -0.50
grind_3_profit_threshold_futures = 0.018
grind_3_stakes_futures = [0.20, 0.22, 0.24]
grind_3_sub_thresholds_futures = [-0.12, -0.16, -0.20]
grind_4_stop_grinds_spot = -0.50
grind_4_profit_threshold_spot = 0.018
grind_4_stakes_spot = [0.20, 0.22, 0.24]
grind_4_sub_thresholds_spot = [-0.12, -0.16, -0.20]
grind_4_stop_grinds_futures = -0.50
grind_4_profit_threshold_futures = 0.018
grind_4_stakes_futures = [0.20, 0.22, 0.24]
grind_4_sub_thresholds_futures = [-0.12, -0.16, -0.20]
grind_5_stop_grinds_spot = -0.50
grind_5_profit_threshold_spot = 0.048
grind_5_stakes_spot = [0.20, 0.22, 0.24]
grind_5_sub_thresholds_spot = [-0.12, -0.16, -0.20]
grind_5_stop_grinds_futures = -0.50
grind_5_profit_threshold_futures = 0.048
grind_5_stakes_futures = [0.20, 0.22, 0.24]
grind_5_sub_thresholds_futures = [-0.12, -0.16, -0.20]
grind_6_stop_grinds_spot = -0.50
grind_6_profit_threshold_spot = 0.018
grind_6_stakes_spot = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
grind_6_sub_thresholds_spot = [-0.03, -0.08, -0.10, -0.12, -0.14, -0.16, -0.18, -0.20, -0.22]
grind_6_stop_grinds_futures = -0.50
grind_6_profit_threshold_futures = 0.018
grind_6_stakes_futures = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
grind_6_sub_thresholds_futures = [-0.03, -0.08, -0.10, -0.12, -0.14, -0.16, -0.18, -0.20, -0.22]
grind_1_derisk_1_stop_grinds_spot = -0.50
grind_1_derisk_1_profit_threshold_spot = 0.018
grind_1_derisk_1_stakes_spot = [0.20, 0.24, 0.28]
grind_1_derisk_1_sub_thresholds_spot = [-0.12, -0.16, -0.20]
grind_1_derisk_1_stop_grinds_futures = -0.50
grind_1_derisk_1_profit_threshold_futures = 0.018
grind_1_derisk_1_stakes_futures = [0.20, 0.24, 0.28]
grind_1_derisk_1_sub_thresholds_futures = [-0.12, -0.16, -0.20]
grind_2_derisk_1_stop_grinds_spot = -0.50
grind_2_derisk_1_profit_threshold_spot = 0.018
grind_2_derisk_1_stakes_spot = [0.20, 0.24, 0.28]
grind_2_derisk_1_sub_thresholds_spot = [-0.12, -0.16, -0.20]
grind_2_derisk_1_stop_grinds_futures = -0.50
grind_2_derisk_1_profit_threshold_futures = 0.018
grind_2_derisk_1_stakes_futures = [0.20, 0.24, 0.28]
grind_2_derisk_1_sub_thresholds_futures = [-0.12, -0.16, -0.20]
grinds_stop_spot = -0.12
grinds_stop_futures = -0.12
# Non rebuy modes
regular_mode_stake_multiplier_spot = [1.0]
regular_mode_stake_multiplier_futures = [1.0]
regular_mode_use_grind_stops = False
regular_mode_rebuy_stakes_spot = [0.10, 0.10, 0.10]
regular_mode_rebuy_thresholds_spot = [-0.12, -0.14, -0.16]
regular_mode_grind_1_stakes_spot = [0.22, 0.24, 0.26]
regular_mode_grind_1_thresholds_spot = [-0.06, -0.10, -0.12]
regular_mode_grind_1_stop_grinds_spot = -0.20
regular_mode_grind_1_profit_threshold_spot = 0.018
regular_mode_grind_2_stakes_spot = [0.14, 0.20, 0.26]
regular_mode_grind_2_thresholds_spot = [-0.04, -0.10, -0.12]
regular_mode_grind_2_stop_grinds_spot = -0.20
regular_mode_grind_2_profit_threshold_spot = 0.018
regular_mode_grind_3_stakes_spot = [0.18, 0.20, 0.22]
regular_mode_grind_3_thresholds_spot = [-0.03, -0.10, -0.12]
regular_mode_grind_3_stop_grinds_spot = -0.20
regular_mode_grind_3_profit_threshold_spot = 0.018
regular_mode_grind_4_stakes_spot = [0.18, 0.20, 0.22]
regular_mode_grind_4_thresholds_spot = [-0.03, -0.10, -0.12]
regular_mode_grind_4_stop_grinds_spot = -0.20
regular_mode_grind_4_profit_threshold_spot = 0.018
regular_mode_grind_5_stakes_spot = [0.18, 0.20, 0.22]
regular_mode_grind_5_thresholds_spot = [-0.03, -0.10, -0.12]
regular_mode_grind_5_stop_grinds_spot = -0.20
regular_mode_grind_5_profit_threshold_spot = 0.048
regular_mode_grind_6_stakes_spot = [0.05, 0.057, 0.065, 0.074, 0.084, 0.095, 0.107, 0.121, 0.137]
regular_mode_grind_6_thresholds_spot = [-0.025, -0.05, -0.06, -0.07, -0.08, -0.09, -0.10, -0.11, -0.12]
regular_mode_grind_6_stop_grinds_spot = -0.20
regular_mode_grind_6_profit_threshold_spot = 0.018
regular_mode_derisk_1_spot = -0.24
regular_mode_derisk_1_spot_old = -0.80
regular_mode_derisk_1_reentry_spot = -0.08
regular_mode_derisk_spot = -0.24
regular_mode_derisk_spot_old = -1.60
regular_mode_derisk_1_scalp_mode_spot = -0.05
regular_mode_rebuy_stakes_futures = [0.10, 0.10, 0.10]
regular_mode_rebuy_thresholds_futures = [-0.12, -0.14, -0.16]
regular_mode_grind_1_stakes_futures = [0.22, 0.24, 0.26]
regular_mode_grind_1_thresholds_futures = [-0.06, -0.10, -0.12]
regular_mode_grind_1_stop_grinds_futures = -0.20
regular_mode_grind_1_profit_threshold_futures = 0.018
regular_mode_grind_2_stakes_futures = [0.14, 0.20, 0.26]
regular_mode_grind_2_thresholds_futures = [-0.04, -0.10, -0.12]
regular_mode_grind_2_stop_grinds_futures = -0.20
regular_mode_grind_2_profit_threshold_futures = 0.018
regular_mode_grind_3_stakes_futures = [0.18, 0.20, 0.22]
regular_mode_grind_3_thresholds_futures = [-0.03, -0.10, -0.12]
regular_mode_grind_3_stop_grinds_futures = -0.20
regular_mode_grind_3_profit_threshold_futures = 0.018
regular_mode_grind_4_stakes_futures = [0.18, 0.20, 0.22]
regular_mode_grind_4_thresholds_futures = [-0.03, -0.10, -0.12]
regular_mode_grind_4_stop_grinds_futures = -0.20
regular_mode_grind_4_profit_threshold_futures = 0.018
regular_mode_grind_5_stakes_futures = [0.18, 0.20, 0.22]
regular_mode_grind_5_thresholds_futures = [-0.03, -0.10, -0.12]
regular_mode_grind_5_stop_grinds_futures = -0.20
regular_mode_grind_5_profit_threshold_futures = 0.048
regular_mode_grind_6_stakes_futures = [0.05, 0.057, 0.065, 0.074, 0.084, 0.095, 0.107, 0.121, 0.137]
regular_mode_grind_6_thresholds_futures = [-0.025, -0.05, -0.06, -0.07, -0.08, -0.09, -0.10, -0.11, -0.12]
regular_mode_grind_6_stop_grinds_futures = -0.20
regular_mode_grind_6_profit_threshold_futures = 0.018
regular_mode_derisk_1_futures = -0.60
regular_mode_derisk_1_futures_old = -0.80
regular_mode_derisk_1_reentry_futures = -0.08 # without leverage
regular_mode_derisk_futures = -0.60
regular_mode_derisk_futures_old = -1.20
regular_mode_derisk_1_scalp_mode_futures = -0.05
# Grinding v2
grinding_v2_max_stake = 1.0 # ratio of first entry
grinding_v2_max_grinds_and_buybacks = 20 # current open
grinding_v2_derisk_level_1_enable = True
grinding_v2_derisk_level_1_spot = [-0.06, -0.15]
grinding_v2_derisk_level_1_futures = [-0.18, -0.35]
grinding_v2_derisk_level_2_enable = True
grinding_v2_derisk_level_2_spot = [-0.08, -0.18]
grinding_v2_derisk_level_2_futures = [-0.16, -0.54]
grinding_v2_derisk_level_3_enable = True
grinding_v2_derisk_level_3_spot = [-0.10, -0.20]
grinding_v2_derisk_level_3_futures = [-0.30, -0.60]
grinding_v2_derisk_level_1_stake_spot = 0.20
grinding_v2_derisk_level_1_stake_futures = 0.20
grinding_v2_derisk_level_2_stake_spot = 0.30
grinding_v2_derisk_level_2_stake_futures = 0.30
grinding_v2_derisk_level_3_stake_spot = 0.50
grinding_v2_derisk_level_3_stake_futures = 0.50
grinding_v2_derisk_global_enable = False
grinding_v2_derisk_global_spot = -0.10
grinding_v2_derisk_global_futures = -0.30
grinding_v2_grind_1_enable = True
grinding_v2_grind_1_stakes_spot = [0.20, 0.22, 0.24, 0.26, 0.28]
grinding_v2_grind_1_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
grinding_v2_grind_1_stakes_futures = [0.20, 0.22, 0.24, 0.26, 0.28]
grinding_v2_grind_1_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
grinding_v2_grind_1_profit_threshold_spot = 0.02
grinding_v2_grind_1_profit_threshold_futures = 0.02
grinding_v2_grind_1_use_derisk = True
grinding_v2_grind_1_derisk_spot = -0.26
grinding_v2_grind_1_derisk_futures = -0.26
grinding_v2_grind_2_enable = True
grinding_v2_grind_2_stakes_spot = [0.10, 0.12, 0.14, 0.16, 0.18]
grinding_v2_grind_2_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
grinding_v2_grind_2_stakes_futures = [0.10, 0.12, 0.14, 0.16, 0.18]
grinding_v2_grind_2_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
grinding_v2_grind_2_profit_threshold_spot = 0.02
grinding_v2_grind_2_profit_threshold_futures = 0.02
grinding_v2_grind_2_use_derisk = True
grinding_v2_grind_2_derisk_spot = -0.26
grinding_v2_grind_2_derisk_futures = -0.26
grinding_v2_grind_3_enable = True
grinding_v2_grind_3_stakes_spot = [0.10, 0.12, 0.14, 0.16, 0.18]
grinding_v2_grind_3_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
grinding_v2_grind_3_stakes_futures = [0.10, 0.12, 0.14, 0.16, 0.18]
grinding_v2_grind_3_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
grinding_v2_grind_3_profit_threshold_spot = 0.02
grinding_v2_grind_3_profit_threshold_futures = 0.02
grinding_v2_grind_3_use_derisk = True
grinding_v2_grind_3_derisk_spot = -0.26
grinding_v2_grind_3_derisk_futures = -0.26
grinding_v2_grind_4_enable = True
grinding_v2_grind_4_stakes_spot = [0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11]
grinding_v2_grind_4_thresholds_spot = [-0.06, -0.07, -0.09, -0.12, -0.16, -0.21, -0.27]
grinding_v2_grind_4_stakes_futures = [0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11]
grinding_v2_grind_4_thresholds_futures = [-0.06, -0.07, -0.09, -0.12, -0.16, -0.21, -0.27]
grinding_v2_grind_4_profit_threshold_spot = 0.10
grinding_v2_grind_4_profit_threshold_futures = 0.10
grinding_v2_grind_4_use_derisk = True
grinding_v2_grind_4_derisk_spot = -0.26
grinding_v2_grind_4_derisk_futures = -0.26
grinding_v2_grind_5_enable = True
grinding_v2_grind_5_stakes_spot = [0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11]
grinding_v2_grind_5_thresholds_spot = [-0.06, -0.07, -0.09, -0.12, -0.16, -0.21, -0.27]
grinding_v2_grind_5_stakes_futures = [0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11]
grinding_v2_grind_5_thresholds_futures = [-0.06, -0.07, -0.09, -0.12, -0.16, -0.21, -0.27]
grinding_v2_grind_5_profit_threshold_spot = 0.10
grinding_v2_grind_5_profit_threshold_futures = 0.10
grinding_v2_grind_5_use_derisk = True
grinding_v2_grind_5_derisk_spot = -0.26
grinding_v2_grind_5_derisk_futures = -0.26
grinding_v2_buyback_1_enable = True
grinding_v2_buyback_1_stake_spot = 0.10
grinding_v2_buyback_1_stake_futures = 0.10
grinding_v2_buyback_1_distance_ratio_spot = -0.06
grinding_v2_buyback_1_distance_ratio_futures = -0.06
grinding_v2_buyback_1_profit_threshold_spot = 0.05
grinding_v2_buyback_1_profit_threshold_futures = 0.05
grinding_v2_buyback_1_use_derisk = True
grinding_v2_buyback_1_derisk_spot = -0.26
grinding_v2_buyback_1_derisk_futures = -0.26
grinding_v2_buyback_2_enable = True
grinding_v2_buyback_2_stake_spot = 0.10
grinding_v2_buyback_2_stake_futures = 0.10
grinding_v2_buyback_2_distance_ratio_spot = -0.12
grinding_v2_buyback_2_distance_ratio_futures = -0.12
grinding_v2_buyback_2_profit_threshold_spot = 0.05
grinding_v2_buyback_2_profit_threshold_futures = 0.05
grinding_v2_buyback_2_use_derisk = True
grinding_v2_buyback_2_derisk_spot = -0.26
grinding_v2_buyback_2_derisk_futures = -0.26
grinding_v2_buyback_3_enable = True
grinding_v2_buyback_3_stake_spot = 0.10
grinding_v2_buyback_3_stake_futures = 0.10
grinding_v2_buyback_3_distance_ratio_spot = -0.16
grinding_v2_buyback_3_distance_ratio_futures = -0.16
grinding_v2_buyback_3_profit_threshold_spot = 0.05
grinding_v2_buyback_3_profit_threshold_futures = 0.05
grinding_v2_buyback_3_use_derisk = True
grinding_v2_buyback_3_derisk_spot = -0.26
grinding_v2_buyback_3_derisk_futures = -0.26
# System v3
system_v3_name = "system_v3"
system_v3_1_name = "system_v3_1"
system_v3_2_name = "system_v3_2"
system_name_use = system_v3_2_name
system_v3_max_stake = 1.0 # ratio of first entry
system_v3_1_max_stake = 3.0 # ratio of first entry
system_v3_stop_threshold_doom_spot = 0.14
system_v3_stop_threshold_doom_futures = 0.35
system_v3_stop_threshold_spot_rebuy = 0.70
system_v3_stop_threshold_futures_rebuy = 1.75
system_v3_stop_threshold_rapid_spot = 0.14
system_v3_stop_threshold_rapid_futures = 0.35
system_v3_stop_threshold_scalp_spot = 0.14
system_v3_stop_threshold_scalp_futures = 0.35
system_v3_1_stop_threshold_doom_spot = 0.24
system_v3_1_stop_threshold_doom_futures = 0.70
system_v3_1_stop_threshold_spot_rebuy = 0.47
system_v3_1_stop_threshold_futures_rebuy = 1.40
system_v3_1_stop_threshold_rapid_spot = 0.24
system_v3_1_stop_threshold_rapid_futures = 0.70
system_v3_1_stop_threshold_scalp_spot = 0.24
system_v3_1_stop_threshold_scalp_futures = 0.70
system_v3_2_stops_enable = False
system_v3_2_stop_threshold_doom_spot = 0.12
system_v3_2_stop_threshold_doom_futures = 0.35
system_v3_2_stop_threshold_spot_rebuy = 0.48
system_v3_2_stop_threshold_futures_rebuy = 1.40
system_v3_2_stop_threshold_rapid_spot = 0.12
system_v3_2_stop_threshold_rapid_futures = 0.35
system_v3_2_stop_threshold_scalp_spot = 0.12
system_v3_2_stop_threshold_scalp_futures = 0.35
system_v3_1_stake_multiplier = 0.50
system_v3_1_rebuy_stakes_spot = [0.5, 0.5]
system_v3_1_rebuy_stakes_futures = [0.5, 0.5]
system_v3_1_rebuy_thresholds_spot = [-0.25, -0.16, -0.16, -0.20]
system_v3_1_rebuy_thresholds_futures = [-0.25, -0.16, -0.16, -0.20]
system_v3_derisk_level_1_enable = True
system_v3_derisk_level_1_spot = [-0.04, -0.06]
system_v3_derisk_level_1_futures = [-0.12, -0.18]
system_v3_derisk_level_1_stake_spot = 0.10
system_v3_derisk_level_1_stake_futures = 0.10
system_v3_derisk_level_2_enable = True
system_v3_derisk_level_2_spot = [-0.06, -0.08]
system_v3_derisk_level_2_futures = [-0.18, -0.24]
system_v3_derisk_level_2_stake_spot = 0.10
system_v3_derisk_level_2_stake_futures = 0.10
system_v3_derisk_level_3_enable = True
system_v3_derisk_level_3_spot = [-0.08, -0.10]
system_v3_derisk_level_3_futures = [-0.24, -0.30]
system_v3_derisk_level_3_stake_spot = 0.10
system_v3_derisk_level_3_stake_futures = 0.10
system_v3_2_stake_multiplier = 1.0
system_v3_2_derisk_level_1_enable = True
system_v3_2_derisk_level_1_spot = [-0.06, -0.12]
system_v3_2_derisk_level_1_futures = [-0.18, -0.35]
system_v3_2_derisk_level_1_stake_spot = 0.20
system_v3_2_derisk_level_1_stake_futures = 0.20
system_v3_2_derisk_level_2_enable = True
system_v3_2_derisk_level_2_spot = [-0.08, -0.18]
system_v3_2_derisk_level_2_futures = [-0.24, -0.54]
system_v3_2_derisk_level_2_stake_spot = 0.30
system_v3_2_derisk_level_2_stake_futures = 0.30
system_v3_2_derisk_level_3_enable = True
system_v3_2_derisk_level_3_spot = [-0.10, -0.20]
system_v3_2_derisk_level_3_futures = [-0.30, -0.60]
system_v3_2_derisk_level_3_stake_spot = 0.50
system_v3_2_derisk_level_3_stake_futures = 0.50
system_v3_2_derisk_level_4_enable = False
system_v3_2_derisk_level_4_spot = [-0.02, -0.08]
system_v3_2_derisk_level_4_futures = [-0.06, -0.24]
system_v3_2_derisk_level_4_stake_spot = 1.0
system_v3_2_derisk_level_4_stake_futures = 1.0
system_v3_grind_1_enable = True
system_v3_grind_1_stakes_spot = [0.20, 0.20, 0.20, 0.20, 0.20]
system_v3_grind_1_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_1_stakes_futures = [0.20, 0.20, 0.20, 0.20, 0.20]
system_v3_grind_1_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_1_profit_threshold_spot = 0.025
system_v3_grind_1_profit_threshold_futures = 0.025
system_v3_grind_1_use_derisk = True
system_v3_grind_1_derisk_spot = -0.22
system_v3_grind_1_derisk_futures = -0.22
system_v3_grind_2_enable = True
system_v3_grind_2_stakes_spot = [0.10, 0.12, 0.14, 0.16, 0.18]
system_v3_grind_2_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_2_stakes_futures = [0.10, 0.12, 0.14, 0.16, 0.18]
system_v3_grind_2_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_2_profit_threshold_spot = 0.035
system_v3_grind_2_profit_threshold_futures = 0.035
system_v3_grind_2_use_derisk = True
system_v3_grind_2_derisk_spot = -0.22
system_v3_grind_2_derisk_futures = -0.22
system_v3_grind_3_enable = True
system_v3_grind_3_stakes_spot = [0.10, 0.12, 0.14, 0.16, 0.18]
system_v3_grind_3_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_3_stakes_futures = [0.10, 0.12, 0.14, 0.16, 0.18]
system_v3_grind_3_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_3_profit_threshold_spot = 0.04
system_v3_grind_3_profit_threshold_futures = 0.04
system_v3_grind_3_use_derisk = True
system_v3_grind_3_derisk_spot = -0.22
system_v3_grind_3_derisk_futures = -0.22
system_v3_grind_4_enable = True
system_v3_grind_4_stakes_spot = [0.05, 0.06, 0.07, 0.08, 0.09]
system_v3_grind_4_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_4_stakes_futures = [0.05, 0.06, 0.07, 0.08, 0.09]
system_v3_grind_4_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_4_profit_threshold_spot = 0.05
system_v3_grind_4_profit_threshold_futures = 0.05
system_v3_grind_4_use_derisk = True
system_v3_grind_4_derisk_spot = -0.22
system_v3_grind_4_derisk_futures = -0.22
system_v3_grind_5_enable = True
system_v3_grind_5_stakes_spot = [0.05, 0.06, 0.07, 0.08, 0.09]
system_v3_grind_5_thresholds_spot = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_5_stakes_futures = [0.05, 0.06, 0.07, 0.08, 0.09]
system_v3_grind_5_thresholds_futures = [-0.06, -0.07, -0.08, -0.09, -0.10]
system_v3_grind_5_profit_threshold_spot = 0.06
system_v3_grind_5_profit_threshold_futures = 0.06
system_v3_grind_5_use_derisk = True
system_v3_grind_5_derisk_spot = -0.22
system_v3_grind_5_derisk_futures = -0.22
system_v3_buyback_1_enable = False
system_v3_buyback_1_stake_spot = 1.00
system_v3_buyback_1_stake_futures = 1.00
system_v3_buyback_1_distance_ratio_negative_spot = -0.04
system_v3_buyback_1_distance_ratio_negative_futures = -0.04
system_v3_buyback_1_distance_ratio_positive_spot = 0.02
system_v3_buyback_1_distance_ratio_positive_futures = 0.02
# system_v3_buyback_1_profit_threshold_spot = 0.05
# system_v3_buyback_1_profit_threshold_futures = 0.05
system_v3_buyback_1_use_derisk = True
system_v3_buyback_1_derisk_spot = -0.08
system_v3_buyback_1_derisk_futures = -0.08
# Rebuy mode
rebuy_mode_stake_multiplier = 0.35
rebuy_mode_derisk_spot = -0.60
rebuy_mode_derisk_futures = -0.60
rebuy_mode_stakes_spot = [1.0, 1.0]
rebuy_mode_stakes_futures = [1.0, 1.0]
rebuy_mode_thresholds_spot = [-0.08, -0.10]
rebuy_mode_thresholds_futures = [-0.08, -0.10]
# Rebuy mode v3
system_v3_rebuy_mode_stake_multiplier = 0.25
system_v3_rebuy_mode_derisk_spot = -0.48
system_v3_rebuy_mode_derisk_futures = -1.40
system_v3_rebuy_mode_stakes_spot = [1.0, 1.0, 1.0, 1.0]
system_v3_rebuy_mode_stakes_futures = [1.0, 1.0, 1.0, 1.0]
system_v3_rebuy_mode_thresholds_spot = [-0.08, -0.12, -0.16, -0.20]
system_v3_rebuy_mode_thresholds_futures = [-0.08, -0.12, -0.16, -0.20]
# Rapid mode
rapid_mode_stake_multiplier_spot = [0.75]
rapid_mode_stake_multiplier_futures = [0.75]
# Scalp mode
min_free_slots_scalp_mode = 1
# Grind mode
grind_mode_stake_multiplier_spot = [0.20, 0.30, 0.40, 0.50, 0.60, 0.70]
grind_mode_stake_multiplier_futures = [0.20, 0.30, 0.40, 0.50]
grind_mode_first_entry_profit_threshold_spot = 0.018
grind_mode_first_entry_profit_threshold_futures = 0.018
grind_mode_first_entry_stop_threshold_spot = -0.20
grind_mode_first_entry_stop_threshold_futures = -0.20
grind_mode_max_slots = 1
grind_mode_coins = [
"AAVE",
"ADA",
"ALGO",
"APE",
"APT",
"ARB",
"ATOM",
"AVAX",
"BCH",
"BNB",
"BTC",
"CAKE",
"CRV",
"DOGE",
"DOT",
"DYDX",
"ETC",
"ETH",
"FIL",
"GALA",
"HBAR",
"HYPE",
"ICP",
"INJ",
"IOTA",
"JUP",
"KAS",
"LDO",
"LINK",
"LTC",
"NEAR",
"NEO",
"OP",
"POL",
"RENDER",
"RUNE",
"SAND",
"SEI",
"SOL",
"SUI",
"THETA",
"TIA",
"TON",
"TRX",
"UNI",
"VET",
"XLM",
"XMR",
"XRP",
"XTZ",
"ZEC",
]
btc_mode_max_slots = 0
btc_mode_coins = [
"BTC",
]
# Top coins mode coins
top_coins_mode_coins = [
"1INCH",
"AAVE",
"ADA",
"ALGO",
"APE",
"APT",
"ARB",
"ATOM",
"AVAX",
"BCH",
"BNB",
"BTC",
"CAKE",
"CRV",
"DASH",
"DOGE",
"DOT",
"DYDX",
"ETC",
"ETH",
"FIL",
"GALA",
"HBAR",
"HYPE",
"ICP",
"INJ",
"IOTA",
"JUP",
"KAS",
"LDO",
"LINK",
"LTC",
"NEAR",
"NEO",
"ONDO",
"OP",
"POL",
"RENDER",
"RUNE",
"SAND",
"SEI",
"SOL",
"SUI",
"THETA",
"TIA",
"TON",
"TRX",
"UNI",
"VET",
"WLD",
"XLM",
"XMR",
"XRP",
"XTZ",
"ZEC",
]
# Profit max thresholds
profit_max_thresholds = [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.05, 0.05]
# Max allowed buy "slippage", how high to buy on the candle
max_slippage = 0.02
# BTC/ETH stakes
btc_stakes = ["BTC", "ETH"]
#############################################################
# Buy side configuration
long_entry_signal_params = {
# Enable/Disable conditions
# -------------------------------------------------------
"long_entry_condition_1_enable": True,
"long_entry_condition_2_enable": True,
"long_entry_condition_3_enable": True,
"long_entry_condition_4_enable": True,
"long_entry_condition_5_enable": True,
"long_entry_condition_6_enable": True,
"long_entry_condition_21_enable": True,
"long_entry_condition_41_enable": True,
"long_entry_condition_42_enable": True,
"long_entry_condition_43_enable": True,
"long_entry_condition_44_enable": True,
"long_entry_condition_45_enable": True,
"long_entry_condition_46_enable": True,
"long_entry_condition_61_enable": True,
"long_entry_condition_62_enable": True,
"long_entry_condition_63_enable": True,
"long_entry_condition_101_enable": True,
"long_entry_condition_102_enable": True,
"long_entry_condition_103_enable": True,
"long_entry_condition_104_enable": True,
"long_entry_condition_120_enable": True,
"long_entry_condition_121_enable": False,
"long_entry_condition_141_enable": True,
"long_entry_condition_142_enable": True,
"long_entry_condition_143_enable": True,
"long_entry_condition_144_enable": True,
"long_entry_condition_145_enable": True,
"long_entry_condition_161_enable": True,
"long_entry_condition_162_enable": True,
"long_entry_condition_163_enable": True,
}
short_entry_signal_params = {
# Enable/Disable conditions
# -------------------------------------------------------
"short_entry_condition_501_enable": True,
"short_entry_condition_502_enable": True,
# "short_entry_condition_503_enable": True,
# "short_entry_condition_504_enable": True,
# "short_entry_condition_541_enable": True,
"short_entry_condition_542_enable": True,
# "short_entry_condition_543_enable": True,
# "short_entry_condition_603_enable": True,
# "short_entry_condition_641_enable": True,
# "short_entry_condition_642_enable": True,
# "short_entry_condition_661_enable": True,
}
#############################################################
# CACHES
hold_trades_cache = None
target_profit_cache = None
#############################################################
#
#
# $$$$$$\ $$$$$$\ $$\ $$\ $$\ $$\ $$$$$$\ $$\ $$\
# $$ __$$\ $$ __$$\ $$$\ $$$ |$$$\ $$$ |$$ __$$\ $$$\ $$ |
# $$ / \__|$$ / $$ |$$$$\ $$$$ |$$$$\ $$$$ |$$ / $$ |$$$$\ $$ |
# $$ | $$ | $$ |$$\$$\$$ $$ |$$\$$\$$ $$ |$$ | $$ |$$ $$\$$ |
# $$ | $$ | $$ |$$ \$$$ $$ |$$ \$$$ $$ |$$ | $$ |$$ \$$$$ |
# $$ | $$\ $$ | $$ |$$ |\$ /$$ |$$ |\$ /$$ |$$ | $$ |$$ |\$$$ |
# \$$$$$$ | $$$$$$ |$$ | \_/ $$ |$$ | \_/ $$ | $$$$$$ |$$ | \$$ |
# \______/ \______/ \__| \__|\__| \__| \______/ \__| \__|
#
#
#
# $$$$$$$$\ $$\ $$\ $$\ $$\ $$$$$$\ $$$$$$$$\ $$$$$$\ $$$$$$\ $$\ $$\ $$$$$$\
# $$ _____|$$ | $$ |$$$\ $$ |$$ __$$\\__$$ __|\_$$ _|$$ __$$\ $$$\ $$ |$$ __$$\
# $$ | $$ | $$ |$$$$\ $$ |$$ / \__| $$ | $$ | $$ / $$ |$$$$\ $$ |$$ / \__|
# $$$$$\ $$ | $$ |$$ $$\$$ |$$ | $$ | $$ | $$ | $$ |$$ $$\$$ |\$$$$$$\
# $$ __| $$ | $$ |$$ \$$$$ |$$ | $$ | $$ | $$ | $$ |$$ \$$$$ | \____$$\
# $$ | $$ | $$ |$$ |\$$$ |$$ | $$\ $$ | $$ | $$ | $$ |$$ |\$$$ |$$\ $$ |
# $$ | \$$$$$$ |$$ | \$$ |\$$$$$$ | $$ | $$$$$$\ $$$$$$ |$$ | \$$ |\$$$$$$ |
# \__| \______/ \__| \__| \______/ \__| \______| \______/ \__| \__| \______/
#
#
###############################################################################################
# COMMON FUNCTIONS FOR BOTH LONG AND SHORT SIDE STARTS HERE
###############################################################################################
def __init__(self, config: dict) -> None:
# A list of parameters that can be changed through the config.
NFI_SAFE_PARAMETERS = [
"num_cores_indicators_calc",
"custom_fee_open_rate",
"custom_fee_close_rate",
"futures_mode_leverage",
"futures_mode_leverage_rebuy_mode",
"futures_mode_leverage_grind_mode",
"futures_max_open_trades_long",
"futures_max_open_trades_short",
"stop_threshold_doom_spot",
"stop_threshold_doom_futures",
"stop_threshold_rapid_spot",
"stop_threshold_rapid_futures",
"stop_threshold_scalp_spot",
"stop_threshold_scalp_futures",
"derisk_enable",
"stops_enable",
"regular_mode_derisk_1_spot",
"regular_mode_derisk_spot",
"regular_mode_derisk_1_futures",
"regular_mode_derisk_futures",
"grind_mode_max_slots",
"grind_mode_coins",
"max_slippage",
]
exchange_config = config["exchange"]
if "ccxt_config" not in exchange_config:
exchange_config["ccxt_config"] = {}
if "ccxt_async_config" not in exchange_config:
exchange_config["ccxt_async_config"] = {}
options = {
"brokerId": None,
"broker": {"spot": None, "margin": None, "future": None, "delivery": None},
"partner": {
"spot": {"id": None, "key": None},
"future": {"id": None, "key": None},
"id": None,
"key": None,
},
}
exchange_config["ccxt_config"]["options"] = options
exchange_config["ccxt_async_config"]["options"] = options
super().__init__(config)
strategy_config = self.config
if ("exit_profit_only" in strategy_config and strategy_config["exit_profit_only"]) or (
"sell_profit_only" in strategy_config and strategy_config["sell_profit_only"]
):
self.exit_profit_only = True
# Advanced configuration mode. Allows to change any parameter.
is_config_advanced_mode = "nfi_advanced_mode" in strategy_config and strategy_config["nfi_advanced_mode"] == True
if is_config_advanced_mode:
log.warning("The advanced configuration mode is enabled. I hope you know what you are doing.")
# Configuration from the nfi_parameters block. New config style.
nfi_parameters = strategy_config.get("nfi_parameters")
if type(nfi_parameters) is dict:
for nfi_param in nfi_parameters:
if nfi_param in ["long_entry_signal_params", "short_entry_signal_params"]:
continue
if (nfi_param in NFI_SAFE_PARAMETERS or is_config_advanced_mode) and hasattr(self, nfi_param):
log.info(
f'Parameter {nfi_param} changed from "{getattr(self, nfi_param)}" to "{nfi_parameters[nfi_param]}".'
)
setattr(self, nfi_param, nfi_parameters[nfi_param])
else:
log.warning(f"Invalid or unsafe parameter: {nfi_param}.")
self.update_signals_from_config(nfi_parameters)
# Parameter settings. Backward compatibility with the old configuration style.
for nfi_param in NFI_SAFE_PARAMETERS:
if (nfi_param in strategy_config) and hasattr(self, nfi_param):
setattr(self, nfi_param, strategy_config[nfi_param])
if self.target_profit_cache is None:
bot_name = ""
if "bot_name" in strategy_config:
bot_name = strategy_config["bot_name"] + "-"
exchange_name = strategy_config["exchange"]["name"]
runmode_value = strategy_config["runmode"].value
self.target_profit_cache = Cache(
strategy_config["user_data_dir"]
/ (
"nfix7-profit_max-"
+ bot_name
+ exchange_name
+ "-"
+ strategy_config["stake_currency"]
+ ("-(backtest)" if (runmode_value == "backtest") else "")
+ ("-(hyperopt)" if (runmode_value == "hyperopt") else "")
+ ".json"
)
)
else:
exchange_name = strategy_config["exchange"]["name"]
# OKX, Kraken provides a lower number of candle data per API call
if exchange_name in ["okx", "okex"]:
self.startup_candle_count = 480
elif exchange_name == "kraken":
self.startup_candle_count = 710
elif exchange_name == "bybit":
self.startup_candle_count = 199
elif exchange_name == "bitget":
self.startup_candle_count = 499
elif exchange_name == "bingx":
self.startup_candle_count = 499
if ("trading_mode" in strategy_config) and (strategy_config["trading_mode"] in ["futures", "margin"]):
self.is_futures_mode = True
self.can_short = True
# If the cached data hasn't changed, it's a no-op
self.target_profit_cache.save()
# Parameter settings. Backward compatibility with the old configuration style.
self.update_signals_from_config(strategy_config)
# Plot configuration for FreqUI
# ---------------------------------------------------------------------------------------------
@property
def plot_config(self):
plot_config = {}
plot_config["main_plot"] = {
"EMA_12": {"color": "LightGreen"},
"EMA_26": {"color": "Yellow"},
"EMA_50": {"color": "DodgerBlue"},
"EMA_200": {"color": "DarkRed"},
}
plot_config["subplots"] = {
"long_pump_protection": {"global_protections_long_pump": {"color": "green"}},
"long_dump_protection": {"global_protections_long_dump": {"color": "red"}},
}
return plot_config
# Get Ticker Indicator
# ---------------------------------------------------------------------------------------------
def get_ticker_indicator(self):
return int(self.timeframe[:-1])
# Mark Profit Target
# ---------------------------------------------------------------------------------------------
def mark_profit_target(
self,
mode_name: str,
pair: str,
sell: bool,
signal_name: str,
trade: Trade,
current_time: datetime,
current_rate: float,
current_profit: float,
last_candle,
previous_candle_1,
) -> tuple:
if sell and (signal_name is not None):
return pair, signal_name
return None, None
# Exit Profit Target
# ---------------------------------------------------------------------------------------------
def exit_profit_target(
self,
mode_name: str,
pair: str,
trade: Trade,
current_time: datetime,
current_rate: float,
profit_stake: float,
profit_ratio: float,
profit_current_stake_ratio: float,
profit_init_ratio: float,
last_candle,
previous_candle_1,
previous_rate,
previous_profit,
previous_sell_reason,
previous_time_profit_reached,
enter_tags,
) -> tuple:
remove_profit_target = self._remove_profit_target
derisk_enable = self.derisk_enable
is_futures_mode = self.is_futures_mode
long_rapid_mode_tags = self.long_rapid_mode_tags
long_rebuy_mode_tags = self.long_rebuy_mode_tags
long_rebuy_grind_mode_tags = self.long_rebuy_grind_mode_tags
long_scalp_mode_tags = self.long_scalp_mode_tags
long_scalp_rebuy_grind_mode_tags = self.long_scalp_rebuy_grind_mode_tags
trade_leverage = trade.leverage
select_filled_orders = trade.select_filled_orders
is_backtest = self.is_backtest_mode()
is_system_v3, is_system_v3_1, is_system_v3_2 = self.get_system_version_flags(trade)
is_derisk = False
if previous_sell_reason in [
f"exit_{mode_name}_stoploss_doom",
f"exit_{mode_name}_stoploss",
f"exit_{mode_name}_stoploss_u_e",
]:
filled_entries = select_filled_orders(trade.entry_side)
filled_exits = select_filled_orders(trade.exit_side)
first_filled_entry = filled_entries[0]
has_order_tags = hasattr(first_filled_entry, "ft_order_tag")
for order in filled_exits:
order_tag = ""
if has_order_tags:
if order.ft_order_tag is not None:
order_tag = order.ft_order_tag.partition(" ")[0]
if order_tag in ["d", "d1", "derisk_level_1", "derisk_level_2", "derisk_level_3"]:
is_derisk = True
break
if not is_derisk:
is_derisk = trade.amount < (first_filled_entry.safe_filled * 0.95)
if previous_sell_reason in [f"exit_{mode_name}_stoploss_doom", f"exit_{mode_name}_stoploss"]:
# return right away for system v3
if is_system_v3 or is_system_v3_1 or is_system_v3_2:
return True, previous_sell_reason
is_rapid_mode = all(c in long_rapid_mode_tags for c in enter_tags)
is_rebuy_mode = all(c in long_rebuy_mode_tags for c in enter_tags) or (
any(c in long_rebuy_mode_tags for c in enter_tags) and all(c in long_rebuy_grind_mode_tags for c in enter_tags)
)
is_scalp_mode = all(c in long_scalp_mode_tags for c in enter_tags) or (
any(c in long_scalp_mode_tags for c in enter_tags)
and all(c in long_scalp_rebuy_grind_mode_tags for c in enter_tags)
)
if profit_init_ratio > 0.0:
# profit is over the threshold, don't exit
remove_profit_target(pair)
return False, None
elif is_derisk:
remove_profit_target(pair)
return False, None
elif derisk_enable and (current_time - timedelta(minutes=60) > previous_time_profit_reached):
if profit_ratio < previous_profit:
return True, previous_sell_reason
elif profit_ratio > previous_profit:
remove_profit_target(pair)
return False, None
elif (
not derisk_enable
and not is_rapid_mode
and not is_rebuy_mode
and not is_scalp_mode
and (
profit_init_ratio
<= -(self.stop_threshold_doom_futures if is_futures_mode else self.stop_threshold_doom_spot)
)
):
return True, previous_sell_reason
elif (
not derisk_enable
and is_rapid_mode
and (
profit_init_ratio
<= -(self.stop_threshold_rapid_futures if is_futures_mode else self.stop_threshold_rapid_spot)
)
):
return True, previous_sell_reason
elif (
not derisk_enable
and is_rebuy_mode
and (
profit_init_ratio
<= -(self.stop_threshold_futures_rebuy if is_futures_mode else self.stop_threshold_spot_rebuy)
)
):
return True, previous_sell_reason
elif (
not derisk_enable
and is_scalp_mode
and (
profit_init_ratio
<= -(self.stop_threshold_scalp_futures if is_futures_mode else self.stop_threshold_scalp_spot)
)
):
return True, previous_sell_reason
elif previous_sell_reason == f"exit_{mode_name}_stoploss_u_e":
if profit_init_ratio > 0.0:
# profit is over the threshold, don't exit
remove_profit_target(pair)
return False, None
elif is_derisk:
remove_profit_target(pair)
return False, None
elif profit_ratio < (previous_profit - (0.04 / trade_leverage)):
return True, previous_sell_reason
elif previous_sell_reason == f"exit_profit_{mode_name}_max":
if profit_init_ratio < -0.08:
# profit is under the threshold, cancel it
remove_profit_target(pair)
return False, None
last_rsi_14 = last_candle["RSI_14"]
previous_rsi_14 = previous_candle_1["RSI_14"]
last_cmf_20 = last_candle["CMF_20"]
last_cmf_20_1h = last_candle["CMF_20_1h"]
last_cmf_20_4h = last_candle["CMF_20_4h"]
last_roc_9_4h = last_candle["ROC_9_4h"]
last_cmf_20_gt_0 = last_cmf_20 > 0.0
last_cmf_20_1h_gt_0 = last_cmf_20_1h > 0.0
last_cmf_20_4h_gt_0 = last_cmf_20_4h > 0.0
last_rsi_14_gt_50 = last_rsi_14 > 50.0
last_rsi_14_lt_50 = last_rsi_14 < 50.0
last_roc_9_4h_gt_40 = last_roc_9_4h > 40.0
last_roc_9_4h_lt_neg_40 = last_roc_9_4h < -40.0
if trade.is_short:
is_scalp_mode = all(c in self.short_scalp_mode_tags for c in enter_tags)
if is_scalp_mode:
if 0.001 <= profit_init_ratio < 0.01:
if profit_init_ratio < (previous_profit - 0.008):
return True, f"exit_profit_{mode_name}_t_0_1"
elif 0.01 <= profit_init_ratio < 0.02:
if profit_init_ratio < (previous_profit - 0.01):
return True, f"exit_profit_{mode_name}_t_1_1"
elif 0.02 <= profit_init_ratio < 0.03:
if profit_init_ratio < (previous_profit - 0.01):
return True, f"exit_profit_{mode_name}_t_2_1"
elif 0.03 <= profit_init_ratio < 0.04:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_3_1"
elif 0.04 <= profit_init_ratio < 0.05:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_4_1"
elif 0.05 <= profit_init_ratio < 0.06:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_5_1"
elif 0.06 <= profit_init_ratio < 0.07:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_6_1"
elif 0.07 <= profit_init_ratio < 0.08:
if profit_init_ratio < (previous_profit - 0.02):
return True, f"exit_profit_{mode_name}_t_7_1"
elif 0.08 <= profit_init_ratio < 0.09:
if profit_init_ratio < (previous_profit - 0.02):
return True, f"exit_profit_{mode_name}_t_8_1"
elif 0.09 <= profit_init_ratio < 0.10:
if profit_init_ratio < (previous_profit - 0.02):
return True, f"exit_profit_{mode_name}_t_9_1"
elif 0.10 <= profit_init_ratio < 0.11:
if profit_init_ratio < (previous_profit - 0.025):
return True, f"exit_profit_{mode_name}_t_10_1"
elif 0.11 <= profit_init_ratio < 0.12:
if profit_init_ratio < (previous_profit - 0.025):
return True, f"exit_profit_{mode_name}_t_11_1"
elif 0.12 <= profit_init_ratio:
if profit_init_ratio < (previous_profit - 0.025):
return True, f"exit_profit_{mode_name}_t_12_1"
elif 0.001 <= profit_init_ratio < 0.01:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_0_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_0_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_0_3"
elif 0.01 <= profit_init_ratio < 0.02:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_1_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_1_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_1_3"
elif 0.02 <= profit_init_ratio < 0.03:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_2_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_2_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_2_3"
elif 0.03 <= profit_init_ratio < 0.04:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_3_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_3_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_3_3"
elif 0.04 <= profit_init_ratio < 0.05:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_4_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_4_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_4_3"
elif 0.05 <= profit_init_ratio < 0.06:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_5_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_5_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_5_3"
elif 0.06 <= profit_init_ratio < 0.07:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_6_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_6_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_6_3"
elif 0.07 <= profit_init_ratio < 0.08:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_7_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_7_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_7_3"
elif 0.08 <= profit_init_ratio < 0.09:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_8_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_8_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_8_3"
elif 0.09 <= profit_init_ratio < 0.10:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_9_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_9_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_9_3"
elif 0.10 <= profit_init_ratio < 0.11:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_10_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_10_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_10_3"
elif 0.11 <= profit_init_ratio < 0.12:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_11_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_11_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_11_3"
elif 0.12 <= profit_init_ratio:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_gt_50)
and (last_rsi_14 > previous_rsi_14)
and (last_cmf_20_gt_0)
):
return True, f"exit_profit_{mode_name}_t_12_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20_gt_0)
and (last_cmf_20_1h_gt_0)
and (last_cmf_20_4h_gt_0)
):
return True, f"exit_profit_{mode_name}_t_12_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_lt_neg_40):
return True, f"exit_profit_{mode_name}_t_12_3"
else:
is_scalp_mode = all(c in long_scalp_mode_tags for c in enter_tags)
if is_scalp_mode:
if 0.001 <= profit_init_ratio < 0.01:
if profit_init_ratio < (previous_profit - 0.008):
return True, f"exit_profit_{mode_name}_t_0_1"
elif 0.01 <= profit_init_ratio < 0.02:
if profit_init_ratio < (previous_profit - 0.01):
return True, f"exit_profit_{mode_name}_t_1_1"
elif 0.02 <= profit_init_ratio < 0.03:
if profit_init_ratio < (previous_profit - 0.01):
return True, f"exit_profit_{mode_name}_t_2_1"
elif 0.03 <= profit_init_ratio < 0.04:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_3_1"
elif 0.04 <= profit_init_ratio < 0.05:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_4_1"
elif 0.05 <= profit_init_ratio < 0.06:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_5_1"
elif 0.06 <= profit_init_ratio < 0.07:
if profit_init_ratio < (previous_profit - 0.015):
return True, f"exit_profit_{mode_name}_t_6_1"
elif 0.07 <= profit_init_ratio < 0.08:
if profit_init_ratio < (previous_profit - 0.02):
return True, f"exit_profit_{mode_name}_t_7_1"
elif 0.08 <= profit_init_ratio < 0.09:
if profit_init_ratio < (previous_profit - 0.02):
return True, f"exit_profit_{mode_name}_t_8_1"
elif 0.09 <= profit_init_ratio < 0.10:
if profit_init_ratio < (previous_profit - 0.02):
return True, f"exit_profit_{mode_name}_t_9_1"
elif 0.10 <= profit_init_ratio < 0.11:
if profit_init_ratio < (previous_profit - 0.025):
return True, f"exit_profit_{mode_name}_t_10_1"
elif 0.11 <= profit_init_ratio < 0.12:
if profit_init_ratio < (previous_profit - 0.025):
return True, f"exit_profit_{mode_name}_t_11_1"
elif 0.12 <= profit_init_ratio:
if profit_init_ratio < (previous_profit - 0.025):
return True, f"exit_profit_{mode_name}_t_12_1"
else:
if 0.001 <= profit_init_ratio < 0.01:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_0_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_0_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_0_3"
elif 0.01 <= profit_init_ratio < 0.02:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_1_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_1_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_1_3"
elif 0.02 <= profit_init_ratio < 0.03:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_2_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_2_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_2_3"
elif 0.03 <= profit_init_ratio < 0.04:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_3_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_3_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_3_3"
elif 0.04 <= profit_init_ratio < 0.05:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_4_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_4_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_4_3"
elif 0.05 <= profit_init_ratio < 0.06:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_5_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_5_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_5_3"
elif 0.06 <= profit_init_ratio < 0.07:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_6_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_6_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_6_3"
elif 0.07 <= profit_init_ratio < 0.08:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_7_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_7_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_7_3"
elif 0.08 <= profit_init_ratio < 0.09:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_8_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_8_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_8_3"
elif 0.09 <= profit_init_ratio < 0.10:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_9_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_9_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_9_3"
elif 0.10 <= profit_init_ratio < 0.11:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_10_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_10_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_10_3"
elif 0.11 <= profit_init_ratio < 0.12:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_11_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_11_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_11_3"
elif 0.12 <= profit_init_ratio:
if (
profit_init_ratio < (previous_profit - 0.03)
and (last_rsi_14_lt_50)
and (last_rsi_14 < previous_rsi_14)
and (last_cmf_20 < -0.0)
):
return True, f"exit_profit_{mode_name}_t_12_1"
elif (
profit_init_ratio < (previous_profit - 0.03)
and (last_cmf_20 < -0.0)
and (last_cmf_20_1h < -0.0)
and (last_cmf_20_4h < -0.0)
):
return True, f"exit_profit_{mode_name}_t_12_2"
elif profit_init_ratio < (previous_profit - 0.05) and (last_roc_9_4h_gt_40):
return True, f"exit_profit_{mode_name}_t_12_3"
else:
return False, None
return False, None
# Filled Order Snapshot
# ---------------------------------------------------------------------------------------------
def filled_order_snapshot(self, trade: "Trade") -> tuple:
filled_orders = trade.select_filled_orders()
filled_entries = []
filled_exits = []
append_entry = filled_entries.append
append_exit = filled_exits.append
entry_side = trade.entry_side
exit_side = trade.exit_side
for order in filled_orders:
order_side = order.ft_order_side
if order_side == entry_side:
append_entry(order)
elif order_side == exit_side:
append_exit(order)
return filled_orders, filled_entries, filled_exits
def trade_order_state(self, trade: "Trade") -> tuple:
orders = trade.orders
last_order = orders[-1] if orders else None
return (
len(orders),
getattr(last_order, "id", None),
getattr(last_order, "status", None),
getattr(last_order, "filled", None),
)
def cache_backtest_profit_snapshot(
self,
trade: "Trade",
current_time: "datetime",
exit_rate: float,
filled_orders: "Orders",
filled_entries: "Orders",
filled_exits: "Orders",
profit_values: tuple,
) -> None:
if not self.is_backtest_mode():
return
trade_key = trade.id if trade.id is not None else id(trade)
self._backtest_profit_snapshot = (
trade_key,
current_time,
exit_rate,
self.trade_order_state(trade),
filled_orders,
filled_entries,
filled_exits,
profit_values,
)
def backtest_profit_snapshot(self, trade: "Trade", current_time: "datetime", exit_rate: float) -> tuple | None:
if not self.is_backtest_mode():
return None
snapshot = getattr(self, "_backtest_profit_snapshot", None)
if snapshot is None:
return None
(
snapshot_trade_id,
snapshot_time,
snapshot_exit_rate,
snapshot_order_state,
filled_orders,
filled_entries,
filled_exits,
profit_values,
) = snapshot
trade_key = trade.id if trade.id is not None else id(trade)
if (
snapshot_trade_id == trade_key
and snapshot_time == current_time
and snapshot_exit_rate == exit_rate
and snapshot_order_state == self.trade_order_state(trade)
):
return filled_orders, filled_entries, filled_exits, profit_values
return None
def profit_or_order_snapshot(self, trade: "Trade", current_time: "datetime", exit_rate: float) -> tuple:
profit_snapshot = self.backtest_profit_snapshot(trade, current_time, exit_rate)
if profit_snapshot is not None:
return profit_snapshot
filled_orders, filled_entries, filled_exits = self.filled_order_snapshot(trade)
return filled_orders, filled_entries, filled_exits, None
# Calc Total Profit
# ---------------------------------------------------------------------------------------------
def calc_total_profit(
self, trade: "Trade", filled_entries: "Orders", filled_exits: "Orders", exit_rate: float
) -> tuple:
"""
Calculates the absolute profit for open trades.
:param trade: trade object.
:param filled_entries: Filled entries list.
:param filled_exits: Filled exits list.
:param exit_rate: The exit rate.
:return tuple: The total profit in stake, ratio, ratio based on current stake, and ratio based on the first entry stake.
"""
custom_fee_open_rate = self.custom_fee_open_rate
custom_fee_close_rate = self.custom_fee_close_rate
is_futures_mode = self.is_futures_mode
fee_open_rate = trade.fee_open if custom_fee_open_rate is None else custom_fee_open_rate
fee_close_rate = trade.fee_close if custom_fee_close_rate is None else custom_fee_close_rate
total_amount = 0.0
total_stake = 0.0
total_profit = 0.0
if trade.is_short:
fee_open_multiplier = 1 - fee_open_rate
fee_close_multiplier = 1 + fee_close_rate
for entry_order in filled_entries:
filled = entry_order.safe_filled
entry_stake = filled * entry_order.safe_price * fee_open_multiplier
total_amount += filled
total_stake += entry_stake
total_profit += entry_stake
for exit_order in filled_exits:
filled = exit_order.safe_filled
exit_stake = filled * exit_order.safe_price * fee_close_multiplier
total_amount -= filled
total_profit -= exit_stake
current_stake = total_amount * exit_rate * fee_close_multiplier
total_profit -= current_stake
else:
fee_open_multiplier = 1 + fee_open_rate
fee_close_multiplier = 1 - fee_close_rate
for entry_order in filled_entries:
filled = entry_order.safe_filled
entry_stake = filled * entry_order.safe_price * fee_open_multiplier
total_amount += filled
total_stake += entry_stake
total_profit -= entry_stake
for exit_order in filled_exits:
filled = exit_order.safe_filled
exit_stake = filled * exit_order.safe_price * fee_close_multiplier
total_amount -= filled
total_profit += exit_stake
current_stake = total_amount * exit_rate * fee_close_multiplier
total_profit += current_stake
if is_futures_mode:
total_profit += trade.funding_fees
total_profit_ratio = total_profit / total_stake
current_profit_ratio = total_profit / current_stake
init_profit_ratio = total_profit / filled_entries[0].cost
return total_profit, total_profit_ratio, current_profit_ratio, init_profit_ratio
@staticmethod
def scale_stakes_for_min_stake(stakes, slice_amount, min_stake, stake_leverage, trade_leverage):
if (slice_amount * stakes[0] / stake_leverage) >= min_stake:
return stakes
multi = min_stake / slice_amount / stakes[0] * trade_leverage
return [stake * multi for stake in stakes]
# Custom Exit
# ---------------------------------------------------------------------------------------------
def custom_exit(
self, pair: str, trade: "Trade", current_time: "datetime", current_rate: float, current_profit: float, **kwargs
):
trade_is_short = trade.is_short
long_rapid_mode_tags = self.long_rapid_mode_tags
calc_total_profit = self.calc_total_profit
cache_backtest_profit_snapshot = self.cache_backtest_profit_snapshot
filled_order_snapshot = self.filled_order_snapshot
long_normal_mode_tags = self.long_normal_mode_tags
long_pump_mode_tags = self.long_pump_mode_tags
long_quick_mode_tags = self.long_quick_mode_tags
long_rebuy_mode_tags = self.long_rebuy_mode_tags
long_exit_normal = self.long_exit_normal
long_exit_pump = self.long_exit_pump
long_exit_quick = self.long_exit_quick
short_exit_normal = self.short_exit_normal
short_scalp_mode_tags = self.short_scalp_mode_tags
long_scalp_mode_tags = self.long_scalp_mode_tags
df, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
if len(df) < 6:
return None
last_candle = df.iloc[-1]
previous_candle_1 = df.iloc[-2]
previous_candle_2 = df.iloc[-3]
previous_candle_3 = df.iloc[-4]
previous_candle_4 = df.iloc[-5]
previous_candle_5 = df.iloc[-6]
enter_tag = "empty"
if hasattr(trade, "enter_tag"):
trade_enter_tag = trade.enter_tag
if trade_enter_tag is not None:
enter_tag = trade_enter_tag
enter_tags = enter_tag.split()
filled_orders, filled_entries, filled_exits = filled_order_snapshot(trade)
profit_stake = 0.0
profit_ratio = 0.0
profit_current_stake_ratio = 0.0
profit_init_ratio = 0.0
profit_values = calc_total_profit(trade, filled_entries, filled_exits, current_rate)
profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = profit_values
cache_backtest_profit_snapshot(
trade, current_time, current_rate, filled_orders, filled_entries, filled_exits, profit_values
)
max_profit = 0.0
max_loss = 0.0
# Long Normal mode
if any(c in long_normal_mode_tags for c in enter_tags):
sell, signal_name = long_exit_normal(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long Pump mode
if any(c in long_pump_mode_tags for c in enter_tags):
sell, signal_name = long_exit_pump(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long Quick mode
if any(c in long_quick_mode_tags for c in enter_tags):
sell, signal_name = long_exit_quick(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long Rebuy mode
if all(c in long_rebuy_mode_tags for c in enter_tags) or (
any(c in long_rebuy_mode_tags for c in enter_tags)
and all(c in self.long_rebuy_grind_mode_tags for c in enter_tags)
):
sell, signal_name = self.long_exit_rebuy(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long high profit mode
if any(c in self.long_high_profit_mode_tags for c in enter_tags):
sell, signal_name = self.long_exit_high_profit(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long rapid mode
if all(c in long_rapid_mode_tags for c in enter_tags) or (
any(c in long_rapid_mode_tags for c in enter_tags)
and all(c in self.long_rapid_rebuy_grind_scalp_mode_tags for c in enter_tags)
):
sell, signal_name = self.long_exit_rapid(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long grind mode
if all(c in self.long_grind_mode_tags for c in enter_tags):
sell, signal_name = self.long_exit_grind(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long btc mode
if all(c in self.long_btc_mode_tags for c in enter_tags):
sell, signal_name = self.long_exit_btc(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long Top Coins mode
if any(c in self.long_top_coins_mode_tags for c in enter_tags):
sell, signal_name = self.long_exit_top_coins(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Long scalp mode
if all(c in long_scalp_mode_tags for c in enter_tags) or (
any(c in long_scalp_mode_tags for c in enter_tags)
and all(c in self.long_scalp_rebuy_grind_mode_tags for c in enter_tags)
):
sell, signal_name = self.long_exit_scalp(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Short normal mode
if any(c in self.short_normal_mode_tags for c in enter_tags):
sell, signal_name = short_exit_normal(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Short Pump mode
if any(c in self.short_pump_mode_tags for c in enter_tags):
sell, signal_name = self.short_exit_pump(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Short Quick mode
if any(c in self.short_quick_mode_tags for c in enter_tags):
sell, signal_name = self.short_exit_quick(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Short Rebuy mode
if all(c in self.short_rebuy_mode_tags for c in enter_tags):
sell, signal_name = self.short_exit_rebuy(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Short high profit mode
if any(c in self.short_high_profit_mode_tags for c in enter_tags):
sell, signal_name = self.short_exit_high_profit(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Short rapid mode
if any(c in self.short_rapid_mode_tags for c in enter_tags):
sell, signal_name = self.short_exit_rapid(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Short scalp mode
if all(c in short_scalp_mode_tags for c in enter_tags) or (
any(c in short_scalp_mode_tags for c in enter_tags)
and all(c in self.short_scalp_rebuy_grind_mode_tags for c in enter_tags)
):
sell, signal_name = self.short_exit_scalp(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Trades not opened by X7
if not trade_is_short and (not any(c in self.long_known_mode_tags for c in enter_tags)):
# use normal mode for such trades
sell, signal_name = long_exit_normal(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
# Trades not opened by X7
if trade_is_short and (not any(c in self.short_exit_known_mode_tags for c in enter_tags)):
# use normal mode for such trades
sell, signal_name = short_exit_normal(
pair,
current_rate,
profit_stake,
profit_ratio,
profit_current_stake_ratio,
profit_init_ratio,
max_profit,
max_loss,
filled_orders,
filled_entries,
filled_exits,
last_candle,
previous_candle_1,
previous_candle_2,
previous_candle_3,
previous_candle_4,
previous_candle_5,
trade,
current_time,
enter_tags,
)
if sell and (signal_name is not None):
return f"{signal_name} ( {enter_tag})"
return None
# Custom Stake Amount
# ---------------------------------------------------------------------------------------------
def custom_stake_amount(
self,
pair: str,
current_time: datetime,
current_rate: float,
proposed_stake: float,
min_stake: Optional[float],
max_stake: float,
leverage: float,
entry_tag: Optional[str],
side: str,
**kwargs,
) -> float:
long_rebuy_mode_tags = self.long_rebuy_mode_tags
long_rebuy_grind_mode_tags = self.long_rebuy_grind_mode_tags
system_v3_rebuy_mode_stake_multiplier = self.system_v3_rebuy_mode_stake_multiplier
system_v3_name = self.system_v3_name
system_v3_2_name = self.system_v3_2_name
system_v3_2_stake_multiplier = self.system_v3_2_stake_multiplier
system_v3_1_name = self.system_v3_1_name
system_v3_1_stake_multiplier = self.system_v3_1_stake_multiplier
long_rapid_mode_tags = self.long_rapid_mode_tags
short_rebuy_mode_tags = self.short_rebuy_mode_tags
short_rebuy_grind_mode_tags = self.short_rebuy_grind_mode_tags
short_rapid_mode_tags = self.short_rapid_mode_tags
long_rapid_rebuy_grind_mode_tags = self.long_rapid_rebuy_grind_mode_tags
long_grind_mode_tags = self.long_grind_mode_tags
long_btc_mode_tags = self.long_btc_mode_tags
short_rapid_rebuy_grind_mode_tags = self.short_rapid_rebuy_grind_mode_tags
short_grind_mode_tags = self.short_grind_mode_tags
enter_tags = entry_tag.split()
is_futures_mode = self.is_futures_mode
system_name_use = self.system_name_use
system_name_is_v3 = system_name_use == system_v3_name
system_name_is_v3_1 = system_name_use == system_v3_1_name
system_name_is_v3_2 = system_name_use == system_v3_2_name
grind_mode_stake_multiplier_futures = self.grind_mode_stake_multiplier_futures
grind_mode_stake_multiplier_spot = self.grind_mode_stake_multiplier_spot
rapid_mode_stake_multiplier_futures = self.rapid_mode_stake_multiplier_futures
rapid_mode_stake_multiplier_spot = self.rapid_mode_stake_multiplier_spot
regular_mode_stake_multiplier_futures = self.regular_mode_stake_multiplier_futures
regular_mode_stake_multiplier_spot = self.regular_mode_stake_multiplier_spot
grind_mode_stake_multipliers = (
grind_mode_stake_multiplier_futures if is_futures_mode else grind_mode_stake_multiplier_spot
)
rapid_mode_stake_multipliers = (
rapid_mode_stake_multiplier_futures if is_futures_mode else rapid_mode_stake_multiplier_spot
)
regular_mode_stake_multipliers = (
regular_mode_stake_multiplier_futures if is_futures_mode else regular_mode_stake_multiplier_spot
)
def scaled_stake(stake_multiplier: float) -> float:
stake = proposed_stake * stake_multiplier
return stake if stake > min_stake else min_stake
if side == "long":
# Rebuy mode
if all(c in long_rebuy_mode_tags for c in enter_tags) or (
any(c in long_rebuy_mode_tags for c in enter_tags) and all(c in long_rebuy_grind_mode_tags for c in enter_tags)
):
return scaled_stake(system_v3_rebuy_mode_stake_multiplier)
# Rapid mode
if system_name_is_v3 and (
all(c in long_rapid_mode_tags for c in enter_tags)
or (
any(c in long_rapid_mode_tags for c in enter_tags)
and all(c in long_rapid_rebuy_grind_mode_tags for c in enter_tags)
)
):
return scaled_stake(rapid_mode_stake_multipliers[0])
# Grind mode
elif all(c in long_grind_mode_tags for c in enter_tags):
for item in grind_mode_stake_multipliers:
stake = proposed_stake * item
if stake > min_stake:
return stake
# Btc mode
elif all(c in long_btc_mode_tags for c in enter_tags):
return proposed_stake * grind_mode_stake_multipliers[0]
else:
if system_name_is_v3_2:
return scaled_stake(system_v3_2_stake_multiplier)
elif system_name_is_v3_1:
return scaled_stake(system_v3_1_stake_multiplier)
else:
return scaled_stake(regular_mode_stake_multipliers[0])
else:
# Rebuy mode
if all(c in short_rebuy_mode_tags for c in enter_tags) or (
any(c in short_rebuy_mode_tags for c in enter_tags)
and all(c in short_rebuy_grind_mode_tags for c in enter_tags)
):
return scaled_stake(system_v3_rebuy_mode_stake_multiplier)
# Grind mode
elif all(c in short_grind_mode_tags for c in enter_tags):
for item in grind_mode_stake_multipliers:
stake = proposed_stake * item
if stake > min_stake:
return stake
# Rapid mode
if system_name_is_v3 and (
all(c in short_rapid_mode_tags for c in enter_tags)
or (
any(c in short_rapid_mode_tags for c in enter_tags)
and all(c in short_rapid_rebuy_grind_mode_tags for c in enter_tags)
)
):
return scaled_stake(rapid_mode_stake_multipliers[0])
else:
if system_name_is_v3_2:
return scaled_stake(system_v3_2_stake_multiplier)
elif system_name_is_v3_1:
return scaled_stake(system_v3_1_stake_multiplier)
else:
return scaled_stake(regular_mode_stake_multipliers[0])
return proposed_stake
# Order filled Callback
# ---------------------------------------------------------------------------------------------
def order_filled(self, pair: str, trade: Trade, order: Order, current_time: datetime, **kwargs) -> None:
# Check if it's the first entry
system_name_use = self.system_name_use
system_v3_2_name = self.system_v3_2_name
system_v3_1_name = self.system_v3_1_name
system_v3_name = self.system_v3_name
set_custom_data = trade.set_custom_data
if trade.nr_of_successful_entries == 1:
if system_name_use == system_v3_2_name:
set_custom_data(key="system_version", value=system_v3_2_name)
elif system_name_use == system_v3_1_name:
set_custom_data(key="system_version", value=system_v3_1_name)
elif system_name_use == system_v3_name:
set_custom_data(key="system_version", value=system_v3_name)
# set initial data for the trade
trade.set_custom_data(key="grind_1_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_1_cluster_max_profit_rate", value=0.0)
trade.set_custom_data(key="grind_2_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_2_cluster_max_profit_rate", value=0.0)
trade.set_custom_data(key="grind_3_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_3_cluster_max_profit_rate", value=0.0)
trade.set_custom_data(key="grind_4_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_4_cluster_max_profit_rate", value=0.0)
trade.set_custom_data(key="grind_5_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_5_cluster_max_profit_rate", value=0.0)
if system_name_use == system_v3_2_name:
filled_entries = trade.select_filled_orders(trade.entry_side)
order_tag = order.ft_order_tag
order_mode = order_tag.split(" ", 1)
order_tags = []
if len(order_mode) > 0:
order_mode = order_mode[0]
order_tags = order_tag.split(" ")
if len(order_tags) > 1:
order_tags = order_tags[1:]
if order_mode in ["derisk_level_1"]:
trade.set_custom_data(key="derisk_level_1", value=True)
elif order_mode in ["derisk_level_2"]:
trade.set_custom_data(key="derisk_level_2", value=True)
elif order_mode in ["derisk_level_3"]:
trade.set_custom_data(key="derisk_level_3", value=True)
# elif order_mode in ["grind_1_entry"]:
elif order_mode in ["grind_1_exit"]:
trade.set_custom_data(key="grind_1_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_1_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_1_derisk"]:
trade.set_custom_data(key="grind_1_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_1_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_2_exit"]:
trade.set_custom_data(key="grind_2_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_2_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_2_derisk"]:
trade.set_custom_data(key="grind_2_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_2_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_3_exit"]:
trade.set_custom_data(key="grind_3_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_3_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_3_derisk"]:
trade.set_custom_data(key="grind_3_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_3_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_4_exit"]:
trade.set_custom_data(key="grind_4_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_4_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_4_derisk"]:
trade.set_custom_data(key="grind_4_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_4_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_5_exit"]:
trade.set_custom_data(key="grind_5_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_5_cluster_max_profit_rate", value=0.0)
elif order_mode in ["grind_5_derisk"]:
trade.set_custom_data(key="grind_5_cluster_max_profit_stake", value=0.0)
trade.set_custom_data(key="grind_5_cluster_max_profit_rate", value=0.0)
return None
# Adjust Trade Position
# ---------------------------------------------------------------------------------------------
def adjust_trade_position(
self,
trade: Trade,
current_time: datetime,
current_rate: float,
current_profit: float,
min_stake: Optional[float],
max_stake: float,
current_entry_rate: float,
current_exit_rate: float,
current_entry_profit: float,
current_exit_profit: float,
**kwargs,
):
long_adjust_mode_tags = self.long_adjust_mode_tags
long_known_mode_tags = self.long_known_mode_tags
short_adjust_mode_tags = self.short_adjust_mode_tags
short_known_mode_tags = self.short_known_mode_tags
trade_is_short = trade.is_short
long_grind_mode_tags = self.long_grind_mode_tags
long_btc_mode_tags = self.long_btc_mode_tags
short_grind_mode_tags = self.short_grind_mode_tags
long_rebuy_mode_tags = self.long_rebuy_mode_tags
long_rebuy_grind_mode_tags = self.long_rebuy_grind_mode_tags
short_rebuy_mode_tags = self.short_rebuy_mode_tags
short_rebuy_grind_mode_tags = self.short_rebuy_grind_mode_tags
long_rebuy_adjust_trade_position_v3 = self.long_rebuy_adjust_trade_position_v3
short_rebuy_adjust_trade_position_v3 = self.short_rebuy_adjust_trade_position_v3
if self.position_adjustment_enable == False:
return None
enter_tag = "empty"
if hasattr(trade, "enter_tag"):
trade_enter_tag = trade.enter_tag
if trade_enter_tag is not None:
enter_tag = trade_enter_tag
enter_tags = enter_tag.split()
is_backtest = self.is_backtest_mode()
is_long_grind_mode = all(c in long_grind_mode_tags for c in enter_tags)
is_long_btc_mode = all(c in long_btc_mode_tags for c in enter_tags)
is_short_grind_mode = all(c in short_grind_mode_tags for c in enter_tags)
is_v2_date = is_backtest or trade.open_date_utc.replace(tzinfo=None) >= datetime(2025, 2, 13)
is_system_v3, is_system_v3_1, is_system_v3_2 = self.get_system_version_flags(trade)
is_system_v3_family = is_system_v3 or is_system_v3_1 or is_system_v3_2
# Rebuy mode
if not trade_is_short and (
all(c in long_rebuy_mode_tags for c in enter_tags)
or (
any(c in long_rebuy_mode_tags for c in enter_tags) and all(c in long_rebuy_grind_mode_tags for c in enter_tags)
)
):
if is_system_v3_family:
return long_rebuy_adjust_trade_position_v3(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
else:
return self.long_rebuy_adjust_trade_position(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
elif trade_is_short and (
all(c in short_rebuy_mode_tags for c in enter_tags)
or (
any(c in short_rebuy_mode_tags for c in enter_tags)
and all(c in short_rebuy_grind_mode_tags for c in enter_tags)
)
):
if is_system_v3_family:
return short_rebuy_adjust_trade_position_v3(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
else:
return self.short_rebuy_adjust_trade_position(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
# Grinding
elif not trade_is_short:
if not is_long_grind_mode and not is_long_btc_mode and (is_system_v3_family):
if any(c in long_adjust_mode_tags for c in enter_tags) or not any(
c in long_known_mode_tags for c in enter_tags
):
return self.long_grind_adjust_trade_position_v3(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
elif is_long_grind_mode or is_long_btc_mode or not is_v2_date:
return self.long_grind_adjust_trade_position(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
elif any(c in long_adjust_mode_tags for c in enter_tags) or not any(
c in long_known_mode_tags for c in enter_tags
):
return self.long_grind_adjust_trade_position_v2(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
elif trade_is_short:
if not is_short_grind_mode and (is_system_v3_family):
if any(c in short_adjust_mode_tags for c in enter_tags) or not any(
c in short_known_mode_tags for c in enter_tags
):
return self.short_grind_adjust_trade_position_v3(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
elif is_short_grind_mode or not is_v2_date:
return self.short_grind_adjust_trade_position(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
else:
if any(c in short_adjust_mode_tags for c in enter_tags) or not any(
c in short_known_mode_tags for c in enter_tags
):
return self.short_grind_adjust_trade_position_v2(
trade,
enter_tags,
current_time,
current_rate,
current_profit,
min_stake,
max_stake,
current_entry_rate,
current_exit_rate,
current_entry_profit,
current_exit_profit,
)
return None
def notification_msg(
self,
msg_type: str,
tag: str,
pair: str,
rate: float,
stake_amount: float,
profit_stake: float,
profit_ratio: float,
grind_profit_stake: float = None,
grind_profit_pct: float = None,
stake_currency: str = None,
coin_amount: float = None,
) -> str:
"""
Generate a formatted notification message for trade events.
This function is designed to standardize trade-related notifications
such as grinding entries, exits, stop-losses, buybacks, and re-entries.
It builds a Markdown-formatted message with emojis for readability.
Parameters
----------
msg_type : str
Type of notification. Must be one of:
- "grinding-entry"
- "grinding-exit"
- "grinding-derisk"
- "grinding-stop"
- "buyback-entry"
- "buyback-exit"
- "buyback-derisk"
- "re-entry"
- "de-risk"
- "rebuy-derisk"
- "rebuy"
tag : str
Identifier or label for the trade step (e.g., "g1", "dl1").
pair : str
Pair (e.g., "BTC/USDT").
rate : float
Entry or exit rate for the trade.
stake_amount : float
Amount of stake used in the trade.
profit_stake : float
Profit expressed in stake currency.
profit_ratio : float
Profit ratio (decimal form, e.g. 0.05 = 5%).
grind_profit_stake : float, optional
Grind profit expressed in stake currency (default: None).
grind_profit_pct : float, optional
Grind profit ratio (decimal form, e.g. 0.02 = 2%) (default: None).
stake_currency : str, optional
Symbol of the stake currency (e.g., "USDT"). If None, only numeric values are shown.
coin_amount : float, optional
Amount of base coins involved in the trade (e.g., exit/stop cases).
Returns
-------
str
A formatted multi-line string with trade details.
Example:
```
✅ **Grinding entry:** `(dl1)`
🏦 **Exchange:** `Binance`
🪙 **Pair:** `BTC/USDT`
〽️ **Rate:** `20000.0`
💰 **Stake amount:** `100.00 USDT`
💵 **Profit (stake):** `5.00 USDT`
💸 **Profit (percent):** `5.00%`
💶 **Grind profit (stake):** `2.00 USDT`
💸 **Grind profit (percent):** `2.00%`
```
Notes
-----
- The function uses Markdown formatting (e.g., **bold**, `inline code`)
for compatibility with Discord, Telegram, etc.
- If `grind_profit_stake` or `grind_profit_pct` are not provided,
the related fields are omitted.
- If `stake_currency` is provided, it will be appended to amounts.
"""
# Headers for different message types
header_labels = {
"grinding-entry": "✅ **Grinding entry:** ",
"grinding-exit": "❎ **Grinding exit:** ",
"grinding-derisk": "❌ **Grinding de-risk:** ",
"grinding-stop": "❌ **Grinding stop exit:** ",
"buyback-entry": "✅ **Buyback entry:** ",
"buyback-exit": "❎ **Buyback exit:** ",
"buyback-derisk": "❌ **Buyback de-risk:** ",
"re-entry": "✅ **Re-entry:** ",
"de-risk": "❌ **De-risk:** ",
"rebuy-derisk": "❌ **Rebuy de-risk:** ",
"rebuy": "✅ **Rebuy:** ",
}
# Start with the header
header_label = header_labels.get(msg_type, None)
msg = None if header_label is None else f"{header_label}`({tag})`\n"
# Add exchange information
exchange_name = getattr(self, "config", {}).get("exchange", {}).get("name", "Unknown").capitalize()
msg += f"🏦 **Exchange:** `{exchange_name}`\n"
# Common fields
msg += (
f"🪙 **Pair:** `{pair}`\n"
f"〽️ **Rate:** `{rate}`\n"
f"💰 **Stake amount:** `{stake_amount:.2f}{'' if stake_currency is None else ' ' + stake_currency}`\n"
)
# Add coin amount if available (exit/stop cases)
if coin_amount is not None:
msg += f"🪙 **Coin amount:** `{coin_amount}`\n"
# Profit section
profit_pct = profit_ratio * 100
msg += (
f"💵 **Profit (stake):** `{profit_stake:.2f}{'' if stake_currency is None else ' ' + stake_currency}`\n"
f"💸 **Profit (percent):** `{profit_pct:.2f}%`\n"
)
# Grind profit calculation
if grind_profit_stake is not None and grind_profit_stake != 0:
msg += f"💶 **Grind profit (stake):** `{grind_profit_stake:.2f}{'' if stake_currency is None else ' ' + stake_currency}`\n"
if grind_profit_pct is not None and grind_profit_pct != 0:
msg += f"💸 **Grind profit (percent):** `{(grind_profit_pct * 100.0):.2f}%`"
return msg
def btc_informative_pair(self) -> str:
stake_currency = self.config["stake_currency"]
is_futures = self.config.get("trading_mode") in ("futures", "margin")
if stake_currency in self.stable_stake_currencies:
return f"BTC/{stake_currency}:{stake_currency}" if is_futures else f"BTC/{stake_currency}"
return "BTC/USDT:USDT" if is_futures else "BTC/USDT"
def prepare_informative_merge(self, informative: DataFrame, keep_ohlcv=None) -> DataFrame:
if informative.empty:
return informative
keep_ohlcv = keep_ohlcv or ()
keep_cols = [
column
for column in informative.columns
if column == "date" or column not in self.informative_ohlcv_columns or column in keep_ohlcv
]
return informative[keep_cols]
# Informative Pairs
# ---------------------------------------------------------------------------------------------
def informative_pairs(self):
# get access to all pairs available in whitelist.
pairs = self.dp.current_whitelist()
# Use set to automatically avoid duplicates
informative_pairs = set()
# Assign tf to each pair so they can be downloaded and cached for strategy.
for info_timeframe in self.info_timeframes:
informative_pairs.update((pair, info_timeframe) for pair in pairs)
btc_info_pair = self.btc_informative_pair()
informative_pairs.update((btc_info_pair, btc_info_timeframe) for btc_info_timeframe in self.btc_info_timeframes)
return list(informative_pairs)
@staticmethod
def rolling_sum(arr: np.ndarray, timeperiod: int) -> np.ndarray:
arr = np.asarray(arr, dtype=np.float64)
out = np.full(arr.shape, np.nan, dtype=np.float64)
if arr.size < timeperiod:
return out
out[timeperiod - 1 :] = np.convolve(arr, np.ones(timeperiod, dtype=np.float64), mode="valid")
return out
@staticmethod
def chaikin_money_flow(high, low, close, volume, timeperiod=20):
hl_range = high - low
mfm = np.divide(
((close - low) - (high - close)),
hl_range,
out=np.full_like(close, np.nan, dtype=np.float64),
where=hl_range != 0,
)
mfv = mfm * volume
mfv_sum = __class__.rolling_sum(mfv, timeperiod)
vol_sum = ta.SUM(volume, timeperiod=timeperiod)
return mfv_sum / vol_sum
@staticmethod
def stoch_k(high, low, close):
stoch_k = ta.STOCHF(high, low, close, fastk_period=14, fastd_period=3, fastd_matype=0)[1]
stoch_k[:17] = np.nan
return stoch_k
@staticmethod
def fast_pct_change(arr: np.ndarray) -> np.ndarray:
out = np.empty_like(arr)
out[0] = np.nan
prev = arr[:-1]
np.divide((arr[1:] - prev), prev, out=out[1:], where=prev != 0)
out[1:] *= 100.0
return out
@staticmethod
def stochrsi_k(rsi_14: np.ndarray) -> np.ndarray:
rsi_min = ta.MIN(rsi_14, timeperiod=14)
rsi_max = ta.MAX(rsi_14, timeperiod=14)
denom = rsi_max - rsi_min
denom = np.where(denom == 0, np.nan, denom)
stochrsi = ((rsi_14 - rsi_min) / denom) * 100.0
return ta.SMA(stochrsi, timeperiod=3)
@staticmethod
def validate_indicators(df: pd.DataFrame, columns: list[str], pair: str, timeframe: str) -> None:
expected_len = len(df)
for col in columns:
# Missing column
if col not in df.columns:
log.warning(f"[{pair}] [{timeframe}] Missing column: {col}")
continue
series = df[col]
# Length check
if len(series) != expected_len:
log.warning(f"[{pair}] [{timeframe}] {col} length mismatch: {len(series)} != {expected_len}")
# Dtype check
if not pd.api.types.is_numeric_dtype(series):
log.warning(f"[{pair}] [{timeframe}] {col} non-numeric dtype: {series.dtype}")
continue
arr = series.to_numpy(copy=False)
# Empty array protection
if arr.size == 0:
log.warning(f"[{pair}] [{timeframe}] {col} empty array")
continue
# Inf check
inf_count = np.isinf(arr).sum()
if inf_count:
log.warning(f"[{pair}] [{timeframe}] {col} contains {inf_count} inf values")
# NaN diagnostics
nan_count = np.isnan(arr).sum()
if nan_count == expected_len:
log.warning(f"[{pair}] [{timeframe}] {col} is ALL NaN")
elif nan_count:
nan_pct = (nan_count / expected_len) * 100.0
if nan_pct > 50.0:
log.warning(f"[{pair}] [{timeframe}] {col} has {nan_pct:.1f}% NaN")
else:
log.debug("[%s] [%s] %s NaNs: %s (%.1f%%)", pair, timeframe, col, nan_count, nan_pct)
# Informative 1d Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def informative_1d_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
fast_pct_change = self.fast_pct_change
stoch_k_func = self.stoch_k
stochrsi_k_func = self.stochrsi_k
chaikin_money_flow = self.chaikin_money_flow
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# Get dataframe
metadata_pair = metadata["pair"]
informative_1d = dp.get_pair_dataframe(pair=metadata_pair, timeframe=info_timeframe)
# Empty dataframe protection
if informative_1d.empty:
return informative_1d
# =========================================================================
# BASE DATA
# =========================================================================
close_np = informative_1d["close"].to_numpy(copy=False)
high_np = informative_1d["high"].to_numpy(copy=False)
low_np = informative_1d["low"].to_numpy(copy=False)
open_np = informative_1d["open"].to_numpy(copy=False)
volume_np = informative_1d["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_3 = ta.RSI(close_np, timeperiod=3)
rsi_14 = ta.RSI(close_np, timeperiod=14)
# bb_upper, bb_middle, bb_lower = ta.BBANDS(close_np, timeperiod=20, nbdevup=2.0, nbdevdn=2.0, matype=0)
# bb_middle_safe = np.where(bb_middle == 0, np.nan, bb_middle)
aroon_down, aroon_up = ta.AROON(high_np, low_np, timeperiod=14)
# =========================================================================
# STOCH
# =========================================================================
stoch_k = stoch_k_func(high_np, low_np, close_np)
# =========================================================================
# STOCH RSI
# =========================================================================
stochrsi_k = stochrsi_k_func(rsi_14)
# =========================================================================
# MONEY FLOW
# =========================================================================
mfi_14 = ta.MFI(high_np, low_np, close_np, volume_np, timeperiod=14)
cmf_20 = chaikin_money_flow(high_np, low_np, close_np, volume_np, timeperiod=20)
# =========================================================================
# MOMENTUM
# =========================================================================
willr_14 = ta.WILLR(high_np, low_np, close_np, timeperiod=14)
roc_2 = ta.ROC(close_np, timeperiod=2)
roc_9 = ta.ROC(close_np, timeperiod=9)
# =========================================================================
# RSI CHANGE %
# =========================================================================
rsi3_change = fast_pct_change(rsi_3)
# rsi14_change = self.fast_pct_change(rsi_14)
# =========================================================================
# CANDLE %
# =========================================================================
open_safe = np.where(open_np == 0, np.nan, open_np)
change_pct = ((close_np - open_np) / open_safe) * 100.0
# =========================================================================
# WICK %
# =========================================================================
max_oc = np.maximum(open_np, close_np)
min_oc = np.minimum(open_np, close_np)
max_oc_calc = np.where(max_oc == 0, np.nan, max_oc)
min_oc_calc = np.where(min_oc == 0, np.nan, min_oc)
top_wick_pct = ((high_np - max_oc) / max_oc_calc) * 100.0
bot_wick_pct = np.abs(((low_np - min_oc) / min_oc_calc) * 100.0)
# =========================================================================
# HIGH / LOW ROLLING
# =========================================================================
high_max_6 = ta.MAX(high_np, timeperiod=6)
high_max_12 = ta.MAX(high_np, timeperiod=12)
high_max_20 = ta.MAX(high_np, timeperiod=20)
high_max_30 = ta.MAX(high_np, timeperiod=30)
low_min_6 = ta.MIN(low_np, timeperiod=6)
low_min_12 = ta.MIN(low_np, timeperiod=12)
low_min_20 = ta.MIN(low_np, timeperiod=20)
low_min_30 = ta.MIN(low_np, timeperiod=30)
# =========================================================================
# ASSIGN DATAFRAME
# =========================================================================
new_cols = pd.DataFrame(
{
# Core indicators
"RSI_3": rsi_3,
"RSI_14": rsi_14,
# "BBL_20_2.0": bb_lower,
# "BBU_20_2.0": bb_upper,
# "BBB_20_2.0": ((bb_upper - bb_lower) / bb_middle_safe) * 100.0,
# Stoch
"STOCHk_14_3_3": stoch_k,
# Stoch RSI
"STOCHRSIk_14_14_3_3": stochrsi_k,
# Money Flow
"MFI_14": mfi_14,
"CMF_20": cmf_20,
# Momentum
"WILLR_14": willr_14,
"AROONU_14": aroon_up,
"AROOND_14": aroon_down,
"ROC_2": roc_2,
"ROC_9": roc_9,
# Change %
"RSI_3_change_pct": rsi3_change,
# "RSI_14_change_pct": rsi14_change,
# Candle %
"change_pct": change_pct,
# Wick %
"top_wick_pct": top_wick_pct,
"bot_wick_pct": bot_wick_pct,
# Rolling
"high_max_6": high_max_6,
"high_max_12": high_max_12,
"high_max_20": high_max_20,
"high_max_30": high_max_30,
"low_min_6": low_min_6,
"low_min_12": low_min_12,
"low_min_20": low_min_20,
"low_min_30": low_min_30,
},
index=informative_1d.index,
)
informative_1d = pd.concat([informative_1d, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
# Core indicators
"RSI_3",
"RSI_14",
# "BBL_20_2.0",
# "BBU_20_2.0",
# "BBB_20_2.0",
# Stoch
"STOCHk_14_3_3",
# Stoch RSI
"STOCHRSIk_14_14_3_3",
# Money Flow
"MFI_14",
"CMF_20",
# Momentum
"WILLR_14",
"AROONU_14",
"AROOND_14",
"ROC_2",
"ROC_9",
# Change %
"RSI_3_change_pct",
# "RSI_14_change_pct",
# Candle %
"change_pct",
# Wick %
"top_wick_pct",
"bot_wick_pct",
# Rolling
"high_max_6",
"high_max_12",
"high_max_20",
"high_max_30",
"low_min_6",
"low_min_12",
"low_min_20",
"low_min_30",
]
validate_indicators(df=informative_1d, columns=debug_cols, pair=metadata_pair, timeframe=info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] informative_1d_indicators took: %.4f seconds.", metadata_pair, tok - tik)
return informative_1d
# Informative 4h Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def informative_4h_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
fast_pct_change = self.fast_pct_change
stoch_k_func = self.stoch_k
stochrsi_k_func = self.stochrsi_k
chaikin_money_flow = self.chaikin_money_flow
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# Get dataframe
metadata_pair = metadata["pair"]
informative_4h = dp.get_pair_dataframe(pair=metadata_pair, timeframe=info_timeframe)
# Empty dataframe protection
if informative_4h.empty:
return informative_4h
# =========================================================================
# BASE DATA
# =========================================================================
close_np = informative_4h["close"].to_numpy(copy=False)
high_np = informative_4h["high"].to_numpy(copy=False)
low_np = informative_4h["low"].to_numpy(copy=False)
open_np = informative_4h["open"].to_numpy(copy=False)
volume_np = informative_4h["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_3 = ta.RSI(close_np, timeperiod=3)
rsi_14 = ta.RSI(close_np, timeperiod=14)
# bb_upper, bb_middle, bb_lower = ta.BBANDS(close_np, timeperiod=20, nbdevup=2.0, nbdevdn=2.0, matype=0)
# bb_middle_safe = np.where(bb_middle == 0, np.nan, bb_middle)
aroon_down, aroon_up = ta.AROON(high_np, low_np, timeperiod=14)
# =========================================================================
# STOCH
# =========================================================================
stoch_k = stoch_k_func(high_np, low_np, close_np)
# =========================================================================
# STOCH RSI
# =========================================================================
stochrsi_k = stochrsi_k_func(rsi_14)
# =========================================================================
# KST
# =========================================================================
kst1 = ta.SMA(ta.ROC(close_np, 10), 10)
kst2 = ta.SMA(ta.ROC(close_np, 15), 10)
kst3 = ta.SMA(ta.ROC(close_np, 20), 10)
kst4 = ta.SMA(ta.ROC(close_np, 30), 15)
kst_main = kst1 + (2.0 * kst2) + (3.0 * kst3) + (4.0 * kst4)
kst_signal = ta.SMA(kst_main, 9)
# =========================================================================
# MONEY FLOW
# =========================================================================
mfi_14 = ta.MFI(high_np, low_np, close_np, volume_np, timeperiod=14)
cmf_20 = chaikin_money_flow(high_np, low_np, close_np, volume_np, timeperiod=20)
# =========================================================================
# MOMENTUM
# =========================================================================
ema_12 = ta.EMA(close_np, timeperiod=12)
ema_50 = ta.EMA(close_np, timeperiod=50)
ema_100 = ta.EMA(close_np, timeperiod=100)
ema_200 = ta.EMA(close_np, timeperiod=200)
willr_14 = ta.WILLR(high_np, low_np, close_np, timeperiod=14)
uo = ta.ULTOSC(high_np, low_np, close_np)
obv = ta.OBV(close_np, volume_np)
roc_2 = ta.ROC(close_np, timeperiod=2)
roc_9 = ta.ROC(close_np, timeperiod=9)
cci_20 = ta.CCI(high_np, low_np, close_np, timeperiod=20)
# =========================================================================
# CHANGE %
# =========================================================================
rsi_3_change = fast_pct_change(rsi_3)
rsi_14_change = fast_pct_change(rsi_14)
stochrsi_change = fast_pct_change(stochrsi_k)
# uo_change = self.fast_pct_change(uo)
obv_change = fast_pct_change(obv)
cci_change = fast_pct_change(cci_20)
# =========================================================================
# CANDLE %
# =========================================================================
open_safe = np.where(open_np == 0, np.nan, open_np)
change_pct = ((close_np - open_np) / open_safe) * 100.0
# =========================================================================
# WICK %
# =========================================================================
max_oc = np.maximum(open_np, close_np)
# min_oc = np.minimum(open_np, close_np)
max_oc_calc = np.where(max_oc == 0, np.nan, max_oc)
# min_oc_calc = np.where(min_oc == 0, np.nan, min_oc)
top_wick_pct = ((high_np - max_oc) / max_oc_calc) * 100.0
# bot_wick_pct = np.abs(((low_np - min_oc) / min_oc_calc) * 100.0)
# =========================================================================
# ROLLING
# =========================================================================
high_max_6 = ta.MAX(high_np, timeperiod=6)
high_max_12 = ta.MAX(high_np, timeperiod=12)
high_max_24 = ta.MAX(high_np, timeperiod=24)
# low_min_6 = ta.MIN(low_np, timeperiod=6)
low_min_12 = ta.MIN(low_np, timeperiod=12)
low_min_24 = ta.MIN(low_np, timeperiod=24)
# change_pct_min_3 = ta.MIN(change_pct, timeperiod=3)
# change_pct_min_6 = ta.MIN(change_pct, timeperiod=6)
# change_pct_max_3 = ta.MAX(change_pct, timeperiod=3)
# change_pct_max_6 = ta.MAX(change_pct, timeperiod=6)
# =========================================================================
# ASSIGN DATAFRAME
# =========================================================================
new_cols = pd.DataFrame(
{
# Core indicators
"RSI_3": rsi_3,
"RSI_14": rsi_14,
# "BBL_20_2.0": bb_lower,
# "BBU_20_2.0": bb_upper,
# "BBB_20_2.0": ((bb_upper - bb_lower) / bb_middle_safe) * 100.0,
"AROONU_14": aroon_up,
"AROOND_14": aroon_down,
# Stoch
"STOCHk_14_3_3": stoch_k,
# Stoch RSI
"STOCHRSIk_14_14_3_3": stochrsi_k,
# KST
"KST_10_15_20_30_10_10_10_15": kst_main,
"KSTs_9": kst_signal,
# Money Flow
"MFI_14": mfi_14,
"CMF_20": cmf_20,
# Momentum
"EMA_12": ema_12,
"EMA_50": ema_50,
"EMA_100": ema_100,
"EMA_200": ema_200,
"WILLR_14": willr_14,
"UO_7_14_28": uo,
# "OBV": obv,
"ROC_2": roc_2,
"ROC_9": roc_9,
"CCI_20": cci_20,
# Change %
"STOCHRSIk_14_14_3_3_change_pct": stochrsi_change,
"CCI_20_change_pct": cci_change,
"RSI_3_change_pct": rsi_3_change,
"RSI_14_change_pct": rsi_14_change,
# "UO_7_14_28_change_pct": uo_change,
"OBV_change_pct": obv_change,
# Candle %
"change_pct": change_pct,
# "change_pct_min_3": change_pct_min_3,
# "change_pct_min_6": change_pct_min_6,
# "change_pct_max_3": change_pct_max_3,
# "change_pct_max_6": change_pct_max_6,
# Wicks %
"top_wick_pct": top_wick_pct,
# "bot_wick_pct": bot_wick_pct,
# Rolling
"high_max_6": high_max_6,
"high_max_12": high_max_12,
"high_max_24": high_max_24,
# "low_min_6": low_min_6,
"low_min_12": low_min_12,
"low_min_24": low_min_24,
},
index=informative_4h.index,
)
informative_4h = pd.concat([informative_4h, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
# Core indicators
"RSI_3",
"RSI_14",
# "BBL_20_2.0",
# "BBU_20_2.0",
# "BBB_20_2.0",
"AROONU_14",
"AROOND_14",
# Stoch
"STOCHk_14_3_3",
# Stoch RSI
"STOCHRSIk_14_14_3_3",
# KST
"KST_10_15_20_30_10_10_10_15",
"KSTs_9",
# Money Flow
"MFI_14",
"CMF_20",
# Momentum
"EMA_12",
"EMA_50",
"EMA_100",
"EMA_200",
"WILLR_14",
"UO_7_14_28",
# "OBV",
"ROC_2",
"ROC_9",
"CCI_20",
# Change %
"STOCHRSIk_14_14_3_3_change_pct",
"CCI_20_change_pct",
"RSI_3_change_pct",
"RSI_14_change_pct",
# "UO_7_14_28_change_pct",
"OBV_change_pct",
# Candle %
"change_pct",
# "change_pct_min_3",
# "change_pct_min_6",
# "change_pct_max_3",
# "change_pct_max_6",
# Wicks %
# "top_wick_pct",
# "bot_wick_pct",
# Rolling
"high_max_6",
"high_max_12",
"high_max_24",
# "low_min_6",
"low_min_12",
"low_min_24",
]
validate_indicators(df=informative_4h, columns=debug_cols, pair=metadata_pair, timeframe=info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] informative_4h_indicators took: %.4f seconds.", metadata_pair, tok - tik)
return informative_4h
# Informative 1h Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def informative_1h_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
fast_pct_change = self.fast_pct_change
stoch_k_func = self.stoch_k
stochrsi_k_func = self.stochrsi_k
chaikin_money_flow = self.chaikin_money_flow
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# =========================================================================
# GET DATAFRAME
# =========================================================================
metadata_pair = metadata["pair"]
informative_1h = dp.get_pair_dataframe(pair=metadata_pair, timeframe=info_timeframe)
# Empty dataframe protection
if informative_1h.empty:
return informative_1h
# =========================================================================
# BASE DATA
# =========================================================================
close_np = informative_1h["close"].to_numpy(copy=False)
high_np = informative_1h["high"].to_numpy(copy=False)
low_np = informative_1h["low"].to_numpy(copy=False)
open_np = informative_1h["open"].to_numpy(copy=False)
volume_np = informative_1h["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_3 = ta.RSI(close_np, timeperiod=3)
rsi_14 = ta.RSI(close_np, timeperiod=14)
bb_upper, bb_middle, bb_lower = ta.BBANDS(close_np, timeperiod=20, nbdevup=2.0, nbdevdn=2.0, matype=0)
bb_middle_safe = np.where(bb_middle == 0, np.nan, bb_middle)
aroon_down, aroon_up = ta.AROON(high_np, low_np, timeperiod=14)
# =========================================================================
# STOCH
# =========================================================================
stoch_k = stoch_k_func(high_np, low_np, close_np)
# =========================================================================
# STOCH RSI
# =========================================================================
stochrsi_k = stochrsi_k_func(rsi_14)
# =========================================================================
# KST
# =========================================================================
kst1 = ta.SMA(ta.ROC(close_np, 10), 10)
kst2 = ta.SMA(ta.ROC(close_np, 15), 10)
kst3 = ta.SMA(ta.ROC(close_np, 20), 10)
kst4 = ta.SMA(ta.ROC(close_np, 30), 15)
kst_main = kst1 + (2.0 * kst2) + (3.0 * kst3) + (4.0 * kst4)
kst_signal = ta.SMA(kst_main, 9)
# =========================================================================
# MONEY FLOW
# =========================================================================
mfi_14 = ta.MFI(high_np, low_np, close_np, volume_np, timeperiod=14)
cmf_20 = chaikin_money_flow(high_np, low_np, close_np, volume_np, timeperiod=20)
# =========================================================================
# MOMENTUM
# =========================================================================
ema_12 = ta.EMA(close_np, timeperiod=12)
ema_200 = ta.EMA(close_np, timeperiod=200)
sma_16 = ta.SMA(close_np, timeperiod=16)
willr_14 = ta.WILLR(high_np, low_np, close_np, timeperiod=14)
willr_84 = ta.WILLR(high_np, low_np, close_np, timeperiod=84)
uo = ta.ULTOSC(high_np, low_np, close_np)
# obv = ta.OBV(close_np, volume_np)
roc_2 = ta.ROC(close_np, timeperiod=2)
roc_9 = ta.ROC(close_np, timeperiod=9)
cci_20 = ta.CCI(high_np, low_np, close_np, timeperiod=20)
# =========================================================================
# CHANGE %
# =========================================================================
rsi_3_change = fast_pct_change(rsi_3)
rsi_14_change = fast_pct_change(rsi_14)
# stochrsi_change = self.fast_pct_change(stochrsi_k)
# uo_change = self.fast_pct_change(uo)
# obv_change = self.fast_pct_change(obv)
cci_change = fast_pct_change(cci_20)
# =========================================================================
# CANDLE %
# =========================================================================
open_safe = np.where(open_np == 0, np.nan, open_np)
change_pct = ((close_np - open_np) / open_safe) * 100.0
# =========================================================================
# WICK %
# =========================================================================
# max_oc = np.maximum(open_np, close_np)
# min_oc = np.minimum(open_np, close_np)
# max_oc_calc = np.where(max_oc == 0, np.nan, max_oc)
# min_oc_calc = np.where(min_oc == 0, np.nan, min_oc)
# top_wick_pct = ((high_np - max_oc) / max_oc_calc) * 100.0
# bot_wick_pct = np.abs(((low_np - min_oc) / min_oc_calc) * 100.0)
# =========================================================================
# ROLLING
# =========================================================================
high_max_6 = ta.MAX(high_np, timeperiod=6)
high_max_12 = ta.MAX(high_np, timeperiod=12)
high_max_24 = ta.MAX(high_np, timeperiod=24)
low_min_6 = ta.MIN(low_np, timeperiod=6)
low_min_12 = ta.MIN(low_np, timeperiod=12)
low_min_24 = ta.MIN(low_np, timeperiod=24)
new_cols = pd.DataFrame(
{
"RSI_3": rsi_3,
"RSI_14": rsi_14,
"RSI_3_change_pct": rsi_3_change,
"RSI_14_change_pct": rsi_14_change,
"EMA_12": ema_12,
"EMA_200": ema_200,
"SMA_16": sma_16,
"BBL_20_2.0": bb_lower,
"BBU_20_2.0": bb_upper,
"BBB_20_2.0": ((bb_upper - bb_lower) / bb_middle_safe) * 100.0,
"MFI_14": mfi_14,
"CMF_20": cmf_20,
"WILLR_14": willr_14,
"WILLR_84": willr_84,
"AROONU_14": aroon_up,
"AROOND_14": aroon_down,
"STOCHk_14_3_3": stoch_k,
"STOCHRSIk_14_14_3_3": stochrsi_k,
# "STOCHRSIk_14_14_3_3_change_pct": stochrsi_change,
"KST_10_15_20_30_10_10_10_15": kst_main,
"KSTs_9": kst_signal,
"UO_7_14_28": uo,
# "UO_7_14_28_change_pct": uo_change,
# "OBV": obv,
# "OBV_change_pct": obv_change,
"ROC_2": roc_2,
"ROC_9": roc_9,
"CCI_20": cci_20,
"CCI_20_change_pct": cci_change,
"change_pct": change_pct,
# "top_wick_pct": top_wick_pct,
# "bot_wick_pct": bot_wick_pct,
"high_max_6": high_max_6,
"high_max_12": high_max_12,
"high_max_24": high_max_24,
"low_min_6": low_min_6,
"low_min_12": low_min_12,
"low_min_24": low_min_24,
},
index=informative_1h.index,
)
informative_1h = pd.concat([informative_1h, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"RSI_3",
"RSI_14",
"RSI_3_change_pct",
"RSI_14_change_pct",
"EMA_12",
"EMA_200",
"SMA_16",
"BBL_20_2.0",
"BBU_20_2.0",
"BBB_20_2.0",
"MFI_14",
"CMF_20",
"WILLR_14",
"WILLR_84",
"AROONU_14",
"AROOND_14",
"STOCHk_14_3_3",
"STOCHRSIk_14_14_3_3",
# "STOCHRSIk_14_14_3_3_change_pct",
"KST_10_15_20_30_10_10_10_15",
"KSTs_9",
"UO_7_14_28",
# "UO_7_14_28_change_pct",
# "OBV",
# "OBV_change_pct",
"ROC_2",
"ROC_9",
"CCI_20",
"CCI_20_change_pct",
"change_pct",
# "top_wick_pct",
# "bot_wick_pct",
"high_max_6",
"high_max_12",
"high_max_24",
"low_min_6",
"low_min_12",
"low_min_24",
]
validate_indicators(df=informative_1h, columns=debug_cols, pair=metadata_pair, timeframe=info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] informative_1h_indicators took: %.4f seconds.", metadata_pair, tok - tik)
return informative_1h
# Informative 15m Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def informative_15m_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
fast_pct_change = self.fast_pct_change
stoch_k_func = self.stoch_k
stochrsi_k_func = self.stochrsi_k
chaikin_money_flow = self.chaikin_money_flow
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# =========================================================================
# GET DATAFRAME
# =========================================================================
metadata_pair = metadata["pair"]
informative_15m = dp.get_pair_dataframe(pair=metadata_pair, timeframe=info_timeframe)
# Empty dataframe protection
if informative_15m.empty:
return informative_15m
# =========================================================================
# BASE DATA
# =========================================================================
close_np = informative_15m["close"].to_numpy(copy=False)
high_np = informative_15m["high"].to_numpy(copy=False)
low_np = informative_15m["low"].to_numpy(copy=False)
open_np = informative_15m["open"].to_numpy(copy=False)
volume_np = informative_15m["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_3 = ta.RSI(close_np, timeperiod=3)
rsi_14 = ta.RSI(close_np, timeperiod=14)
aroon_down, aroon_up = ta.AROON(high_np, low_np, timeperiod=14)
# =========================================================================
# STOCH
# =========================================================================
stoch_k = stoch_k_func(high_np, low_np, close_np)
# =========================================================================
# STOCH RSI
# =========================================================================
stochrsi_k = stochrsi_k_func(rsi_14)
# =========================================================================
# MONEY FLOW
# =========================================================================
mfi_14 = ta.MFI(high_np, low_np, close_np, volume_np, timeperiod=14)
cmf_20 = chaikin_money_flow(high_np, low_np, close_np, volume_np, timeperiod=20)
# =========================================================================
# MOMENTUM
# =========================================================================
ema_12 = ta.EMA(close_np, timeperiod=12)
ema_20 = ta.EMA(close_np, timeperiod=20)
ema_26 = ta.EMA(close_np, timeperiod=26)
willr_14 = ta.WILLR(high_np, low_np, close_np, timeperiod=14)
uo = ta.ULTOSC(high_np, low_np, close_np)
obv = ta.OBV(close_np, volume_np)
roc_9 = ta.ROC(close_np, timeperiod=9)
cci_20 = ta.CCI(high_np, low_np, close_np, timeperiod=20)
# =========================================================================
# CHANGE %
# =========================================================================
rsi_3_change = fast_pct_change(rsi_3)
rsi_14_change = fast_pct_change(rsi_14)
# stochrsi_change = self.fast_pct_change(stochrsi_k)
uo_change = fast_pct_change(uo)
obv_change = fast_pct_change(obv)
cci_change = fast_pct_change(cci_20)
# =========================================================================
# CANDLE %
# =========================================================================
open_safe = np.where(open_np == 0, np.nan, open_np)
change_pct = ((close_np - open_np) / open_safe) * 100.0
# =========================================================================
# WICK %
# =========================================================================
# max_oc = np.maximum(open_np, close_np)
# min_oc = np.minimum(open_np, close_np)
# max_oc_calc = np.where(max_oc == 0, np.nan, max_oc)
# min_oc_calc = np.where(min_oc == 0, np.nan, min_oc)
# top_wick_pct = ((high_np - max_oc) / max_oc_calc) * 100.0
# bot_wick_pct = np.abs(((low_np - min_oc) / min_oc_calc) * 100.0)
new_cols = pd.DataFrame(
{
"RSI_3": rsi_3,
"RSI_14": rsi_14,
"RSI_3_change_pct": rsi_3_change,
"RSI_14_change_pct": rsi_14_change,
"EMA_12": ema_12,
"EMA_20": ema_20,
"EMA_26": ema_26,
"MFI_14": mfi_14,
"CMF_20": cmf_20,
"WILLR_14": willr_14,
"AROONU_14": aroon_up,
"AROOND_14": aroon_down,
"STOCHk_14_3_3": stoch_k,
"STOCHRSIk_14_14_3_3": stochrsi_k,
# "STOCHRSIk_14_14_3_3_change_pct": stochrsi_change,
"UO_7_14_28": uo,
"UO_7_14_28_change_pct": uo_change,
# "OBV": obv,
"OBV_change_pct": obv_change,
"ROC_9": roc_9,
"CCI_20": cci_20,
"CCI_20_change_pct": cci_change,
"change_pct": change_pct,
# "top_wick_pct": top_wick_pct,
# "bot_wick_pct": bot_wick_pct,
},
index=informative_15m.index,
)
informative_15m = pd.concat([informative_15m, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"RSI_3",
"RSI_14",
"RSI_3_change_pct",
"RSI_14_change_pct",
"EMA_12",
"EMA_20",
"EMA_26",
"MFI_14",
"CMF_20",
"WILLR_14",
"AROONU_14",
"AROOND_14",
"STOCHk_14_3_3",
"STOCHRSIk_14_14_3_3",
# "STOCHRSIk_14_14_3_3_change_pct",
"UO_7_14_28",
"UO_7_14_28_change_pct",
# "OBV",
"OBV_change_pct",
"ROC_9",
"CCI_20",
"CCI_20_change_pct",
"change_pct",
# "top_wick_pct",
# "bot_wick_pct",
]
validate_indicators(df=informative_15m, columns=debug_cols, pair=metadata_pair, timeframe=info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] informative_15m_indicators took: %.4f seconds.", metadata_pair, tok - tik)
return informative_15m
# Coin Pair Base Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def base_tf_5m_indicators(self, metadata: dict, df: DataFrame) -> DataFrame:
tik = time.perf_counter()
metadata_pair = metadata["pair"]
fast_pct_change = self.fast_pct_change
stochrsi_k_func = self.stochrsi_k
chaikin_money_flow = self.chaikin_money_flow
validate_indicators = self.validate_indicators
# =========================================================================
# BASE DATA
# =========================================================================
close_np = df["close"].to_numpy(copy=False)
high_np = df["high"].to_numpy(copy=False)
low_np = df["low"].to_numpy(copy=False)
open_np = df["open"].to_numpy(copy=False)
volume_np = df["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_3 = ta.RSI(close_np, timeperiod=3)
rsi_4 = ta.RSI(close_np, timeperiod=4)
rsi_14 = ta.RSI(close_np, timeperiod=14)
rsi_20 = ta.RSI(close_np, timeperiod=20)
bb_upper_20, bb_middle_20, bb_lower_20 = ta.BBANDS(close_np, timeperiod=20, nbdevup=2.0, nbdevdn=2.0, matype=0)
bb_middle_20_safe = np.where(bb_middle_20 == 0, np.nan, bb_middle_20)
bb_upper_40, bb_middle_40, bb_lower_40 = ta.BBANDS(close_np, timeperiod=40, nbdevup=2.0, nbdevdn=2.0, matype=0)
# bb_middle_40_safe = np.where(bb_middle_40 == 0, np.nan, bb_middle_40)
# bb_range_40 = np.where((bb_upper_40 - bb_lower_40) == 0, np.nan, (bb_upper_40 - bb_lower_40))
aroon_down, aroon_up = ta.AROON(high_np, low_np, timeperiod=14)
# =========================================================================
# STOCH RSI
# =========================================================================
stochrsi_k = stochrsi_k_func(rsi_14)
# =========================================================================
# KST
# =========================================================================
kst1 = ta.SMA(ta.ROC(close_np, 10), 10)
kst2 = ta.SMA(ta.ROC(close_np, 15), 10)
kst3 = ta.SMA(ta.ROC(close_np, 20), 10)
kst4 = ta.SMA(ta.ROC(close_np, 30), 15)
kst_main = kst1 + (2.0 * kst2) + (3.0 * kst3) + (4.0 * kst4)
kst_signal = ta.SMA(kst_main, 9)
# =========================================================================
# MONEY FLOW
# =========================================================================
mfi_14 = ta.MFI(high_np, low_np, close_np, volume_np, timeperiod=14)
cmf_20 = chaikin_money_flow(high_np, low_np, close_np, volume_np, timeperiod=20)
# =========================================================================
# MOMENTUM
# =========================================================================
# ema_3 = ta.EMA(close_np, timeperiod=3)
ema_9 = ta.EMA(close_np, timeperiod=9)
ema_12 = ta.EMA(close_np, timeperiod=12)
ema_16 = ta.EMA(close_np, timeperiod=16)
ema_20 = ta.EMA(close_np, timeperiod=20)
ema_26 = ta.EMA(close_np, timeperiod=26)
ema_50 = ta.EMA(close_np, timeperiod=50)
ema_100 = ta.EMA(close_np, timeperiod=100)
ema_200 = ta.EMA(close_np, timeperiod=200)
sma_9 = ta.SMA(close_np, timeperiod=9)
sma_16 = ta.SMA(close_np, timeperiod=16)
sma_21 = ta.SMA(close_np, timeperiod=21)
sma_30 = ta.SMA(close_np, timeperiod=30)
sma_200 = ta.SMA(close_np, timeperiod=200)
willr_14 = ta.WILLR(high_np, low_np, close_np, timeperiod=14)
willr_480 = ta.WILLR(high_np, low_np, close_np, timeperiod=480)
# obv = ta.OBV(close_np, volume_np)
roc_2 = ta.ROC(close_np, timeperiod=2)
roc_9 = ta.ROC(close_np, timeperiod=9)
# =========================================================================
# CHANGE %
# =========================================================================
# rsi_3_change = self.fast_pct_change(rsi_3)
rsi_14_change = fast_pct_change(rsi_14)
# obv_change = self.fast_pct_change(obv)
# =========================================================================
# CANDLE %
# =========================================================================
open_safe = np.where(open_np == 0, np.nan, open_np)
change_pct = ((close_np - open_np) / open_safe) * 100.0
# =========================================================================
# Close delta
# =========================================================================
# close_delta = (close - close.shift()).abs().to_numpy()
close_delta = np.empty_like(close_np)
close_delta[0] = np.nan
close_delta[1:] = np.abs(close_np[1:] - close_np[:-1])
# =========================================================================
# Rolling values
# =========================================================================
close_max_6 = ta.MAX(close_np, timeperiod=6)
close_max_12 = ta.MAX(close_np, timeperiod=12)
close_max_48 = ta.MAX(close_np, timeperiod=48)
close_min_6 = ta.MIN(close_np, timeperiod=6)
close_min_12 = ta.MIN(close_np, timeperiod=12)
close_min_48 = ta.MIN(close_np, timeperiod=48)
num_empty_288 = ta.SUM((volume_np <= 0).astype(np.float64), timeperiod=288)
new_cols = pd.DataFrame(
{
"RSI_3": rsi_3,
"RSI_4": rsi_4,
"RSI_14": rsi_14,
"RSI_20": rsi_20,
# "RSI_3_change_pct": rsi_3_change,
"RSI_14_change_pct": rsi_14_change,
# "EMA_3": ema_3,
"EMA_9": ema_9,
"EMA_12": ema_12,
"EMA_16": ema_16,
"EMA_20": ema_20,
"EMA_26": ema_26,
"EMA_50": ema_50,
"EMA_100": ema_100,
"EMA_200": ema_200,
"SMA_9": sma_9,
"SMA_16": sma_16,
"SMA_21": sma_21,
"SMA_30": sma_30,
"SMA_200": sma_200,
"BBL_20_2.0": bb_lower_20,
"BBU_20_2.0": bb_upper_20,
"BBB_20_2.0": ((bb_upper_20 - bb_lower_20) / bb_middle_20_safe) * 100.0,
"BBL_40_2.0": bb_lower_40,
# "BBM_40_2.0": bb_middle_40,
# "BBU_40_2.0": bb_upper_40,
# "BBB_40_2.0": ((bb_upper_40 - bb_lower_40) / bb_middle_40_safe) * 100.0,
# "BBP_40_2.0": (close_np - bb_lower_40) / bb_range_40,
"BBD_40_2.0": np.abs(bb_middle_40 - bb_lower_40),
"BBT_40_2.0": np.abs(close_np - bb_lower_40),
"MFI_14": mfi_14,
"CMF_20": cmf_20,
"WILLR_14": willr_14,
"WILLR_480": willr_480,
"AROONU_14": aroon_up,
"AROOND_14": aroon_down,
"STOCHRSIk_14_14_3_3": stochrsi_k,
"KST_10_15_20_30_10_10_10_15": kst_main,
"KSTs_9": kst_signal,
# "OBV": obv,
# "OBV_change_pct": obv_change,
"ROC_2": roc_2,
"ROC_9": roc_9,
"change_pct": change_pct,
"close_delta": close_delta,
"close_max_6": close_max_6,
"close_max_12": close_max_12,
"close_max_48": close_max_48,
"close_min_6": close_min_6,
"close_min_12": close_min_12,
"close_min_48": close_min_48,
"num_empty_288": num_empty_288,
},
index=df.index,
)
df = pd.concat([df, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"RSI_3",
"RSI_4",
"RSI_14",
"RSI_20",
# "RSI_3_change_pct",
"RSI_14_change_pct",
# "EMA_3",
"EMA_9",
"EMA_12",
"EMA_16",
"EMA_20",
"EMA_26",
"EMA_50",
"EMA_100",
"EMA_200",
"SMA_9",
"SMA_16",
"SMA_21",
"SMA_30",
"SMA_200",
"BBL_20_2.0",
"BBU_20_2.0",
"BBB_20_2.0",
"BBL_40_2.0",
# "BBM_40_2.0",
# "BBU_40_2.0",
# "BBB_40_2.0",
# "BBP_40_2.0",
"BBD_40_2.0",
"BBT_40_2.0",
"MFI_14",
"CMF_20",
"WILLR_14",
"WILLR_480",
"AROONU_14",
"AROOND_14",
"STOCHRSIk_14_14_3_3",
"KST_10_15_20_30_10_10_10_15",
"KSTs_9",
# "OBV",
# "OBV_change_pct",
"ROC_2",
"ROC_9",
"change_pct",
"close_delta",
"close_max_6",
"close_max_12",
"close_max_48",
"close_min_6",
"close_min_12",
"close_min_48",
"num_empty_288",
]
validate_indicators(df=df, columns=debug_cols, pair=metadata_pair, timeframe=self.timeframe)
# =========================================================================
# GLOBAL PROTECTIONS
# =========================================================================
if not self.config["runmode"].value in ("live", "dry_run"):
df["bt_agefilter_ok"] = False
df.loc[df.index > (12 * 24 * self.bt_min_age_days), "bt_agefilter_ok"] = True
else:
df["live_data_ok"] = ta.MIN(volume_np, timeperiod=72) > 0
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] base_tf_5m_indicators took: %.4f seconds.", metadata_pair, tok - tik)
return df
# BTC Informative 1d Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def btc_informative_1d_indicators(self, btc_pair: str, btc_info_timeframe: str) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# =========================================================================
# GET DATAFRAME
# =========================================================================
btc_informative_1d = dp.get_pair_dataframe(pair=btc_pair, timeframe=btc_info_timeframe)
# Empty dataframe protection
if btc_informative_1d.empty:
return btc_informative_1d
# =========================================================================
# BASE DATA
# =========================================================================
close_np = btc_informative_1d["close"].to_numpy(copy=False)
# high_np = btc_informative_1d["high"].to_numpy(copy=False)
# low_np = btc_informative_1d["low"].to_numpy(copy=False)
# open_np = btc_informative_1d["open"].to_numpy(copy=False)
# volume_np = btc_informative_1d["volume"].to_numpy(copy=False)
# =========================================================================
# MOMENTUM
# =========================================================================
ema_200 = ta.EMA(close_np, timeperiod=200)
new_cols = pd.DataFrame(
{
"BTC_EMA_200": ema_200,
},
index=btc_informative_1d.index,
)
btc_informative_1d = pd.concat([btc_informative_1d, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"BTC_RSI_14",
"BTC_EMA_200",
"BTC_ROC_3",
]
validate_indicators(df=btc_informative_1d, columns=debug_cols, pair=btc_pair, timeframe=btc_info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] btc_informative_1d_indicators took: %.4f seconds.", btc_pair, tok - tik)
return btc_informative_1d
# BTC Informative 4h Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def btc_informative_4h_indicators(self, btc_pair: str, btc_info_timeframe: str) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# =========================================================================
# GET DATAFRAME
# =========================================================================
btc_informative_4h = dp.get_pair_dataframe(pair=btc_pair, timeframe=btc_info_timeframe)
# Empty dataframe protection
if btc_informative_4h.empty:
return btc_informative_4h
# =========================================================================
# BASE DATA
# =========================================================================
close_np = btc_informative_4h["close"].to_numpy(copy=False)
# high_np = btc_informative_4h["high"].to_numpy(copy=False)
# low_np = btc_informative_4h["low"].to_numpy(copy=False)
# open_np = btc_informative_4h["open"].to_numpy(copy=False)
# volume_np = btc_informative_4h["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_14 = ta.RSI(close_np, timeperiod=14)
new_cols = pd.DataFrame(
{
"BTC_RSI_14": rsi_14,
},
index=btc_informative_4h.index,
)
btc_informative_4h = pd.concat([btc_informative_4h, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"BTC_RSI_14",
]
validate_indicators(df=btc_informative_4h, columns=debug_cols, pair=btc_pair, timeframe=btc_info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] btc_informative_4h_indicators took: %.4f seconds.", btc_pair, tok - tik)
return btc_informative_4h
# BTC Informative 1h Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def btc_informative_1h_indicators(self, btc_pair: str, btc_info_timeframe: str) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# =========================================================================
# GET DATAFRAME
# =========================================================================
btc_informative_1h = dp.get_pair_dataframe(pair=btc_pair, timeframe=btc_info_timeframe)
# Empty dataframe protection
if btc_informative_1h.empty:
return btc_informative_1h
# =========================================================================
# BASE DATA
# =========================================================================
close_np = btc_informative_1h["close"].to_numpy(copy=False)
# high_np = btc_informative_1h["high"].to_numpy(copy=False)
# low_np = btc_informative_1h["low"].to_numpy(copy=False)
# open_np = btc_informative_1h["open"].to_numpy(copy=False)
# volume_np = btc_informative_1h["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_14 = ta.RSI(close_np, timeperiod=14)
# =========================================================================
# MOMENTUM
# =========================================================================
ema_20 = ta.EMA(close_np, timeperiod=20)
roc_3 = ta.ROC(close_np, timeperiod=3)
new_cols = pd.DataFrame(
{
"BTC_RSI_14": rsi_14,
"BTC_EMA_20": ema_20,
"BTC_ROC_3": roc_3,
},
index=btc_informative_1h.index,
)
btc_informative_1h = pd.concat([btc_informative_1h, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"BTC_RSI_14",
"BTC_EMA_20",
"BTC_ROC_3",
]
validate_indicators(df=btc_informative_1h, columns=debug_cols, pair=btc_pair, timeframe=btc_info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] btc_informative_1h_indicators took: %.4f seconds.", btc_pair, tok - tik)
return btc_informative_1h
# BTC Informative 15m Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def btc_informative_15m_indicators(self, btc_pair: str, btc_info_timeframe: str) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# =========================================================================
# GET DATAFRAME
# =========================================================================
btc_informative_15m = dp.get_pair_dataframe(pair=btc_pair, timeframe=btc_info_timeframe)
# Empty dataframe protection
if btc_informative_15m.empty:
return btc_informative_15m
# =========================================================================
# BASE DATA
# =========================================================================
close_np = btc_informative_15m["close"].to_numpy(copy=False)
# high_np = btc_informative_15m["high"].to_numpy(copy=False)
# low_np = btc_informative_15m["low"].to_numpy(copy=False)
# open_np = btc_informative_15m["open"].to_numpy(copy=False)
# volume_np = btc_informative_15m["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_14 = ta.RSI(close_np, timeperiod=14)
# =========================================================================
# MOMENTUM
# =========================================================================
ema_20 = ta.EMA(close_np, timeperiod=20)
roc_3 = ta.ROC(close_np, timeperiod=3)
new_cols = pd.DataFrame(
{
"BTC_RSI_14": rsi_14,
"BTC_EMA_20": ema_20,
"BTC_ROC_3": roc_3,
},
index=btc_informative_15m.index,
)
btc_informative_15m = pd.concat([btc_informative_15m, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"BTC_RSI_14",
"BTC_EMA_20",
"BTC_ROC_3",
]
validate_indicators(df=btc_informative_15m, columns=debug_cols, pair=btc_pair, timeframe=btc_info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] btc_informative_15m_indicators took: %.4f seconds.", btc_pair, tok - tik)
return btc_informative_15m
# BTC Informative 5m Timeframe Indicators
# ---------------------------------------------------------------------------------------------
def btc_informative_5m_indicators(self, btc_pair: str, btc_info_timeframe: str) -> DataFrame:
tik = time.perf_counter()
dp = self.dp
validate_indicators = self.validate_indicators
assert dp, "DataProvider is required for multiple timeframes."
# =========================================================================
# GET DATAFRAME
# =========================================================================
btc_informative_5m = dp.get_pair_dataframe(pair=btc_pair, timeframe=btc_info_timeframe)
# Empty dataframe protection
if btc_informative_5m.empty:
return btc_informative_5m
# =========================================================================
# BASE DATA
# =========================================================================
close_np = btc_informative_5m["close"].to_numpy(copy=False)
# high_np = btc_informative_5m["high"].to_numpy(copy=False)
# low_np = btc_informative_5m["low"].to_numpy(copy=False)
# open_np = btc_informative_5m["open"].to_numpy(copy=False)
# volume_np = btc_informative_5m["volume"].to_numpy(copy=False)
# =========================================================================
# CORE INDICATORS
# =========================================================================
rsi_14 = ta.RSI(close_np, timeperiod=14)
# =========================================================================
# MOMENTUM
# =========================================================================
ema_20 = ta.EMA(close_np, timeperiod=20)
roc_3 = ta.ROC(close_np, timeperiod=3)
new_cols = pd.DataFrame(
{
"BTC_RSI_14": rsi_14,
"BTC_EMA_20": ema_20,
"BTC_ROC_3": roc_3,
},
index=btc_informative_5m.index,
)
btc_informative_5m = pd.concat([btc_informative_5m, new_cols], axis=1, copy=False)
# Enable ONLY during debugging
debug = False
if debug:
debug_cols = [
"BTC_RSI_14",
"BTC_EMA_20",
"BTC_ROC_3",
]
validate_indicators(df=btc_informative_5m, columns=debug_cols, pair=btc_pair, timeframe=btc_info_timeframe)
# =========================================================================
# LOGGING
# =========================================================================
tok = time.perf_counter()
log.debug("[%s] btc_informative_5m_indicators took: %.4f seconds.", btc_pair, tok - tik)
return btc_informative_5m
# Coin Pair Indicator Switch Case
# ---------------------------------------------------------------------------------------------
def info_switcher(self, metadata: dict, info_timeframe) -> DataFrame:
if info_timeframe == "1d":
return self.informative_1d_indicators(metadata, info_timeframe)
elif info_timeframe == "4h":
return self.informative_4h_indicators(metadata, info_timeframe)
elif info_timeframe == "1h":
return self.informative_1h_indicators(metadata, info_timeframe)
elif info_timeframe == "15m":
return self.informative_15m_indicators(metadata, info_timeframe)
else:
raise RuntimeError(f"{info_timeframe} not supported as informative timeframe for BTC pair.")
# BTC Indicator Switch Case
# ---------------------------------------------------------------------------------------------
def btc_info_switcher(self, btc_pair: str, btc_info_timeframe) -> DataFrame:
if btc_info_timeframe == "1d":
return self.btc_informative_1d_indicators(btc_pair, btc_info_timeframe)
elif btc_info_timeframe == "4h":
return self.btc_informative_4h_indicators(btc_pair, btc_info_timeframe)
elif btc_info_timeframe == "1h":
return self.btc_informative_1h_indicators(btc_pair, btc_info_timeframe)
# elif btc_info_timeframe == "15m":
# return self.btc_informative_15m_indicators(btc_pair, btc_info_timeframe)
# elif btc_info_timeframe == "5m":
# return self.btc_informative_5m_indicators(btc_pair, btc_info_timeframe)
else:
raise RuntimeError(f"{btc_info_timeframe} not supported as informative timeframe for BTC pair.")
# Populate Indicators
# ---------------------------------------------------------------------------------------------
def populate_indicators(self, df: DataFrame, metadata: dict) -> DataFrame:
tik = time.perf_counter()
prepare_informative_merge = self.prepare_informative_merge
base_timeframe = self.timeframe
metadata_pair = metadata["pair"]
# =========================================================================
# CONFIG
# =========================================================================
debug = False
# =========================================================================
# BTC INFORMATIVE PAIR
# =========================================================================
btc_info_pair = self.btc_informative_pair()
# =========================================================================
# BTC INFORMATIVE LOOP
# =========================================================================
for btc_tf in self.btc_info_timeframes:
btc_informative = self.btc_info_switcher(btc_info_pair, btc_tf)
# ---------------------------------------------------------------------
# EMPTY CHECK
# ---------------------------------------------------------------------
if btc_informative.empty:
log.warning(f"[{metadata_pair}] BTC informative {btc_tf} EMPTY!")
continue
# ---------------------------------------------------------------------
# DEBUG
# ---------------------------------------------------------------------
if debug:
if not btc_informative.index.is_monotonic_increasing:
log.warning(f"[{metadata_pair}] BTC {btc_tf} index NOT monotonic!")
if btc_informative.index.has_duplicates:
log.warning(f"[{metadata_pair}] BTC {btc_tf} index has DUPLICATES!")
# ---------------------------------------------------------------------
# REMOVE UNUSED OHLCV BEFORE MERGE
# ---------------------------------------------------------------------
btc_informative = prepare_informative_merge(btc_informative)
# ---------------------------------------------------------------------
# MERGE
# ---------------------------------------------------------------------
df = merge_informative_pair(df, btc_informative, base_timeframe, btc_tf, ffill=False)
# rsi_col = f"BTC_RSI_14_{btc_tf}"
# if rsi_col in df.columns:
# log.warning("MERGE CHECK | %s=%s", rsi_col, df[rsi_col].iloc[-1])
# ---------------------------------------------------------------------
# CLEANUP
# ---------------------------------------------------------------------
merge_date_col = f"date_{btc_tf}"
if merge_date_col in df.columns:
df.drop(columns=merge_date_col, inplace=True)
# =========================================================================
# INFORMATIVE TF LOOP
# =========================================================================
for info_tf in self.info_timeframes:
info_indicators = self.info_switcher(metadata, info_tf)
# ---------------------------------------------------------------------
# EMPTY CHECK
# ---------------------------------------------------------------------
if info_indicators.empty:
if debug:
log.warning(f"[{metadata_pair}] {info_tf} informative EMPTY!")
continue
# ---------------------------------------------------------------------
# DEBUG
# ---------------------------------------------------------------------
if debug:
if not info_indicators.index.is_monotonic_increasing:
log.warning(f"[{metadata_pair}] {info_tf} index NOT monotonic!")
if info_indicators.index.has_duplicates:
log.warning(f"[{metadata_pair}] {info_tf} index has DUPLICATES!")
nan_cols = info_indicators.columns[info_indicators.isna().all()].tolist()
if nan_cols:
log.warning(f"[{metadata_pair}] {info_tf} FULL NaN cols: {nan_cols}")
# ---------------------------------------------------------------------
# KEEP ONLY REQUIRED OHLCV
# ---------------------------------------------------------------------
if info_tf == "15m":
keep_ohlcv = {"open", "close"}
else:
keep_ohlcv = set()
info_indicators = prepare_informative_merge(info_indicators, keep_ohlcv)
# ---------------------------------------------------------------------
# MERGE
# ---------------------------------------------------------------------
df = merge_informative_pair(df, info_indicators, base_timeframe, info_tf, ffill=False)
# ---------------------------------------------------------------------
# CLEANUP
# ---------------------------------------------------------------------
merge_date_col = f"date_{info_tf}"
if merge_date_col in df.columns:
df.drop(columns=merge_date_col, inplace=True)
# =========================================================================
# FINAL FORWARD FILL (ONCE)
# =========================================================================
df.ffill(inplace=True)
# log.warning("FINAL BTC_RSI_14_4h=%s", df["BTC_RSI_14_4h"].iloc[-1])
# =========================================================================
# FINAL DEBUG VALIDATION
# =========================================================================
if debug:
if not df.index.is_monotonic_increasing:
log.warning(f"[{metadata_pair}] FINAL DF index NOT monotonic!")
if df.index.has_duplicates:
log.warning(f"[{metadata_pair}] FINAL DF index has DUPLICATES!")
# ---------------------------------------------------------------------
# FULL NaN COLUMNS
# ---------------------------------------------------------------------
full_nan_cols = df.columns[df.isna().all()].tolist()
if full_nan_cols:
log.warning(f"[{metadata_pair}] FINAL DF FULL NaN cols: {full_nan_cols}")
# ---------------------------------------------------------------------
# RECENT NaN CHECK
# ---------------------------------------------------------------------
recent_df = df.tail(50)
recent_nan_cols = [col for col in recent_df.columns if recent_df[col].isna().any()]
if recent_nan_cols:
log.warning(f"[{metadata_pair}] FINAL DF recent NaNs: {recent_nan_cols}")
# =========================================================================
# BASE TF INDICATORS LAST
# =========================================================================
# Base TF indicators may depend on informative columns.
# Therefore this MUST happen AFTER informative merges.
df = self.base_tf_5m_indicators(metadata, df)
# df["zlma_50_1h"] = df["zlma_50_1h"].astype(np.float64).replace(to_replace=[np.nan, None], value=(0.0))
# df["CTI_20_1d"] = df["CTI_20_1d"].astype(np.float64).replace(to_replace=[np.nan, None], value=(0.0))
# df["WILLR_480_1h"] = df["WILLR_480_1h"].astype(np.float64).replace(to_replace=[np.nan, None], value=(-50.0))
# df["WILLR_480_4h"] = df["WILLR_480_4h"].astype(np.float64).replace(to_replace=[np.nan, None], value=(-50.0))
# df["RSI_14_1d"] = df["RSI_14_1d"].astype(np.float64).replace(to_replace=[np.nan, None], value=(50.0))
rsi_14_1h = df["RSI_14_1h"].fillna(50.0)
df["RSI_14_1h"] = rsi_14_1h
tok_before_protections = time.perf_counter()
protection_rsi_3 = df["RSI_3"].to_numpy(copy=False)
protection_rsi_3_15m = df["RSI_3_15m"].to_numpy(copy=False)
protection_rsi_3_1h = df["RSI_3_1h"].to_numpy(copy=False)
protection_rsi_3_4h = df["RSI_3_4h"].to_numpy(copy=False)
protection_rsi_3_1d = df["RSI_3_1d"].to_numpy(copy=False)
protection_rsi_14_1h = rsi_14_1h.to_numpy(copy=False)
protection_rsi_14_4h = df["RSI_14_4h"].to_numpy(copy=False)
protection_rsi_14_1d = df["RSI_14_1d"].to_numpy(copy=False)
protection_cci_20_1h = df["CCI_20_1h"].to_numpy(copy=False)
protection_cci_20_4h = df["CCI_20_4h"].to_numpy(copy=False)
protection_rsi_14_15m = df["RSI_14_15m"].to_numpy(copy=False)
protection_stochrsik_14_14_3_3_15m = df["STOCHRSIk_14_14_3_3_15m"].to_numpy(copy=False)
protection_stochrsik_14_14_3_3_1d = df["STOCHRSIk_14_14_3_3_1d"].to_numpy(copy=False)
protection_aroonu_14_15m = df["AROONU_14_15m"].to_numpy(copy=False)
protection_cmf_20_15m = df["CMF_20_15m"].to_numpy(copy=False)
protection_aroonu_14_4h = df["AROONU_14_4h"].to_numpy(copy=False)
protection_roc_9_1d = df["ROC_9_1d"].to_numpy(copy=False)
protection_aroonu_14_1h = df["AROONU_14_1h"].to_numpy(copy=False)
protection_stochrsik_14_14_3_3_1h = df["STOCHRSIk_14_14_3_3_1h"].to_numpy(copy=False)
protection_stochrsik_14_14_3_3_4h = df["STOCHRSIk_14_14_3_3_4h"].to_numpy(copy=False)
protection_roc_9_4h = df["ROC_9_4h"].to_numpy(copy=False)
protection_cmf_20_1d = df["CMF_20_1d"].to_numpy(copy=False)
protection_roc_9_15m = df["ROC_9_15m"].to_numpy(copy=False)
protection_roc_9_1h = df["ROC_9_1h"].to_numpy(copy=False)
protection_cmf_20_1h = df["CMF_20_1h"].to_numpy(copy=False)
protection_cmf_20_4h = df["CMF_20_4h"].to_numpy(copy=False)
protection_aroonu_14_1d = df["AROONU_14_1d"].to_numpy(copy=False)
protection_mfi_14_1d = df["MFI_14_1d"].to_numpy(copy=False)
protection_roc_2_1d = df["ROC_2_1d"].to_numpy(copy=False)
protection_mfi_14_1h = df["MFI_14_1h"].to_numpy(copy=False)
protection_mfi_14_4h = df["MFI_14_4h"].to_numpy(copy=False)
protection_stochk_14_3_3_1h = df["STOCHk_14_3_3_1h"].to_numpy(copy=False)
protection_stochk_14_3_3_4h = df["STOCHk_14_3_3_4h"].to_numpy(copy=False)
protection_cci_20_change_pct_4h = df["CCI_20_change_pct_4h"].to_numpy(copy=False)
protection_change_pct_4h = df["change_pct_4h"]
protection_top_wick_pct_4h = df["top_wick_pct_4h"].to_numpy(copy=False)
protection_change_pct_1d = df["change_pct_1d"]
protection_top_wick_pct_1d = df["top_wick_pct_1d"]
protection_high_max_6_1d = df["high_max_6_1d"].to_numpy(copy=False)
protection_low_min_6_1d = df["low_min_6_1d"].to_numpy(copy=False)
protection_close = df["close"].to_numpy(copy=False)
protection_high_max_6_4h = df["high_max_6_4h"].to_numpy(copy=False)
protection_high_max_12_1d = df["high_max_12_1d"].to_numpy(copy=False)
protection_low_min_12_1d = df["low_min_12_1d"].to_numpy(copy=False)
protection_high_max_24_4h = df["high_max_24_4h"].to_numpy(copy=False)
protection_high_max_30_1d = df["high_max_30_1d"].to_numpy(copy=False)
protection_low_min_30_1d = df["low_min_30_1d"].to_numpy(copy=False)
protection_close_max_48 = df["close_max_48"].to_numpy(copy=False)
protection_high_max_12_1h = df["high_max_12_1h"].to_numpy(copy=False)
protection_high_max_20_1d = df["high_max_20_1d"].to_numpy(copy=False)
protection_cci_20_15m = df["CCI_20_15m"].to_numpy(copy=False)
protection_aroond_14_4h = df["AROOND_14_4h"].to_numpy(copy=False)
protection_aroond_14_1d = df["AROOND_14_1d"].to_numpy(copy=False)
protection_willr_14_4h = df["WILLR_14_4h"].to_numpy(copy=False)
protection_willr_14_15m = df["WILLR_14_15m"].to_numpy(copy=False)
protection_stochk_14_3_3_15m = df["STOCHk_14_3_3_15m"].to_numpy(copy=False)
protection_willr_14_1h = df["WILLR_14_1h"].to_numpy(copy=False)
protection_mfi_14_15m = df["MFI_14_15m"].to_numpy(copy=False)
protection_cci_20_change_pct_1h = df["CCI_20_change_pct_1h"].to_numpy(copy=False)
protection_willr_14_1d = df["WILLR_14_1d"].to_numpy(copy=False)
protection_aroond_14_1h = df["AROOND_14_1h"].to_numpy(copy=False)
protection_stochk_14_3_3_1d = df["STOCHk_14_3_3_1d"].to_numpy(copy=False)
protection_uo_7_14_28_15m = df["UO_7_14_28_15m"].to_numpy(copy=False)
protection_uo_7_14_28_change_pct_15m = df["UO_7_14_28_change_pct_15m"].to_numpy(copy=False)
protection_uo_7_14_28_1h = df["UO_7_14_28_1h"].to_numpy(copy=False)
protection_uo_7_14_28_4h = df["UO_7_14_28_4h"].to_numpy(copy=False)
protection_roc_2_4h = df["ROC_2_4h"].to_numpy(copy=False)
protection_aroond_14_15m = df["AROOND_14_15m"].to_numpy(copy=False)
# Reused protection comparison masks
aroonu_14_15m_lt_30 = protection_aroonu_14_15m < 30.0
aroonu_14_15m_lt_40 = protection_aroonu_14_15m < 40.0
aroonu_14_15m_lt_50 = protection_aroonu_14_15m < 50.0
aroonu_14_15m_lt_60 = protection_aroonu_14_15m < 60.0
aroonu_14_15m_lt_70 = protection_aroonu_14_15m < 70.0
aroonu_14_1h_lt_100 = protection_aroonu_14_1h < 100.0
aroonu_14_1h_lt_20 = protection_aroonu_14_1h < 20.0
aroonu_14_1h_lt_25 = protection_aroonu_14_1h < 25.0
aroonu_14_1h_lt_30 = protection_aroonu_14_1h < 30.0
aroonu_14_1h_lt_40 = protection_aroonu_14_1h < 40.0
aroonu_14_1h_lt_50 = protection_aroonu_14_1h < 50.0
aroonu_14_1h_lt_60 = protection_aroonu_14_1h < 60.0
aroonu_14_1h_lt_70 = protection_aroonu_14_1h < 70.0
aroonu_14_1h_lt_75 = protection_aroonu_14_1h < 75.0
aroonu_14_1h_lt_80 = protection_aroonu_14_1h < 80.0
aroonu_14_1h_lt_85 = protection_aroonu_14_1h < 85.0
aroonu_14_1h_lt_90 = protection_aroonu_14_1h < 90.0
aroonu_14_4h_lt_100 = protection_aroonu_14_4h < 100.0
aroonu_14_4h_lt_20 = protection_aroonu_14_4h < 20.0
aroonu_14_4h_lt_25 = protection_aroonu_14_4h < 25.0
aroonu_14_4h_lt_30 = protection_aroonu_14_4h < 30.0
aroonu_14_4h_lt_40 = protection_aroonu_14_4h < 40.0
aroonu_14_4h_lt_50 = protection_aroonu_14_4h < 50.0
aroonu_14_4h_lt_60 = protection_aroonu_14_4h < 60.0
aroonu_14_4h_lt_70 = protection_aroonu_14_4h < 70.0
aroonu_14_4h_lt_75 = protection_aroonu_14_4h < 75.0
aroonu_14_4h_lt_80 = protection_aroonu_14_4h < 80.0
aroonu_14_4h_lt_85 = protection_aroonu_14_4h < 85.0
aroonu_14_4h_lt_90 = protection_aroonu_14_4h < 90.0
cmf_20_15m_gt_neg_0 = protection_cmf_20_15m > -0.0
cmf_20_15m_gt_neg_010 = protection_cmf_20_15m > -0.10
cmf_20_15m_gt_neg_015 = protection_cmf_20_15m > -0.15
cmf_20_15m_gt_neg_02 = protection_cmf_20_15m > -0.2
cmf_20_15m_gt_neg_020 = protection_cmf_20_15m > -0.20
cmf_20_15m_gt_neg_025 = protection_cmf_20_15m > -0.25
cmf_20_15m_gt_neg_03 = protection_cmf_20_15m > -0.3
cmf_20_15m_gt_neg_030 = protection_cmf_20_15m > -0.30
cmf_20_15m_gt_neg_035 = protection_cmf_20_15m > -0.35
cmf_20_15m_gt_neg_040 = protection_cmf_20_15m > -0.40
cmf_20_15m_gt_neg_05 = protection_cmf_20_15m > -0.5
cmf_20_15m_gt_neg_050 = protection_cmf_20_15m > -0.50
cmf_20_1h_gt_neg_0 = protection_cmf_20_1h > -0.0
cmf_20_1h_gt_neg_010 = protection_cmf_20_1h > -0.10
cmf_20_1h_gt_neg_015 = protection_cmf_20_1h > -0.15
cmf_20_1h_gt_neg_02 = protection_cmf_20_1h > -0.2
cmf_20_1h_gt_neg_020 = protection_cmf_20_1h > -0.20
cmf_20_1h_gt_neg_025 = protection_cmf_20_1h > -0.25
cmf_20_1h_gt_neg_03 = protection_cmf_20_1h > -0.3
cmf_20_1h_gt_neg_030 = protection_cmf_20_1h > -0.30
cmf_20_1h_gt_neg_04 = protection_cmf_20_1h > -0.4
cmf_20_1h_gt_neg_040 = protection_cmf_20_1h > -0.40
cmf_20_1h_gt_neg_05 = protection_cmf_20_1h > -0.5
cmf_20_4h_gt_neg_0 = protection_cmf_20_4h > -0.0
cmf_20_4h_gt_neg_01 = protection_cmf_20_4h > -0.1
cmf_20_4h_gt_neg_010 = protection_cmf_20_4h > -0.10
cmf_20_4h_gt_neg_015 = protection_cmf_20_4h > -0.15
cmf_20_4h_gt_neg_02 = protection_cmf_20_4h > -0.2
cmf_20_4h_gt_neg_020 = protection_cmf_20_4h > -0.20
cmf_20_4h_gt_neg_025 = protection_cmf_20_4h > -0.25
cmf_20_4h_gt_neg_03 = protection_cmf_20_4h > -0.3
cmf_20_4h_gt_neg_030 = protection_cmf_20_4h > -0.30
cmf_20_4h_gt_neg_035 = protection_cmf_20_4h > -0.35
cmf_20_4h_gt_neg_04 = protection_cmf_20_4h > -0.4
cmf_20_4h_gt_neg_040 = protection_cmf_20_4h > -0.40
cmf_20_4h_gt_neg_05 = protection_cmf_20_4h > -0.5
roc_9_1d_lt_100 = protection_roc_9_1d < 100.0
roc_9_1d_lt_15 = protection_roc_9_1d < 15.0
roc_9_1d_lt_150 = protection_roc_9_1d < 150.0
roc_9_1d_lt_20 = protection_roc_9_1d < 20.0
roc_9_1d_lt_200 = protection_roc_9_1d < 200.0
roc_9_1d_lt_25 = protection_roc_9_1d < 25.0
roc_9_1d_lt_250 = protection_roc_9_1d < 250.0
roc_9_1d_lt_30 = protection_roc_9_1d < 30.0
roc_9_1d_lt_40 = protection_roc_9_1d < 40.0
roc_9_1d_lt_50 = protection_roc_9_1d < 50.0
roc_9_1d_lt_60 = protection_roc_9_1d < 60.0
roc_9_1d_lt_70 = protection_roc_9_1d < 70.0
roc_9_1d_lt_75 = protection_roc_9_1d < 75.0
roc_9_1d_lt_80 = protection_roc_9_1d < 80.0
roc_9_1h_gt_neg_10 = protection_roc_9_1h > -10.0
roc_9_1h_gt_neg_15 = protection_roc_9_1h > -15.0
roc_9_1h_gt_neg_20 = protection_roc_9_1h > -20.0
roc_9_1h_gt_neg_25 = protection_roc_9_1h > -25.0
roc_9_1h_gt_neg_30 = protection_roc_9_1h > -30.0
roc_9_1h_gt_neg_50 = protection_roc_9_1h > -50.0
roc_9_1h_gt_neg_60 = protection_roc_9_1h > -60.0
roc_9_1h_lt_10 = protection_roc_9_1h < 10.0
roc_9_1h_lt_15 = protection_roc_9_1h < 15.0
roc_9_1h_lt_20 = protection_roc_9_1h < 20.0
roc_9_1h_lt_30 = protection_roc_9_1h < 30.0
roc_9_1h_lt_40 = protection_roc_9_1h < 40.0
roc_9_1h_lt_50 = protection_roc_9_1h < 50.0
roc_9_1h_lt_70 = protection_roc_9_1h < 70.0
roc_9_1h_lt_80 = protection_roc_9_1h < 80.0
roc_9_4h_gt_neg_10 = protection_roc_9_4h > -10.0
roc_9_4h_gt_neg_15 = protection_roc_9_4h > -15.0
roc_9_4h_gt_neg_20 = protection_roc_9_4h > -20.0
roc_9_4h_gt_neg_25 = protection_roc_9_4h > -25.0
roc_9_4h_gt_neg_30 = protection_roc_9_4h > -30.0
roc_9_4h_gt_neg_35 = protection_roc_9_4h > -35.0
roc_9_4h_gt_neg_40 = protection_roc_9_4h > -40.0
roc_9_4h_gt_neg_50 = protection_roc_9_4h > -50.0
roc_9_4h_gt_neg_60 = protection_roc_9_4h > -60.0
roc_9_4h_gt_neg_70 = protection_roc_9_4h > -70.0
roc_9_4h_lt_10 = protection_roc_9_4h < 10.0
roc_9_4h_lt_100 = protection_roc_9_4h < 100.0
roc_9_4h_lt_120 = protection_roc_9_4h < 120.0
roc_9_4h_lt_130 = protection_roc_9_4h < 130.0
roc_9_4h_lt_15 = protection_roc_9_4h < 15.0
roc_9_4h_lt_20 = protection_roc_9_4h < 20.0
roc_9_4h_lt_25 = protection_roc_9_4h < 25.0
roc_9_4h_lt_250 = protection_roc_9_4h < 250.0
roc_9_4h_lt_30 = protection_roc_9_4h < 30.0
roc_9_4h_lt_300 = protection_roc_9_4h < 300.0
roc_9_4h_lt_35 = protection_roc_9_4h < 35.0
roc_9_4h_lt_40 = protection_roc_9_4h < 40.0
roc_9_4h_lt_50 = protection_roc_9_4h < 50.0
roc_9_4h_lt_60 = protection_roc_9_4h < 60.0
roc_9_4h_lt_70 = protection_roc_9_4h < 70.0
roc_9_4h_lt_75 = protection_roc_9_4h < 75.0
roc_9_4h_lt_80 = protection_roc_9_4h < 80.0
rsi_14_15m_gt_70 = protection_rsi_14_15m > 70.0
rsi_14_15m_gt_80 = protection_rsi_14_15m > 80.0
rsi_14_15m_gt_85 = protection_rsi_14_15m > 85.0
rsi_14_15m_gt_90 = protection_rsi_14_15m > 90.0
rsi_14_15m_gt_95 = protection_rsi_14_15m > 95.0
rsi_14_1h_gt_70 = protection_rsi_14_1h > 70.0
rsi_14_1h_gt_75 = protection_rsi_14_1h > 75.0
rsi_14_1h_gt_80 = protection_rsi_14_1h > 80.0
rsi_14_1h_gt_85 = protection_rsi_14_1h > 85.0
rsi_14_1h_gt_90 = protection_rsi_14_1h > 90.0
rsi_14_1h_gt_95 = protection_rsi_14_1h > 95.0
rsi_14_4h_gt_60 = protection_rsi_14_4h > 60.0
rsi_14_4h_gt_70 = protection_rsi_14_4h > 70.0
rsi_14_4h_gt_80 = protection_rsi_14_4h > 80.0
rsi_14_4h_gt_90 = protection_rsi_14_4h > 90.0
rsi_14_4h_gt_95 = protection_rsi_14_4h > 95.0
rsi_3_15m_lt_70 = protection_rsi_3_15m < 70.0
rsi_3_15m_lt_75 = protection_rsi_3_15m < 75.0
rsi_3_15m_lt_80 = protection_rsi_3_15m < 80.0
rsi_3_15m_lt_85 = protection_rsi_3_15m < 85.0
rsi_3_15m_lt_90 = protection_rsi_3_15m < 90.0
rsi_3_1d_gt_10 = protection_rsi_3_1d > 10.0
rsi_3_1d_gt_15 = protection_rsi_3_1d > 15.0
rsi_3_1d_gt_20 = protection_rsi_3_1d > 20.0
rsi_3_1d_gt_25 = protection_rsi_3_1d > 25.0
rsi_3_1d_gt_3 = protection_rsi_3_1d > 3.0
rsi_3_1d_gt_30 = protection_rsi_3_1d > 30.0
rsi_3_1d_gt_35 = protection_rsi_3_1d > 35.0
rsi_3_1d_gt_40 = protection_rsi_3_1d > 40.0
rsi_3_1d_gt_45 = protection_rsi_3_1d > 45.0
rsi_3_1d_gt_5 = protection_rsi_3_1d > 5.0
rsi_3_1d_gt_50 = protection_rsi_3_1d > 50.0
rsi_3_1d_gt_55 = protection_rsi_3_1d > 55.0
rsi_3_1d_gt_60 = protection_rsi_3_1d > 60.0
rsi_3_1d_gt_65 = protection_rsi_3_1d > 65.0
rsi_3_1h_gt_20 = protection_rsi_3_1h > 20.0
rsi_3_1h_gt_25 = protection_rsi_3_1h > 25.0
rsi_3_1h_gt_35 = protection_rsi_3_1h > 35.0
rsi_3_1h_gt_40 = protection_rsi_3_1h > 40.0
rsi_3_1h_gt_45 = protection_rsi_3_1h > 45.0
rsi_3_1h_gt_50 = protection_rsi_3_1h > 50.0
rsi_3_1h_gt_55 = protection_rsi_3_1h > 55.0
rsi_3_1h_lt_60 = protection_rsi_3_1h < 60.0
rsi_3_1h_lt_70 = protection_rsi_3_1h < 70.0
rsi_3_1h_lt_75 = protection_rsi_3_1h < 75.0
rsi_3_1h_lt_80 = protection_rsi_3_1h < 80.0
rsi_3_1h_lt_85 = protection_rsi_3_1h < 85.0
rsi_3_1h_lt_90 = protection_rsi_3_1h < 90.0
rsi_3_4h_gt_20 = protection_rsi_3_4h > 20.0
rsi_3_4h_gt_25 = protection_rsi_3_4h > 25.0
rsi_3_4h_gt_30 = protection_rsi_3_4h > 30.0
rsi_3_4h_gt_35 = protection_rsi_3_4h > 35.0
rsi_3_4h_gt_40 = protection_rsi_3_4h > 40.0
rsi_3_4h_gt_45 = protection_rsi_3_4h > 45.0
rsi_3_4h_gt_50 = protection_rsi_3_4h > 50.0
rsi_3_4h_gt_55 = protection_rsi_3_4h > 55.0
rsi_3_4h_gt_65 = protection_rsi_3_4h > 65.0
stochrsi_k_15m_lt_10 = protection_stochrsik_14_14_3_3_15m < 10.0
stochrsi_k_15m_lt_20 = protection_stochrsik_14_14_3_3_15m < 20.0
stochrsi_k_15m_lt_30 = protection_stochrsik_14_14_3_3_15m < 30.0
stochrsi_k_15m_lt_40 = protection_stochrsik_14_14_3_3_15m < 40.0
stochrsi_k_15m_lt_50 = protection_stochrsik_14_14_3_3_15m < 50.0
stochrsi_k_15m_lt_60 = protection_stochrsik_14_14_3_3_15m < 60.0
stochrsi_k_15m_lt_70 = protection_stochrsik_14_14_3_3_15m < 70.0
stochrsi_k_15m_lt_80 = protection_stochrsik_14_14_3_3_15m < 80.0
stochrsi_k_15m_lt_90 = protection_stochrsik_14_14_3_3_15m < 90.0
stochrsi_k_1h_lt_15 = protection_stochrsik_14_14_3_3_1h < 15.0
stochrsi_k_1h_lt_20 = protection_stochrsik_14_14_3_3_1h < 20.0
stochrsi_k_1h_lt_30 = protection_stochrsik_14_14_3_3_1h < 30.0
stochrsi_k_1h_lt_40 = protection_stochrsik_14_14_3_3_1h < 40.0
stochrsi_k_1h_lt_50 = protection_stochrsik_14_14_3_3_1h < 50.0
stochrsi_k_1h_lt_60 = protection_stochrsik_14_14_3_3_1h < 60.0
stochrsi_k_1h_lt_70 = protection_stochrsik_14_14_3_3_1h < 70.0
stochrsi_k_1h_lt_80 = protection_stochrsik_14_14_3_3_1h < 80.0
stochrsi_k_1h_lt_85 = protection_stochrsik_14_14_3_3_1h < 85.0
stochrsi_k_1h_lt_90 = protection_stochrsik_14_14_3_3_1h < 90.0
stochrsi_k_4h_lt_10 = protection_stochrsik_14_14_3_3_4h < 10.0
stochrsi_k_4h_lt_15 = protection_stochrsik_14_14_3_3_4h < 15.0
stochrsi_k_4h_lt_20 = protection_stochrsik_14_14_3_3_4h < 20.0
stochrsi_k_4h_lt_30 = protection_stochrsik_14_14_3_3_4h < 30.0
stochrsi_k_4h_lt_40 = protection_stochrsik_14_14_3_3_4h < 40.0
stochrsi_k_4h_lt_50 = protection_stochrsik_14_14_3_3_4h < 50.0
stochrsi_k_4h_lt_60 = protection_stochrsik_14_14_3_3_4h < 60.0
stochrsi_k_4h_lt_70 = protection_stochrsik_14_14_3_3_4h < 70.0
stochrsi_k_4h_lt_80 = protection_stochrsik_14_14_3_3_4h < 80.0
stochrsi_k_4h_lt_85 = protection_stochrsik_14_14_3_3_4h < 85.0
stochrsi_k_4h_lt_90 = protection_stochrsik_14_14_3_3_4h < 90.0
# Reused long-global RSI comparison masks
rsi_14_15m_lt_30 = protection_rsi_14_15m < 30.0
rsi_14_1h_lt_40 = protection_rsi_14_1h < 40.0
rsi_14_4h_lt_50 = protection_rsi_14_4h < 50.0
rsi_14_15m_lt_40 = protection_rsi_14_15m < 40.0
rsi_14_4h_lt_40 = protection_rsi_14_4h < 40.0
rsi_14_1h_lt_30 = protection_rsi_14_1h < 30.0
rsi_14_1h_lt_50 = protection_rsi_14_1h < 50.0
rsi_3_15m_gt_20 = protection_rsi_3_15m > 20.0
rsi_3_15m_gt_15 = protection_rsi_3_15m > 15.0
rsi_3_15m_gt_10 = protection_rsi_3_15m > 10.0
rsi_3_15m_gt_25 = protection_rsi_3_15m > 25.0
rsi_14_4h_lt_30 = protection_rsi_14_4h < 30.0
rsi_3_15m_gt_30 = protection_rsi_3_15m > 30.0
rsi_3_1h_gt_30 = protection_rsi_3_1h > 30.0
rsi_14_15m_lt_20 = protection_rsi_14_15m < 20.0
rsi_3_4h_gt_60 = protection_rsi_3_4h > 60.0
rsi_3_15m_gt_5 = protection_rsi_3_15m > 5.0
rsi_3_15m_gt_35 = protection_rsi_3_15m > 35.0
rsi_3_15m_gt_40 = protection_rsi_3_15m > 40.0
rsi_3_15m_gt_45 = protection_rsi_3_15m > 45.0
rsi_3_1h_gt_5 = protection_rsi_3_1h > 5.0
rsi_3_1h_gt_10 = protection_rsi_3_1h > 10.0
rsi_3_1h_gt_15 = protection_rsi_3_1h > 15.0
rsi_3_1h_gt_60 = protection_rsi_3_1h > 60.0
rsi_3_1h_gt_65 = protection_rsi_3_1h > 65.0
rsi_3_4h_gt_3 = protection_rsi_3_4h > 3.0
rsi_3_4h_gt_5 = protection_rsi_3_4h > 5.0
rsi_3_4h_gt_10 = protection_rsi_3_4h > 10.0
rsi_3_4h_gt_15 = protection_rsi_3_4h > 15.0
rsi_14_4h_lt_20 = protection_rsi_14_4h < 20.0
rsi_14_4h_lt_60 = protection_rsi_14_4h < 60.0
rsi_14_4h_lt_70 = protection_rsi_14_4h < 70.0
rsi_14_4h_lt_80 = protection_rsi_14_4h < 80.0
rsi_14_1h_lt_20 = protection_rsi_14_1h < 20.0
rsi_14_1h_lt_60 = protection_rsi_14_1h < 60.0
rsi_14_1h_lt_70 = protection_rsi_14_1h < 70.0
rsi_14_15m_lt_50 = protection_rsi_14_15m < 50.0
# Global protections Long
# Reused protection RSI and ROC masks
rsi_3_15m_gt_3 = protection_rsi_3_15m > 3.0
rsi_3_4h_lt_80 = protection_rsi_3_4h < 80.0
rsi_3_4h_lt_90 = protection_rsi_3_4h < 90.0
roc_9_1d_gt_neg_50 = protection_roc_9_1d > -50.0
top_wick_pct_1d_lt_10 = protection_top_wick_pct_1d < 10.0
rsi_3_4h_lt_70 = protection_rsi_3_4h < 70.0
aroonu_14_15m_lt_20 = protection_aroonu_14_15m < 20.0
aroonu_14_15m_lt_25 = protection_aroonu_14_15m < 25.0
rsi_3_4h_lt_60 = protection_rsi_3_4h < 60.0
rsi_3_gt_10 = protection_rsi_3 > 10.0
rsi_14_15m_lt_10 = protection_rsi_14_15m < 10.0
roc_9_1d_gt_neg_40 = protection_roc_9_1d > -40.0
change_pct_1d_lt_10 = protection_change_pct_1d < 10.0
top_wick_pct_1d_lt_20 = protection_top_wick_pct_1d < 20.0
rsi_3_1h_gt_3 = protection_rsi_3_1h > 3.0
rsi_3_gt_5 = protection_rsi_3 > 5.0
roc_9_1d_gt_neg_30 = protection_roc_9_1d > -30.0
change_pct_1d_gt_neg_10 = protection_change_pct_1d > -10.0
change_pct_1d_lt_30 = protection_change_pct_1d < 30.0
cci_20_4h_lt_neg_200 = protection_cci_20_4h < -200.0
cci_20_1h_gt_250 = protection_cci_20_1h > 250.0
top_wick_pct_1d_lt_25 = protection_top_wick_pct_1d < 25.0
stochrsik_14_14_3_3_1h_gt_70 = protection_stochrsik_14_14_3_3_1h > 70.0
roc_9_1d_gt_neg_15 = protection_roc_9_1d > -15.0
change_pct_1d_lt_50 = protection_change_pct_1d < 50.0
cci_20_4h_gt_200 = protection_cci_20_4h > 200.0
cci_20_15m_gt_250 = protection_cci_20_15m > 250.0
aroonu_14_15m_lt_80 = protection_aroonu_14_15m < 80.0
rsi_3_15m_lt_95 = protection_rsi_3_15m < 95.0
rsi_14_4h_lt_75 = protection_rsi_14_4h < 75.0
rsi_14_4h_lt_45 = protection_rsi_14_4h < 45.0
rsi_14_1h_lt_35 = protection_rsi_14_1h < 35.0
rsi_14_1d_gt_50 = protection_rsi_14_1d > 50.0
rsi_14_15m_lt_25 = protection_rsi_14_15m < 25.0
roc_9_1d_gt_neg_25 = protection_roc_9_1d > -25.0
roc_9_15m_lt_10 = protection_roc_9_15m < 10.0
cmf_20_1d_gt_neg_0_20 = protection_cmf_20_1d > -0.20
change_pct_1d_gt_neg_20 = protection_change_pct_1d > -20.0
cci_20_1h_lt_neg_250 = protection_cci_20_1h < -250.0
aroond_14_4h_lt_50 = protection_aroond_14_4h < 50.0
willr_14_4h_gt_neg_10 = protection_willr_14_4h > -10.0
top_wick_pct_4h_lt_10 = protection_top_wick_pct_4h < 10.0
top_wick_pct_1d_lt_50 = protection_top_wick_pct_1d < 50.0
stochrsik_14_14_3_3_4h_gt_80 = protection_stochrsik_14_14_3_3_4h > 80.0
stochrsik_14_14_3_3_4h_gt_60 = protection_stochrsik_14_14_3_3_4h > 60.0
df["protections_long_global"] = (
# 5m & 15m & 1h & 4h & 1d down move, 1h & 4h & 1d still not low enough
(
(protection_rsi_3 > 1.0)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_20
| rsi_3_4h_gt_20
| rsi_3_1d_gt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (protection_rsi_14_1d < 30.0)
| (cci_20_1h_lt_neg_250)
| (cci_20_4h_lt_neg_200)
)
# 5m & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
& (
(protection_rsi_3 > 1.0)
| (rsi_3_4h_gt_10)
| rsi_3_1d_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_15m_lt_20
| (protection_stochrsik_14_14_3_3_1d < 50.0)
)
# 5m down move, 15m & 1h & 4h still high, 15m high
& (
(protection_rsi_3 > 3.0)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_70
| stochrsi_k_15m_lt_70
)
# 1h & 4h down move, 15m & 1h & 4h downtrend, 1h still high
& (
(rsi_3_gt_5)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_40
| rsi_3_4h_gt_55
| (cmf_20_15m_gt_neg_025)
| aroonu_14_4h_lt_60
| roc_9_1d_lt_80
)
# 5m & 15m & 1h down move, 1h & 4h still high, 15m still high, 1h high
& (
(rsi_3_gt_5)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_85
| stochrsi_k_1h_lt_70
)
# 5m & 15m & 1h & 4h down move, 4h high
& (
(rsi_3_gt_5)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_45
| rsi_3_4h_gt_55
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_70
)
# 5m & 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 4h high
& (
(rsi_3_gt_5)
| rsi_3_15m_gt_30
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_50
| stochrsi_k_4h_lt_80
)
# 5m & 15m & 4h down move, 15m & 1h & 4h still high, 15m & 1h still high
& (
(rsi_3_gt_5)
| rsi_3_15m_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_50
)
# 5m & 4h & 1d down move, 15m high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_10) | rsi_3_1d_gt_15 | aroonu_14_15m_lt_60 | stochrsi_k_15m_lt_70)
# 5m & 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h stil high, 15m & 4h high
& (
(rsi_3_gt_10)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| stochrsi_k_15m_lt_60
| stochrsi_k_4h_lt_70
)
# 5m & 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 4h high
& (
(rsi_3_gt_10)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| stochrsi_k_15m_lt_50
)
# 5m & 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m high
& (
(rsi_3_gt_10)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_60
)
# 5m & 15m & 1h down move, 15m & 1h still high, 4h high, 15m still not low enough, 5h overbought
& (
(rsi_3_gt_10)
| rsi_3_15m_gt_25
| rsi_3_1h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_80
| stochrsi_k_15m_lt_20
| roc_9_4h_lt_80
)
# 5m & 15m & 1h & 1d down move, 1h & 4h still high, 1d downtrend
& (
(rsi_3_gt_10)
| rsi_3_15m_gt_25
| (rsi_3_1h_gt_65)
| rsi_3_1d_gt_25
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_1d_gt_neg_0_20)
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_15)
)
# 5m & 15m & 4h down move, 15m & 1h still not low enough, 4h still high, 15m & 4h high
& (
(rsi_3_gt_10)
| rsi_3_15m_gt_25
| rsi_3_4h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_60
| stochrsi_k_15m_lt_60
)
# 5m & 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 15m & 4h high
& (
(rsi_3_gt_10)
| rsi_3_15m_gt_30
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_60
| stochrsi_k_15m_lt_30
| stochrsi_k_4h_lt_50
)
# 5m & 15m & 1h down move, 15m still high, 1h & 4h high, 4h high & overbought
& (
(protection_rsi_3 > 15.0)
| rsi_3_15m_gt_30
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_40
| aroonu_14_4h_lt_80
| stochrsi_k_15m_lt_20
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_30
)
# 15m & 1h & 4h down move, 1h still high, 15m & 1h downtrend
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_3)
| rsi_3_4h_gt_20
| aroonu_14_1h_lt_50
| (protection_roc_9_15m > -10.0)
| roc_9_1h_gt_neg_15
)
# 15m & 1h & 4h down move, 15m downtrend, 1h still high, 4h still not low enough
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_30
| (cmf_20_15m_gt_neg_020)
| aroonu_14_1h_lt_50
| stochrsi_k_4h_lt_30
)
# 15m & 1h & 4h down move, 15m downtrend, 1h & 4h still not low enough
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_15)
| (cmf_20_15m_gt_neg_030)
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_20
)
# 15m & 1h & 4h down move, 15m downtrend, 15m & 1h still not low enough
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_15)
| (cmf_20_15m_gt_neg_030)
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_20
)
# 15m & 1h & 4h down move, 1h & 4h still high, 15m downtrend, 4h overbought
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_35
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_020)
| roc_9_4h_lt_15
)
# 15m & 1h & 4h down move, 15m & 1h downtrend, 1h & 4h still not low enough
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_40
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_30
)
# 15m & 1h & 4h down move, 4h still high, 1h downtrend, 4h still high
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_45
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_030)
| aroonu_14_4h_lt_40
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m downtrend
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_25
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_025)
| aroonu_14_4h_lt_25
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m still not low enough
& (
(rsi_3_15m_gt_3)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_45
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (aroonu_14_15m_lt_25)
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m & 1h & 4h downtrend, 1h still not low enough
& (
(rsi_3_15m_gt_3)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_025)
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_1h_lt_30
)
# 15m & 1h & 4h & 1d down move, 1h still high, 1h & 4h still not low enough
& (
(rsi_3_15m_gt_3)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_3_1d_gt_50
| aroonu_14_1h_lt_50
| (cci_20_1h_lt_neg_250)
| (protection_cci_20_4h < -250.0)
)
# 15m & 1h & 4h down move, 4h downtrend, 15m & 1h still not low enough
& (
(rsi_3_15m_gt_3)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| (cmf_20_4h_gt_neg_030)
| (aroonu_14_15m_lt_20)
| aroonu_14_1h_lt_30
)
# 15m & 4h down move, 15m & 1h & 4h still not low enough, 1h still not low enough
& (
(rsi_3_15m_gt_3)
| (rsi_3_4h_gt_10)
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| stochrsi_k_1h_lt_30
)
# 15m & 4h down move, 1h & 4h still high, 15m still not low enough, 1h still high
& (
(rsi_3_15m_gt_3)
| rsi_3_4h_gt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (aroonu_14_15m_lt_25)
| stochrsi_k_1h_lt_50
)
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_3) | aroonu_14_15m_lt_70 | aroonu_14_1h_lt_90 | stochrsi_k_15m_lt_50 | stochrsi_k_1h_lt_90)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 1h & 4h still not low enough, 4h downtrend
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_20
| cmf_20_15m_gt_neg_015
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_015)
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_20
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 1h still high, 15m still not low enough, 15m & 1h downtrend
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_20
| (cmf_20_15m_gt_neg_020)
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_40
| stochrsi_k_15m_lt_30
| (protection_roc_9_15m > -15.0)
| roc_9_1h_gt_neg_15
)
# 15m & 1h & 4h down move, 15m & 1h downtrend, 15m & 4h still not low enough
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_20
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_025)
| stochrsi_k_15m_lt_20
| stochrsi_k_4h_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h downtrend, 15m still not low enough
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_20
| cmf_20_15m_gt_neg_040
| (cmf_20_1h_gt_neg_040)
| stochrsi_k_15m_lt_20
)
# 5m & 1h & 4h down move, 1h & 4h downtrend, 15m still high, 4h still not low enough
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_20
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_15m_lt_50
| stochrsi_k_4h_lt_10
)
# 15m & 1h & 4h & 1d down move, 15m downtrend, 15m still not low enough, 1h downtrend
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_25
| rsi_3_1d_gt_30
| (cmf_20_15m_gt_neg_020)
| stochrsi_k_15m_lt_10
| roc_9_1h_gt_neg_10
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 15m still not low enough
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_25
| (cmf_20_15m_gt_neg_030)
| (cmf_20_1h_gt_neg_030)
| (cmf_20_4h_gt_neg_030)
| stochrsi_k_15m_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h downtrend, 15m still high
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_25
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| aroonu_14_15m_lt_50
)
# 15m & 1h & 4h & 1d down move, 15m downtrend, 1d overbought
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_30
| rsi_3_1d_gt_40
| (cmf_20_15m_gt_neg_030)
| roc_9_1d_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 15m & 4h still not low enough
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_30
| cmf_20_15m_gt_neg_015
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_020)
| stochrsi_k_15m_lt_10
| stochrsi_k_4h_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 1h still not low enugh, 4h still high
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| rsi_3_4h_gt_40
| cmf_20_15m_gt_neg_010
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_030)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h downtrend, 4h still high
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_5)
| (rsi_14_1h_lt_20)
| (cmf_20_15m_gt_neg_025)
| (cmf_20_1h_gt_neg_040)
| stochrsi_k_4h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h downtrend, 1h still high
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_30
| (cmf_20_15m_gt_neg_030)
| (cmf_20_1h_gt_neg_030)
| stochrsi_k_1h_lt_50
)
# 15m & 1h & 4h & 1d down move, 15m downtrend, 1h still high, 1h & 4h still not low enough, 4h overbought
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_55
| rsi_3_1d_gt_55
| (cmf_20_15m_gt_neg_030)
| aroonu_14_1h_lt_40
| stochrsi_k_1h_lt_20
| stochrsi_k_4h_lt_20
| roc_9_4h_lt_10
)
# 15m & 1h down move, 1h & 4h still not low enough, 4h high
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_10)
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_20
| stochrsi_k_1h_lt_20
| stochrsi_k_4h_lt_90
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m & 1h & 4h downtrend
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_25
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_025)
| (cmf_20_1h_gt_neg_025)
| (cmf_20_4h_gt_neg_015)
)
# 15m & 1h & 4h down move, 1h & 4h stil not low enough, 15m & 1h & 4h downtrend, 1h still high
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_1h_lt_50
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m & 4h still not low enough, 15m & 4h still not low
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_35
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| cmf_20_15m_gt_neg_010
| (cmf_20_4h_gt_neg_020)
| stochrsi_k_15m_lt_20
| stochrsi_k_4h_lt_30
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m still high
& (
(rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | rsi_3_4h_gt_55 | rsi_14_1h_lt_30 | rsi_14_4h_lt_40 | aroonu_14_15m_lt_50
)
# 15m & 1h down move, 1h high, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | aroonu_14_1h_lt_80 | stochrsi_k_4h_lt_80)
# 15m & 1h & 4h down move, 1h still not low enough, 4h still high, 15m still not low enough, 1d high & overbought
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_35
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| stochrsi_k_15m_lt_20
| (protection_stochrsik_14_14_3_3_1d < 90.0)
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m downtrend, 1h still high, 15m still not low enough
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_40
| (cmf_20_15m_gt_neg_030)
| aroonu_14_1h_lt_50
| stochrsi_k_15m_lt_20
)
# 15m & 1h down move, 1h & 4h high
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_20
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
)
# 15m & 1h & 4h & 1d down move, 15m downtrend
& ((rsi_3_15m_gt_5) | rsi_3_1h_gt_20 | rsi_3_4h_gt_25 | rsi_3_1d_gt_5 | cmf_20_15m_gt_neg_040)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 15m still high, 4h overbought
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_20
| rsi_14_15m_lt_20
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_50
| roc_9_4h_lt_25
)
# 15m & 1h & 4h down move, 15m downtrend, 4h high
& ((rsi_3_15m_gt_5) | rsi_3_1h_gt_25 | rsi_3_4h_gt_25 | (cmf_20_15m_gt_neg_030) | aroonu_14_4h_lt_80)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 4h downtrend, 4h high
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_40
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_4h_gt_neg_020)
| stochrsi_k_4h_lt_70
)
# 15m & 1h & 4h down move, 1h high, 4h downtrend
& ((rsi_3_15m_gt_5) | rsi_3_1h_gt_30 | rsi_3_4h_gt_40 | aroonu_14_1h_lt_70 | roc_9_4h_gt_neg_40)
# 15m & 1h & 4h down move, 1h & 4h still high, 15m downtrend
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_50
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_025)
| aroonu_14_4h_lt_50
| stochrsi_k_4h_lt_50
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h high, 1h high, 4h overbought
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_80
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1h & 4h still high, 15m still high
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_50
| stochrsi_k_15m_lt_50
)
# 15m & 1h & 4h down move, 1h & 4h still high, 4h high
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_60
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_80
)
# 15m & 1h & 3h down move, 1h & 4h still not low enough, 15m downtrend, 1h still high
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_030)
| stochrsi_k_1h_lt_50
)
# 15m & 1h & 4h down move, 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| roc_9_1d_lt_70
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h high, 1d overbought
& (
(rsi_3_15m_gt_5)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| stochrsi_k_1h_lt_70
| roc_9_1d_lt_60
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m still not low enough
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| (rsi_14_15m_lt_10)
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_30
| stochrsi_k_15m_lt_20
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_75
| aroonu_14_4h_lt_90
| roc_9_1h_lt_10
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 1h & 4h still high, 15m downtrend, 1h still high
& (
(rsi_3_15m_gt_5)
| (rsi_3_1h_gt_65)
| rsi_3_4h_gt_65
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| cmf_20_15m_gt_neg_040
| aroonu_14_1h_lt_50
)
# 15m & 4h down move, 15m & 1h still not low enough, 4h still high, 1h & 4h still not low enough, 1d overbought
& (
(rsi_3_15m_gt_5)
| rsi_3_4h_gt_20
| (rsi_14_15m_lt_10)
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_20
| roc_9_1d_lt_20
)
# 15m down move, 15m still not low enough, 1h & 4h high, 1h overbought
& (
(rsi_3_15m_gt_5)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_1h_lt_10
)
# 15m down move, 15m still not low enough, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_5)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| stochrsi_k_1h_lt_70
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m & 1h & 4h downtrend, 1h & 4h downtrend
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_10)
| (protection_rsi_14_1h < 10.0)
| (rsi_14_4h_lt_20)
| cmf_20_15m_gt_neg_015
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_015)
| roc_9_1h_gt_neg_20
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h down move, 4h still high, 15m & 1h & 4h downtrend
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_15)
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 4h still high
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_15)
| (cmf_20_15m_gt_neg_025)
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_015)
| aroonu_14_4h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h downtrend, 15m still high
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_15)
| (cmf_20_15m_gt_neg_030)
| (cmf_20_1h_gt_neg_040)
| stochrsi_k_15m_lt_50
)
# 15m & 1h & 4h down move, 1h & 4h downtrend, 1h still high, 1h downtrend
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_15)
| (cmf_20_1h_gt_neg_030)
| (cmf_20_4h_gt_neg_030)
| aroonu_14_1h_lt_50
| roc_9_1h_gt_neg_15
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m still high
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| (rsi_3_4h_gt_15)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_30
| stochrsi_k_15m_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 15m still high, 4h still not low enough
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_20
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_025)
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_15m_lt_50
| stochrsi_k_4h_lt_20
)
# 15m & 1h & 4h down move, 1h & 15m still high, 1h downtrend
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_20
| aroonu_14_1h_lt_40
| stochrsi_k_15m_lt_50
| roc_9_1h_gt_neg_10
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 4h high
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_25
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_4h_lt_70
)
# 15m & 1h & 4h down move, 4h still not low enough, 1h still high, 4h high
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_25
| rsi_14_4h_lt_30
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_70
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h downtrend, 15m still not low enough
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_30
| (rsi_14_15m_lt_10)
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_020)
| cmf_20_1h_gt_neg_015
| stochrsi_k_15m_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h downtrend, 4h still high, 4h downtrend
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| cmf_20_15m_gt_neg_015
| (cmf_20_1h_gt_neg_025)
| aroonu_14_4h_lt_40
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 15m & 1h downtrend
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (protection_roc_9_15m > -10.0)
| roc_9_1h_gt_neg_20
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1d overbought
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| roc_9_1d_lt_200
)
# 15m & 1h down move, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_10)
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_80)
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 4h overbought
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_20
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_4h_lt_50
| roc_9_4h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h downtrend, 15m still not low enough
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_35
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_025)
| (cmf_20_1h_gt_neg_025)
| stochrsi_k_15m_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h & 4h downtrend, 1h still not low enough
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_35
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_025)
| (cmf_20_1h_gt_neg_025)
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_1h_lt_30
)
# 15m & 1h & 4h down move, 1h still not low enough, 4h high, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | rsi_3_4h_gt_45 | rsi_14_1h_lt_30 | (rsi_14_4h_lt_60) | roc_9_1d_lt_200)
# 15m & 1h & 4h down move, 1h downtrend, 4h high
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_55
| rsi_14_4h_lt_50
| cmf_20_1h_gt_neg_04
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_70
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 1h & 4h downtrend, 15m & 1h & 4h still not low enough
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_020)
| (aroonu_14_15m_lt_25)
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_30
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 15m still high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_20
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_030)
| (cmf_20_4h_gt_neg_030)
| stochrsi_k_15m_lt_50
)
# 15m & 1h & 4h down move, 1h still not low enough, 4h still high, 1h downtrend, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_025)
| aroonu_14_4h_lt_50
| (protection_cci_20_1h < -200.0)
| (protection_cci_20_4h < -0.0)
| roc_9_1d_lt_30
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_25
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_100
)
# 15m & 1h & 4h & 1d down move, 1h still not low enough, 4h still high, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_25
| rsi_3_1d_gt_45
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_80
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h stil high, 1h & 4h downtrend, 1h & 4h still not low
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_45
| (rsi_14_15m_lt_10)
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_030)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_30
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| stochrsi_k_1h_lt_40
| roc_9_1d_lt_100
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_14_15m_lt_20
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_90
| roc_9_4h_lt_25
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h high, 1h & 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_20
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_100
| roc_9_4h_lt_10
| roc_9_1d_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend, 1h & 4h still high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_020)
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h still not low, 4h still high, 15m & 1h downtrend, 4h not low, 4h downtrend
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| cmf_20_15m_gt_neg_010
| (cmf_20_1h_gt_neg_020)
| aroonu_14_4h_lt_20
| roc_9_4h_gt_neg_10
)
# 15m & 1h & 4h down move, 1h & 4h not low enouhg, 15m downtrend, 4h high, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_030)
| aroonu_14_4h_lt_60
| roc_9_1d_lt_25
)
# 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h still high. 1d high & overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_3_1d_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (protection_aroonu_14_1d < 70.0)
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 1h & 4h still not low enough, 1h & 4h downtrend
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_1h_lt_25
| aroonu_14_4h_lt_25
| roc_9_1h_gt_neg_10
| roc_9_4h_gt_neg_30
)
# 15m & 1h & 1d down move, 1h still not low enough, 4h high & overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_25
| rsi_3_1d_gt_25
| rsi_14_1h_lt_30
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_90
| roc_9_1h_gt_neg_20
| roc_9_4h_lt_30
)
# 15m & 1h & 1d down move, 15m still not low enough, 1h & 4h still high, 1h high, 4h overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_25
| rsi_3_1d_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_70
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 15m & 1h downtrend
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_030)
| (cmf_20_1h_gt_neg_025)
)
# 15m & 1h & 4h down move, 1h & 4h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_45
| (protection_rsi_14_1h < 45.0)
| (protection_rsi_14_4h < 55.0)
| aroonu_14_4h_lt_70
| roc_9_4h_lt_25
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 1h & 4h still high, 15m downtrend, 4h high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_60
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_025)
| aroonu_14_4h_lt_80
)
# 15m & 1h down move, 4h high, 1d downtrend, 1h still not low enough, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_30
| (rsi_14_4h_lt_70)
| (protection_cmf_20_1d > -0.3)
| aroonu_14_1h_lt_30
| roc_9_1d_lt_100
)
# 15m & 1h & 4h & 1d down move, 15m & 1h not low enough, 4h high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_3_1d_gt_15
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_35)
| stochrsi_k_15m_lt_30
| stochrsi_k_4h_lt_85
)
# 15m & 1h & 4h & 1d down move, 15m & 1 & 4h still not low enough, 1h still high, 4h high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_3_1d_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_60
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_80
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_65
| rsi_14_15m_lt_20
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_100
| roc_9_4h_lt_25
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h & 4h downtrend, 1h still high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_030)
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| stochrsi_k_1h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h still high, 1d downtrend
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (protection_aroonu_14_15m < 10.0)
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_50)
)
# 15m & 1h down move, 4h still high, 15m downtrend, 1h & 1d high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_40
| rsi_14_4h_lt_50
| cmf_20_15m_gt_neg_03
| aroonu_14_1h_lt_60
| (protection_aroonu_14_1d < 90.0)
| (protection_stochrsik_14_14_3_3_1d < 80.0)
)
# 15m & 1h down move, 15m & 1h still high, 1h & 4h high, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_40
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_4h_lt_25
)
# 15m & 1h & 4h down move, 1h & 4h sitll high, 15m & 1h & 4h downtrend, 1h & 4h still high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_65
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_40
)
# 15m & 1h & 4h down move, 15m stil not low enough, 1h & 4h still high, 15m & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_50
| roc_9_1d_lt_200
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h downtrend, 1h high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_1h_lt_70
)
# 15m & 1h & 4h down move, 1h & 4h still not low enough, 15m & 4h downtrend, 1h & 4h still high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| cmf_20_15m_gt_neg_040
| (cmf_20_4h_gt_neg_020)
| aroonu_14_1h_lt_40
| stochrsi_k_4h_lt_40
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 14h & 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_65
| rsi_14_15m_lt_20
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| roc_9_4h_lt_20
| roc_9_1d_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| (rsi_14_4h_lt_70)
| (aroonu_14_15m_lt_20)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_4h_lt_30
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h high & overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_100
| roc_9_1h_lt_20
| roc_9_4h_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h downtrend, 4h high, 1h overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_4h_lt_80
| roc_9_1h_lt_10
)
# 15m & 1h & 4h down move, 1h & 4h downtrend, 15m still high, 1h high
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| cmf_20_1h_gt_neg_0
| cmf_20_4h_gt_neg_04
| aroonu_14_15m_lt_50
| stochrsi_k_1h_lt_90
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_40
| roc_9_1d_lt_200
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m & 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_80
| roc_9_4h_lt_10
| roc_9_1d_lt_50
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 15m still not low enough, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| (protection_aroonu_14_15m < 10.0)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_60
| roc_9_4h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend, 15m & 1h high
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| cmf_20_1h_gt_neg_0
| cmf_20_4h_gt_neg_0
| aroonu_14_15m_lt_50
| stochrsi_k_1h_lt_80
)
# 15m & 1h down move, 15m & 4h high, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_65) | (aroonu_14_15m_lt_80) | aroonu_14_4h_lt_85 | roc_9_4h_lt_100)
# 15m & 1h down move, 15m & 1h & 4h still high, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_10)
| (rsi_3_1h_gt_65)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_1h_lt_20
| roc_9_4h_lt_30
)
# 15m & 4h & 1d down move, 15m high, 15m & 4h still high
& (
(rsi_3_15m_gt_10)
| (rsi_3_4h_gt_15)
| rsi_3_1d_gt_20
| aroonu_14_15m_lt_70
| stochrsi_k_15m_lt_40
| stochrsi_k_4h_lt_50
)
# 15m & 4h & 1d down move, 15m & 1h still not low enough, 1h still high, 4h & 1d downtrend
& (
(rsi_3_15m_gt_10)
| rsi_3_4h_gt_20
| rsi_3_1d_gt_20
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| stochrsi_k_1h_lt_40
| roc_9_4h_gt_neg_25
| (roc_9_1d_gt_neg_50)
)
# 15m & 4h down move, 1h & 4h stil high, 15m high, 4h overbought
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_60 | rsi_14_1h_lt_50 | rsi_14_4h_lt_50 | aroonu_14_15m_lt_70 | roc_9_4h_lt_30)
# 15m down move, 15m still not low enough, 1h & 4h high & overbought
& (
(rsi_3_15m_gt_10)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_85
| aroonu_14_4h_lt_100
| roc_9_1h_lt_30
| roc_9_4h_lt_80
)
# 15m down move, 15m & 1h & 4h still high, 15m still high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_10)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_80
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| (rsi_3_4h_gt_15)
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| roc_9_1h_gt_neg_20
| roc_9_4h_gt_neg_35
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h high, 15m still not low enough
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| (rsi_3_4h_gt_15)
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| aroonu_14_1h_lt_70
| stochrsi_k_15m_lt_30
)
# 15m & 1h & 4h & 1d down move, 1h & 4h still not low enough, 1h & 4h downtrend, 4h still high
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_25
| rsi_3_1d_gt_25
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_4h_lt_40
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h & 1d down move, 1h still not low enough, 4h still high, 4h downtrend, 1h still not low enough
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_35
| rsi_3_1d_gt_50
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_40
| (cmf_20_4h_gt_neg_030)
| aroonu_14_1h_lt_20
)
# 15m & 1h & 4h & 1d down move, 15m downtrend, 15m & 4h high, 1d downtrend
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_35
| rsi_3_1d_gt_50
| (cmf_20_15m_gt_neg_020)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| (roc_9_1d_gt_neg_40)
)
# 15m & 1h & 4h & 1d down move, 4h still not low enough, 15m & 1h & 4h downtrend
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_40
| rsi_3_1d_gt_40
| (protection_rsi_14_15m > 20.0)
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_025)
| (cmf_20_1h_gt_neg_020)
| cmf_20_4h_gt_neg_0
| aroonu_14_4h_lt_20
)
# 15m & 1h & 4h down move, 1h still not low enough, 4h high, 1h downtrend
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_45
| rsi_14_1h_lt_30
| (rsi_14_4h_lt_45)
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_90
| roc_9_1h_gt_neg_30
)
# 15m & 1h & 4h down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | rsi_3_4h_gt_45 | aroonu_14_4h_lt_80 | roc_9_1d_lt_150)
# 15m & 1h down move, 15m & 1h still not low enough, 4h still high, 4h high
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_60
| stochrsi_k_4h_lt_90
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high. 4h overbought
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_15)
| rsi_14_15m_lt_20
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 15m downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_25
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_050)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m high, 1h still high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_60
| stochrsi_k_1h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 15m downtrend, 4h high, 1h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_030)
| aroonu_14_4h_lt_60
| roc_9_1h_gt_neg_10
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_45
| rsi_14_15m_lt_20
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_85
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1h & 4h downtrend, 1h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_040)
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_70
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 1h still high, 4h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_20
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_025)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_100
| stochrsi_k_4h_lt_90
)
# 15m & 1h & 4h & 1d down move, 15m still not low enough, 1h & 4h still high, 4h high, 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_60
| rsi_3_1d_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_50
| roc_9_1d_lt_30
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| stochrsi_k_1h_lt_50
| roc_9_1d_lt_80
)
# 15m & 1h & 1d down move, 15m & 1h still not low enough, 4h high, 1d downtrend, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_25
| rsi_3_1d_gt_25
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| (rsi_14_4h_lt_60)
| aroonu_14_4h_lt_85
| roc_9_1h_gt_neg_10
| roc_9_4h_lt_30
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 1h & 4h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_25
| rsi_14_15m_lt_20
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 15m still high 4h & 1d downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_3_1d_gt_30
| (rsi_14_15m_lt_25)
| (protection_rsi_14_1h < 25.0)
| (protection_rsi_14_4h < 25.0)
| aroonu_14_15m_lt_50
| roc_9_4h_gt_neg_15
| (roc_9_1d_gt_neg_15)
)
# 15m & 1h & 4h down move, 15m downtrend, 15m & 1h still not low enough, 1h & 4h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| (cmf_20_15m_gt_neg_020)
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_20
| roc_9_1h_gt_neg_10
| roc_9_4h_gt_neg_15
)
# 15m & 1h & 4h down move, 1h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_45
| (rsi_14_1h_lt_35)
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_70
| roc_9_4h_lt_25
| roc_9_1d_lt_100
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 4h still high, 4h & 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_25
| roc_9_1d_lt_30
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_45)
| roc_9_4h_lt_70
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (aroonu_14_15m_lt_20)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high, 4h high & overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_85
| roc_9_4h_lt_15
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 1d downtrend, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| (protection_cmf_20_1d > -0.10)
| (aroonu_14_15m_lt_20)
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_85
| roc_9_4h_lt_20
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_100
)
# 15m & 1h down move, 15m still high, 1h & dh high, 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_40
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_1d_lt_50
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d high, 4h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_40
| rsi_3_1d_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (protection_rsi_14_1d < 40.0)
| (protection_aroonu_14_1d < 70.0)
| roc_9_4h_gt_neg_40
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h high, 1d downtrend, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| roc_9_1h_gt_neg_20
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h high & overbought, 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_20
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_85
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h high, 1d downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_70
| (protection_roc_9_1d > -20.0)
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_1h_lt_20
| roc_9_4h_lt_40
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d downtrend, 1h & 4h high, 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| (protection_cmf_20_1d > -0.1)
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_90
| roc_9_1d_lt_20
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_85
| stochrsi_k_4h_lt_85
| roc_9_4h_lt_10
)
# 15m & 1h & 4h & 1d down move, 1h still high, 4h still not low enough, 4h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_20
| rsi_3_1d_gt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_1h_lt_50
| (cci_20_1h_lt_neg_250)
| (protection_cci_20_4h < -250.0)
| roc_9_4h_gt_neg_15
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h downtrend, 1h & 4h still not low enough, 1d downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_35
| rsi_3_1d_gt_30
| (rsi_14_1h_lt_35)
| (protection_rsi_14_4h < 35.0)
| (cmf_20_15m_gt_neg_030)
| (cmf_20_1h_gt_neg_030)
| (cmf_20_4h_gt_neg_030)
| (protection_cci_20_1h < -200.0)
| (cci_20_4h_lt_neg_200)
| (roc_9_1d_gt_neg_25)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h overbought, 4h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_30
| roc_9_1h_lt_10
| roc_9_4h_gt_neg_10
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h still high, 4h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_50
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_80
)
# 15m & 1h & 4h down move, 4h downtrend, 1h high, 4h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| (cmf_20_4h_gt_neg_010)
| stochrsi_k_1h_lt_70
| roc_9_4h_gt_neg_30
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h & 1d still high, 1h downtrend, 1d downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_45
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (protection_rsi_14_1d < 40.0)
| cmf_20_1h_gt_neg_015
| stochrsi_k_15m_lt_10
| stochrsi_k_1h_lt_20
| stochrsi_k_4h_lt_40
| (roc_9_1d_gt_neg_25)
)
# 15m down move, 15m still not low enough, 1h & 4h still high, 15m still high, 1h high
& (
(rsi_3_15m_gt_15)
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_85
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h downtrend, 15m & 4h still not low, 1h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_1h_gt_neg_025)
| aroonu_14_15m_lt_30
| aroonu_14_4h_lt_30
| stochrsi_k_1h_lt_70
)
# 15m ^ 1h down move, 15m & 1h & 4h still not low enough, 1h & 4h high, 1h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_1h_lt_70
| stochrsi_k_4h_lt_80
| roc_9_1h_lt_10
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 15m still high, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_85
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_70
| roc_9_4h_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m still high, 1h & 4h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_85
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_80
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_60
| stochrsi_k_1h_lt_70
| stochrsi_k_4h_lt_70
| roc_9_4h_lt_10
)
# 15m & 1h & 1d down move, 15m still not low enough, 1h & 4h high, 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_55
| rsi_3_1d_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_1d_lt_50
)
# 14m & 1h down move, 15m & 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_1h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (protection_rsi_14_4h < 65.0)
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_85
| roc_9_4h_lt_35
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 5h still high, 15m still high, 4h & 1d overbought
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_50
| roc_9_4h_lt_20
| roc_9_1d_lt_100
)
# 15m & 1h & 1d down move, 15m still not low enough, 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_60)
| rsi_3_1d_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_70
| roc_9_1d_lt_80
)
# 15m & 1h down move, 15m & 1h stil high, 4h high, 15m & 4h high, 4h overbought
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_70
| aroonu_14_4h_lt_70
| roc_9_4h_lt_100
)
# 15m & 1h down move, 15m & 1h & 4h still high, 15m downtrend, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_025)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_4h_lt_25
)
# 15m & 1h down move, 15m & 1h & 4h still high, 1h & 4h high, 1h overbought
& (
(rsi_3_15m_gt_15)
| (rsi_3_1h_gt_65)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_90
| aroonu_14_4h_lt_100
| roc_9_1h_lt_15
)
# 15m & 4h down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_3) | stochrsi_k_15m_lt_70 | roc_9_4h_gt_neg_15)
# 15m & 4h down move, 15m & 1h & 4h still not low enough, 15m & 4h downtrend, 1h & 4h downtrend
& (
(rsi_3_15m_gt_15)
| (rsi_3_4h_gt_5)
| (rsi_14_15m_lt_10)
| (protection_rsi_14_1h < 10.0)
| (protection_rsi_14_4h < 10.0)
| cmf_20_15m_gt_neg_010
| (cmf_20_4h_gt_neg_020)
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_20
| roc_9_1h_gt_neg_15
| roc_9_4h_gt_neg_15
)
# 15m & 4h & 1d down move, 15m & 1h & 4h still not low enough, 15m & 1d downtrend
& (
(rsi_3_15m_gt_15)
| (rsi_3_4h_gt_15)
| rsi_3_1d_gt_25
| (protection_rsi_14_15m > 25.0)
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| cmf_20_15m_gt_neg_03
| (protection_cmf_20_1d > -0.3)
| aroonu_14_15m_lt_30
)
# 15m & 4h down move, 15m & 1h still high, 1h high, 1h over
& (
(rsi_3_15m_gt_15)
| (rsi_3_4h_gt_15)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| aroonu_14_1h_lt_80
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_90
| roc_9_1h_lt_10
)
# 15m & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h downtrend
& (
(rsi_3_15m_gt_15)
| (protection_rsi_3_4h > 20)
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_40
)
# 15m & 4h down move, 15m & 1h & 4h still not low enough, 15m & 4h high, 4h downtrend
& (
(rsi_3_15m_gt_15)
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_80
| roc_9_4h_gt_neg_20
)
# 15m & 4h down move, 1h high & overbought
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_45 | stochrsi_k_1h_lt_90 | roc_9_1h_lt_10)
# 15m & 4h down move, 15m & 1h & 4h still high, 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| roc_9_1h_lt_10
| roc_9_4h_lt_10
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m & 4h high, 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| aroonu_14_4h_lt_70
| stochrsi_k_15m_lt_50
| roc_9_4h_lt_10
)
# 15m & 1d down move, 15m still not low enough, 1h & 4h high
& ((rsi_3_15m_gt_15) | rsi_3_1d_gt_5 | rsi_14_15m_lt_30 | stochrsi_k_1h_lt_70 | stochrsi_k_4h_lt_70)
# 15m & 1d down move, 15m still not low enough, 1h & 4h high
& (
(rsi_3_15m_gt_15)
| rsi_3_1d_gt_60
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_100
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_80
)
# 15m down move, 15m & 1h & 4h still not low enough, 15m & 1h downtrend, 15m & 1h high
& (
(rsi_3_15m_gt_15)
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
)
# 15m down move, 15m still not low enough, 1h & 4h high, 1d downtrend, 1h & 4h high
& (
(rsi_3_15m_gt_15)
| (protection_rsi_14_15m < 35.0)
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_70)
| (protection_cmf_20_1d > -0.1)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
)
# 15m down move, 15m still not low enough, 1h & 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | aroonu_14_15m_lt_30 | aroonu_14_1h_lt_85 | aroonu_14_4h_lt_100 | roc_9_1d_lt_250)
# 15m down move, 15m & 1h still high, 1h high, 1h overbought, 4h & 1d downtrend
& (
(rsi_3_15m_gt_15)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_85
| roc_9_1h_lt_40
| roc_9_4h_gt_neg_50
| (roc_9_1d_gt_neg_50)
)
# 15m down move, 15m still high, 1h & 4h high, 1h & 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| roc_9_1h_lt_40
| roc_9_1d_lt_100
)
# 15m down move, 15m still not low enough, 1h & 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_15)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_85
| roc_9_4h_lt_20
| roc_9_1d_lt_50
)
# 15m down move, 15m & 1h & 4h still high, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_15)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| stochrsi_k_1h_lt_80
| stochrsi_k_4h_lt_90
| roc_9_1h_lt_20
| roc_9_4h_lt_20
)
# 15m down move, 15m high, 1h & 4h overbought
& ((rsi_3_15m_gt_15) | (protection_aroonu_14_15m < 75.0) | roc_9_1h_lt_50 | roc_9_4h_lt_80)
# 15m & 1h & 4h down move, 1h still high, 15m still not low enough, 4h downtrend
& (
(rsi_3_15m_gt_20)
| (rsi_3_1h_gt_15)
| (rsi_3_4h_gt_5)
| aroonu_14_1h_lt_50
| stochrsi_k_15m_lt_20
| roc_9_4h_gt_neg_30
)
# 15m & 1h & 4h & 1d down move, 15m downtrend, 1h & 4h still not low enough
& (
(rsi_3_15m_gt_20)
| (rsi_3_1h_gt_15)
| rsi_3_4h_gt_45
| rsi_3_1d_gt_45
| cmf_20_15m_gt_neg_040
| aroonu_14_1h_lt_20
| stochrsi_k_1h_lt_15
| stochrsi_k_4h_lt_15
| (protection_cci_20_1h < -350.0)
| (cci_20_4h_lt_neg_200)
)
# 15m & 1h & 4h down move, 15m downtrend, 1h & 4h till high, 15m still high, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_20
| cmf_20_15m_gt_neg_03
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_50
| stochrsi_k_15m_lt_40
| roc_9_1d_lt_100
)
# 15m & 1h & 4h & 1d down move, 4h & 1d still not low enough, 1d downtrend, 1h & 4h still high, 1d downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_20
| rsi_3_1d_gt_25
| rsi_14_4h_lt_30
| (protection_rsi_14_1d < 30.0)
| (cmf_20_1d_gt_neg_0_20)
| aroonu_14_1h_lt_40
| stochrsi_k_4h_lt_40
| (roc_9_1d_gt_neg_15)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend, 1h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_70
| (protection_cci_20_1h < -200.0)
| (cci_20_4h_lt_neg_200)
)
# 15m & 1h & 4h down move, 1h still not low enough, 1d overbought
& ((rsi_3_15m_gt_20) | rsi_3_1h_gt_20 | rsi_3_4h_gt_30 | aroonu_14_1h_lt_25 | roc_9_1d_lt_200)
# 15m & 1h & 4h & 1d down move, 1h & 4h still not low enough, 1d still high, 1d downtrend, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_35
| rsi_3_1d_gt_45
| rsi_14_4h_lt_30
| (protection_rsi_14_1d < 50.0)
| (protection_cmf_20_1d > -0.0)
| (protection_mfi_14_1d < 70.0)
| (cci_20_1h_lt_neg_250)
| (cci_20_4h_lt_neg_200)
| roc_9_4h_gt_neg_10
| roc_9_1d_lt_15
)
# 15m & 1h & 4h & 1d down move, 1h & 4h still not low enough, 15m & 1h downtrend, 1h & 4h still not low enough
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_50
| rsi_3_1d_gt_50
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| cmf_20_15m_gt_neg_040
| (cmf_20_1h_gt_neg_025)
| stochrsi_k_1h_lt_20
| stochrsi_k_4h_lt_20
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_100
| roc_9_4h_lt_10
)
# 15m & 1h down move, 15m & 1h still not low enough, 4h still high, 15m still not low enough, 1h & 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_20
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_85
| aroonu_14_4h_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h & 4h downtrend, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| cmf_20_15m_gt_neg_010
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 1h still not low enough, 4h still high, 1h high, 1h & 4h downtrend, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_70
| roc_9_1h_gt_neg_10
| roc_9_4h_gt_neg_10
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_60
| rsi_14_15m_lt_20
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| cmf_20_15m_gt_neg_010
| cmf_20_1h_gt_neg_015
| (aroonu_14_15m_lt_20)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h & 4h downtrend, 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| cmf_20_15m_gt_neg_015
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_015)
| stochrsi_k_4h_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m & 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (protection_aroonu_14_15m < 75.0)
| stochrsi_k_4h_lt_90
)
# 15m & 1h down move, 1h still not low enough, 1h still high, 4h high & overbought, 1d downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_90
| roc_9_4h_lt_40
| (roc_9_1d_gt_neg_50)
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| stochrsi_k_1h_lt_50
| roc_9_1d_lt_150
)
# 15m & 1h & 1d down move, 1h & 4h still high, 15m downtrend, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_25
| rsi_3_1d_gt_55
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| cmf_20_15m_gt_neg_03
| roc_9_1d_lt_80
)
# 15m & 1h & 4h & 1d down move, 15m & 1h still high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_3_1d_gt_30
| stochrsi_k_15m_lt_50
| stochrsi_k_1h_lt_50
| roc_9_4h_gt_neg_70
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 4h still high, 1h & 4h downtrend, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_3_1d_gt_40
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| aroonu_14_4h_lt_40
| roc_9_1h_gt_neg_15
| roc_9_4h_gt_neg_30
| roc_9_1d_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m stil high, 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_70
| stochrsi_k_1h_lt_20
| stochrsi_k_4h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 4h downtrend, 1h high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_1h_lt_70
| roc_9_4h_gt_neg_40
)
# 15m & 1h & 4h down move, 1h & 4h still high, 15m & 1h downtrend, 1h & 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_60
| roc_9_4h_lt_20
| roc_9_1d_lt_25
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_40
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_85
| roc_9_4h_lt_20
| roc_9_1d_lt_50
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_50
| roc_9_4h_lt_20
| roc_9_1d_lt_200
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_4h_lt_70
| stochrsi_k_1h_lt_20
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_40
)
# 15m & 1h down move, 1h still high, 1h & 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_4h_lt_20
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 4h still not low enough, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_30
| aroonu_14_4h_lt_30
| roc_9_4h_gt_neg_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 4h still high, 15m still not low enough, 1h still high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_40
| cmf_20_15m_gt_neg_010
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_4h_lt_40
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_40
| roc_9_4h_gt_neg_30
)
# 15m & 1h & 4h & 1d down move, 1d still high, 1h still high, 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_45
| rsi_3_1d_gt_25
| (protection_mfi_14_1d < 50.0)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_85
)
# 15m & 1h & 4h & 1d down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_55
| rsi_3_1d_gt_55
| (rsi_14_15m_lt_25)
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| cmf_20_15m_gt_neg_010
| aroonu_14_4h_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 4h high & overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_20
)
# 15m & 1h down move, 15m & 1h & 4h still not low enough, 15m still high, 1h high, 1h & 4h still high, 1d downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_90
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_50)
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m still not lowenough, 1h high, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (aroonu_14_15m_lt_25)
| aroonu_14_1h_lt_80
| roc_9_1d_lt_80
)
# 15m & 1h down move, 15m & 1h & 4h still high, 15m & 1h high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
| roc_9_4h_lt_10
)
# 15m & 1h down move, 15m & 1h sitll high, 4h high, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_90
| roc_9_1h_lt_20
| roc_9_4h_lt_30
)
# 15m & 4h down move, 15m & 1h & 4h still high, 4h downtrend, 15m & 1h still high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_35
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_4h_gt_neg_025)
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_50
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h down move, 15m downtrend, 15m still high, 1h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| (cmf_20_15m_gt_neg_020)
| aroonu_14_15m_lt_50
| roc_9_1d_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_40
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h down move, 4d downtrend, 1h high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| (cmf_20_4h_gt_neg_040)
| stochrsi_k_1h_lt_80
| roc_9_4h_gt_neg_30
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 4h downtrend, 15m high, 4h & 1d downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_4h_gt_neg_040)
| aroonu_14_15m_lt_60
| roc_9_4h_gt_neg_20
| (roc_9_1d_gt_neg_50)
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_85
| roc_9_4h_lt_30
)
# 15m & 1h & 4h down move, 1h & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_50
| (protection_cci_20_1h < 0.0)
| (protection_cci_20_4h < 0.0)
| roc_9_4h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h still high, 4h high, 15m stil high, 4h high & overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_25
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_020)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_4h_lt_40
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 15m still high, 1h high, 4h & 1d downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_3_1d_gt_45
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| aroonu_14_15m_lt_40
| stochrsi_k_1h_lt_70
| roc_9_4h_gt_neg_25
| (roc_9_1d_gt_neg_30)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m high, 1h still high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| stochrsi_k_1h_lt_40
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 4h high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| aroonu_14_4h_lt_80
| roc_9_4h_lt_40
)
# 15m & 1h & 1d down move, 15m still not low enough, 1h & 4h still high, 1h high, 4h downtrend, 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_45
| rsi_3_1d_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_70
| roc_9_4h_gt_neg_20
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m still not low, 1h & 4h sitll high, 15m & 1h downtrend, 15m still high, 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| cmf_20_15m_gt_neg_010
| (cmf_20_1h_gt_neg_020)
| stochrsi_k_15m_lt_50
| stochrsi_k_4h_lt_70
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 15m still high, 1h & 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_85
| aroonu_14_4h_lt_100
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| roc_9_1h_lt_10
| roc_9_1d_lt_200
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1h high & overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_85
| roc_9_1h_lt_10
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 15m & 1h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| (cmf_20_15m_gt_neg_025)
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_90
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m still high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_50
| roc_9_4h_gt_neg_40
)
# 15m & 1h & 4h down move, 1h & 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_60
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_4h_lt_75
| roc_9_4h_lt_25
| roc_9_1d_lt_150
)
# 15m & 1h down move, 15m & 1h stil high, 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_4h_lt_70
| roc_9_1h_lt_40
| roc_9_4h_lt_50
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 15m & 1h & 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_1h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_100
| aroonu_14_4h_lt_100
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 15m & 4h high, 15m & 1h still not low enough, 4h overbought
& (
(rsi_3_15m_gt_20)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (protection_rsi_14_4h < 65.0)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_80
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_30
| roc_9_4h_lt_30
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 1h & 4h high, 1h overbought
& (
(rsi_3_15m_gt_20)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_80
| roc_9_1h_lt_15
)
# 15m & 1h down move, 15m still high, 1h high & overbought
& (
(rsi_3_15m_gt_20) | (rsi_3_1h_gt_60) | rsi_14_15m_lt_40 | rsi_14_1h_lt_50 | aroonu_14_1h_lt_70 | roc_9_1h_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_20)
| (rsi_3_1h_gt_65)
| (protection_rsi_14_15m < 35.0)
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_75)
| aroonu_14_4h_lt_70
| stochrsi_k_15m_lt_20
| stochrsi_k_4h_lt_70
| roc_9_4h_lt_100
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 4h high & overbought
& (
(rsi_3_15m_gt_20)
| (rsi_3_1h_gt_65)
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_020)
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_90
| roc_9_4h_lt_20
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h high, 15m still high, 1h & 4h high, 1d overbought
& (
(rsi_3_15m_gt_20)
| (rsi_3_1h_gt_65)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_1d_lt_50
)
# 15m & 4h down move, 15m & 1h & 4h sitll high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_60
| roc_9_4h_lt_15
| roc_9_1d_lt_60
)
# 15m & 4h & 1d down move, 15m & 1h & 4h s till high, 15m & 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_50
| rsi_3_1d_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_60
| stochrsi_k_15m_lt_50
)
# 15m & 4h down move, 15m & 1h still not low enough, 15m still high, 1h high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_20
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| aroonu_14_15m_lt_40
| stochrsi_k_1h_lt_80
| roc_9_4h_gt_neg_25
)
# 15m & 4h down move, 15m & 1h still high, 4h downtrend
& ((rsi_3_15m_gt_20) | rsi_3_4h_gt_20 | aroonu_14_15m_lt_50 | stochrsi_k_1h_lt_50 | roc_9_4h_gt_neg_30)
# 15m &4d down move, 15m & 1h high, 4h downtrend
& ((rsi_3_15m_gt_20) | rsi_3_4h_gt_20 | aroonu_14_15m_lt_60 | stochrsi_k_1h_lt_80 | roc_9_4h_gt_neg_30)
# 15m & 4h down move, 4h still high, 4h downtrend, 1d overbought
& ((rsi_3_15m_gt_20) | rsi_3_4h_gt_20 | aroonu_14_4h_lt_50 | roc_9_4h_gt_neg_30 | roc_9_1d_lt_100)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m still not low enough, 4h still high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_40
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_30
| aroonu_14_4h_lt_50
| roc_9_4h_lt_40
)
# 15m & 4h down move, 15m still not low enough, 1h & 4h still high, 15, & 4h still high, 1h high, 4h downtrend
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_50
| stochrsi_k_1h_lt_80
| roc_9_4h_gt_neg_20
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m still high, 1h high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_100
| roc_9_4h_lt_70
)
# 15m & 4h down move, 15m & 1h still not low enough, 1h still high & overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_60
| (protection_rsi_14_15m < 35.0)
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_10
)
# 15m & 4h down move, 15m still high, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_30
| aroonu_14_4h_lt_60
| roc_9_4h_lt_100
)
# 15m & 4h down move, 15m still not low enough, 1h & 4h high, 15m & 1h & 4h high
& (
(rsi_3_15m_gt_20)
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_90
| aroonu_14_4h_lt_90
)
# 15m down move, 15m still not low enough, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_85
| aroonu_14_4h_lt_85
| roc_9_1h_lt_50
| roc_9_4h_lt_50
)
# 15m down move, 15m still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_20)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_80)
| aroonu_14_4h_lt_80
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_90
| roc_9_4h_lt_75
)
# 15m down move, 15m & 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_20)
| (rsi_14_15m_lt_50)
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_1h_lt_50
| roc_9_4h_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_70
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1h high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_60
| roc_9_1d_lt_100
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m high, 1h & 4h still high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_40
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h & 4h high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_85
| aroonu_14_4h_lt_85
)
# 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h still high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_3_1d_gt_55
| (rsi_14_15m_lt_25)
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| stochrsi_k_15m_lt_20
| roc_9_1d_lt_30
)
# 15m & 1h & 1d down move, 1h & 4h still high, 1d downtrend, 1h high, 1h & 4h still high, 1d downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_3_1d_gt_25
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_1d_gt_neg_0_20)
| aroonu_14_1h_lt_60
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_15)
)
# 15m & 1h down move, 15m still not low enough, 1h stil high, 4h high & overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_85
| roc_9_4h_lt_70
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_100
| roc_9_4h_lt_30
)
# 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h stil high, 15m still high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_3_1d_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| stochrsi_k_15m_lt_50
| roc_9_1d_lt_50
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h downtrend, 4h downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_3_1d_gt_30
| (cmf_20_15m_gt_neg_030)
| (cmf_20_1h_gt_neg_040)
| (cmf_20_4h_gt_neg_040)
| roc_9_4h_gt_neg_40
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h still high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_1h_lt_50
| roc_9_1d_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h still high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_025)
| aroonu_14_1h_lt_50
| stochrsi_k_1h_lt_50
)
# 15m & 1h & 4h down move, 1h still not low enough, 4h still high, 15m downtrend, 15m still not low enough
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_40
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_030)
| (aroonu_14_15m_lt_20)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h stil high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_50
| stochrsi_k_15m_lt_30
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_25
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m still not low, 4h high, 1h still high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_65
| rsi_14_15m_lt_20
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (aroonu_14_15m_lt_20)
| aroonu_14_4h_lt_70
| stochrsi_k_1h_lt_40
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_4h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m still high, 4h downtrend, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_50
| roc_9_4h_gt_neg_20
| roc_9_1d_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1h still high, 15m still high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_50
| stochrsi_k_15m_lt_40
)
# 15m & 1h & 4h down move, 1h still not low enough, 4h still high, 4h & 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_10
| roc_9_1d_lt_100
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_70
| roc_9_4h_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h & 4h still high, 1d downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_50
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_40)
)
# 15m & 1h & 1d down move, 15m still not low enough, 1h & 4h still high, 1d downtrend, 1h high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_1d_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_1d_gt_neg_0_20)
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_85
| roc_9_1d_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 4h & 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_60
| roc_9_4h_lt_20
| roc_9_1d_lt_20
)
# 15m & 1h & 1d down move, 4h & 1d downtrend, 1h & 4h high, 1d downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_3_1d_gt_35
| cmf_20_4h_gt_neg_01
| (protection_cmf_20_1d > -0.1)
| aroonu_14_1h_lt_75
| stochrsi_k_4h_lt_70
| (protection_roc_2_1d > -20.0)
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h & 4h downtrend, 4h high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_025)
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_70)
| aroonu_14_4h_lt_80
| roc_9_4h_lt_80
| roc_9_1d_lt_100
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_90
| stochrsi_k_15m_lt_30
| stochrsi_k_4h_lt_90
| roc_9_1h_lt_20
| roc_9_4h_lt_60
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_40
| (rsi_3_4h_gt_10)
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| cmf_20_1h_gt_neg_015
| (cmf_20_4h_gt_neg_020)
| aroonu_14_15m_lt_30
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_30
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_85
| stochrsi_k_15m_lt_30
| roc_9_4h_lt_30
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 4h high & overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_60
| roc_9_4h_lt_25
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_70
| roc_9_4h_lt_15
| roc_9_1d_lt_50
)
# 15m & 1h down move, 15m sitll not low enough, 1h still high, 4h high, 15m & 1h downtrend, 15m & 1h still high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| aroonu_14_15m_lt_50
| stochrsi_k_1h_lt_50
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| stochrsi_k_15m_lt_30
| stochrsi_k_4h_lt_30
| roc_9_4h_lt_10
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend, 15m high, 4h downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_030)
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_50
| roc_9_4h_gt_neg_30
)
# 15m & 1h & 4h, 15m still not low enough, 1h & 4h still high, 15m downtrend, 15m & 4h high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_025)
| aroonu_14_15m_lt_50
| stochrsi_k_4h_lt_70
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_85
| roc_9_4h_lt_70
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m still high, 4h high & overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_40
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_70
| roc_9_4h_lt_10
)
# 15m & 1h & 1d down move, 15m & 1h & 4h still high, 15m & 1d downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_3_1d_gt_55
| rsi_14_15m_lt_40
| (protection_rsi_14_1h < 45.0)
| (rsi_14_4h_lt_45)
| (aroonu_14_15m_lt_25)
| aroonu_14_1h_lt_80
| (protection_roc_9_15m > -40.0)
| (roc_9_1d_gt_neg_40)
)
# 15m & 1h down move, 15m & 1h & 4h stil high, 15m & 1h & 4h high, 1d downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| stochrsi_k_1h_lt_60
| stochrsi_k_4h_lt_80
| (roc_9_1d_gt_neg_50)
)
# 15m & 1h down move, 15m & 1h & 4h still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_70
| stochrsi_k_1h_lt_70
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_30
)
# 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h still high, 4h downtrend, 4h high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_3_1d_gt_50
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_40
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_70
| roc_9_1d_lt_30
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_50
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_70
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 1h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_90
| roc_9_4h_lt_10
)
# 15m & 1h down move, 15m & 1h & 4h still high, 15m & 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_100
| roc_9_4h_lt_40
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| roc_9_4h_lt_20
| roc_9_1d_lt_100
)
# 15m & 1h down move, 15m & 1h & 4h still high, 15m & 1h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
| roc_9_1h_lt_10
| roc_9_4h_lt_10
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h downtrend, 4h high & overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_85
| roc_9_4h_lt_30
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h high, 4h downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_80
| roc_9_4h_gt_neg_25
)
# 15m & 1h down move, 15m still high, 1h & 4h high, 1h overbought, 1d downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_1h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_90
| roc_9_1h_lt_20
| (roc_9_1d_gt_neg_30)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h high, 4h downtrend
& (
(rsi_3_15m_gt_25)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_60
| stochrsi_k_4h_lt_80
| roc_9_4h_gt_neg_15
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_90
| roc_9_4h_lt_60
)
# 15m & 1h down move, 15m & 1hstill high, 4h downtrend, 15m still high, 1h high
& (
(rsi_3_15m_gt_25)
| (rsi_3_1h_gt_60)
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| (cmf_20_4h_gt_neg_010)
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_85
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_70
)
# 15m & 1h down move, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| (rsi_3_1h_gt_60)
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_90
| roc_9_4h_lt_120
)
# 15m & 1h down move, 15m still high, 1h & 4h high, 1h & 4h & 1d overbought
& (
(rsi_3_15m_gt_25)
| (rsi_3_1h_gt_65)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_1h_lt_20
| roc_9_4h_lt_50
| roc_9_1d_lt_250
)
# 15m & 4h down move, 15m high, 1h still not low enough, 4h downtrend
& (
(rsi_3_15m_gt_25)
| (rsi_3_4h_gt_3)
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_20
| roc_9_4h_gt_neg_30
)
# 15m & 4h down move, 15m & 1h high, 4h downtrend
& (
(rsi_3_15m_gt_25)
| (rsi_3_4h_gt_10)
| aroonu_14_15m_lt_70
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_80
| roc_9_4h_gt_neg_30
)
# 15m & 4h & 1d down move, 15m still high, 1h & 4h downtrend
& (
(rsi_3_15m_gt_25)
| (rsi_3_4h_gt_15)
| rsi_3_1d_gt_15
| rsi_14_15m_lt_40
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_50
)
# 15m & 4h & 1d down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_25) | rsi_3_4h_gt_25 | rsi_3_1d_gt_30 | aroonu_14_15m_lt_60 | roc_9_1d_lt_50)
# 15m & 4h down move, 15m & 1h still high, 15m & 1h high, 4h downtrend
& (
(rsi_3_15m_gt_25)
| (rsi_3_4h_gt_3)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_70
| roc_9_4h_gt_neg_25
)
# 15m & 4h down move, 15m & 1h still not low enough, 4h still high, 1h & 4h downtrend, 15m & 1h & 4h still high
& (
(rsi_3_15m_gt_25)
| rsi_3_4h_gt_25
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_40
)
# 15m & 4h down move, 15m & 1h & 4h still high, 1h & 4h downtrend
& (
(rsi_3_15m_gt_25)
| rsi_3_4h_gt_25
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_50
| roc_9_1h_gt_neg_20
| roc_9_4h_gt_neg_30
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m & 4h high, 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_4h_gt_30
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| roc_9_1d_lt_50
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m & 1h high, 1h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_85
| stochrsi_k_1h_lt_80
| roc_9_1h_lt_10
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m & 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| roc_9_4h_lt_25
| roc_9_1d_lt_200
)
# 15m & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_50
)
# 15m & 1d down move, 1h & 4h still not low enough, 1h & 4h downtrend, 4h still high
& (
(rsi_3_15m_gt_25)
| rsi_3_1d_gt_25
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (protection_mfi_14_1h < 40.0)
| (protection_mfi_14_4h < 50.0)
| cmf_20_1h_gt_neg_0
| (cmf_20_4h_gt_neg_020)
| aroonu_14_1h_lt_50
| stochrsi_k_1h_lt_20
| stochrsi_k_4h_lt_40
)
# 15m down move, 15m & 1h & 4h still high, 15m & 1h & 4h high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_70
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_20
)
# 15m down move, 15m & 1h & 4h still high, 15m & 1h downtrend, 4h high, 15m & 1h still high
& (
(rsi_3_15m_gt_25)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_020)
| cmf_20_1h_gt_neg_010
| aroonu_14_4h_lt_70
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_40
)
# 15m down move, 15m still high, 1h >& 4h high, 15m & 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_25
)
# 15m down move, 15m still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_80)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_80
| stochrsi_k_15m_lt_50
| roc_9_4h_lt_25
)
# 15m down move, 15m still high, 1h & 4h high, 1d downtrend, 4h overbought
& (
(rsi_3_15m_gt_25)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_75)
| (protection_cmf_20_1d > -0.0)
| aroonu_14_4h_lt_90
| roc_9_4h_lt_50
)
# 15m down move, 15m & 1h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_25)
| (aroonu_14_15m_lt_80)
| aroonu_14_1h_lt_100
| stochrsi_k_1h_lt_90
| roc_9_1h_lt_10
| roc_9_4h_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 4h downtrend, 1h & 4h still not low enough
& (
(rsi_3_15m_gt_30)
| (rsi_3_1h_gt_15)
| (rsi_3_4h_gt_15)
| (rsi_14_15m_lt_10)
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| (cmf_20_15m_gt_neg_030)
| (cmf_20_4h_gt_neg_030)
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_30
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enugh, 4h still high, 15m still high, 1h & 4h downtrend
& (
(rsi_3_15m_gt_30)
| (rsi_3_1h_gt_15)
| (rsi_3_4h_gt_15)
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| (protection_aroonu_14_1h < 10.0)
| aroonu_14_4h_lt_40
| stochrsi_k_15m_lt_50
| roc_9_1h_gt_neg_20
| roc_9_4h_gt_neg_30
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| aroonu_14_15m_lt_30
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_30
| roc_9_1h_gt_neg_15
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 15m & 1h & 4h downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_035)
| roc_9_1h_gt_neg_10
| roc_9_4h_gt_neg_15
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 15m still high, 1h & 4h & 1d downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_3_1d_gt_30
| (rsi_14_15m_lt_25)
| (protection_rsi_14_1h < 25.0)
| (protection_rsi_14_4h < 25.0)
| aroonu_14_15m_lt_40
| roc_9_1h_gt_neg_15
| roc_9_4h_gt_neg_15
| (roc_9_1d_gt_neg_15)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend, 4h downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_4h_lt_40
| stochrsi_k_4h_lt_30
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h & 1d down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_40
| rsi_3_1d_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| cmf_20_15m_gt_neg_015
| aroonu_14_4h_lt_70
| (protection_cci_20_1h < -100.0)
| (protection_cci_20_4h < 0.0)
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 15m & 4h high, 4h overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_80
| roc_9_4h_lt_25
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 4h downtrend, 1d high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_45
| rsi_3_1d_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_4h_gt_neg_025)
| (protection_aroonu_14_1d < 90.0)
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m still not low enough, 4h high & overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (aroonu_14_15m_lt_25)
| aroonu_14_4h_lt_70
| roc_9_4h_lt_80
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| stochrsi_k_15m_lt_30
| roc_9_1d_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h downtrend, 15m & 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_025)
| (cmf_20_1h_gt_neg_030)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_60
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h stil high, 15m high, 4h downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| roc_9_4h_gt_neg_40
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_85
| roc_9_4h_lt_20
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 4h high, 1h still not low enough, 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_60
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_70
)
# 15m & 1h down move, 15m & 1h & 4h still high, 1h & 4h downtrend, 15m & 1h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
)
# 15m & 1h down move, 15m still not low enough, 1h sitll high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_4h_lt_20
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h still high, 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_50
| stochrsi_k_15m_lt_50
| stochrsi_k_4h_lt_70
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15h & 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| stochrsi_k_15m_lt_50
)
# 15m & 1h & 4h down move, 15m high
& ((rsi_3_15m_gt_30) | rsi_3_1h_gt_40 | rsi_3_4h_gt_40 | aroonu_14_15m_lt_70 | stochrsi_k_15m_lt_70)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_100
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
)
# 15m & 1h & 4h down move, 15m still low, 1h & 4h still high, 4h high & overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h stil high, 15m & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_20
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h high, 1d downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_3_1d_gt_45
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_85
| aroonu_14_4h_lt_100
| (roc_9_1d_gt_neg_50)
)
# 15m & 1h & 4h & 1d down move, 15m still not low enough, 1h & 4h still high, 4h downtrend, 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_3_1d_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| roc_9_4h_gt_neg_20
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_70
| stochrsi_k_15m_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h stil high, 15m & 4h still high, 4h overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_70
| roc_9_4h_lt_20
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
| roc_9_4h_lt_10
| roc_9_1d_lt_30
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (protection_cci_20_1h < 0.0)
| (protection_cci_20_4h < 0.0)
| roc_9_1d_lt_200
)
# 15m & 1h & 4h down move, 15m & 1h still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_80
| roc_9_4h_lt_70
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 15m still high, 1h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_20
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_025)
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_100
)
# 15m & 1h down move, 15m still not low enough, 1h stil high, 4h high, 1h downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| cmf_20_1h_gt_neg_010
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_80
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h high, 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_100
| roc_9_1d_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1h high, 1h & 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_60
| roc_9_1h_lt_20
| roc_9_1d_lt_80
)
# 15m & 1h & 4h & 1d down move, 15m & 4h downtrend, 15m & 1h high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_3_1d_gt_55
| (cmf_20_15m_gt_neg_025)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m high
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_15m_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend, 1h high, 4h downtrend
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_025)
| aroonu_14_1h_lt_80
| roc_9_4h_gt_neg_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_85
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_70
| roc_9_4h_lt_25
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 4h downtrend, 1h still high
& (
(rsi_3_15m_gt_30)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_4h_gt_neg_030)
| aroonu_14_1h_lt_40
| stochrsi_k_1h_lt_50
)
# 15m & 1h down move, 15m & 1h & 4h still high, 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_30)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_70
| roc_9_4h_lt_50
| roc_9_1d_lt_150
)
# 15m & 1h down move, 15m still high, 1h & 4h high & overbought
& (
(rsi_3_15m_gt_30)
| (rsi_3_1h_gt_60)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_90
| roc_9_1h_lt_50
| roc_9_4h_lt_100
)
# 15m & 1h down move, 15m still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_30)
| (rsi_3_1h_gt_65)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_80)
| aroonu_14_4h_lt_90
| roc_9_4h_lt_130
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m still high
& (
(rsi_3_15m_gt_30)
| (rsi_3_4h_gt_5)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_30
)
# 15m & 4h down move, 15m & 1h high, 4h downtrend
& (
(rsi_3_15m_gt_30)
| (rsi_3_4h_gt_15)
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_80
| roc_9_4h_gt_neg_50
)
# 15m & 4h down move, 15m & 1h still high, 1h & 4h downtrend, 15m & 1h still high
& (
(rsi_3_15m_gt_30)
| rsi_3_4h_gt_30
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_030)
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_50
| stochrsi_k_1h_lt_50
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m & 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_4h_gt_30
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
)
# 15m & 1h down move, 15m still high, 1h & 4h high & overbought
& (
(rsi_3_15m_gt_30)
| (rsi_3_1h_gt_65)
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_75)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_1h_lt_40
| roc_9_4h_lt_40
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m high
& (
(rsi_3_15m_gt_30)
| rsi_3_4h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (aroonu_14_15m_lt_80)
| stochrsi_k_15m_lt_50
)
# 15m & 4h down move, 15m & 1h & 4h stil high, 14m & 4h high
& (
(rsi_3_15m_gt_30)
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| aroonu_14_4h_lt_90
| stochrsi_k_15m_lt_50
| stochrsi_k_4h_lt_80
)
# 15m & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 4h high, 1d overbought
& (
(rsi_3_15m_gt_30)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| aroonu_14_4h_lt_30
| roc_9_1d_lt_200
)
# 15m down move, 15m still not low enough, 1h & 4h high
& (
(rsi_3_15m_gt_30)
| rsi_14_15m_lt_30
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| stochrsi_k_1h_lt_80
| stochrsi_k_4h_lt_80
)
# 15m down move, 15m & 1h & 4h still high, 15m high, 15m & 1h still high, 4h high, 4h overbought
& (
(rsi_3_15m_gt_30)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_70
| roc_9_4h_lt_20
)
# 15m & 1h down move, 15m & 1h still high, 1h & 4h high, 4h overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_20
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_4h_lt_20
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 4h still high, 1d downtrend
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_40
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_50)
)
# 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h high, 1d overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_45
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| (rsi_14_4h_lt_60)
| roc_9_1d_lt_200
)
# 15m & 1h & 4h down move, 15m & 1h still high, 4h high, 15m & 4h high, 4h overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_35
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| roc_9_4h_lt_20
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 15m high, 4h high & overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_40
)
# 15m & 1h & 4h down move, 15m & 1h high
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_100
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_70
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still high, 15m & 1h high, 1d overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_3_1d_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_70
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still highm 15m & 1h high, 1h still high, 4h high
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_85
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_70
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 4h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_60
| roc_9_4h_lt_10
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 4h high, 1d overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| aroonu_14_4h_lt_85
| stochrsi_k_15m_lt_50
| roc_9_1d_lt_40
)
# 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h downtrend, 1h still high, 4h high
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_030)
| (cmf_20_1h_gt_neg_030)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| (protection_stochk_14_3_3_1h < 60.0)
| (protection_stochk_14_3_3_4h < 90.0)
| roc_9_4h_lt_80
)
# 15m & 1h & 4h down move, 15m high
& ((rsi_3_15m_gt_35) | rsi_3_1h_gt_50 | rsi_3_4h_gt_50 | stochrsi_k_15m_lt_90)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m high, 1d overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_60
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_70
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h & 4h still high
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_15m_lt_60
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_50
)
# 15m & 1h & 4h down move, 15m & 1h & 4h stil high, 1h & 4h high, 1h overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_80
| roc_9_1h_lt_10
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m still high, 4h overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_50
| roc_9_4h_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 4h high, 1d overbought
& (
(rsi_3_15m_gt_35)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_70
| roc_9_1d_lt_75
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 1h high
& (
(rsi_3_15m_gt_35)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_90
| stochrsi_k_15m_lt_50
| stochrsi_k_1h_lt_70
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h downtrend, 15m high
& (
(rsi_3_15m_gt_35)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_4h_gt_neg_010)
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_70
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m still not low enough, 4h & 1h still high, 1d overbought
& (
(rsi_3_15m_gt_35)
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (aroonu_14_15m_lt_20)
| aroonu_14_4h_lt_40
| stochrsi_k_1h_lt_50
| roc_9_1d_lt_150
)
# 15m & 1h down move, 15m & 1h & 4h high, 1h overbought
& (
(rsi_3_15m_gt_35)
| (rsi_3_1h_gt_65)
| (rsi_14_15m_lt_50)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_90
| roc_9_1h_lt_20
)
# 15m & 4h down move, 15m & 1h high, 4h downtrend
& (
(rsi_3_15m_gt_35)
| (rsi_3_4h_gt_10)
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_50
| stochrsi_k_1h_lt_80
| roc_9_4h_gt_neg_30
)
# 15m & 4h down move, 15m still high, 1h high, 15m & 1h high
& (
(rsi_3_15m_gt_35)
| rsi_3_4h_gt_35
| rsi_14_15m_lt_40
| (rsi_14_1h_lt_70)
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
)
# 15m & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h high
& (
(rsi_3_15m_gt_35)
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_100
)
# 15m & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h downtrend, 15m & 1h still high
& (
(rsi_3_15m_gt_35)
| rsi_3_4h_gt_35
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_025)
| (cmf_20_4h_gt_neg_025)
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_50
| stochrsi_k_15m_lt_50
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m & 1h high, 4h downtrend
& (
(rsi_3_15m_gt_35)
| rsi_3_4h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_70
| roc_9_4h_gt_neg_20
)
# 15m down move, 15m still high, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_35)
| (rsi_14_15m_lt_50)
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| stochrsi_k_1h_lt_60
| stochrsi_k_4h_lt_60
| roc_9_1h_lt_20
| roc_9_4h_lt_20
)
# 15m down move, 15m & 1h still high, 4h high, 15m downtrend, 15m high, 1h & 4h overbought
& (
(rsi_3_15m_gt_35)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| cmf_20_15m_gt_neg_010
| aroonu_14_15m_lt_70
| roc_9_1h_lt_15
| roc_9_4h_lt_80
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 4h high & overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_15m_gt_neg_030)
| aroonu_14_4h_lt_70
| roc_9_4h_lt_70
)
# 15m & 1h & 4h down move, 15m & 1h sitll not low enough, 4h still high, 15m high
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_4h_lt_40
| stochrsi_k_15m_lt_70
)
# 15m & 1h & 4h & 1d down move, 1d downtrend, 4h still not low enough, 15m still high, 1h downtrend
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_45
| rsi_3_1d_gt_45
| (protection_cmf_20_1d > -0.40)
| aroonu_14_4h_lt_30
| stochrsi_k_15m_lt_50
| roc_9_1h_gt_neg_25
)
# 15m & 1h & 4h down move, 15m & 1h & 4h downtrend, 4h high
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_45
| cmf_20_15m_gt_neg_040
| (cmf_20_1h_gt_neg_040)
| (cmf_20_4h_gt_neg_040)
| aroonu_14_4h_lt_75
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 4h high & overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_30
| aroonu_14_4h_lt_80
| roc_9_4h_lt_50
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (protection_rsi_14_4h < 90.0)
| aroonu_14_4h_lt_90
| roc_9_4h_lt_80
)
# 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 15m still high, 4h high & overbought
& (
(rsi_3_15m_gt_10)
| rsi_3_1h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_40
| aroonu_14_4h_lt_80
| roc_9_4h_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m high, 1h & 4h downtrend
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| stochrsi_k_15m_lt_60
| roc_9_1h_gt_neg_30
| roc_9_4h_gt_neg_40
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m & 1h high
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h high
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_55
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
| aroonu_14_4h_lt_100
)
# 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still high, 15m & 1h high, 1d overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_60
| rsi_3_1d_gt_60
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_85
| roc_9_1d_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 4h downtrend, 4h overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| (cmf_20_4h_gt_neg_015)
| aroonu_14_4h_lt_50
| stochrsi_k_15m_lt_20
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_25
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 4h high & overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_50
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h downtrend, 1h high, 4h overbought
& (
(rsi_3_15m_gt_40)
| (rsi_3_1h_gt_65)
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_030)
| (aroonu_14_15m_lt_20)
| aroonu_14_1h_lt_70
| roc_9_4h_lt_10
)
# 15m & 1h down move, 15m & 1h & 4h still high, 15m still high, 1h high, 1h overbought
& (
(rsi_3_15m_gt_40)
| (rsi_3_1h_gt_65)
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_85
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_80
| roc_9_1h_lt_20
)
# 15m &4h down move, 15m & 1h & 4h still high, 15m still high, 1h high, 15m & 1h overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_80
| (roc_9_15m_lt_10)
| roc_9_1h_lt_40
)
# 15m & 4h down move, 15m & 1h & 4h still high, 15m & 1h high, 1h overbought
& (
(rsi_3_15m_gt_40)
| rsi_3_4h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| stochrsi_k_1h_lt_70
| roc_9_1h_lt_20
)
# 15m & 1d down move, 15m & 1h & 4h stil high, 4h high, 15m & 1h & 4h still high
& (
(rsi_3_15m_gt_40)
| rsi_3_1d_gt_20
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| stochrsi_k_15m_lt_50
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
)
# 15m down move, 15m & 1h still high, 4h high & overbought
& (
(rsi_3_15m_gt_40)
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| (protection_rsi_14_4h < 90.0)
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_85
| roc_9_4h_lt_100
)
# 15m down move, 15m still high, 1h & 4h high & overbought
& (
(rsi_3_15m_gt_40)
| (rsi_14_15m_lt_50)
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_1h_lt_70
| roc_9_4h_lt_80
)
# 15m down move, 15m & 1h & 4h still high, 15m & 1h & 4h high
& (
(rsi_3_15m_gt_40)
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_1h_lt_100
| aroonu_14_4h_lt_100
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 4h still high, 4h & 1d overbought
& (
(rsi_3_15m_gt_45)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_40
| roc_9_1d_lt_100
)
# 15m & 1h down move, 15m & 1h & 4h still high, 15m & 1h & 4h downtrend, 4h high
& (
(rsi_3_15m_gt_45)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| cmf_20_15m_gt_neg_010
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_90
)
# 15m & 1h down move, 15m & 1h & 4h still high, 1h & 4h & 1d downtrend, 1h & 4h high
& (
(rsi_3_15m_gt_45)
| rsi_3_1h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| (protection_cmf_20_1d > -0.30)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_90
)
# 15m & 1h down move, 1h & 4h still high, 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_45)
| rsi_3_1h_gt_45
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_80
| roc_9_1h_lt_30
| roc_9_4h_lt_100
)
# 15m & 1h & 4h & 1d down move, 15m still not low enough, 1h & 4h still high, 15m still high, 1d overbought
& (
(rsi_3_15m_gt_45)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_3_1d_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| stochrsi_k_15m_lt_50
| roc_9_1d_lt_80
)
# 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 15m still high, 4h high & overbought
& (
(rsi_3_15m_gt_45)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_70
| roc_9_4h_lt_40
)
# 15m & 1h down move, 15m & 1h still high, 4h high, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_45)
| (rsi_3_1h_gt_60)
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_90
| roc_9_1h_lt_30
| roc_9_4h_lt_80
)
# 15m & 1h down move, 15m still high, 1h high, 15m overbought
& (
(rsi_3_15m_gt_45)
| (rsi_3_1h_gt_60)
| aroonu_14_15m_lt_50
| aroonu_14_1h_lt_100
| stochrsi_k_15m_lt_50
| stochrsi_k_1h_lt_80
| (protection_roc_9_15m < 20.0)
)
# 15m & 4h down move, 15m & 1h & 4h still not low enough, 15m & 1h & 4h downtrend, 1h & 4h still high
& (
(rsi_3_15m_gt_45)
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| cmf_20_15m_gt_neg_015
| (cmf_20_1h_gt_neg_025)
| (cmf_20_4h_gt_neg_035)
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
)
# 15m down move, 15m & 1h & 4h high, 15m & 1h high, 4h & 1d overbought
& (
(rsi_3_15m_gt_45)
| (rsi_14_15m_lt_50)
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_70)
| aroonu_14_15m_lt_70
| aroonu_14_1h_lt_100
| roc_9_4h_lt_10
| roc_9_1d_lt_40
)
# 15m down move, 15m & 1h & 4h high, 1h & 4h high, 1h & 4h overbought
& (
(rsi_3_15m_gt_45)
| (rsi_14_15m_lt_50)
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
| roc_9_1h_lt_40
| roc_9_4h_lt_100
)
# 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 15m downtrend, 15m & 4h high
& (
(protection_rsi_3_15m > 55.0)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| cmf_20_15m_gt_neg_010
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_85
| stochrsi_k_15m_lt_70
)
# 15m & 1h down move, 15m & 1h & 4h high, 1h & 4h overbought
& (
(protection_rsi_3_15m > 55.0)
| (rsi_3_1h_gt_65)
| (rsi_14_15m_lt_50)
| (rsi_14_1h_lt_60)
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
| roc_9_1h_lt_30
| roc_9_4h_lt_70
)
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | stochrsi_k_15m_lt_50)
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | aroonu_14_4h_lt_20)
# 1h & 4h down move, 15m still not low enough, 4h downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_5) | rsi_14_15m_lt_30 | (cmf_20_4h_gt_neg_030))
# 1h & 4h down move, 1h downtrend, 4h still high
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (cmf_20_1h_gt_neg_030) | aroonu_14_4h_lt_50)
# 1h & 4h down move, 1h still not low enough, 4h still high, 1d overbought
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_35 | rsi_14_1h_lt_30 | rsi_14_4h_lt_50 | roc_9_1d_lt_80)
# 1h & 4h & 1d down move, 1d still not low enough, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | rsi_3_1d_gt_10 | (protection_aroonu_14_1d < 25.0) | (roc_9_1d_gt_neg_30))
# 1h & 4h down move, 1h & 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | cmf_20_1h_gt_neg_05 | cmf_20_4h_gt_neg_05)
# 1h & 4h down move, 15m & 1h & 4h downtrend, 1h & 4h still high
& (
(rsi_3_1h_gt_5)
| rsi_3_4h_gt_20
| (cmf_20_15m_gt_neg_020)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_50
)
# 1h & 4h down move, 15m & 1hg downtrend, 4h downtrend
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_20 | cmf_20_15m_gt_neg_040 | (cmf_20_1h_gt_neg_040) | roc_9_4h_gt_neg_20)
# 1h & 4h down move, 1h still high, 4h high, 1d overbought
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_30 | aroonu_14_1h_lt_50 | aroonu_14_4h_lt_85 | roc_9_1d_lt_50)
# 1h & 4h down move, 1h & 4h still high, 4h high, 15m & 1h downtrend
& (
(rsi_3_1h_gt_5)
| rsi_3_4h_gt_40
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_40
| stochrsi_k_4h_lt_70
| (protection_roc_9_15m > -10.0)
| roc_9_1h_gt_neg_20
)
# 1h & 4h down move, 15m & 1h still not low enough, 4h high, 1d overbought
& (
(rsi_3_1h_gt_5)
| rsi_3_4h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_70
| roc_9_1d_lt_100
)
# 1h & 4h down move, 15m & 1h & 4h downtrend, 1h high
& (
(rsi_3_1h_gt_10)
| rsi_3_4h_gt_20
| cmf_20_15m_gt_neg_0
| (cmf_20_1h_gt_neg_030)
| (cmf_20_4h_gt_neg_030)
| aroonu_14_1h_lt_60
)
# 1h & 4h down move, 1h & 4h downtrend, 1h high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (cmf_20_1h_gt_neg_040) | (cmf_20_4h_gt_neg_040) | aroonu_14_1h_lt_60)
# 1h & 4h & 1d down move, 1h & 4h still not low enough, 1h & 4h downtrend, 1h still not low enough
& (
(rsi_3_1h_gt_15)
| (rsi_3_4h_gt_15)
| rsi_3_1d_gt_15
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_020)
| stochrsi_k_1h_lt_20
)
# 1h & 4h down move, 1h & 4h still not low enough, 15m high, 1h & 4h downtrend
& (
(rsi_3_1h_gt_15)
| (rsi_3_4h_gt_15)
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_20
| stochrsi_k_15m_lt_80
| roc_9_1h_gt_neg_30
| roc_9_4h_gt_neg_30
)
# 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1h & 4h downtrend
& (
(rsi_3_1h_gt_15)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_30
| stochrsi_k_1h_lt_40
| roc_9_1h_gt_neg_10
)
# 1h & 4h down move, 1h still not low enough, 4h downtrend
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_3) | stochrsi_k_1h_lt_30 | roc_9_4h_gt_neg_25)
# 1h & 4h down move, 1h & 4h downtrend, 1h high, 4h downtrend
& (
rsi_3_1h_gt_20
| rsi_3_4h_gt_30
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_025)
| aroonu_14_1h_lt_80
| roc_9_4h_gt_neg_30
)
# 1h & 4h & 1d down move, 1h & 4h still not low enough, 1d high & overbought
& (
rsi_3_1h_gt_20
| rsi_3_4h_gt_40
| rsi_3_1d_gt_60
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_4h_lt_40
| (protection_aroonu_14_1d < 70.0)
| roc_9_1d_lt_100
)
# 1h & 1d down move, 15m & 1h & 4h still not low enough, 15m & 1h downtrend, 1h still high
& (
rsi_3_1h_gt_20
| rsi_3_1d_gt_30
| (rsi_14_15m_lt_10)
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_30
| (cmf_20_15m_gt_neg_030)
| (cmf_20_1h_gt_neg_030)
| stochrsi_k_1h_lt_40
)
# 1h & 4h & 1d down move, 1h still not low enough, 4h still high, 1d downtrend
& (
rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_3_1d_gt_30
| stochrsi_k_1h_lt_30
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_30)
)
# 1h & 4h down move, 1h & 4h still not low enough, 4h still high, 1h & 4h downtrend, 1d overbought
& (
rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_40
| roc_9_1h_gt_neg_20
| roc_9_4h_gt_neg_20
| roc_9_1d_lt_80
)
# 5m & 15m & 1h & 4h down move, 15m downtrend, 4h high, 1d overbought
& (
rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| cmf_20_15m_gt_neg_05
| cmf_20_1h_gt_neg_03
| cmf_20_4h_gt_neg_03
| aroonu_14_1h_lt_50
)
# 1h & 4h down move, 1h & 4h high, 4h overbought
& (
rsi_3_1h_gt_25
| rsi_3_4h_gt_60
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_4h_lt_80
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_80
)
# 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 4h still high
& (
(rsi_3_1h_gt_30)
| rsi_3_4h_gt_30
| rsi_3_1d_gt_5
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_4h_lt_40
)
# 1h & 4h down move, 1h & 4h still high, 1h still not low enough, 4h still high, 1h downtrend, 4h & 1d overbought
& (
(rsi_3_1h_gt_30)
| rsi_3_4h_gt_50
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_25
| aroonu_14_4h_lt_50
| roc_9_1h_gt_neg_10
| roc_9_4h_lt_20
| roc_9_1d_lt_100
)
# 1h & 4h down move, 1h & 4h still high, 4h high, 1h & 4h overbought
& (
(rsi_3_1h_gt_30)
| rsi_3_4h_gt_60
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_85
| roc_9_1h_lt_10
| roc_9_4h_lt_25
)
# 1h down move, 1h still high, 4h overbought
& (rsi_3_1h_gt_55 | rsi_14_1h_lt_40 | roc_9_4h_lt_300)
# 1h & 1d down move, 1h & 4h & 1d still high, 1h & 4h high, 4h overbought
& (
(rsi_3_1h_gt_60)
| rsi_3_1d_gt_25
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| (protection_mfi_14_1d < 50.0)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_90
| roc_9_4h_lt_25
)
# 4h down move, 15m & 1h & 4h still not low enough
& ((rsi_3_4h_gt_3) | rsi_14_15m_lt_20 | (rsi_14_1h_lt_20) | rsi_14_4h_lt_30)
# 4h down move, 1h & 4h downtrend, 1h still not low enough
& ((rsi_3_4h_gt_3) | (cmf_20_1h_gt_neg_020) | (cmf_20_4h_gt_neg_025) | aroonu_14_1h_lt_30)
# 4h down move, 1h & 4h downtrend, 1h & 4h & 1d downtrend
& (
(rsi_3_4h_gt_3)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_035)
| (protection_cci_20_change_pct_4h > 0.0)
| roc_9_1h_gt_neg_20
| roc_9_4h_gt_neg_25
| (roc_9_1d_gt_neg_25)
)
# 4h down move, 15m downtrend, 15m still not low enough, 1h high
& ((rsi_3_4h_gt_3) | (cmf_20_15m_gt_neg_020) | stochrsi_k_15m_lt_20 | stochrsi_k_1h_lt_70)
# 4h down move, 1h & 4h downtrend, 15m high
& ((rsi_3_4h_gt_3) | (cmf_20_1h_gt_neg_025) | (cmf_20_4h_gt_neg_030) | stochrsi_k_15m_lt_70)
# 4h down move, 15m & 1h high
& ((rsi_3_4h_gt_3) | aroonu_14_15m_lt_60 | aroonu_14_1h_lt_90)
# 4h down move, 15m high, 4h still high
& ((rsi_3_4h_gt_3) | aroonu_14_15m_lt_60 | aroonu_14_4h_lt_40 | stochrsi_k_15m_lt_50)
# 4h down move, 15m & 1h high, 4h downtrend
& ((rsi_3_4h_gt_3) | stochrsi_k_15m_lt_50 | stochrsi_k_1h_lt_50 | roc_9_4h_gt_neg_20)
# 4h & 1d down move, 15m still not low enough, 4h downtrend
& ((rsi_3_4h_gt_5) | rsi_3_1d_gt_5 | stochrsi_k_15m_lt_20 | roc_9_4h_gt_neg_40)
# 4h down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend, 4h & 15m still not low enough
& (
(rsi_3_4h_gt_5)
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| aroonu_14_4h_lt_30
| stochrsi_k_15m_lt_20
)
# 4h down move, 1h & 4h downtrend, 1h still not low enough, 4h high
& ((rsi_3_4h_gt_5) | cmf_20_1h_gt_neg_010 | (cmf_20_4h_gt_neg_020) | stochrsi_k_1h_lt_20 | stochrsi_k_4h_lt_40)
# 4h down mnove, 15m & 1h & 4h downtrend, 15m high, 4h downtrend
& (
(rsi_3_4h_gt_10)
| (cmf_20_15m_gt_neg_025)
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_010)
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_70
| roc_9_4h_gt_neg_30
)
# 4h down move, 15m & 1h & 4h still high, 15m high
& (
(rsi_3_4h_gt_10)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_60
| stochrsi_k_15m_lt_70
)
# 4h & 1d down move, 15m & 1h still not low enough, 4h still high, 4h downtrend, 1d overbought
& (
(rsi_3_4h_gt_15)
| rsi_3_1d_gt_65
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| rsi_14_4h_lt_40
| roc_9_4h_gt_neg_40
| roc_9_1d_lt_200
)
# 4h & 1d down move, 1h still high, 4h high, 1d downtrend
& (
rsi_3_4h_gt_25
| rsi_3_1d_gt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_100
| (roc_9_1d_gt_neg_40)
)
# 4h down move, 1h & 4h still not low enough, 15m high, 4h downtrend
& (
rsi_3_4h_gt_25
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_50
| stochrsi_k_15m_lt_50
| roc_9_4h_gt_neg_50
)
# 4h & 1d down move, 15m & 1h & 4h still not low enough, 4h downtrend, 1h still high, 4h downtrend
& (
rsi_3_4h_gt_30
| rsi_3_1d_gt_40
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| (rsi_14_4h_lt_20)
| (cmf_20_4h_gt_neg_025)
| stochrsi_k_1h_lt_50
| roc_9_4h_gt_neg_60
)
# 4h down move, 15m & 1h & 4h still high, 15m high, 4h still not low enough, 1d overbought
& (
rsi_3_4h_gt_35
| (rsi_14_15m_lt_50)
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| aroonu_14_4h_lt_30
| stochrsi_k_15m_lt_50
| stochrsi_k_4h_lt_30
| roc_9_1d_lt_50
)
# 4h down move, 15m high, 15m & 1h & 4h high, 4h & 1d overbought
& (
rsi_3_4h_gt_55
| (aroonu_14_15m_lt_80)
| stochrsi_k_15m_lt_50
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_80
| roc_9_4h_lt_20
| roc_9_1d_lt_30
)
# 1d down move, 15m & 1h still not low enough, 4h & 1d downtrend
& (
rsi_3_1d_gt_3
| rsi_14_15m_lt_20
| (rsi_14_1h_lt_20)
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_30
| roc_9_4h_gt_neg_30
| (roc_9_1d_gt_neg_50)
)
# 1d down move, 1h & 4h still not low enough, 1h still high & overbought, 1d downtrend
& (
rsi_3_1d_gt_3
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_1h_lt_50
| stochrsi_k_1h_lt_50
| roc_9_1h_lt_10
| (roc_9_1d_gt_neg_30)
)
# 1d down move, 15m & 1h & 4h still not low enough, 15m still not low enough, 1h high
& (
rsi_3_1d_gt_5
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_85
| stochrsi_k_1h_lt_80
)
# 1d down move, 15m still not low enough, 1h high, 1d downtrend
& (rsi_3_1d_gt_5 | rsi_14_15m_lt_30 | stochrsi_k_1h_lt_80 | (protection_roc_2_1d > -40.0))
# 1d down move, 15m high, 1h & 4h downtrend
& (rsi_3_1d_gt_5 | stochrsi_k_15m_lt_70 | roc_9_1h_gt_neg_60 | roc_9_4h_gt_neg_60)
# 1d down move, 1h still high, 4h high
& (rsi_3_1d_gt_5 | aroonu_14_1h_lt_40 | aroonu_14_4h_lt_70)
# 1d down move, 4h high, 1h & 4h downtrend
& (rsi_3_1d_gt_5 | stochrsi_k_4h_lt_70 | roc_9_1h_gt_neg_10 | roc_9_4h_gt_neg_10)
# 1d down move, 1h high & overbought, 4h & 1d downtrend
& (rsi_3_1d_gt_10 | stochrsi_k_1h_lt_80 | roc_9_1h_lt_10 | roc_9_4h_gt_neg_40 | (roc_9_1d_gt_neg_40))
# 1d down move, 1h & 4h still high, 1h & 4h downtrend, 1h & 4h high, 1d downtrend
& (
rsi_3_1d_gt_10
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| (cmf_20_1h_gt_neg_040)
| (cmf_20_4h_gt_neg_010)
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_85
| (roc_9_1d_gt_neg_40)
)
# 15m & 1h & 4h still high, 4h downtrend, 4h overbought
& ((rsi_14_15m_lt_50) | rsi_14_1h_lt_50 | (rsi_14_4h_lt_60) | cmf_20_4h_gt_neg_02 | roc_9_4h_lt_250)
# 4h red, 15m & 1h & 4h down move, 1h & 4h still high, 4h high
& (
(protection_change_pct_4h > -30.0)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_20
| rsi_3_4h_gt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_4h_lt_70
)
# 4h P&D, 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1h & 4h high
& (
(protection_change_pct_4h > -5.0)
| (protection_change_pct_4h.shift(48) < 5.0)
| (rsi_3_15m_gt_40)
| rsi_3_1h_gt_40
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
)
# 4h green with top wick, 15m & 1h down move, 15m still not low enough, 1h & 4h high
& (
(protection_change_pct_4h < 10.0)
| (top_wick_pct_4h_lt_10)
| (rsi_3_15m_gt_5)
| rsi_3_1h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_60
| aroonu_14_4h_lt_90
)
# 4h green with top wick, 1h down move, 1h still high, 4h high, 1d overbought
& (
(protection_change_pct_4h < 10.0)
| (top_wick_pct_4h_lt_10)
| rsi_3_1h_gt_45
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_90
| roc_9_1d_lt_20
)
# 4h green with top wick, 15m & 1h down move, 1h still high, 4h high
& (
(protection_change_pct_4h < 15.0)
| (protection_top_wick_pct_4h < 15.0)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_35
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_100
)
# 4h green with top wick, 15m & 1h down move, 1h & 4h high
& (
(protection_change_pct_4h < 15.0)
| (top_wick_pct_4h_lt_10)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_40
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_100
)
# 4h green, 15m & 1h down move, 15m still not low enough, 1h & 4h high
& (
(protection_change_pct_4h < 15.0)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_70)
| aroonu_14_1h_lt_70
| aroonu_14_4h_lt_100
)
# 1d red, 1h & 4h down move, 1h still high, 4d downtrend
& (
(protection_change_pct_1d > -40.0)
| rsi_3_1h_gt_55
| (rsi_3_4h_gt_10)
| stochrsi_k_1h_lt_50
| roc_9_4h_gt_neg_35
)
# 1d P&D, 15m & 4h down move, 15m & 4h still high
& (
(change_pct_1d_gt_neg_20)
| (protection_change_pct_1d.shift(288) < 20.0)
| rsi_3_15m_gt_20
| rsi_3_4h_gt_25
| stochrsi_k_15m_lt_40
| stochrsi_k_4h_lt_50
)
# 1d red, 15m & 1h & 4h down move, 1h still not low enough, 4h & 1d still high
& (
(change_pct_1d_gt_neg_20)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_25
| rsi_3_4h_gt_50
| (rsi_14_1h_lt_35)
| rsi_14_4h_lt_40
| stochrsi_k_4h_lt_40
| (protection_stochrsik_14_14_3_3_1d < 50.0)
)
# 1d red, 1h & 4h & 1d down move, 1h still not low enough, 4h & 1d still high, 1d downtrend
& (
(change_pct_1d_gt_neg_20)
| rsi_3_1h_gt_20
| rsi_3_4h_gt_50
| rsi_3_1d_gt_50
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (protection_rsi_14_1d < 40.0)
| stochrsi_k_4h_lt_40
| (protection_roc_9_1d > -20.0)
)
# 1d red, 15m & 1h & 4h down move, 1d high, 15m & 1h still high
& (
(change_pct_1d_gt_neg_20)
| rsi_3_15m_gt_30
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| (protection_aroonu_14_1d < 85.0)
| stochrsi_k_15m_lt_40
| stochrsi_k_1h_lt_50
)
# 1d P&D, 15m & 1h & 4h down move, 15m & 1h & 4h still high, 15m & 4h still high
& (
(protection_change_pct_1d > -15.0)
| (protection_change_pct_1d.shift(288) < 15.0)
| (protection_rsi_3_15m > 50.0)
| rsi_3_1h_gt_50
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_50
| aroonu_14_4h_lt_50
)
# 1d P&D, 15m & 1h & 4h & 1d down move, 4h still not low enough
& (
(change_pct_1d_gt_neg_10)
| (protection_change_pct_1d.shift(288) < 10.0)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_25
| (rsi_3_4h_gt_10)
| rsi_3_1d_gt_40
| rsi_14_4h_lt_30
)
# 1d P&D, 15m & 1h down move, 1h still not low enough, 4h still high, 15m downtrend, 1h still high
& (
(change_pct_1d_gt_neg_10)
| (protection_change_pct_1d.shift(288) < 10.0)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (cmf_20_15m_gt_neg_030)
| aroonu_14_1h_lt_50
)
# 1d P&D, 15m down move, 1h high
& (
(change_pct_1d_gt_neg_10)
| (protection_change_pct_1d.shift(288) < 20.0)
| (protection_top_wick_pct_1d.shift(288) < 20.0)
| (rsi_3_15m_gt_35)
| aroonu_14_1h_lt_70
)
# 1d P&D, 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1d overbought
& (
(change_pct_1d_gt_neg_10)
| (protection_change_pct_1d.shift(288) < 20.0)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_20
| rsi_3_4h_gt_50
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| roc_9_1d_lt_25
)
# 1d P&D, 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1h & 4h downtrend, 1d overbought
& (
(change_pct_1d_gt_neg_10)
| (protection_change_pct_1d.shift(288) < 50.0)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_15m_lt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| roc_9_1h_gt_neg_10
| roc_9_4h_gt_neg_10
| roc_9_1d_lt_100
)
# 1d red with top wick, 15m & 1h down move, 1h downtrend, 1h high
& (
(change_pct_1d_gt_neg_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_25
| cmf_20_1h_gt_neg_02
| aroonu_14_1h_lt_70
| stochrsi_k_1h_lt_40
)
# 1d P&D, 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d overbought
& (
(protection_change_pct_1d > -5.0)
| (protection_change_pct_1d.shift(288) < 10.0)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_45
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| roc_9_1d_lt_100
)
# 1d P&D, 15m & 1h & 4h down move, 1h & 4h still not low enough, 1h & 4h downtrend, 1d overbought
& (
(protection_change_pct_1d > -5.0)
| (protection_change_pct_1d.shift(288) < 10.0)
| rsi_3_15m_gt_25
| rsi_3_1h_gt_30
| rsi_3_4h_gt_30
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_30
| roc_9_1h_gt_neg_25
| roc_9_4h_gt_neg_25
| roc_9_1d_lt_50
)
# 1d red, 15m & 1h & 4h down move, 1h & 4h still not low enough, 1d high, 4h downtrend, 1d overbought
& (
(protection_change_pct_1d > -5.0)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| (protection_aroonu_14_1d < 85.0)
| roc_9_4h_gt_neg_30
| roc_9_1d_lt_20
)
# 1d green with top wick, 15m & 1h & 1d down move, 1h still not low enough, 4h still high, 1d overbought
& (
(change_pct_1d_lt_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_30
| rsi_3_1d_gt_65
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| stochrsi_k_4h_lt_50
| roc_9_1d_lt_20
)
# 1d green with top wick, 15m & 1h & 4h down move, 1h & 4h still high
& (
(change_pct_1d_lt_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_25
| rsi_3_4h_gt_65
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_1h_lt_30
| aroonu_14_4h_lt_60
)
# 1d green with top wick, 15m down move, 1h & 4h high, 1d overbought
& (
(change_pct_1d_lt_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_10
| (rsi_14_1h_lt_70)
| (rsi_14_4h_lt_80)
| stochrsi_k_4h_lt_90
| roc_9_1d_lt_40
)
# 1d green with top wick, 15m down move, 15m & 1h still high, 4h & 1d high, 4h overbought
& (
(change_pct_1d_lt_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_10
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_75)
| aroonu_14_4h_lt_80
| (protection_aroonu_14_1d < 90.0)
| roc_9_4h_lt_25
)
# 1d green with top wick, 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high
& (
(change_pct_1d_lt_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_25
| rsi_3_4h_gt_65
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_30
| aroonu_14_4h_lt_60
)
# 1d green with top wick, 15m down move, 15m & 1h still high, 4h high & overbought
& (
(change_pct_1d_lt_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_15
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| aroonu_14_4h_lt_70
| roc_9_4h_lt_80
)
# 1d green with top wick, 1h & 4h down move, 1h & 4h still high
& (
(change_pct_1d_lt_10)
| (top_wick_pct_1d_lt_10)
| rsi_3_1h_gt_55
| rsi_3_4h_gt_55
| aroonu_14_1h_lt_50
| aroonu_14_4h_lt_50
)
# 1d green with top wick, 15m & 1h down move, 15m & 1h & 4h still high, 4h high & overbought
& (
(protection_change_pct_1d < 20.0)
| (top_wick_pct_1d_lt_20)
| rsi_3_15m_gt_15
| rsi_3_1h_gt_45
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_70
| roc_9_4h_lt_20
)
# 1d green with top wick, 1h & 4h down move, 1h still not low enough, 4h still high, 4h & 1d overbought
& (
(protection_change_pct_1d < 20.0)
| (top_wick_pct_1d_lt_20)
| rsi_3_1h_gt_45
| rsi_3_4h_gt_50
| rsi_14_1h_lt_30
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_10
| roc_9_1d_lt_50
)
# 1d green with top wick, 15m down move, 15m & 1h & 4h still high, 4h & 1d overbought
& (
(protection_change_pct_1d < 25.0)
| (top_wick_pct_1d_lt_25)
| (rsi_3_15m_gt_40)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| stochrsi_k_15m_lt_30
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_20
| roc_9_1d_lt_50
)
# 1d green with top wick, 15m & 1h & 4h down move, 15m still not low enough, 4h high, 1d overbought
& (
(change_pct_1d_lt_30)
| (top_wick_pct_1d_lt_10)
| rsi_3_15m_gt_30
| rsi_3_1h_gt_30
| (protection_rsi_3_4h > 70.0)
| (rsi_14_4h_lt_60)
| (aroonu_14_15m_lt_25)
| aroonu_14_4h_lt_70
| roc_9_1d_lt_40
)
# 1d green with top wick, 15m & 1h & 4h down move, 1h still not low enough, 4h still high, 1d overbought
& (
(change_pct_1d_lt_30)
| (top_wick_pct_1d_lt_20)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_40
| rsi_3_4h_gt_40
| aroonu_14_1h_lt_20
| aroonu_14_4h_lt_50
| roc_9_1d_lt_100
)
# 1d green with top wick, 15m down move, 15m & 1h still high, 4h high & overbought
& (
(change_pct_1d_lt_30)
| (top_wick_pct_1d_lt_20)
| (rsi_3_15m_gt_35)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| aroonu_14_4h_lt_80
| roc_9_4h_lt_50
)
# 1d green with top wick, 1h down move, 1h still high, 4h high & overbought, 1d overbought
& (
(change_pct_1d_lt_30)
| (top_wick_pct_1d_lt_20)
| rsi_3_1h_gt_50
| rsi_14_1h_lt_40
| (rsi_14_4h_lt_60)
| aroonu_14_4h_lt_70
| roc_9_4h_lt_40
| roc_9_1d_lt_50
)
# 1d green with top wick, 15m & 1h down move, 1h & 4h still high, 4h overbought
& (
(change_pct_1d_lt_30)
| (protection_top_wick_pct_1d < 30.0)
| rsi_3_15m_gt_25
| rsi_3_1h_gt_25
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_4h_lt_80
| roc_9_4h_lt_30
)
# 1d green with top wick, 15m & 4h down move, 15m & 1h still high, 1d overbought
& (
(change_pct_1d_lt_30)
| (protection_top_wick_pct_1d < 30.0)
| (protection_rsi_3_15m > 50.0)
| rsi_3_4h_gt_60
| aroonu_14_15m_lt_50
| stochrsi_k_1h_lt_50
| roc_9_1d_lt_100
)
# 1d green, 15m & 4h down move, 4h still high, 4h & 1d overbought
& ((change_pct_1d_lt_50) | rsi_3_15m_gt_15 | rsi_3_4h_gt_25 | rsi_14_4h_lt_50 | roc_9_4h_lt_40 | roc_9_1d_lt_100)
# 1d green with top wick, 15m & 1h & 4h down move, 1h & 4h still high, 4h high
& (
(change_pct_1d_lt_50)
| (top_wick_pct_1d_lt_50)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_20
| rsi_3_4h_gt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| aroonu_14_4h_lt_70
)
# 1d green with top wick, 1d down move, 4h still high & overbought
& (
(change_pct_1d_lt_50)
| (top_wick_pct_1d_lt_50)
| rsi_3_1h_gt_45
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_50
| roc_9_4h_lt_50
)
# 1d green with top wick, 4h down move, 4h still high, 1d overbought
& ((change_pct_1d_lt_50) | (top_wick_pct_1d_lt_50) | rsi_3_4h_gt_40 | rsi_14_4h_lt_40 | roc_9_1d_lt_200)
# 1d green, 15m & 4h down move, 15m & 1h & 4h still high, 15m high, 4h & 1d overbought
& (
(change_pct_1d_lt_50)
| (protection_rsi_3_15m > 50.0)
| rsi_3_4h_gt_50
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_15m_lt_60
| roc_9_4h_lt_30
| roc_9_1d_lt_200
)
# 4h top wick, 15m down move, 15m still not low enough, 1h & 4h still high, 4h overbought
& (
(protection_top_wick_pct_4h < 20.0)
| rsi_3_15m_gt_25
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| stochrsi_k_1h_lt_50
| stochrsi_k_4h_lt_50
| roc_9_4h_lt_50
)
# 4h top wick, 15m & 1h down move, 15m & 1h still high, 1h & 4h high
& (
(protection_top_wick_pct_4h < 20.0)
| (rsi_3_15m_gt_40)
| rsi_3_1h_gt_55
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_60)
| aroonu_14_15m_lt_40
| aroonu_14_1h_lt_85
| aroonu_14_4h_lt_100
)
# 1d top wick, 1h & 4h down move, 15m downtrend, 4h still high, 1d overbought
& (
(top_wick_pct_1d_lt_20)
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_45
| cmf_20_15m_gt_neg_02
| aroonu_14_4h_lt_50
| roc_9_1d_lt_80
)
# 1d top wick, 4h down move, 4h still high, 1d overbought
& ((top_wick_pct_1d_lt_25) | rsi_3_4h_gt_25 | (rsi_14_4h_lt_45) | aroonu_14_4h_lt_40 | roc_9_1d_lt_200)
# 1d top wick, 15m & 1h & 4h down move, 15m & 1h downtrend, 4h still high
& (
(top_wick_pct_1d_lt_25)
| rsi_3_15m_gt_10
| rsi_3_1h_gt_30
| rsi_3_4h_gt_50
| (cmf_20_15m_gt_neg_025)
| (cmf_20_1h_gt_neg_025)
| aroonu_14_4h_lt_50
)
# 1d top wick, 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high
& (
(top_wick_pct_1d_lt_25)
| rsi_3_15m_gt_30
| (rsi_3_1h_gt_60)
| rsi_3_4h_gt_60
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_15m_lt_30
| aroonu_14_4h_lt_50
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_20
)
# 1d top wick, 15m down move, 15m stil high, 1h & 4h high, 4h overbought
& (
(top_wick_pct_1d_lt_25)
| (rsi_3_15m_gt_35)
| rsi_14_15m_lt_40
| rsi_14_1h_lt_50
| (rsi_14_4h_lt_80)
| aroonu_14_1h_lt_80
| aroonu_14_4h_lt_80
| roc_9_4h_lt_50
)
# 1d top wick, 15m & 1h & 4h down move, 15m & 1h & 4h still high
& (
(protection_top_wick_pct_1d < 80.0)
| (rsi_3_15m_gt_40)
| (rsi_3_1h_gt_65)
| rsi_3_4h_gt_65
| rsi_14_15m_lt_40
| rsi_14_1h_lt_40
| rsi_14_4h_lt_40
| aroonu_14_4h_lt_50
)
# pump, drop but not yet near the previous lows, 15m & 1h & 4h & 1d down move, 1d overbought
& (
(((protection_high_max_6_1d - protection_low_min_6_1d) / protection_low_min_6_1d) < 1.5)
| (protection_close > (protection_high_max_6_4h * 0.70))
| (protection_close < (protection_low_min_6_1d * 1.25))
| rsi_3_15m_gt_15
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_3_1d_gt_45
| roc_9_1d_lt_20
)
# pump, drop in lays days, 1h & 4h down move, 1h & 4h still not low enough, 1d overbought
& (
(((protection_high_max_12_1d - protection_low_min_12_1d) / protection_low_min_12_1d) < 3.0)
| (protection_close > (protection_high_max_24_4h * 0.70))
| (rsi_3_1h_gt_15)
| rsi_3_1d_gt_50
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| roc_9_1d_lt_20
)
# pump, 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1h downtrend, 1h high
& (
(((protection_high_max_12_1d - protection_low_min_12_1d) / protection_low_min_12_1d) < 3.0)
| rsi_3_15m_gt_20
| rsi_3_1h_gt_30
| rsi_3_4h_gt_40
| rsi_14_15m_lt_20
| rsi_14_1h_lt_30
| rsi_14_4h_lt_40
| cmf_20_1h_gt_neg_010
| aroonu_14_1h_lt_70
)
# pump, drop in last 6 days, 1h & 4h down move, 1h & 4h still not low enough, 4h downtrend, 4h & 1d downtrend
& (
(((protection_high_max_30_1d - protection_low_min_30_1d) / protection_low_min_30_1d) < 10.0)
| (protection_close > (protection_high_max_6_1d * 0.50))
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| (cmf_20_4h_gt_neg_010)
| roc_9_4h_gt_neg_15
| (roc_9_1d_gt_neg_25)
)
# drop in the last 4 hours, 1h & 4h high
& ((protection_close > (protection_close_max_48 * 0.30)) | aroonu_14_1h_lt_85 | aroonu_14_4h_lt_85)
# drop in last 12 hours, 14m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high & overbought
& (
(protection_close > (protection_high_max_12_1h * 0.50))
| rsi_3_15m_gt_20
| rsi_3_1h_gt_35
| rsi_3_4h_gt_55
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| rsi_14_4h_lt_50
| aroonu_14_4h_lt_80
| roc_9_4h_lt_25
)
# drop in last 12 hours, 1h & 4h down move, 1h & 4h downtrend
& (
(protection_close > (protection_high_max_12_1h * 0.35))
| (rsi_3_1h_gt_15)
| (rsi_3_4h_gt_5)
| roc_9_1h_gt_neg_50
| roc_9_4h_gt_neg_50
)
# drop in last 4 days, 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h overbought
& (
(protection_close > (protection_high_max_24_4h * 0.40))
| rsi_3_15m_gt_10
| rsi_3_1h_gt_25
| rsi_3_4h_gt_50
| rsi_14_15m_lt_30
| rsi_14_1h_lt_40
| roc_9_4h_lt_20
)
# drop in last 4 days, 15m & 1h & 4h & 1d down move, 4h high
& (
(protection_close > (protection_high_max_24_4h * 0.40))
| rsi_3_15m_gt_10
| rsi_3_1h_gt_40
| rsi_3_4h_gt_60
| rsi_3_1d_gt_10
| stochrsi_k_4h_lt_80
)
# drop in last 6 days, 15m & 1h & 4h & 1d down move, 1d high, 4h downtrend
& (
(protection_close > (protection_high_max_24_4h * 0.35))
| (rsi_3_15m_gt_5)
| rsi_3_1h_gt_25
| rsi_3_4h_gt_25
| rsi_3_1d_gt_30
| (protection_aroonu_14_1d < 80.0)
| roc_9_4h_gt_neg_40
)
# drop in last 4 days, 15m & 1d down move, 15m still not low enough, 1h still high, 1d high, 4h downtrend
& (
(protection_close > (protection_high_max_24_4h * 0.35))
| rsi_3_15m_gt_15
| rsi_3_1d_gt_30
| (aroonu_14_15m_lt_25)
| aroonu_14_1h_lt_40
| (protection_aroonu_14_1d < 80.0)
| roc_9_4h_gt_neg_50
)
# drop in last 4 days, 1h & 5h & 1d down move, 1h still high, 1h & 4h downtrend
& (
(protection_close > (protection_high_max_24_4h * 0.25))
| rsi_3_1h_gt_20
| rsi_3_4h_gt_25
| rsi_3_1d_gt_25
| aroonu_14_1h_lt_50
| roc_9_1h_gt_neg_20
| roc_9_4h_gt_neg_35
)
# drop in last 4 days, 1d down move, 1h & 4h downtrend, 15m & 4h downtrend
& (
(protection_close > (protection_high_max_24_4h * 0.25))
| rsi_3_1d_gt_15
| (cmf_20_1h_gt_neg_020)
| (cmf_20_4h_gt_neg_020)
| (protection_roc_9_15m > -15.0)
| roc_9_4h_gt_neg_20
)
# drop in last 6 days, 15m & 1d down move, 1h still high, 4h high, 4h downtrend
& (
(protection_close > (protection_high_max_6_1d * 0.25))
| rsi_3_15m_gt_15
| rsi_3_1d_gt_15
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_60
| roc_9_4h_gt_neg_25
)
# drop in last 6 days, 15m & 1h down move, 15m & 1h still not low enough, 15m & 1h & 4h & 1d downtrend
& (
(protection_close > (protection_high_max_6_1d * 0.25))
| rsi_3_15m_gt_25
| rsi_3_1h_gt_30
| rsi_14_15m_lt_30
| cmf_20_15m_gt_neg_010
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_040)
| (protection_cmf_20_1d > -0.50)
| aroonu_14_1h_lt_30
)
# drop in last 4 days, 4h & 1d down move, 1h high
& (
(protection_close > (protection_high_max_24_4h * 0.15)) | rsi_3_4h_gt_25 | rsi_3_1d_gt_25 | stochrsi_k_1h_lt_70
)
# drop in last 4 days, 1d down move, 1d downtrendm 1h still high, 1d downtrend
& (
(protection_close > (protection_high_max_24_4h * 0.15))
| rsi_3_1d_gt_20
| (protection_cmf_20_1d > -0.30)
| aroonu_14_1h_lt_50
| (protection_roc_2_1d > -40.0)
)
# drop in last 6 days, 1d down move, 1h & 4h & 1d downtrend, 1d still high, 4h downtrend
& (
(protection_close > (protection_high_max_6_1d * 0.15))
| rsi_3_1d_gt_20
| cmf_20_1h_gt_neg_010
| (cmf_20_4h_gt_neg_040)
| (protection_cmf_20_1d > -0.50)
| (protection_aroonu_14_1d < 50.0)
| roc_9_4h_gt_neg_30
)
# drop in last 12 days. 15m & 1h & 4h & 1d down move, 4h still high, 1d downtrend
& (
(protection_close > (protection_high_max_12_1d * 0.25))
| rsi_3_15m_gt_10
| (rsi_3_1h_gt_10)
| rsi_3_4h_gt_35
| rsi_3_1d_gt_35
| stochrsi_k_4h_lt_50
| (roc_9_1d_gt_neg_40)
)
# drop in last 12 days, 15m & 1h down move, 1h still not low enough, 4h high
& (
(protection_close > (protection_high_max_12_1d * 0.25))
| rsi_3_15m_gt_15
| rsi_3_1h_gt_30
| rsi_14_1h_lt_30
| rsi_14_4h_lt_30
| stochrsi_k_1h_lt_40
| stochrsi_k_4h_lt_70
)
# drop in last 20 days, 15m & 1h & 1d down move, 15m still not low enough, 1h high
& (
(protection_close > (protection_high_max_20_1d * 0.05))
| rsi_3_15m_gt_10
| rsi_3_1h_gt_25
| rsi_3_1d_gt_25
| aroonu_14_15m_lt_30
| aroonu_14_1h_lt_80
)
# drop in last 20 days, 1h & 4h & 1d down move, 1h & 4h still not low enough, 1h & 4h & 1d downtrend
& (
(protection_close > (protection_high_max_20_1d * 0.01))
| rsi_3_1h_gt_45
| rsi_3_4h_gt_60
| rsi_3_1d_gt_15
| (protection_rsi_14_1h < 15.0)
| (rsi_14_4h_lt_20)
| cmf_20_1h_gt_neg_0
| (cmf_20_4h_gt_neg_010)
| (protection_cmf_20_1d > -0.40)
| (protection_cci_20_1h < -150.0)
| (cci_20_4h_lt_neg_200)
| (protection_roc_2_1d > -25.0)
| (protection_roc_9_1d > -60.0)
)
# drop in last 30 days, 15m & 1h down move, 1h still high, 4h high & overbought
& (
(protection_close > (protection_high_max_30_1d * 0.10))
| rsi_3_15m_gt_10
| rsi_3_1h_gt_55
| aroonu_14_1h_lt_40
| aroonu_14_4h_lt_85
| roc_9_4h_lt_80
)
# drop in last 30 days, 15m down move, 15m & 1h high
& (
(protection_close > (protection_high_max_30_1d * 0.05))
| rsi_3_15m_gt_15
| rsi_3_4h_gt_50
| (aroonu_14_15m_lt_80)
| stochrsi_k_1h_lt_85
)
# drop in last 30 days, 15m & 1h & 4h down move, 15m still not low enough, 1h high
& (
(protection_close > (protection_high_max_30_1d * 0.05))
| rsi_3_15m_gt_25
| rsi_3_1h_gt_25
| rsi_3_4h_gt_40
| stochrsi_k_15m_lt_20
| stochrsi_k_1h_lt_40
)
)
df["global_protections_long_pump"] = True
df["global_protections_long_dump"] = True
df["protections_long_rebuy"] = True
# Global protections Short
df["protections_short_global"] = (
# 5m & 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 4h still low, 1h uptrend
(
(protection_rsi_3 < 90.0)
| rsi_3_15m_lt_75
| rsi_3_1h_lt_75
| (protection_rsi_3_4h < 75.0)
| rsi_14_15m_gt_90
| rsi_14_1h_gt_85
| rsi_14_4h_gt_70
| (stochrsik_14_14_3_3_4h_gt_60)
| roc_9_1h_lt_15
)
# 5m & 15m up move, 15m & 1h & 4h still low, 15m & 1h low, 4h still low
& (
(protection_rsi_3 < 90.0)
| rsi_3_15m_lt_75
| (protection_rsi_14_15m > 60.0)
| (protection_rsi_14_1h > 50.0)
| (protection_rsi_14_4h > 40.0)
| (protection_aroonu_14_15m > 20.0)
| (protection_aroonu_14_1h > 20.0)
| (protection_aroonu_14_4h > 40.0)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 1h & 4h still low, 4h low
& (
rsi_3_15m_lt_90
| rsi_3_1h_lt_60
| (rsi_3_4h_lt_60)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_70
| rsi_14_4h_gt_70
| (protection_aroonu_14_1h > 60.0)
| (protection_aroonu_14_4h > 60.0)
| (protection_stochrsik_14_14_3_3_4h > 40.0)
)
# 15m & 1h & 4h up move, 15m still not high enough, 1h & 4h still low, 1h low
& (
rsi_3_15m_lt_90
| rsi_3_1h_lt_60
| (protection_rsi_3_4h < 35.0)
| rsi_14_15m_gt_80
| (protection_rsi_14_1h > 60.0)
| rsi_14_4h_gt_60
| (protection_aroonu_14_1h > 40.0)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 4h uptrend
& (
(rsi_3_15m_lt_95)
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| (protection_cci_20_1h > 200.0)
| (protection_cci_20_4h > 150.0)
| roc_9_4h_lt_20
)
# 15m & 1h & 4h up move, 1h & 4h still now high enough, 15m uptrend, 1h still not high enough
& (
(rsi_3_15m_lt_95)
| (protection_rsi_3_1h < 50.0)
| (protection_rsi_3_4h < 50.0)
| rsi_14_1h_gt_70
| rsi_14_4h_gt_70
| (protection_cmf_20_15m < 0.20)
| (stochrsik_14_14_3_3_1h_gt_70)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 1h & 4h & 1d uptrend
& (
rsi_3_15m_lt_90
| rsi_3_1h_lt_90
| (rsi_3_4h_lt_80)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| roc_9_1h_lt_10
| roc_9_4h_lt_20
| roc_9_1d_lt_80
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 1h & 4h uptrend
& (
rsi_3_15m_lt_90
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| (cci_20_1h_gt_250)
| (cci_20_4h_gt_200)
| roc_9_1h_lt_10
| roc_9_4h_lt_40
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 15m uptrend, 4h still low
& (
rsi_3_15m_lt_90
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_70
| (protection_cmf_20_15m < 0.25)
| (stochrsik_14_14_3_3_4h_gt_60)
)
# 15m & 1h & 4h up move, 15m still not high enough, 1h & 4h still low, 4h still low
& (
rsi_3_15m_lt_90
| rsi_3_1h_lt_60
| (rsi_3_4h_lt_60)
| rsi_14_15m_gt_80
| (protection_rsi_14_1h > 60.0)
| rsi_14_4h_gt_60
| (protection_aroonu_14_4h > 50.0)
)
# 15m & 1h & 4h up move, 15m & 1h still not high enough, 1h & 4h uptrend
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_85
| (protection_rsi_3_4h < 85.0)
| (protection_aroonu_14_15m > 70.0)
| (protection_stochrsik_14_14_3_3_15m > 80.0)
| (protection_stochrsik_14_14_3_3_1h > 80.0)
| roc_9_1h_lt_10
| roc_9_4h_lt_30
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 15m & 1h & 4h uptrend
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_85
| (rsi_3_4h_lt_80)
| rsi_14_15m_gt_85
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| (protection_cmf_20_15m < 0.20)
| (protection_cmf_20_1h < 0.10)
| (protection_cmf_20_4h < 0.10)
)
# 15m & 1h & 4h up move, 1h still low, 4h & 1d uptrend
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_85
| (rsi_3_4h_lt_70)
| (protection_stochrsik_14_14_3_3_1h > 50.0)
| roc_9_4h_lt_80
| roc_9_1d_lt_100
)
# 15m & 1h & 4h up move, 1h & 4h still not high enough, 4h overbought
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| (protection_aroonu_14_4h > 70.0)
| (protection_stochrsik_14_14_3_3_1h > 80.0)
| (stochrsik_14_14_3_3_4h_gt_80)
| roc_9_4h_lt_10
)
# 15m & 1h & 4h up move, 1h still nt high enough, 1h & 4h uptrend
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_70
| (rsi_3_4h_lt_70)
| (protection_aroonu_14_1h > 70.0)
| (stochrsik_14_14_3_3_1h_gt_70)
| (protection_roc_9_1h < 45.0)
| (protection_roc_9_4h < 45.0)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 1h still low, 1h & 4h uptrend
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_70
| (rsi_3_4h_lt_70)
| rsi_14_15m_gt_70
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| (protection_stochrsik_14_14_3_3_1h > 60.0)
| roc_9_1h_lt_20
| roc_9_4h_lt_40
)
# 15m & 1h & 4h up move, 4h still not high enough, 15m & 1h & 4h uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| (protection_stochrsik_14_14_3_3_4h > 75.0)
| (roc_9_15m_lt_10)
| roc_9_1h_lt_10
| roc_9_4h_lt_20
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 4h low, 1h & 4h uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_60)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_60
| (protection_stochrsik_14_14_3_3_4h > 40.0)
| roc_9_1h_lt_20
| roc_9_4h_lt_20
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 4h still low, 15m & 1h & 4h uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_80
| (protection_rsi_3_4h < 55.0)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_70
| (protection_aroonu_14_4h > 70.0)
| (roc_9_15m_lt_10)
| roc_9_1h_lt_10
| roc_9_4h_lt_20
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 15m uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_70
| (rsi_3_4h_lt_70)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_70
| rsi_14_4h_gt_70
| (protection_aroonu_14_4h > 70.0)
| (protection_stochrsik_14_14_3_3_15m > 90.0)
| (roc_9_15m_lt_10)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 1h low, 4h overbought
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_70
| (rsi_3_4h_lt_70)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| (protection_stochrsik_14_14_3_3_1h > 40.0)
| roc_9_4h_lt_30
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 4h low
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_70
| (protection_rsi_3_4h < 35.0)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_70
| rsi_14_4h_gt_60
| (protection_stochrsik_14_14_3_3_4h > 30.0)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 4h low, 4h overbought
& (
rsi_3_15m_lt_75
| rsi_3_1h_lt_75
| (rsi_3_4h_lt_70)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_70
| (protection_aroonu_14_4h > 30.0)
| roc_9_4h_lt_10
)
# 15m & 1h & 4h up move, 15m low, 1h uptrend
& (
rsi_3_15m_lt_70
| (protection_rsi_3_1h < 95.0)
| (protection_rsi_3_4h < 85.0)
| (protection_stochrsik_14_14_3_3_15m > 30.0)
| (protection_roc_9_1h < 25.0)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h uptrend, 15m still low, 1h uptrend
& (
rsi_3_15m_lt_70
| rsi_3_1h_lt_70
| (rsi_3_4h_lt_70)
| (protection_cmf_20_15m < 0.20)
| (protection_cmf_20_1h < 0.20)
| (protection_cmf_20_4h < 0.20)
| (protection_stochrsik_14_14_3_3_15m > 50.0)
| roc_9_1h_lt_50
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 4h uptrend
& (
rsi_3_15m_lt_70
| rsi_3_1h_lt_60
| (rsi_3_4h_lt_60)
| rsi_14_15m_gt_70
| rsi_14_1h_gt_70
| rsi_14_4h_gt_70
| (stochrsik_14_14_3_3_1h_gt_70)
| roc_9_4h_lt_50
)
# 1h & 4h up move, 1d still low, 15m & 4h still not high enough
& (
(protection_rsi_3_1h < 95.0)
| (rsi_3_4h_lt_80)
| (rsi_14_1d_gt_50)
| (protection_stochrsik_14_14_3_3_15m > 70.0)
| (protection_stochrsik_14_14_3_3_4h > 70.0)
)
# 1h & 4h up move, 1d still low, 1h & 4h & 1d uptrend
& (rsi_3_1h_lt_90 | (rsi_3_4h_lt_90) | (rsi_14_1d_gt_50) | roc_9_1h_lt_20 | roc_9_4h_lt_20 | roc_9_1d_lt_20)
# 4h up move, 15m & 1h & 4h still not high enough, 1d still low, 4h still not high enough, 1d still low
& (
(rsi_3_4h_lt_90)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| (rsi_14_1d_gt_50)
| (stochrsik_14_14_3_3_4h_gt_80)
| (protection_stochrsik_14_14_3_3_1d > 50.0)
)
# 4h up move, 15m & 1h & 4h still not high enough, 15m low, 15m & 1h & 4h uptrend
& (
(rsi_3_4h_lt_90)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_80
| (protection_stochrsik_14_14_3_3_15m > 40.0)
| (protection_roc_9_15m < 20.0)
| roc_9_1h_lt_15
| roc_9_4h_lt_15
)
# 4h up move, 15m & 1h & 4h still not high enough, 1h still low, 1h & 4h overbought
& (
(rsi_3_4h_lt_90)
| rsi_14_15m_gt_80
| rsi_14_1h_gt_80
| rsi_14_4h_gt_90
| (protection_stochrsik_14_14_3_3_1h > 60.0)
| roc_9_1h_lt_20
| roc_9_4h_lt_60
)
)
df["global_protections_short_pump"] = (
# 15m & 1h & 4h & 1d up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
(
(protection_rsi_3_15m < 40.0)
| (protection_rsi_3_1h < 40.0)
| (protection_rsi_3_4h < 85.0)
| (protection_rsi_3_1d < 85.0)
| rsi_14_15m_gt_70
| (protection_cci_20_15m > 350.0)
| rsi_14_1h_gt_75
| (cci_20_1h_gt_250)
| (protection_stochrsik_14_14_3_3_1h > 50.0)
| rsi_14_4h_gt_95
| (aroond_14_4h_lt_50)
| (protection_cci_20_4h > 250.0)
| (protection_rsi_14_1d > 60.0)
| (protection_aroond_14_1d < 75.0)
| (protection_stochrsik_14_14_3_3_1d > 70.0)
| roc_9_1d_lt_40
)
# 15m & 1h & 4h & 1d up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
& (
(protection_rsi_3_15m < 60.0)
| rsi_3_1h_lt_60
| (rsi_3_4h_lt_80)
| (protection_rsi_3_1d < 90.0)
| rsi_14_15m_gt_90
| (protection_cci_20_15m > 350.0)
| rsi_14_1h_gt_90
| (protection_cci_20_1h > 300.0)
| rsi_14_4h_gt_80
| (cci_20_4h_gt_200)
| (protection_rsi_14_1d > 95.0)
| roc_9_1d_lt_80
)
# 1d green, 15m & 1h & 4h & 1d up move, 4h & 1d still not high enough & uptrend
& (
(protection_rsi_3_15m < 60.0)
| rsi_3_1h_lt_70
| (rsi_3_4h_lt_70)
| (protection_rsi_3_1d < 80.0)
| rsi_14_4h_gt_70
| (willr_14_4h_gt_neg_10)
| (stochrsik_14_14_3_3_4h_gt_80)
| roc_9_4h_lt_40
| (protection_rsi_14_1d > 80.0)
| roc_9_1d_lt_100
)
# 15m & 1h & 1d up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
& (
(protection_rsi_3_15m < 65.0)
| rsi_3_1h_lt_70
| (protection_rsi_3_1d < 60.0)
| rsi_14_15m_gt_90
| (protection_cmf_20_15m > 0.40)
| (protection_willr_14_15m > -10.0)
| (protection_cci_20_15m > 450.0)
| (protection_stochk_14_3_3_15m > 90.0)
| rsi_14_1h_gt_90
| (protection_cmf_20_1h > 0.20)
| (protection_willr_14_1h > -5.0)
| (cci_20_1h_gt_250)
| rsi_14_4h_gt_90
| (protection_cmf_20_4h > 0.10)
| (protection_cci_20_4h > 250.0)
| (protection_rsi_14_1d > 90.0)
| roc_9_1d_lt_25
)
# 15m & 1h & 4h & 1d up move, 15m & 1h & 4h & 1d still not high enough, 1d uptrend
& (
rsi_3_15m_lt_70
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| (protection_rsi_3_1d < 80.0)
| (protection_mfi_14_15m > 90.0)
| (protection_stochrsik_14_14_3_3_15m > 90.0)
| (protection_mfi_14_1h > 90.0)
| (protection_mfi_14_4h > 80.0)
| (protection_willr_14_4h > -5.0)
| (aroond_14_4h_lt_50)
| roc_9_1d_lt_40
)
# 15m & 1h up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
& (
rsi_3_15m_lt_70
| rsi_3_1h_lt_85
| (protection_mfi_14_15m > 90.0)
| (protection_stochrsik_14_14_3_3_15m > 80.0)
| rsi_14_1h_gt_80
| (protection_mfi_14_1h > 80.0)
| (stochrsik_14_14_3_3_1h_gt_70)
| rsi_14_4h_gt_80
| (protection_rsi_14_1d > 80.0)
| roc_9_1d_lt_40
)
# 15m & 1h & 4h & 1d up move, 15m & 1h still not high enough, 4h & 1d stil not high enough & uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| (protection_rsi_3_1d < 95.0)
| rsi_14_15m_gt_85
| (cci_20_15m_gt_250)
| rsi_14_1h_gt_85
| (cci_20_1h_gt_250)
| (protection_cci_20_change_pct_1h < -0.0)
| (protection_stochrsik_14_14_3_3_1h > 90.0)
| (protection_rsi_14_4h > 85.0)
| (protection_cci_20_4h > 250.0)
| (protection_cci_20_change_pct_4h < -0.0)
| (protection_stochrsik_14_14_3_3_4h > 90.0)
| roc_9_4h_lt_30
| (protection_rsi_14_1d > 90.0)
| (protection_willr_14_1d > -10.0)
| roc_9_1d_lt_50
)
# 15m & 1h & 4h up move, 15m & 1h still not high enough, 4h still not high enough & uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_90)
| rsi_14_15m_gt_90
| (protection_cci_20_15m > 400.0)
| rsi_14_1h_gt_90
| (protection_cci_20_1h > 400.0)
| (protection_cci_20_4h > 400.0)
| (protection_roc_9_4h < 200.0)
)
# 15m & 1h up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_90
| rsi_14_15m_gt_85
| (cci_20_15m_gt_250)
| rsi_14_1h_gt_75
| (protection_aroond_14_1h < 50.0)
| (protection_cci_20_1h > 350.0)
| (protection_cci_20_change_pct_1h < -0.0)
| (protection_rsi_14_4h > 85.0)
| (protection_cci_20_4h > 150.0)
| (protection_cci_20_change_pct_4h < -0.0)
| (protection_stochrsik_14_14_3_3_4h > 70.0)
| (protection_rsi_14_1d > 85.0)
| roc_9_1d_lt_50
)
# 15m & 1h & 4h & 1d up move, 15m & 1h & 4h & 1d still not high enough
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_90
| (rsi_3_4h_lt_70)
| (protection_rsi_3_1d < 70.0)
| rsi_14_15m_gt_85
| rsi_14_1h_gt_85
| (cci_20_1h_gt_250)
| (protection_cci_20_change_pct_1h < -0.0)
| rsi_14_4h_gt_70
| (protection_aroond_14_4h < 75.0)
| (cci_20_4h_gt_200)
| (protection_cci_20_change_pct_4h < -0.0)
| (protection_stochk_14_3_3_4h > 70.0)
| (protection_rsi_14_1d > 70.0)
)
# 15m & 1h & 4h & 1d up move, 1h still not high enough, 1d still low, 4h & 1d uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_85
| (rsi_3_4h_lt_90)
| (protection_rsi_3_1d < 95.0)
| (protection_stochrsik_14_14_3_3_1h > 60.0)
| (protection_aroond_14_1d < 50.0)
| roc_9_4h_lt_100
| roc_9_1d_lt_100
)
# 15m & 1h & 4h & 1d up move, 15m & 1h still not high enough, 4h & 1d still not high enough & uptrend
& (
rsi_3_15m_lt_80
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_90)
| (protection_rsi_3_1d < 95.0)
| rsi_14_15m_gt_85
| (protection_stochk_14_3_3_15m > 90.0)
| rsi_14_1h_gt_90
| (protection_stochk_14_3_3_1h > 90.0)
| rsi_14_4h_gt_95
| (protection_stochk_14_3_3_4h > 90.0)
| roc_9_4h_lt_50
| (protection_rsi_14_1d > 95.0)
| (protection_stochk_14_3_3_1d > 70.0)
| (protection_aroond_14_1d < 50.0)
| roc_9_1d_lt_50
)
# 15m & 1h & 4h up move, 1h & 4h still not high enough, 1d uptrend
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_60)
| (protection_willr_14_1h > -5.0)
| (protection_aroond_14_1h < 25.0)
| (willr_14_4h_gt_neg_10)
| (aroond_14_4h_lt_50)
| (stochrsik_14_14_3_3_4h_gt_60)
| roc_9_1d_lt_50
)
# 15m & 1h & 4h up move, 15m still not high enough, 1h & 4h still not high enough & uptrend, 1d still not high enough
& (
rsi_3_15m_lt_85
| rsi_3_1h_lt_85
| (rsi_3_4h_lt_90)
| rsi_14_15m_gt_95
| (protection_cmf_20_15m > 0.50)
| (protection_uo_7_14_28_15m > 80.0)
| (protection_uo_7_14_28_change_pct_15m < -0.0)
| (cci_20_15m_gt_250)
| (protection_stochk_14_3_3_15m > 90.0)
| rsi_14_1h_gt_95
| (protection_cmf_20_1h > 0.50)
| (protection_uo_7_14_28_1h > 80.0)
| (protection_cci_20_1h > 350.0)
| roc_9_1h_lt_10
| rsi_14_4h_gt_90
| (protection_cmf_20_4h > 0.35)
| (protection_uo_7_14_28_4h > 75.0)
| (protection_cci_20_4h > 500.0)
| (protection_roc_2_4h < 10.0)
| roc_9_4h_lt_10
| (protection_rsi_14_1d > 70.0)
)
# 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 1d still not high enough & overbought
& (
rsi_3_15m_lt_90
| rsi_3_1h_lt_60
| (rsi_3_4h_lt_60)
| rsi_14_15m_gt_85
| (cci_20_15m_gt_250)
| rsi_14_1h_gt_70
| (protection_cci_20_1h > 200.0)
| (protection_stochk_14_3_3_1h > 90.0)
| (protection_rsi_14_4h > 65.0)
| (cci_20_4h_gt_200)
| (protection_stochk_14_3_3_4h > 90.0)
| (protection_rsi_14_1d > 65.0)
| (protection_stochk_14_3_3_1d > 70.0)
| roc_9_1d_lt_30
)
# 15m & 1h & 4h & 1d up move, 15m & 1h & 4h still not high enough. 1d still not high enough & uptrend
& (
(rsi_3_15m_lt_95)
| rsi_3_1h_lt_80
| (rsi_3_4h_lt_80)
| (protection_rsi_3_1d < 80.0)
| rsi_14_15m_gt_90
| rsi_14_1h_gt_90
| (stochrsik_14_14_3_3_1h_gt_70)
| rsi_14_4h_gt_90
| (protection_willr_14_4h > -5.0)
| (protection_rsi_14_1d > 80.0)
| (protection_stochrsik_14_14_3_3_1d > 80.0)
| roc_9_1d_lt_40
)
# 15m & 1h & 4h up move, 15m & 1h still not high enough, 4h still not high enough & uptrend
& (
(rsi_3_15m_lt_95)
| rsi_3_1h_lt_90
| (rsi_3_4h_lt_90)
| rsi_14_15m_gt_90
| (cci_20_15m_gt_250)
| rsi_14_1h_gt_90
| (protection_aroond_14_1h < 25.0)
| (protection_cci_20_1h > 300.0)
| (protection_stochk_14_3_3_1h > 90.0)
| rsi_14_4h_gt_95
| (protection_cci_20_4h > 300.0)
| roc_9_4h_lt_20
)
# 1h & 4h & 1d up move, 15m still not high enough, 1h & 4h & 1d still not high enough, 1d uptrend
& (
rsi_3_1h_lt_80
| (rsi_3_4h_lt_60)
| (protection_rsi_3_1d < 90.0)
| (protection_stochrsik_14_14_3_3_15m > 80.0)
| (protection_willr_14_1h > -20.0)
| (protection_willr_14_4h > -25.0)
| (protection_stochrsik_14_14_3_3_4h > 20.0)
| (protection_aroond_14_1d < 50.0)
| roc_9_1d_lt_20
)
)
df["global_protections_short_dump"] = (
# 15m & 1h up move, 15m & 1h still not high enough, 4h still low, 1d still low & downtrend
(
rsi_3_15m_lt_80
| rsi_3_1h_lt_70
| rsi_14_15m_gt_80
| (protection_cci_20_15m > 400.0)
| rsi_14_1h_gt_75
| (cci_20_1h_gt_250)
| rsi_14_4h_gt_60
| (aroond_14_4h_lt_50)
| (cci_20_4h_gt_200)
| (rsi_14_1d_gt_50)
| (protection_aroond_14_1d < 75.0)
| (roc_9_1d_gt_neg_30)
)
# 15m up move, 15m still low, 1h & 4h & 1d still not high
& (
rsi_3_15m_lt_85
| (protection_aroond_14_15m < 50.0)
| rsi_14_1h_gt_70
| (protection_willr_14_1h > -50.0)
| (protection_stochrsik_14_14_3_3_1h > 80.0)
| (protection_aroond_14_1h < 75.0)
| rsi_14_4h_gt_70
| (protection_willr_14_4h > -50.0)
| (protection_aroond_14_4h < 25.0)
| (protection_stochrsik_14_14_3_3_4h > 30.0)
| (protection_rsi_14_1d > 70.0)
)
# 1h & 4h up move, 15m & 1h & 4h still not high enough, 1d still low & downtrend
& (
rsi_3_1h_lt_70
| (rsi_3_4h_lt_90)
| rsi_14_15m_gt_95
| (protection_cci_20_15m > 600.0)
| rsi_14_1h_gt_95
| (protection_cci_20_1h > 600.0)
| rsi_14_4h_gt_95
| (willr_14_4h_gt_neg_10)
| (protection_cci_20_4h > 600.0)
| (protection_rsi_14_1d > 40.0)
| (protection_roc_9_1d > -20.0)
)
)
df["protections_short_rebuy"] = True
tok_after_protections = time.perf_counter()
tok_total = time.perf_counter()
log.debug(
f"[{metadata_pair}] "
f"populate_indicators pre-protections: "
f"{tok_before_protections - tik:0.4f}s | "
f"protections: "
f"{tok_after_protections - tok_before_protections:0.4f}s | "
f"total: "
f"{tok_total - tik:0.4f}s"
)
tok = time.perf_counter()
log.debug("[%s] Populate indicators took a total of: %.4f seconds.", metadata_pair, tok - tik)
return df
# Confirm Trade Entry
# ---------------------------------------------------------------------------------------------
def confirm_trade_entry(
self,
pair: str,
order_type: str,
amount: float,
rate: float,
time_in_force: str,
current_time: datetime,
entry_tag: Optional[str],
side: str,
**kwargs,
) -> bool:
# Force Entry
if entry_tag == "force_entry":
return True
# Mode Validation
entry_tags = entry_tag.split()
is_long_side = side == "long"
is_short_side = side == "short"
long_grind_mode_tags = self.long_grind_mode_tags
long_top_coins_mode_tags = self.long_top_coins_mode_tags
long_scalp_mode_tags = self.long_scalp_mode_tags
if all(c in long_grind_mode_tags for c in entry_tags):
return self._handle_grind_mode(pair, current_time)
if all(c in long_top_coins_mode_tags for c in entry_tags):
return self._handle_top_coins_mode(pair, current_time)
if all(c in long_scalp_mode_tags for c in entry_tags):
return self._handle_scalp_mode(pair, current_time)
# Long/Short Slot Validation (only in futures mode)
if self.is_futures_mode:
max_side_trades = 0
if is_long_side:
max_side_trades = self.futures_max_open_trades_long
elif is_short_side:
max_side_trades = self.futures_max_open_trades_short
if max_side_trades != 0:
open_trades = Trade.get_trades_proxy(is_open=True)
side_trades = sum(1 for t in open_trades if t.trade_direction == side)
if side_trades >= max_side_trades:
log.info(
f"[{current_time}] Cancelling entry for {pair} due to {side} trades reaching the max limit of {max_side_trades}."
)
return False
max_slippage = self.max_slippage
# Slippage Validation
df, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
if len(df) >= 1:
last_candle = df.iloc[-1]
last_close = last_candle["close"]
if (is_long_side and rate > last_close) or (is_short_side and rate < last_close):
slippage = (rate / last_close) - 1.0
if (is_long_side and slippage < max_slippage) or (is_short_side and slippage > -max_slippage):
return True
else:
log.warning(f"[{current_time}] Cancelling entry for {pair} due to slippage {(slippage * 100.0):.2f}%")
return False
return True
def _handle_grind_mode(self, pair: str, current_time: datetime) -> bool:
grind_mode_coins = self.grind_mode_coins
grind_mode_max_slots = self.grind_mode_max_slots
long_grind_mode_tags = self.long_grind_mode_tags
is_pair_grind_mode = pair.partition("/")[0] in grind_mode_coins
if not is_pair_grind_mode:
log.info(f"[{current_time}] Cancelling entry for {pair} due to not being in grind mode coins list.")
return False
open_trades = Trade.get_trades_proxy(is_open=True)
num_open_grind_mode = sum(1 for t in open_trades if all(c in long_grind_mode_tags for c in t.enter_tag.split()))
if num_open_grind_mode >= grind_mode_max_slots:
log.info(f"[{current_time}] Cancelling entry for {pair} due to grind mode slots limit reached.")
return False
return True
def _handle_top_coins_mode(self, pair: str, current_time: datetime) -> bool:
is_pair_top_coins_mode = pair.partition("/")[0] in self.top_coins_mode_coins
if not is_pair_top_coins_mode:
log.info(f"[{current_time}] Cancelling entry for {pair} due to not being in top coins list.")
return False
return True
def _handle_scalp_mode(self, pair: str, current_time: datetime) -> bool:
current_free_slots = self.config["max_open_trades"] - Trade.get_open_trade_count()
if current_free_slots < self.min_free_slots_scalp_mode:
log.info(f"[{current_time}] Cancelling entry for {pair} due to insufficient free slots.")
return False
return True
# Confirm Trade Exit
# ---------------------------------------------------------------------------------------------
def confirm_trade_exit(
self,
pair: str,
trade: Trade,
order_type: str,
amount: float,
rate: float,
time_in_force: str,
exit_reason: str,
current_time: datetime,
**kwargs,
) -> bool:
trade_realized_profit = trade.realized_profit
trade_stake_amount = trade.stake_amount
trade_is_short = trade.is_short
trade_liquidation_price = trade.liquidation_price
trade_open_rate = trade.open_rate
is_backtest = self.is_backtest_mode()
# Allow force exits
if exit_reason != "force_exit":
if self._should_hold_trade(trade, rate, exit_reason):
return False
if exit_reason in ["stop_loss", "trailing_stop_loss"]:
# log.info(f"[{current_time}] Cancelling {exit_reason} exit for {pair}")
is_liquidation = False
if self.is_futures_mode and is_backtest:
if (trade_is_short and rate > trade_liquidation_price) or (
not trade_is_short and rate < trade_liquidation_price
):
is_liquidation = True
if not is_liquidation:
return False
if self.exit_profit_only:
profit = 0.0
if trade_realized_profit != 0.0:
profit = ((rate - trade_open_rate) / trade_open_rate) * trade_stake_amount * (1 - trade.fee_close)
profit = profit + trade_realized_profit
profit = profit / trade_stake_amount
else:
profit = trade.calc_profit_ratio(rate)
if profit < self.exit_profit_offset:
return False
self._remove_profit_target(pair)
return True
# Check Entry Timeout
# ---------------------------------------------------------------------------------------------
def check_entry_timeout(self, pair: str, trade: Trade, order: Order, current_time: datetime, **kwargs) -> bool:
ob = self.dp.orderbook(pair, 1)
bids = ob["bids"][0][0]
asks = ob["asks"][0][0]
# Cancel order if price is more than 3% difference.
if trade.is_short:
if asks < order.price * 0.97:
return True
else:
if bids > order.price * 1.03:
return True
return False
# Check Exit Timeout
# ---------------------------------------------------------------------------------------------
def check_exit_timeout(self, pair: str, trade: Trade, order: Order, current_time: datetime, **kwargs) -> bool:
ob = self.dp.orderbook(pair, 1)
bids = ob["bids"][0][0]
asks = ob["asks"][0][0]
# Cancel order if price is more than 3% difference.
if trade.is_short:
if bids > order.price * 1.03:
return True
else:
if asks < order.price * 0.97:
return True
return False
# Bot Loop Start
# ---------------------------------------------------------------------------------------------
def bot_loop_start(self, current_time: datetime, **kwargs) -> None:
if self.config["runmode"].value not in ("live", "dry_run"):
return super().bot_loop_start(datetime, **kwargs)
if self.hold_support_enabled:
self.load_hold_trades_config()
return super().bot_loop_start(current_time, **kwargs)
# Leverage
# ---------------------------------------------------------------------------------------------
def leverage(
self,
pair: str,
current_time: datetime,
current_rate: float,
proposed_leverage: float,
max_leverage: float,
entry_tag: Optional[str],
side: str,
**kwargs,
) -> float:
enter_tags = entry_tag.split()
long_rebuy_mode_tags = self.long_rebuy_mode_tags
long_grind_mode_tags = self.long_grind_mode_tags
if all(c in long_rebuy_mode_tags for c in enter_tags):
return self.futures_mode_leverage_rebuy_mode
elif all(c in long_grind_mode_tags for c in enter_tags):
return self.futures_mode_leverage_grind_mode
return self.futures_mode_leverage
# Correct Min Stake
# ---------------------------------------------------------------------------------------------
def correct_min_stake(self, min_stake: float) -> float:
if self.config["exchange"]["name"] == "bybit":
if self.is_futures_mode:
if (min_stake is None) or (min_stake < 5.0 / self.futures_mode_leverage):
min_stake = 5.0 / self.futures_mode_leverage
elif self.config["exchange"]["name"] == "krakenfutures":
if self.is_futures_mode:
if (min_stake is None) or (min_stake < 5.0 / self.futures_mode_leverage):
min_stake = 5.0 / self.futures_mode_leverage
return min_stake
def is_backtest_mode(self) -> bool:
"""Check if the current run mode is backtest or hyperopt"""
return self.dp.runmode.value in ["backtest", "hyperopt"]
def is_system_v3(self, trade: Trade) -> bool:
"""Check if the current system is v3"""
return trade.get_custom_data(key="system_version") == self.system_v3_name
def is_system_v3_1(self, trade: Trade) -> bool:
"""Check if the current system is v3_1"""
return trade.get_custom_data(key="system_version") == self.system_v3_1_name
def is_system_v3_2(self, trade: Trade) -> bool:
"""Check if the current system is v3_2"""
return trade.get_custom_data(key="system_version") == self.system_v3_2_name
def get_system_version_flags(self, trade: Trade) -> tuple[bool, bool, bool]:
"""Check the current system version flags with one custom-data lookup."""
system_version = trade.get_custom_data(key="system_version")
return (
system_version == self.system_v3_name,
system_version == self.system_v3_1_name,
system_version == self.system_v3_2_name,
)
def has_valid_entry_conditions(
self, trade: Trade, exit_rate: float, last_candle, previous_candle, filled_orders=None
) -> bool:
"""Check if there are valid entry conditions"""
if filled_orders is None:
filled_orders = trade.select_filled_orders()
if not filled_orders:
return False
last_filled_price = filled_orders[-1].safe_price
slice_profit = (exit_rate - last_filled_price) / last_filled_price
if not trade.is_short:
return last_candle["enter_long"] or self.long_grind_entry(last_candle, previous_candle, slice_profit, False)
else:
return last_candle["enter_short"] or self.short_grind_entry(last_candle, previous_candle, slice_profit, False)
return False
# Update signals (enable/disable) from config
# ---------------------------------------------------------------------------------------------
def update_signals_from_config(self, config):
# Update long entry signal parameters (if they exist in the config)
if hasattr(self, "long_entry_signal_params") and "long_entry_signal_params" in config:
long_entry_signal_params = self.long_entry_signal_params
config_long_entry_signal_params = config["long_entry_signal_params"]
for condition_key in long_entry_signal_params:
if condition_key in config_long_entry_signal_params:
long_entry_signal_params[condition_key] = config_long_entry_signal_params[condition_key]
# Update short entry signal parameters (if they exist in the config)
if hasattr(self, "short_entry_signal_params") and "short_entry_signal_params" in config:
short_entry_signal_params = self.short_entry_signal_params
config_short_entry_signal_params = config["short_entry_signal_params"]
for condition_key in short_entry_signal_params:
if condition_key in config_short_entry_signal_params:
short_entry_signal_params[condition_key] = config_short_entry_signal_params[condition_key]
# Set Profit Target
# ---------------------------------------------------------------------------------------------
def _set_profit_target(
self, pair: str, sell_reason: str, rate: float, current_profit: float, current_time: datetime
):
self.target_profit_cache.data[pair] = {
"rate": rate,
"profit": current_profit,
"sell_reason": sell_reason,
"time_profit_reached": current_time.isoformat(),
}
self.target_profit_cache.save()
# Remove Profit Target
# ---------------------------------------------------------------------------------------------
def _remove_profit_target(self, pair: str):
target_profit_cache = self.target_profit_cache
if target_profit_cache is not None:
target_profit_cache.data.pop(pair, None)
target_profit_cache.save()
# Get Hold Trades Config File
# ---------------------------------------------------------------------------------------------
def get_hold_trades_config_file(self):
proper_holds_file_path = self.config["user_data_dir"].resolve() / "nfi-hold-trades.json"
if proper_holds_file_path.is_file():
return proper_holds_file_path
strat_file_path = pathlib.Path(__file__)
hold_trades_config_file_resolve = strat_file_path.resolve().parent / "hold-trades.json"
if hold_trades_config_file_resolve.is_file():
log.warning(
"Please move %s to %s which is now the expected path for the holds file",
hold_trades_config_file_resolve,
proper_holds_file_path,
)
return hold_trades_config_file_resolve
# The resolved path does not exist, is it a symlink?
hold_trades_config_file_absolute = strat_file_path.absolute().parent / "hold-trades.json"
if hold_trades_config_file_absolute.is_file():
log.warning(
"Please move %s to %s which is now the expected path for the holds file",
hold_trades_config_file_absolute,
proper_holds_file_path,
)
return hold_trades_config_file_absolute
# Load Hold Trades Config
# ---------------------------------------------------------------------------------------------
def load_hold_trades_config(self):
hold_trades_cache = self.hold_trades_cache
if hold_trades_cache is None:
hold_trades_config_file = self.get_hold_trades_config_file()
if hold_trades_config_file:
log.warning("Loading hold support data from %s", hold_trades_config_file)
hold_trades_cache = HoldsCache(hold_trades_config_file)
self.hold_trades_cache = hold_trades_cache
if hold_trades_cache:
hold_trades_cache.load()
# Should Hold Trade
# ---------------------------------------------------------------------------------------------
def _should_hold_trade(self, trade: "Trade", rate: float, sell_reason: str) -> bool:
calc_total_profit = self.calc_total_profit
trade_id = trade.id
trade_pair = trade.pair
if self.config["runmode"].value not in ("live", "dry_run"):
return False
if not self.hold_support_enabled:
return False
# Just to be sure our hold data is loaded, should be a no-op call after the first bot loop
self.load_hold_trades_config()
hold_trades_cache = self.hold_trades_cache
if not hold_trades_cache:
# Cache hasn't been setup, likely because the corresponding file does not exist, sell
return False
hold_trades_data = hold_trades_cache.data
if not hold_trades_data:
# We have no pairs we want to hold until profit, sell
return False
# By default, no hold should be done
hold_trade = False
profit_values = None
def get_profit_values():
nonlocal profit_values
if profit_values is None:
filled_entries = trade.select_filled_orders(trade.entry_side)
filled_exits = trade.select_filled_orders(trade.exit_side)
profit_values = calc_total_profit(trade, filled_entries, filled_exits, rate)
return profit_values
for hold_key_name, hold_key in (("trade_ids", trade_id), ("trade_pairs", trade_pair)):
hold_targets: dict = hold_trades_data.get(hold_key_name)
if not hold_targets or hold_key not in hold_targets:
continue
trade_profit_ratio = hold_targets[hold_key]
current_profit_ratio = get_profit_values()[3]
if sell_reason == "force_sell":
formatted_profit_ratio = f"{trade_profit_ratio * 100}%"
formatted_current_profit_ratio = f"{current_profit_ratio * 100}%"
log.warning(
"Force selling %s even though the current profit of %s < %s",
trade,
formatted_current_profit_ratio,
formatted_profit_ratio,
)
return False
elif current_profit_ratio >= trade_profit_ratio:
# This trade is on the list to hold, and we reached minimum profit, sell
formatted_profit_ratio = f"{trade_profit_ratio * 100}%"
formatted_current_profit_ratio = f"{current_profit_ratio * 100}%"
log.warning(
"Selling %s because the current profit of %s >= %s",
trade,
formatted_current_profit_ratio,
formatted_profit_ratio,
)
return False
# This trade is on the list to hold, and we haven't reached minimum profit, hold
hold_trade = True
return hold_trade
# Populate Exit Trend
# ---------------------------------------------------------------------------------------------
def populate_exit_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
df.loc[:, "exit_long"] = 0
df.loc[:, "exit_short"] = 0
return df
#
# $$$$$$$$\ $$\ $$\ $$$$$$$$\ $$$$$$$\ $$\ $$\
# $$ _____|$$$\ $$ |\__$$ __|$$ __$$\\$$\ $$ |
# $$ | $$$$\ $$ | $$ | $$ | $$ |\$$\ $$ /
# $$$$$\ $$ $$\$$ | $$ | $$$$$$$ | \$$$$ /
# $$ __| $$ \$$$$ | $$ | $$ __$$< \$$ /
# $$ | $$ |\$$$ | $$ | $$ | $$ | $$ |
# $$$$$$$$\ $$ | \$$ | $$ | $$ | $$ | $$ |
# \________|\__| \__| \__| \__| \__| \__|
#
#
# $$$$$$\ $$$$$$\ $$\ $$\ $$$$$$$\ $$$$$$\ $$$$$$$$\ $$$$$$\ $$$$$$\ $$\ $$\ $$$$$$\
# $$ __$$\ $$ __$$\ $$$\ $$ |$$ __$$\ \_$$ _|\__$$ __|\_$$ _|$$ __$$\ $$$\ $$ |$$ __$$\
# $$ / \__|$$ / $$ |$$$$\ $$ |$$ | $$ | $$ | $$ | $$ | $$ / $$ |$$$$\ $$ |$$ / \__|
# $$ | $$ | $$ |$$ $$\$$ |$$ | $$ | $$ | $$ | $$ | $$ | $$ |$$ $$\$$ |\$$$$$$\
# $$ | $$ | $$ |$$ \$$$$ |$$ | $$ | $$ | $$ | $$ | $$ | $$ |$$ \$$$$ | \____$$\
# $$ | $$\ $$ | $$ |$$ |\$$$ |$$ | $$ | $$ | $$ | $$ | $$ | $$ |$$ |\$$$ |$$\ $$ |
# \$$$$$$ | $$$$$$ |$$ | \$$ |$$$$$$$ |$$$$$$\ $$ | $$$$$$\ $$$$$$ |$$ | \$$ |\$$$$$$ |
# \______/ \______/ \__| \__|\_______/ \______| \__| \______| \______/ \__| \__| \______/
#
# Populate Entry Trend
# ---------------------------------------------------------------------------------------------
def populate_entry_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
tik = time.perf_counter()
config = self.config
long_entry_signal_params = self.long_entry_signal_params
short_entry_signal_params = self.short_entry_signal_params
top_coins_mode_coins = self.top_coins_mode_coins
long_entry_conditions = []
short_entry_conditions = []
entry_tags = np.full(len(df), "", dtype=object)
df.loc[:, "enter_long"] = 0
df.loc[:, "enter_short"] = 0
rsi_3_1h = df["RSI_3_1h"].to_numpy(copy=False)
rsi_3_15m = df["RSI_3_15m"].to_numpy(copy=False)
rsi_3_4h = df["RSI_3_4h"].to_numpy(copy=False)
roc_9_1d = df["ROC_9_1d"].to_numpy(copy=False)
aroonu_14_4h = df["AROONU_14_4h"].to_numpy(copy=False)
aroonu_14_4h_shift = df["AROONU_14_4h"]
roc_9_4h = df["ROC_9_4h"].to_numpy(copy=False)
roc_9_4h_shift = df["ROC_9_4h"]
aroonu_14_1h = df["AROONU_14_1h"].to_numpy(copy=False)
stochrsi_k_4h = df["STOCHRSIk_14_14_3_3_4h"].to_numpy(copy=False)
stochrsi_k_1h = df["STOCHRSIk_14_14_3_3_1h"].to_numpy(copy=False)
aroonu_14_1d = df["AROONU_14_1d"].to_numpy(copy=False)
rsi_3_1d = df["RSI_3_1d"].to_numpy(copy=False)
aroonu_14_15m = df["AROONU_14_15m"].to_numpy(copy=False)
roc_9_1h = df["ROC_9_1h"].to_numpy(copy=False)
stochrsi_k_15m = df["STOCHRSIk_14_14_3_3_15m"].to_numpy(copy=False)
stochrsi_k_1d = df["STOCHRSIk_14_14_3_3_1d"].to_numpy(copy=False)
rsi_3 = df["RSI_3"].to_numpy(copy=False)
close = df["close"]
open_rate = df["open"].to_numpy(copy=False)
roc_9_15m = df["ROC_9_15m"].to_numpy(copy=False)
rsi_14_4h = df["RSI_14_4h"].to_numpy(copy=False)
rsi_14_4h_shift = df["RSI_14_4h"]
roc_2_1d = df["ROC_2_1d"].to_numpy(copy=False)
uo_7_14_28_4h = df["UO_7_14_28_4h"].to_numpy(copy=False)
willr_84_1h = df["WILLR_84_1h"].to_numpy(copy=False)
mfi_14 = df["MFI_14"].to_numpy(copy=False)
# Reused entry Series and comparison masks
aroond_14 = df["AROOND_14"].to_numpy(copy=False)
aroond_14_15m = df["AROOND_14_15m"].to_numpy(copy=False)
aroond_14_1h = df["AROOND_14_1h"].to_numpy(copy=False)
aroond_14_4h = df["AROOND_14_4h"].to_numpy(copy=False)
aroonu_14 = df["AROONU_14"].to_numpy(copy=False)
bbb_20_2_0_1h = df["BBB_20_2.0_1h"].to_numpy(copy=False)
bbl_20_2_0 = df["BBL_20_2.0"].to_numpy(copy=False)
bbu_20_2_0 = df["BBU_20_2.0"].to_numpy(copy=False)
cci_20_change_pct_1h = df["CCI_20_change_pct_1h"].to_numpy(copy=False)
cci_20_change_pct_4h = df["CCI_20_change_pct_4h"].to_numpy(copy=False)
change_pct_1d = df["change_pct_1d"].to_numpy(copy=False)
change_pct_1d_shift = df["change_pct_1d"]
change_pct_1h = df["change_pct_1h"].to_numpy(copy=False)
change_pct_1h_shift = df["change_pct_1h"]
change_pct_4h = df["change_pct_4h"].to_numpy(copy=False)
change_pct_4h_shift = df["change_pct_4h"]
close_max_12 = df["close_max_12"].to_numpy(copy=False)
close_max_48 = df["close_max_48"].to_numpy(copy=False)
cmf_20_15m = df["CMF_20_15m"].to_numpy(copy=False)
cmf_20_1d = df["CMF_20_1d"].to_numpy(copy=False)
cmf_20_1h = df["CMF_20_1h"].to_numpy(copy=False)
cmf_20_4h = df["CMF_20_4h"].to_numpy(copy=False)
ema_12 = df["EMA_12"].to_numpy(copy=False)
ema_12_shift = df["EMA_12"]
ema_20 = df["EMA_20"].to_numpy(copy=False)
ema_26 = df["EMA_26"].to_numpy(copy=False)
ema_26_shift = df["EMA_26"]
ema_200_1h = df["EMA_200_1h"].to_numpy(copy=False)
ema_200_1h_infer = df["EMA_200_1h"]
ema_200_4h = df["EMA_200_4h"].to_numpy(copy=False)
ema_200_4h_infer = df["EMA_200_4h"]
ema_9 = df["EMA_9"].to_numpy(copy=False)
high_max_12_1d = df["high_max_12_1d"].to_numpy(copy=False)
high_max_12_4h = df["high_max_12_4h"].to_numpy(copy=False)
high_max_20_1d = df["high_max_20_1d"].to_numpy(copy=False)
high_max_24_4h = df["high_max_24_4h"].to_numpy(copy=False)
high_max_30_1d = df["high_max_30_1d"].to_numpy(copy=False)
high_max_6_1d = df["high_max_6_1d"].to_numpy(copy=False)
high_max_6_4h = df["high_max_6_4h"].to_numpy(copy=False)
low_min_12_1d = df["low_min_12_1d"].to_numpy(copy=False)
low_min_24_4h = df["low_min_24_4h"].to_numpy(copy=False)
mfi_14_15m = df["MFI_14_15m"].to_numpy(copy=False)
mfi_14_1h = df["MFI_14_1h"].to_numpy(copy=False)
num_empty_288 = df["num_empty_288"].to_numpy(copy=False)
protections_long_global = df["protections_long_global"]
protections_short_global = df["protections_short_global"]
roc_2 = df["ROC_2"].to_numpy(copy=False)
roc_9 = df["ROC_9"].to_numpy(copy=False)
rsi_14 = df["RSI_14"].to_numpy(copy=False)
rsi_14_15m = df["RSI_14_15m"].to_numpy(copy=False)
rsi_14_1d = df["RSI_14_1d"].to_numpy(copy=False)
rsi_14_1h = df["RSI_14_1h"].to_numpy(copy=False)
rsi_14_1h_shift = df["RSI_14_1h"]
rsi_20 = df["RSI_20"].to_numpy(copy=False)
rsi_20_shift = df["RSI_20"]
rsi_3_change_pct_1h = df["RSI_3_change_pct_1h"].to_numpy(copy=False)
rsi_3_change_pct_4h = df["RSI_3_change_pct_4h"].to_numpy(copy=False)
rsi_4 = df["RSI_4"].to_numpy(copy=False)
sma_16 = df["SMA_16"].to_numpy(copy=False)
sma_21 = df["SMA_21"].to_numpy(copy=False)
sma_21_shift = df["SMA_21"]
sma_200 = df["SMA_200"]
stochrsi_k = df["STOCHRSIk_14_14_3_3"].to_numpy(copy=False)
top_wick_pct_1d = df["top_wick_pct_1d"].to_numpy(copy=False)
top_wick_pct_1d_shift = df["top_wick_pct_1d"]
willr_14 = df["WILLR_14"].to_numpy(copy=False)
rsi_3_gt_3 = rsi_3 > 3.0
rsi_3_gt_5 = rsi_3 > 5.0
rsi_3_gt_10 = rsi_3 > 10.0
rsi_3_gt_15 = rsi_3 > 15.0
rsi_3_15m_gt_3 = rsi_3_15m > 3.0
rsi_3_15m_gt_5 = rsi_3_15m > 5.0
rsi_3_15m_gt_10 = rsi_3_15m > 10.0
rsi_3_15m_gt_15 = rsi_3_15m > 15.0
rsi_3_15m_gt_20 = rsi_3_15m > 20.0
rsi_3_15m_gt_25 = rsi_3_15m > 25.0
rsi_3_15m_gt_30 = rsi_3_15m > 30.0
rsi_3_15m_gt_35 = rsi_3_15m > 35.0
rsi_3_15m_gt_40 = rsi_3_15m > 40.0
rsi_3_15m_gt_45 = rsi_3_15m > 45.0
rsi_3_15m_gt_50 = rsi_3_15m > 50.0
rsi_3_15m_gt_55 = rsi_3_15m > 55.0
rsi_3_1h_gt_3 = rsi_3_1h > 3.0
rsi_3_1h_gt_5 = rsi_3_1h > 5.0
rsi_3_1h_gt_10 = rsi_3_1h > 10.0
rsi_3_1h_gt_15 = rsi_3_1h > 15.0
rsi_3_1h_gt_20 = rsi_3_1h > 20.0
rsi_3_1h_gt_25 = rsi_3_1h > 25.0
rsi_3_1h_gt_30 = rsi_3_1h > 30.0
rsi_3_1h_gt_35 = rsi_3_1h > 35.0
rsi_3_1h_gt_40 = rsi_3_1h > 40.0
rsi_3_1h_gt_45 = rsi_3_1h > 45.0
rsi_3_1h_gt_50 = rsi_3_1h > 50.0
rsi_3_1h_gt_55 = rsi_3_1h > 55.0
rsi_3_1h_gt_60 = rsi_3_1h > 60.0
rsi_3_1h_gt_65 = rsi_3_1h > 65.0
rsi_3_4h_gt_3 = rsi_3_4h > 3.0
rsi_3_4h_gt_5 = rsi_3_4h > 5.0
rsi_3_4h_gt_10 = rsi_3_4h > 10.0
rsi_3_4h_gt_15 = rsi_3_4h > 15.0
rsi_3_4h_gt_20 = rsi_3_4h > 20.0
rsi_3_4h_gt_25 = rsi_3_4h > 25.0
rsi_3_4h_gt_30 = rsi_3_4h > 30.0
rsi_3_4h_gt_35 = rsi_3_4h > 35.0
rsi_3_4h_gt_40 = rsi_3_4h > 40.0
rsi_3_4h_gt_45 = rsi_3_4h > 45.0
rsi_3_4h_gt_50 = rsi_3_4h > 50.0
rsi_3_4h_gt_55 = rsi_3_4h > 55.0
rsi_3_4h_gt_60 = rsi_3_4h > 60.0
rsi_3_4h_gt_65 = rsi_3_4h > 65.0
rsi_3_1d_gt_3 = rsi_3_1d > 3.0
rsi_3_1d_gt_5 = rsi_3_1d > 5.0
rsi_3_1d_gt_10 = rsi_3_1d > 10.0
rsi_3_1d_gt_15 = rsi_3_1d > 15.0
rsi_3_1d_gt_20 = rsi_3_1d > 20.0
rsi_3_1d_gt_25 = rsi_3_1d > 25.0
rsi_3_1d_gt_30 = rsi_3_1d > 30.0
rsi_3_1d_gt_35 = rsi_3_1d > 35.0
rsi_3_1d_gt_40 = rsi_3_1d > 40.0
rsi_3_1d_gt_45 = rsi_3_1d > 45.0
rsi_3_1d_gt_50 = rsi_3_1d > 50.0
rsi_3_1d_gt_55 = rsi_3_1d > 55.0
rsi_3_1d_gt_60 = rsi_3_1d > 60.0
rsi_3_1d_gt_65 = rsi_3_1d > 65.0
rsi_3_lt_40 = rsi_3 < 40.0
rsi_3_lt_46 = rsi_3 < 46.0
rsi_3_lt_50 = rsi_3 < 50.0
rsi_3_lt_95 = rsi_3 < 95.0
rsi_3_lt_97 = rsi_3 < 97.0
rsi_3_lt_98 = rsi_3 < 98.0
rsi_3_15m_lt_50 = rsi_3_15m < 50.0
rsi_3_15m_lt_55 = rsi_3_15m < 55.0
rsi_3_15m_lt_60 = rsi_3_15m < 60.0
rsi_3_15m_lt_70 = rsi_3_15m < 70.0
rsi_3_15m_lt_75 = rsi_3_15m < 75.0
rsi_3_15m_lt_80 = rsi_3_15m < 80.0
rsi_3_15m_lt_97 = rsi_3_15m < 97.0
rsi_3_1h_lt_40 = rsi_3_1h < 40.0
rsi_3_1h_lt_50 = rsi_3_1h < 50.0
rsi_3_1h_lt_55 = rsi_3_1h < 55.0
rsi_3_1h_lt_60 = rsi_3_1h < 60.0
rsi_3_1h_lt_65 = rsi_3_1h < 65.0
rsi_3_1h_lt_70 = rsi_3_1h < 70.0
rsi_3_1h_lt_75 = rsi_3_1h < 75.0
rsi_3_4h_lt_40 = rsi_3_4h < 40.0
rsi_3_4h_lt_50 = rsi_3_4h < 50.0
rsi_3_4h_lt_60 = rsi_3_4h < 60.0
rsi_3_4h_lt_70 = rsi_3_4h < 70.0
rsi_3_4h_lt_75 = rsi_3_4h < 75.0
rsi_3_1d_lt_80 = rsi_3_1d < 80.0
rsi_3_1d_lt_90 = rsi_3_1d < 90.0
rsi_3_1d_lt_95 = rsi_3_1d < 95.0
rsi_14_15m_lt_30 = rsi_14_15m < 30.0
rsi_14_15m_lt_35 = rsi_14_15m < 35.0
rsi_14_15m_lt_40 = rsi_14_15m < 40.0
rsi_14_15m_lt_50 = rsi_14_15m < 50.0
rsi_14_1h_gt_20 = rsi_14_1h > 20.0
rsi_14_1h_lt_40 = rsi_14_1h < 40.0
rsi_14_1h_lt_50 = rsi_14_1h < 50.0
rsi_14_1h_lt_80 = rsi_14_1h < 80.0
rsi_14_4h_gt_20 = rsi_14_4h > 20.0
rsi_14_4h_gt_30 = rsi_14_4h > 30.0
rsi_14_4h_gt_40 = rsi_14_4h > 40.0
rsi_14_4h_gt_50 = rsi_14_4h > 50.0
rsi_14_4h_gt_60 = rsi_14_4h > 60.0
rsi_14_4h_gt_80 = rsi_14_4h > 80.0
rsi_14_4h_lt_30 = rsi_14_4h < 30.0
rsi_14_4h_lt_40 = rsi_14_4h < 40.0
rsi_14_4h_lt_50 = rsi_14_4h < 50.0
rsi_14_4h_lt_70 = rsi_14_4h < 70.0
rsi_14_4h_lt_75 = rsi_14_4h < 75.0
rsi_14_4h_lt_80 = rsi_14_4h < 80.0
rsi_14_1d_gt_10 = rsi_14_1d > 10.0
rsi_14_1d_gt_40 = rsi_14_1d > 40.0
rsi_14_1d_gt_50 = rsi_14_1d > 50.0
rsi_14_1d_lt_40 = rsi_14_1d < 40.0
rsi_14_1d_lt_50 = rsi_14_1d < 50.0
rsi_14_1d_lt_60 = rsi_14_1d < 60.0
rsi_14_1d_lt_70 = rsi_14_1d < 70.0
rsi_14_1d_lt_80 = rsi_14_1d < 80.0
aroond_14_lt_25 = aroond_14 < 25.0
aroond_14_gt_75 = aroond_14 > 75.0
aroond_14_15m_lt_25 = aroond_14_15m < 25.0
aroond_14_15m_lt_50 = aroond_14_15m < 50.0
aroond_14_15m_lt_70 = aroond_14_15m < 70.0
aroond_14_15m_lt_80 = aroond_14_15m < 80.0
aroond_14_1h_lt_25 = aroond_14_1h < 25.0
aroond_14_1h_lt_50 = aroond_14_1h < 50.0
aroond_14_1h_lt_70 = aroond_14_1h < 70.0
aroond_14_4h_lt_25 = aroond_14_4h < 25.0
aroond_14_4h_lt_40 = aroond_14_4h < 40.0
aroond_14_4h_lt_50 = aroond_14_4h < 50.0
aroond_14_4h_lt_70 = aroond_14_4h < 70.0
aroond_14_4h_lt_80 = aroond_14_4h < 80.0
aroond_14_4h_lt_85 = aroond_14_4h < 85.0
aroonu_14_gt_75 = aroonu_14 > 75.0
aroonu_14_15m_gt_20 = aroonu_14_15m > 20.0
aroonu_14_15m_gt_40 = aroonu_14_15m > 40.0
aroonu_14_15m_gt_50 = aroonu_14_15m > 50.0
aroonu_14_15m_gt_60 = aroonu_14_15m > 60.0
aroonu_14_1h_gt_20 = aroonu_14_1h > 20.0
aroonu_14_1h_gt_30 = aroonu_14_1h > 30.0
aroonu_14_1h_gt_40 = aroonu_14_1h > 40.0
aroonu_14_1h_gt_60 = aroonu_14_1h > 60.0
aroonu_14_4h_gt_10 = aroonu_14_4h > 10.0
aroonu_14_4h_gt_20 = aroonu_14_4h > 20.0
aroonu_14_4h_gt_30 = aroonu_14_4h > 30.0
aroonu_14_4h_gt_50 = aroonu_14_4h > 50.0
aroonu_14_4h_gt_70 = aroonu_14_4h > 70.0
aroonu_14_4h_gt_80 = aroonu_14_4h > 80.0
aroonu_14_1d_gt_50 = aroonu_14_1d > 50.0
aroonu_14_lt_25 = aroonu_14 < 25.0
aroonu_14_lt_30 = aroonu_14 < 30.0
aroonu_14_15m_lt_20 = aroonu_14_15m < 20.0
aroonu_14_15m_lt_25 = aroonu_14_15m < 25.0
aroonu_14_15m_lt_30 = aroonu_14_15m < 30.0
aroonu_14_15m_lt_40 = aroonu_14_15m < 40.0
aroonu_14_15m_lt_50 = aroonu_14_15m < 50.0
aroonu_14_15m_lt_60 = aroonu_14_15m < 60.0
aroonu_14_15m_lt_70 = aroonu_14_15m < 70.0
aroonu_14_15m_lt_75 = aroonu_14_15m < 75.0
aroonu_14_15m_lt_80 = aroonu_14_15m < 80.0
aroonu_14_15m_lt_85 = aroonu_14_15m < 85.0
aroonu_14_15m_lt_90 = aroonu_14_15m < 90.0
aroonu_14_15m_lt_100 = aroonu_14_15m < 100.0
aroonu_14_1h_lt_20 = aroonu_14_1h < 20.0
aroonu_14_1h_lt_25 = aroonu_14_1h < 25.0
aroonu_14_1h_lt_30 = aroonu_14_1h < 30.0
aroonu_14_1h_lt_40 = aroonu_14_1h < 40.0
aroonu_14_1h_lt_50 = aroonu_14_1h < 50.0
aroonu_14_1h_lt_60 = aroonu_14_1h < 60.0
aroonu_14_1h_lt_70 = aroonu_14_1h < 70.0
aroonu_14_1h_lt_75 = aroonu_14_1h < 75.0
aroonu_14_1h_lt_80 = aroonu_14_1h < 80.0
aroonu_14_1h_lt_85 = aroonu_14_1h < 85.0
aroonu_14_1h_lt_90 = aroonu_14_1h < 90.0
aroonu_14_1h_lt_100 = aroonu_14_1h < 100.0
aroonu_14_4h_lt_20 = aroonu_14_4h < 20.0
aroonu_14_4h_lt_30 = aroonu_14_4h < 30.0
aroonu_14_4h_lt_40 = aroonu_14_4h < 40.0
aroonu_14_4h_lt_50 = aroonu_14_4h < 50.0
aroonu_14_4h_lt_60 = aroonu_14_4h < 60.0
aroonu_14_4h_lt_70 = aroonu_14_4h < 70.0
aroonu_14_4h_lt_75 = aroonu_14_4h < 75.0
aroonu_14_4h_lt_80 = aroonu_14_4h < 80.0
aroonu_14_4h_lt_85 = aroonu_14_4h < 85.0
aroonu_14_4h_lt_90 = aroonu_14_4h < 90.0
aroonu_14_4h_lt_100 = aroonu_14_4h < 100.0
aroonu_14_1d_lt_30 = aroonu_14_1d < 30.0
aroonu_14_1d_lt_40 = aroonu_14_1d < 40.0
aroonu_14_1d_lt_50 = aroonu_14_1d < 50.0
aroonu_14_1d_lt_60 = aroonu_14_1d < 60.0
aroonu_14_1d_lt_70 = aroonu_14_1d < 70.0
aroonu_14_1d_lt_75 = aroonu_14_1d < 75.0
aroonu_14_1d_lt_80 = aroonu_14_1d < 80.0
aroonu_14_1d_lt_85 = aroonu_14_1d < 85.0
aroonu_14_1d_lt_90 = aroonu_14_1d < 90.0
aroonu_14_1d_lt_100 = aroonu_14_1d < 100.0
cmf_20_15m_gt_neg_0_20 = cmf_20_15m > -0.20
cmf_20_15m_gt_neg_0_30 = cmf_20_15m > -0.30
cmf_20_15m_gt_neg_0_35 = cmf_20_15m > -0.35
cmf_20_15m_gt_neg_0_40 = cmf_20_15m > -0.40
cmf_20_15m_gt_neg_0_50 = cmf_20_15m > -0.50
cmf_20_15m_lt_0_30 = cmf_20_15m < 0.30
cmf_20_1h_gt_neg_0_10 = cmf_20_1h > -0.10
cmf_20_1h_gt_neg_0_20 = cmf_20_1h > -0.20
cmf_20_1h_gt_neg_0_25 = cmf_20_1h > -0.25
cmf_20_1h_gt_neg_0_30 = cmf_20_1h > -0.30
cmf_20_1h_gt_neg_0_40 = cmf_20_1h > -0.40
cmf_20_1h_lt_0_20 = cmf_20_1h < 0.20
cmf_20_1h_lt_0_30 = cmf_20_1h < 0.30
cmf_20_4h_gt_neg_0_0 = cmf_20_4h > -0.0
cmf_20_4h_gt_neg_0_10 = cmf_20_4h > -0.10
cmf_20_4h_gt_neg_0_20 = cmf_20_4h > -0.20
cmf_20_4h_gt_neg_0_25 = cmf_20_4h > -0.25
cmf_20_4h_gt_neg_0_30 = cmf_20_4h > -0.30
cmf_20_4h_gt_neg_0_35 = cmf_20_4h > -0.35
cmf_20_4h_gt_neg_0_40 = cmf_20_4h > -0.40
cmf_20_4h_gt_neg_0_50 = cmf_20_4h > -0.50
cmf_20_1d_gt_neg_0_0 = cmf_20_1d > -0.0
cmf_20_1d_gt_neg_0_10 = cmf_20_1d > -0.10
cmf_20_1d_gt_neg_0_20 = cmf_20_1d > -0.20
cmf_20_1d_gt_neg_0_25 = cmf_20_1d > -0.25
cmf_20_1d_gt_neg_0_30 = cmf_20_1d > -0.30
cmf_20_1d_gt_neg_0_40 = cmf_20_1d > -0.40
cmf_20_1d_gt_neg_0_50 = cmf_20_1d > -0.50
stochrsi_k_lt_20 = stochrsi_k < 20.0
stochrsi_k_lt_30 = stochrsi_k < 30.0
stochrsi_k_gt_80 = stochrsi_k > 80.0
stochrsi_k_15m_lt_20 = stochrsi_k_15m < 20.0
stochrsi_k_15m_gt_30 = stochrsi_k_15m > 30.0
stochrsi_k_15m_gt_40 = stochrsi_k_15m > 40.0
stochrsi_k_15m_gt_60 = stochrsi_k_15m > 60.0
stochrsi_k_15m_gt_70 = stochrsi_k_15m > 70.0
stochrsi_k_15m_gt_80 = stochrsi_k_15m > 80.0
stochrsi_k_15m_gt_90 = stochrsi_k_15m > 90.0
stochrsi_k_4h_gt_10 = stochrsi_k_4h > 10.0
stochrsi_k_4h_gt_20 = stochrsi_k_4h > 20.0
stochrsi_k_4h_gt_40 = stochrsi_k_4h > 40.0
stochrsi_k_4h_gt_60 = stochrsi_k_4h > 60.0
stochrsi_k_4h_gt_75 = stochrsi_k_4h > 75.0
stochrsi_k_4h_gt_80 = stochrsi_k_4h > 80.0
stochrsi_k_4h_gt_90 = stochrsi_k_4h > 90.0
stochrsi_k_15m_lt_30 = stochrsi_k_15m < 30.0
stochrsi_k_15m_lt_40 = stochrsi_k_15m < 40.0
stochrsi_k_15m_lt_50 = stochrsi_k_15m < 50.0
stochrsi_k_15m_lt_60 = stochrsi_k_15m < 60.0
stochrsi_k_15m_lt_70 = stochrsi_k_15m < 70.0
stochrsi_k_15m_lt_80 = stochrsi_k_15m < 80.0
stochrsi_k_1h_gt_10 = stochrsi_k_1h > 10.0
stochrsi_k_1h_gt_20 = stochrsi_k_1h > 20.0
stochrsi_k_1h_gt_40 = stochrsi_k_1h > 40.0
stochrsi_k_1h_gt_60 = stochrsi_k_1h > 60.0
stochrsi_k_1h_gt_75 = stochrsi_k_1h > 75.0
stochrsi_k_1h_gt_80 = stochrsi_k_1h > 80.0
stochrsi_k_1h_gt_90 = stochrsi_k_1h > 90.0
stochrsi_k_1h_lt_20 = stochrsi_k_1h < 20.0
stochrsi_k_1h_lt_30 = stochrsi_k_1h < 30.0
stochrsi_k_1h_lt_40 = stochrsi_k_1h < 40.0
stochrsi_k_1h_lt_50 = stochrsi_k_1h < 50.0
stochrsi_k_1h_lt_60 = stochrsi_k_1h < 60.0
stochrsi_k_1h_lt_70 = stochrsi_k_1h < 70.0
stochrsi_k_1h_lt_80 = stochrsi_k_1h < 80.0
stochrsi_k_1h_lt_90 = stochrsi_k_1h < 90.0
stochrsi_k_4h_lt_10 = stochrsi_k_4h < 10.0
stochrsi_k_4h_lt_20 = stochrsi_k_4h < 20.0
stochrsi_k_4h_lt_30 = stochrsi_k_4h < 30.0
stochrsi_k_4h_lt_40 = stochrsi_k_4h < 40.0
stochrsi_k_4h_lt_50 = stochrsi_k_4h < 50.0
stochrsi_k_4h_lt_60 = stochrsi_k_4h < 60.0
stochrsi_k_4h_lt_70 = stochrsi_k_4h < 70.0
stochrsi_k_4h_lt_80 = stochrsi_k_4h < 80.0
stochrsi_k_4h_lt_90 = stochrsi_k_4h < 90.0
stochrsi_k_1d_gt_20 = stochrsi_k_1d > 20.0
stochrsi_k_1d_gt_30 = stochrsi_k_1d > 30.0
stochrsi_k_1d_gt_50 = stochrsi_k_1d > 50.0
stochrsi_k_1d_gt_60 = stochrsi_k_1d > 60.0
stochrsi_k_1d_gt_70 = stochrsi_k_1d > 70.0
stochrsi_k_1d_lt_20 = stochrsi_k_1d < 20.0
stochrsi_k_1d_lt_30 = stochrsi_k_1d < 30.0
stochrsi_k_1d_lt_40 = stochrsi_k_1d < 40.0
stochrsi_k_1d_lt_50 = stochrsi_k_1d < 50.0
stochrsi_k_1d_lt_60 = stochrsi_k_1d < 60.0
stochrsi_k_1d_lt_70 = stochrsi_k_1d < 70.0
stochrsi_k_1d_lt_80 = stochrsi_k_1d < 80.0
stochrsi_k_1d_lt_90 = stochrsi_k_1d < 90.0
roc_9_1h_lt_10 = roc_9_1h < 10.0
roc_9_1h_gt_neg_50 = roc_9_1h > -50.0
roc_9_1h_gt_neg_40 = roc_9_1h > -40.0
roc_9_1h_gt_neg_30 = roc_9_1h > -30.0
roc_9_1h_gt_neg_25 = roc_9_1h > -25.0
roc_9_1h_gt_neg_20 = roc_9_1h > -20.0
roc_9_1h_gt_neg_15 = roc_9_1h > -15.0
roc_9_1h_gt_neg_10 = roc_9_1h > -10.0
roc_9_1h_lt_15 = roc_9_1h < 15.0
roc_9_1h_lt_20 = roc_9_1h < 20.0
roc_9_1h_lt_25 = roc_9_1h < 25.0
roc_9_1h_lt_30 = roc_9_1h < 30.0
roc_9_1h_lt_40 = roc_9_1h < 40.0
roc_9_1h_lt_50 = roc_9_1h < 50.0
roc_9_1h_lt_60 = roc_9_1h < 60.0
roc_9_1h_lt_80 = roc_9_1h < 80.0
roc_9_1h_lt_100 = roc_9_1h < 100.0
roc_9_4h_gt_neg_30 = roc_9_4h > -30.0
roc_9_4h_gt_neg_70 = roc_9_4h > -70.0
roc_9_4h_gt_neg_50 = roc_9_4h > -50.0
roc_9_4h_gt_neg_40 = roc_9_4h > -40.0
roc_9_4h_gt_neg_35 = roc_9_4h > -35.0
roc_9_4h_gt_neg_25 = roc_9_4h > -25.0
roc_9_4h_gt_neg_15 = roc_9_4h > -15.0
roc_9_4h_gt_neg_10 = roc_9_4h > -10.0
roc_9_4h_gt_neg_20 = roc_9_4h > -20.0
roc_9_4h_lt_5 = roc_9_4h < 5.0
roc_9_4h_lt_10 = roc_9_4h < 10.0
roc_9_4h_lt_15 = roc_9_4h < 15.0
roc_9_4h_lt_20 = roc_9_4h < 20.0
roc_9_4h_lt_25 = roc_9_4h < 25.0
roc_9_4h_lt_30 = roc_9_4h < 30.0
roc_9_4h_lt_40 = roc_9_4h < 40.0
roc_9_4h_lt_50 = roc_9_4h < 50.0
roc_9_4h_lt_60 = roc_9_4h < 60.0
roc_9_4h_lt_70 = roc_9_4h < 70.0
roc_9_4h_lt_80 = roc_9_4h < 80.0
roc_9_4h_lt_100 = roc_9_4h < 100.0
roc_9_1d_gt_neg_50 = roc_9_1d > -50.0
roc_9_1d_gt_neg_100 = roc_9_1d > -100.0
roc_9_1d_gt_neg_80 = roc_9_1d > -80.0
roc_9_1d_gt_neg_70 = roc_9_1d > -70.0
roc_9_1d_gt_neg_60 = roc_9_1d > -60.0
roc_9_1d_gt_neg_25 = roc_9_1d > -25.0
roc_9_1d_gt_neg_15 = roc_9_1d > -15.0
roc_9_1d_gt_neg_10 = roc_9_1d > -10.0
roc_9_1d_gt_neg_40 = roc_9_1d > -40.0
roc_9_1d_gt_neg_30 = roc_9_1d > -30.0
roc_9_1d_gt_neg_20 = roc_9_1d > -20.0
roc_9_1d_lt_10 = roc_9_1d < 10.0
roc_9_1d_lt_15 = roc_9_1d < 15.0
roc_9_1d_lt_20 = roc_9_1d < 20.0
roc_9_1d_lt_25 = roc_9_1d < 25.0
roc_9_1d_lt_30 = roc_9_1d < 30.0
roc_9_1d_lt_35 = roc_9_1d < 35.0
roc_9_1d_lt_40 = roc_9_1d < 40.0
roc_9_1d_lt_50 = roc_9_1d < 50.0
roc_9_1d_lt_60 = roc_9_1d < 60.0
roc_9_1d_lt_70 = roc_9_1d < 70.0
roc_9_1d_lt_80 = roc_9_1d < 80.0
roc_9_1d_lt_100 = roc_9_1d < 100.0
roc_9_1d_lt_150 = roc_9_1d < 150.0
roc_9_1d_lt_200 = roc_9_1d < 200.0
cci_20_change_pct_1h_gt_neg_0 = cci_20_change_pct_1h > -0.0
cci_20_change_pct_1h_lt_neg_0 = cci_20_change_pct_1h < -0.0
cci_20_change_pct_1h_lt_0 = cci_20_change_pct_1h < 0.0
cci_20_change_pct_4h_lt_neg_0 = cci_20_change_pct_4h < -0.0
cci_20_change_pct_4h_lt_0 = cci_20_change_pct_4h < 0.0
change_pct_1d_gt_neg_50 = change_pct_1d > -50.0
change_pct_1d_gt_neg_30 = change_pct_1d > -30.0
change_pct_1d_gt_neg_20 = change_pct_1d > -20.0
change_pct_1d_gt_neg_15 = change_pct_1d > -15.0
change_pct_1d_gt_neg_10 = change_pct_1d > -10.0
change_pct_1d_gt_neg_5 = change_pct_1d > -5.0
change_pct_1d_lt_10 = change_pct_1d < 10.0
change_pct_1d_lt_15 = change_pct_1d < 15.0
change_pct_1d_lt_25 = change_pct_1d < 25.0
change_pct_1d_lt_30 = change_pct_1d < 30.0
change_pct_1d_lt_40 = change_pct_1d < 40.0
change_pct_1d_lt_50 = change_pct_1d < 50.0
top_wick_pct_1d_lt_8 = top_wick_pct_1d < 8.0
top_wick_pct_1d_lt_10 = top_wick_pct_1d < 10.0
top_wick_pct_1d_lt_15 = top_wick_pct_1d < 15.0
top_wick_pct_1d_lt_20 = top_wick_pct_1d < 20.0
top_wick_pct_1d_lt_25 = top_wick_pct_1d < 25.0
top_wick_pct_1d_lt_30 = top_wick_pct_1d < 30.0
top_wick_pct_1d_lt_50 = top_wick_pct_1d < 50.0
is_backtest = self.dp.runmode.value in ["backtest", "hyperopt", "plot", "webserver"]
# the number of free slots
current_free_slots = config["max_open_trades"]
if not is_backtest:
current_free_slots = config["max_open_trades"] - Trade.get_open_trade_count()
# Grind mode
pair_coin = metadata["pair"].partition("/")[0]
num_open_long_grind_mode = 0
is_pair_long_grind_mode = pair_coin in self.grind_mode_coins
if not is_backtest:
open_trades = Trade.get_trades_proxy(is_open=True)
for open_trade in open_trades:
enter_tag = open_trade.enter_tag
if enter_tag is not None:
enter_tags = enter_tag.split()
if all(c in self.long_grind_mode_tags for c in enter_tags):
num_open_long_grind_mode += 1
# Top Coins mode
is_pair_long_top_coins_mode = pair_coin in top_coins_mode_coins
is_pair_short_top_coins_mode = pair_coin in top_coins_mode_coins
# if BTC/ETH stake
is_btc_stake = config["stake_currency"] in self.btc_stakes
allowed_empty_candles_288 = 144 if is_btc_stake else 60
###############################################################################################
# LONG ENTRY CONDITIONS STARTS HERE
###############################################################################################
#
# /$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$$$/$$ /$$/$$$$$$$$/$$$$$$$$/$$$$$$$
# | $$ /$$__ $| $$$ | $$/$$__ $$ | $$_____| $$$ | $|__ $$__| $$_____| $$__ $$
# | $$ | $$ \ $| $$$$| $| $$ \__/ | $$ | $$$$| $$ | $$ | $$ | $$ \ $$
# | $$ | $$ | $| $$ $$ $| $$ /$$$$ | $$$$$ | $$ $$ $$ | $$ | $$$$$ | $$$$$$$/
# | $$ | $$ | $| $$ $$$| $$|_ $$ | $$__/ | $$ $$$$ | $$ | $$__/ | $$__ $$
# | $$ | $$ | $| $$\ $$| $$ \ $$ | $$ | $$\ $$$ | $$ | $$ | $$ \ $$
# | $$$$$$$| $$$$$$| $$ \ $| $$$$$$/ | $$$$$$$| $$ \ $$ | $$ | $$$$$$$| $$ | $$
# |________/\______/|__/ \__/\______/ |________|__/ \__/ |__/ |________|__/ |__/
#
for enabled_long_entry_signal in long_entry_signal_params:
long_entry_condition_index = int(enabled_long_entry_signal.rsplit("_", 2)[1])
if long_entry_signal_params[enabled_long_entry_signal]:
# Long Entry Conditions Starts Here
# -----------------------------------------------------------------------------------------
long_entry_logic = []
long_entry_logic.append(True)
# Condition #1 - Normal mode (Long).
if long_entry_condition_index == 1:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 15m & 1h down move
((rsi_3_gt_3) | rsi_3_15m_gt_3 | (rsi_3_change_pct_1h > -50.0))
# 5m & 15m down move, 5h high
& ((rsi_3_gt_3) | (rsi_3_15m_gt_5) | (rsi_14_4h < 60.0))
# 5m & 15m down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_15m_gt_10) | aroonu_14_4h_lt_100)
# 5m & 1h down move
& ((rsi_3_gt_3) | (rsi_3_1h_gt_5))
# 5m & 1h down move, 15m still not low enough
& ((rsi_3_gt_5) | (rsi_3_1h_gt_10) | (aroonu_14_15m_lt_30))
# 5m & 1h down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1d still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (stochrsi_k_1d_lt_50))
# 5m & 1h down move, 15m still not low enough
& ((rsi_3_gt_3) | (rsi_3_1h_gt_15) | (aroonu_14_15m_lt_30))
# 5m & 4h down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_25) | aroonu_14_4h_lt_70)
# 5m down move, 15m high
& ((rsi_3_gt_3) | (aroonu_14_15m_lt_80))
# 5m down move, 1h high, 4h overbought
& ((rsi_3_gt_3) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 5m & 4h down move, 4h high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_35) | aroonu_14_4h_lt_70)
# 15m down move, 1h downtrend, 1h high
& ((rsi_3_15m > 1.0) | (cmf_20_1h_gt_neg_0_10) | aroonu_14_1h_lt_70)
# 15m & 1h & 4h down move
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_15))
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 1d high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_100))
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 1h & 4h & 1d down move
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_15))
# 15m & 1h down move, 15m still high
& (rsi_3_15m_gt_3 | rsi_3_1h_gt_20 | (aroonu_14_15m_lt_40))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | rsi_3_1h_gt_20 | aroonu_14_1h_lt_70)
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_30) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_50))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_45) | aroonu_14_1h_lt_80)
# 15m & 4h down move, 1d high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 4h high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_60))
# 15m & 4h down move, 1d downtrend
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_30) | roc_9_1d_gt_neg_50)
# 15m & 4h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_50))
# 15m down move, 15m downtrend
& (rsi_3_15m_gt_3 | (cmf_20_15m_gt_neg_0_40) | (roc_9_15m > -20.0))
# 15m down move, 15m still high, 15m downtrend
& (rsi_3_15m_gt_3 | (aroonu_14_15m_lt_40) | (roc_9_15m > -20.0))
# 15m down move, 1h & 4h high
& (rsi_3_15m_gt_3 | (aroonu_14_1h_lt_85) | (aroonu_14_4h_lt_90))
# 15m down move, 4h high, 15m downtrend
& (rsi_3_15m_gt_3 | aroonu_14_4h_lt_70 | (roc_9_15m > -20.0))
# 15m down move, 4h high, 1d overbought
& (rsi_3_15m_gt_3 | (aroonu_14_4h_lt_85) | (roc_9_1d_lt_100))
# 15m down move, 1h high, 4h overbought
& (rsi_3_15m_gt_3 | (stochrsi_k_1h_lt_90) | (roc_9_4h_lt_10))
# 15m down move, 4h high & overbought
& (rsi_3_15m_gt_3 | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30))
# 15m down move, drop in last half hour, 15m downtrend
& (rsi_3_15m_gt_3 | (close > (df["close_max_6"] * 0.75)) | (roc_9_15m > -20.0))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | aroonu_14_4h_lt_70)
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (roc_9_1d_lt_40))
# 5m & 1h down move, 1h overbought
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_60) | (roc_9_1h_lt_40))
# 15m & 4h down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_1d_lt_40))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_5) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_60))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_30) | (stochrsi_k_15m_lt_50))
# 15m down move, 15m & 4h still high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_60))
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_50) | (roc_9_1d_lt_80))
# 15m down move, 15m high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_80))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_5) | (aroonu_14_4h_lt_60) | (roc_9_1d_lt_80))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_70))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (roc_9_1d_gt_neg_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (rsi_14_4h_lt_80))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_15m_lt_50))
# 15m & 1h down move, 15m still high, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_80))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (roc_9_4h_lt_80))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1h_lt_75))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_50))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 4h down move, 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_20))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_30))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (aroonu_14_1h_lt_85))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_90))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d > 50.0) | (stochrsi_k_1d_lt_80))
# 15m down move & downtrend, 4h high
& ((rsi_3_15m_gt_10) | (cmf_20_15m_gt_neg_0_30) | aroonu_14_4h_lt_100)
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_70) | aroonu_14_4h_lt_80)
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_90) | (roc_9_1h_lt_20))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_40))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_100) | (roc_9_1d_lt_80))
# 15m down move, 1h high, 4h downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_25))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_70) | roc_9_1d_gt_neg_50)
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_20))
# 15m down move, 1h & 1d overbought
& ((rsi_3_15m_gt_10) | (roc_9_1h_lt_10) | (roc_9_1d_lt_80))
# 15m down move, 4h high
& ((rsi_3_15m_gt_10) | (roc_9_4h_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | rsi_3_1h_gt_20 | aroonu_14_1h_lt_80)
# 15m down move, 15m still high, 4h overbought
& ((rsi_3_15m_gt_15) | (rsi_14_15m_lt_50) | (roc_9_4h_lt_50))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_80) | (aroonu_14_1h_lt_90))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_35) | (aroonu_14_15m_lt_40))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_100) | (aroonu_14_4h_lt_100))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_100) | (roc_9_1h_lt_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_25) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_10))
# 15m down move, 1d overbought
& ((rsi_3_15m_gt_30) | (roc_9_1d_lt_80))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_40) | (rsi_3_4h_gt_45) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_10))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_90))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_100))
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (roc_9_1d_lt_10))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (cmf_20_1h_gt_neg_0_30))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_20 | (roc_9_1d_lt_40))
# 1h & 1d down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_1d_gt_5) | (roc_9_1d_gt_neg_30))
# 1h down move, 1h still high, 4h high
& ((rsi_3_1h_gt_5) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_30))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_15m_lt_30))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_50))
# 1h & 4h & 1d down move, 4h downtrend, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | (rsi_14_4h_gt_30) | (aroonu_14_1d_lt_40))
# 1h & 1d down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_20) | (aroonu_14_4h_lt_80))
# 1h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_14_4h_lt_75))
# 1h down move, 15m downtrend, 1d high
& ((rsi_3_1h_gt_10) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1d_lt_70))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_70) | (roc_9_4h_lt_10))
# 1h down move, 4h overbought
& ((rsi_3_1h_gt_10) | (roc_9_4h_lt_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_80))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_40))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70) | (roc_9_1d_gt_neg_20))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70) | roc_9_1d_lt_50)
# 1h down move, 1h high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_80))
# 1h down mve, 4h high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_80) | (roc_9_1d_lt_30))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_40))
# 1h down move, 1h & 4h downtrend
& ((rsi_3_1h_gt_15) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 1h & 4h down move, 4h overbought
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | (roc_9_4h_lt_80))
# 1h down move, 1h still high, 4h downtrend
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h high, 1d overbought
& (rsi_3_1h_gt_20 | aroonu_14_4h_lt_70 | (roc_9_1d_lt_200))
# 1h down move, 4h high, 1d overbought
& (rsi_3_1h_gt_20 | (aroonu_14_4h_lt_90) | (roc_9_1d_lt_60))
# 1h down move, 4h high & overbought
& (rsi_3_1h_gt_20 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_50))
# 1h down move, 1d high & overbought
& (rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_80))
# 1h down move, 1h high, 15n downtrend
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_70 | (roc_9_15m > -20.0))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_25) | (roc_9_4h_lt_80) | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (roc_9_4h_gt_neg_20))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_90) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_80))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_35) | (roc_9_4h_lt_40) | (roc_9_1d_lt_80))
# 1h down move, 1h downtrend, 1h high
& ((rsi_3_1h_gt_40) | (cmf_20_1h_gt_neg_0_25) | (aroonu_14_1h_lt_90))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_60) | aroonu_14_4h_lt_100)
# 1h down move, 1h high, 15m downtrend
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | (roc_9_15m > -15.0))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | (roc_9_1d_lt_100))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_45) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100)
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_1h_lt_90) | (roc_9_1h_lt_20))
# 1h down move, 1h still high, 4h high
& ((rsi_3_1h_gt_60) | (aroonu_14_1h_lt_50) | (rsi_14_4h < 90.0))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_40))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_5) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_40))
# 4h & 1d down move, 4h still not low enough
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (aroonu_14_4h_lt_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50))
# 4h down move, 4h still high
& ((rsi_3_4h_gt_10) | (aroonu_14_4h_lt_50))
# 4h down move, 1d high
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_100))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_60) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h still not low enough, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_20) | (roc_9_1d > -30.0))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_80))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_80 | roc_9_1d_lt_50)
# 4h down move, 1d overbought
& ((rsi_3_4h_gt_45) | (roc_9_1d_lt_80))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_40))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_60) | (stochrsi_k_1h_lt_90) | (roc_9_1d_lt_60))
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_90) | (roc_9_1d_gt_neg_20))
# 1d down move, 1h still high, 4h high
& ((rsi_3_1d_gt_20) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_25) | aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90))
# 1d down move, 1d high
& ((rsi_3_1d_gt_40) | (aroonu_14_1d_lt_80))
# 1d down move, 4h still high, 1d overbought
& ((rsi_3_1d > 50.0) | (aroonu_14_4h_lt_50) | (roc_9_1d_lt_200))
# 1d down move, 1d high & overbought
& ((rsi_3_1d_gt_60) | (aroonu_14_1d_lt_80) | roc_9_1d_lt_50)
# 1h down move, 4h high, 1d overbought
& ((rsi_3_change_pct_1h > -75.0) | (aroonu_14_4h_lt_90) | (roc_9_1d_lt_100))
# 15m & 1h & 4h downtrend
& ((cmf_20_15m_gt_neg_0_30) | (cmf_20_1h_gt_neg_0_30) | (cmf_20_4h_gt_neg_0_30))
# 15m high, 1d overbought
& ((aroonu_14_15m_lt_70) | (roc_9_1d_lt_80))
# 1h still high, 1h & 4h downtrend
& ((aroonu_14_1h_lt_40) | (roc_9_1h_gt_neg_20) | (roc_9_4h_gt_neg_30))
# 1h & 4h high, 1h overbought
& ((aroonu_14_1h_lt_85) | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_20))
# 1h high, 1h & 4h overbought
& ((aroonu_14_1h_lt_85) | (roc_9_1h_lt_10) | (roc_9_1d_lt_30))
# 1h high, 1h overbought, 1d downtrend
& ((aroonu_14_1h_lt_85) | (roc_9_1h_lt_20) | (roc_9_1d_gt_neg_40))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | roc_9_1d_lt_50)
# 4h high, 1h downtrend
& (aroonu_14_4h_lt_80 | (roc_9_1h_gt_neg_15))
# 4h high, 1d downtrend
& (aroonu_14_4h_lt_80 | (roc_9_1d_gt_neg_40))
# 1d high, 4h downtrend, 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_25) | roc_9_1d_lt_50)
# 1d high, 1h & 4h downtrend
& ((aroonu_14_1d_lt_90) | (roc_9_1h_gt_neg_10) | (roc_9_4h_gt_neg_20))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_90) | (roc_9_4h_lt_40) | (roc_9_1d_lt_80))
# 1h high, 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_80))
# 4h high, 1h downtrend
& ((stochrsi_k_4h_lt_70) | (roc_9_1h_gt_neg_15))
# 4h high, 1d downtrend
& ((stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_40))
# 5m down move, 15m still not low enough, 1h high
& ((roc_2 > -10.0) | (aroonu_14_15m_lt_30) | aroonu_14_1h_lt_80)
# 5m down move, 15m still high
& ((roc_2 > -10.0) | (aroonu_14_15m_lt_50))
# 5m down move, 15m & 1h down move, 15m still high
& ((roc_9 > -15.0) | (rsi_3_15m_gt_5) | (rsi_3_1h_gt_35) | (aroonu_14_15m_lt_50))
# 5m down move, 4h down move, 15m downtrend, 1h high
& ((roc_9 > -15.0) | (rsi_3_4h_gt_45) | (cmf_20_15m_gt_neg_0_30) | (aroonu_14_1h_lt_60))
# 1h downtrend, 4h high & overbought
& ((roc_9_1h_gt_neg_25) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_80))
# 1h & 4h overbought, 1d downtrend
& ((roc_9_1h_lt_20) | (roc_9_4h_lt_20) | (roc_9_1d_gt_neg_40))
# 1d P&D, 1d downtrend
& ((change_pct_1d_gt_neg_5) | (change_pct_1d_shift.shift(288) < 30.0) | (cmf_20_1d_gt_neg_0_0))
# 1d green with top wick, 1h down move
& ((change_pct_1d < 20.0) | (top_wick_pct_1d_lt_15) | rsi_3_1h_gt_20)
# 1d green with top wick, 4h high
& ((change_pct_1d_lt_25) | (top_wick_pct_1d_lt_25) | aroonu_14_4h_lt_80)
# 1d green, 1h down move, 1d downtrend
& ((change_pct_1d_lt_40) | (rsi_3_1h_gt_25) | (cmf_20_1d_gt_neg_0_20))
# 1d green with top wick, 4h overbought
& ((change_pct_1d_lt_50) | (top_wick_pct_1d_lt_30) | (roc_9_4h_lt_80))
# 1d top wick, 1h & 4h down move, 1d high
& ((top_wick_pct_1d_lt_20) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_100))
# big drop in the last hour, 15m downtrend
& ((close > (close_max_12 * 0.65)) | (cmf_20_15m_gt_neg_0_50))
# big drop in the last 6 hours, 1h down move, 1h high
& ((close > (df["high_max_6_1h"] * 0.60)) | rsi_3_1h_gt_20 | (aroonu_14_1h_lt_60))
# big drop in the last 24 hours, 1h still high
& ((close > (df["high_max_24_1h"] * 0.40)) | (stochrsi_k_1h < 45.0))
# big drop in the last 4 days, 1h high
& ((close > (high_max_24_4h * 0.20)) | aroonu_14_1h_lt_70)
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(ema_26 > ema_12)
& ((ema_26 - ema_12) > (open_rate * 0.034))
& ((ema_26_shift.shift() - ema_12_shift.shift()) > (open_rate / 100.0))
& (close < (bbl_20_2_0 * 0.999))
)
# Condition #2 - Normal mode (Long).
if long_entry_condition_index == 2:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 1h down move, 1h still not low enough
((rsi_3_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30))
# 5m & 1h down move, 1d high
& ((rsi_3_gt_3) | rsi_3_1h_gt_20 | aroonu_14_1d_lt_100)
# 5m & 1h down move, 1h still high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 5m & 1h down move, 1d high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_35) | aroonu_14_1d_lt_100)
# 5m & 4h down move, 15m still not low enough
& ((rsi_3_gt_3) | (rsi_3_4h_gt_3) | (stochrsi_k_15m_lt_30))
# 5m & 4h down move, 1d downtrend
& ((rsi_3_gt_3) | (rsi_3_4h_gt_15) | (roc_9_1d > -30.0))
# 5m & 4h down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_80))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_50))
# 5m & 1d down move, 1h still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_10) | (aroonu_14_1h_lt_40))
# 5m & 1d down move, 1h still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_50))
# 5m & 1d down move, 1d downtrend
& ((rsi_3_gt_3) | (rsi_3_1d_gt_15) | (cmf_20_1d_gt_neg_0_25))
# 5m & 1d down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_20) | (stochrsi_k_15m_lt_40))
# 5m down move, 1h high
& ((rsi_3_gt_3) | aroonu_14_1h_lt_80)
# 5m down move, 4h high, 1d overbought
& ((rsi_3_gt_3) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_30))
# 5m down move, 4h high & overbought
& ((rsi_3_gt_3) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_20))
# 5m down move, 4h & 1d overbought
& ((rsi_3_gt_3) | (roc_9_4h_lt_20) | (roc_9_1d_lt_40))
# 5m down move, 1d downtrend
& ((rsi_3_gt_3) | (roc_9_1d_gt_neg_40))
# 5m & 15m down move, 15m still high
& ((rsi_3_gt_5) | (rsi_3_15m_gt_10) | (stochrsi_k_15m_lt_40))
# 5m & 15m down move, 1h high
& ((rsi_3_gt_5) | (rsi_3_15m_gt_30) | (stochrsi_k_1h_lt_80))
# 5m & 4h down move, 1d downtrend
& ((rsi_3_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 5m & 4h down move, 4h still not low enough
& ((rsi_3_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_4h < 20.0))
# 5m down move, 4h high, 1h overbought
& ((rsi_3_gt_10) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_30))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m > 1.0) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_40))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_3) | (rsi_3_4h_gt_15))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_3) | (aroonu_14_4h_lt_50))
# 15m & 1h down move, 15m downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (cmf_20_15m_gt_neg_0_30))
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (aroonu_14_15m_lt_30))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (aroonu_14_1h_lt_25))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (stochrsi_k_1h_lt_30))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_10))
# 15m & 1h & 4h down move, 4h still not low enough, 1d still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_20) | (rsi_14_1d_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_30))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (roc_9_1d_gt_neg_40))
# 15m & 1h down move, 15m downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (cmf_20_15m_gt_neg_0_40))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | aroonu_14_1h_lt_70)
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | (stochrsi_k_4h < 60.0))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_35) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_35) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_85))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_60) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_5) | (rsi_14_4h_lt_30))
# 15m & 4h down move, 4h downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_5) | (cmf_20_4h_gt_neg_0_35))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_70))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_30) | (stochrsi_k_4h < 40.0))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_50))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_3) | (aroonu_14_15m_lt_20) | (stochrsi_k_1h_lt_60))
# 15m down move, 15m still not low enough, 1h still high
& ((rsi_3_15m_gt_3) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_50))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_3) | (aroonu_14_1h_lt_70) | (roc_9_1d_lt_20))
# 15m down move, 4h still high, 15m downtrend
& ((rsi_3_15m_gt_3) | (aroonu_14_4h_lt_40) | (cmf_20_15m_gt_neg_0_35))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_3) | (aroonu_14_4h_lt_70) | (roc_9_1d_lt_30))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_3) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_50))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (rsi_3_4h_gt_10))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (rsi_14_4h_lt_40))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_100))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | (stochrsi_k_4h < 60.0))
# 15m & 1h & 4h & 1d down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_70))
# 15m & 1h & 4h & 1d down move, 1h still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_40) | (stochrsi_k_1h_lt_30))
# 15m & 1h & 4h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_20) | (rsi_3_4h_gt_40) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_80))
# 15m & 4h down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_1d_lt_40))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_70))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_15m_lt_40))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_50))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_20) | (roc_9_1d_lt_10))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_45) | (aroonu_14_4h_lt_40))
# 15m & 1d down move, 15m still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_10) | (aroonu_14_15m_lt_30))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_40) | (stochrsi_k_1h_lt_90))
# 15m down move, 15m downtrend, 4h still not low enough
& ((rsi_3_15m_gt_5) | (cmf_20_15m_gt_neg_0_30) | (stochrsi_k_4h < 30.0))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_20) | (stochrsi_k_4h_lt_70))
# 15m down move, 15m stil high, 1h still high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_50))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_5) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_20))
# 15m down move, 15m still not low enough, 1h still high
& ((rsi_3_15m_gt_5) | (stochrsi_k_15m_lt_20) | (stochrsi_k_1h_lt_50))
# 15m down move, 1h still high, 4h overbought
& ((rsi_3_15m_gt_5) | (stochrsi_k_1h_lt_50) | (roc_9_4h_lt_30))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_5) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_20))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_15m_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_60))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_80))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (stochrsi_k_4h_lt_70))
# 15m & 1h & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_4h_lt_75))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_4h_lt_50))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (roc_9_1d_gt_neg_50))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_30))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (rsi_14_4h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_80))
# 16m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_55) | (stochrsi_k_4h_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_70))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h < 30.0))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_80))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_lt_20))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h < 30.0))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (aroonu_14_1d_lt_90))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_30))
# 15m & 4h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_55) | (roc_9_4h_lt_50))
# 15m & 1d down move, 1d still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (rsi_14_1d_lt_40))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_90))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_90))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_70))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_70))
# 15m down move, 15m downtrend, 1h high
& ((rsi_3_15m_gt_10) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1h_lt_80))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_80) | (roc_9_1d_lt_20))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_70) | aroonu_14_1d_lt_100)
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_70) | (roc_9_4h_lt_10))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_10) | (stochrsi_k_15m_lt_20) | (aroonu_14_4h_lt_70))
# 15m down move, 15m sill high, 4h high
& ((rsi_3_15m_gt_10) | (stochrsi_k_15m_lt_40) | (aroonu_14_4h_lt_60))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h < 80.0) | (roc_9_1d_gt_neg_30))
# 15m & 1h down move, 4h downtrend
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (roc_9_4h_gt_neg_20))
# 15m & 1h down move, 1h downtrend
& ((rsi_3_15m_gt_15) | rsi_3_1h_gt_20 | (cmf_20_1h_gt_neg_0_30))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (roc_9_1d_lt_100))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_30) | (aroonu_14_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_40) | (aroonu_14_1d_lt_90))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_45) | (stochrsi_k_4h_lt_70))
# 15m & 1h down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_55) | (aroonu_14_4h_lt_60) | (roc_9_4h_lt_30))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_70))
# 15m & 4h down move, 4h downtrend
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_20))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_20) | (aroonu_14_1d_lt_90))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_15) | (aroonu_14_1h_lt_40))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_30) | (aroonu_14_4h_lt_90))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_25) | (aroonu_14_4h_lt_60))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_30) | (aroonu_14_1h_lt_70))
# 15m down move, 15m & 4h still high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_40) | (aroonu_14_4h_lt_40))
# 15m down move, 1h still high, 4h overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_4h_lt_60))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_60) | (aroonu_14_4h_lt_90))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_15) | aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_90))
# 15m down move, 4h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_75) | (aroonu_14_1d_lt_100))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_10))
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_15m_lt_50) | (roc_9_1d_lt_100))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_70) | (roc_9_1d_lt_10))
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (aroonu_14_15m_lt_30))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (roc_9_4h_lt_50))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (stochrsi_k_15m_lt_80))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_20) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_80))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_80) | (aroonu_14_4h_lt_80))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_80) | (aroonu_14_1d_lt_80))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_30))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_70) | (roc_9_1d_lt_100))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 15m & 1h & 4h & 1d down move, 4h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (rsi_3_1d_gt_30) | (rsi_14_4h_lt_40))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_40) | (roc_9_1d_lt_80))
# 15m & 4h down move, 1h overbought
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_35) | (roc_9_1h_lt_100))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_20) | (stochrsi_k_1h_lt_90))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_100))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_70) | (roc_9_1d_lt_50))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_70) | (roc_9_1d_lt_50))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_80) | (roc_9_1h_lt_50))
# 15m & 1h & 4h down move, 1d high, 4h still not low enough
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_100) | (stochrsi_k_4h_lt_30))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_30) | (aroonu_14_4h_lt_70) | (roc_9_4h_lt_50))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_30) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_30) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_1h_lt_80) | (roc_9_4h_lt_80))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_50))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_4h_lt_100) | (roc_9_1h_lt_20))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_35) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_80))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_40) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_40))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h > 1.0) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_10))
# 1h down move, 15m downtrend, 1h still high
& ((rsi_3_1h_gt_3) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1h_lt_40))
# 1h & 4h down move, 15m downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | (roc_9_15m > -30.0))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_5) | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_40))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_20))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_10))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 1h & 1d down move, 15m still high
& ((rsi_3_1h_gt_3) | (rsi_3_1d_gt_10) | (stochrsi_k_15m_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_4h < 40.0))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_1d_lt_50))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (roc_9_1d_gt_neg_30))
# 1h % 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (cmf_20_4h_gt_neg_0_30))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_5) | (stochrsi_k_4h_lt_50) | roc_9_1d_gt_neg_50)
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_15))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_40))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h & 1d down move, 4h downtrend, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | (rsi_14_4h_gt_30) | (aroonu_14_1d_lt_40))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_50))
# 1h & 1d down move, 15m still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_15m_lt_40))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_35) | (rsi_14_4h_lt_40))
# 1h down move, 1h still not low enough 1d overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30) | (roc_9_1d_lt_100))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_14_1d_lt_60))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_20))
# 1h & 4h down move, 15m still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_50))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_14_4h_lt_40))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_25) | (stochrsi_k_4h < 30.0))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (roc_9_4h_gt_neg_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_50))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_35) | (roc_9_1d_lt_10))
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40) | (roc_9_1d_gt_neg_40))
# 1h down move, 4h high, 1d high
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_60) | (aroonu_14_1d_lt_100))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_60) | roc_9_1d_lt_50)
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_15) | (stochrsi_k_4h < 60.0) | (roc_9_4h_lt_10))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_40))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_15) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1d overbought
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (roc_9_1d_lt_20))
# 1h & 4h down move, 4h still high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_85))
# 1h & 1d down move, 1h still high
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_50))
# 1h down move, 1h high, 4h downtrend
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_10))
# 1h down move, 1h high, 4h overbought
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_70 | (roc_9_4h_lt_10))
# 1h down move, 1h high, 1h still not low enough
& (rsi_3_1h_gt_20 | (aroonu_14_1d_lt_80) | (stochrsi_k_1h_lt_20))
# 1h down move, 1d high & overbought
& (rsi_3_1h_gt_20 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 1h down move, 1d high, 4h downtrend
& (rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_80) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (roc_9_1d_gt_neg_30))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_60) | (aroonu_14_4h_lt_90))
# 1h down move, 1h high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_85))
# 1h down move, 4h high, 4h downtrend
& ((rsi_3_1h_gt_25) | aroonu_14_4h_lt_70 | (cmf_20_4h_gt_neg_0_50))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_40))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_25) | (roc_9_4h_lt_30) | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_60) | aroonu_14_4h_lt_100)
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_10))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_30))
# 1h down move, 4h downtrend, 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_gt_neg_30) | (roc_9_1d_lt_200))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_30) | (roc_9_4h_gt_neg_25) | (roc_9_1d_gt_neg_60))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_35) | (stochrsi_k_1h_lt_40))
# 1h down move, 1h still high, 4h downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_50) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_25))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_85) | (roc_9_4h_lt_100))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_85) | (roc_9_1d_lt_100))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_35) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_40))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_200))
# 1h & 4h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_40) | (rsi_3_4h_gt_40) | (rsi_3_1d_gt_60) | (roc_9_1d_lt_40))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | (aroonu_14_1d_lt_80))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | (roc_9_1d_lt_10))
# 1h down move, 4h still high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_4h_lt_40) | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_45) | (rsi_3_4h_gt_60) | aroonu_14_4h_lt_100)
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_45) | (rsi_3_4h_gt_65) | (roc_9_1d_lt_200))
# 1h down move, 1h high, 1d high & overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_60) | (stochrsi_k_1d_lt_70) | (roc_9_1d_lt_40))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_50) | aroonu_14_1h_lt_80 | (roc_9_1h_lt_10))
# 1h down move, 4h high, 1h overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_4h_lt_85) | (roc_9_1h_lt_20))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h < 60.0) | (roc_9_1d_gt_neg_60))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_100))
# 1h down move, 1h & 4h overbought
& ((rsi_3_1h_gt_50) | (roc_9_1h_lt_10) | (roc_9_4h_lt_100))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_55) | (aroonu_14_1h_lt_90) | (roc_9_1h_lt_10))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_55) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_10))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 4h & 1d down move, 4h still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (aroonu_14_4h_lt_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (aroonu_14_1d_lt_40))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_40))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_15) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 1d high
& ((rsi_3_4h_gt_5) | (aroonu_14_4h_lt_50) | (aroonu_14_1d_lt_100))
# 4h down move, 15m still high
& ((rsi_3_4h_gt_5) | (stochrsi_k_15m_lt_50))
# 4h & 1d down move, 1h still not low enough
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_1d_lt_40))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_20) | (roc_9_1d_gt_neg_25))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_35) | (aroonu_14_1d_lt_100))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_10))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_40))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_4h < 40.0) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_60))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_20) | (rsi_3_1d_gt_20) | (stochrsi_k_4h < 40.0))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_20) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_80))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_10))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_4h_gt_neg_20))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_70) | roc_9_1d_lt_50)
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_40) | (roc_9_1d_lt_30))
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_1d_lt_100))
# 4h down move, 4h still high. 4h downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50) | (cmf_20_4h_gt_neg_0_40))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h high, 4h downtrend
& ((rsi_3_4h_gt_25) | aroonu_14_4h_lt_70 | (roc_9_4h_gt_neg_30))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_30) | (rsi_3_1d_gt_60) | (roc_9_1d_lt_60))
# 4h down move, 1d downtrend
& ((rsi_3_4h_gt_30) | roc_9_1d_gt_neg_50)
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_35) | (roc_9_4h_lt_30) | (roc_9_1d_lt_200))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_40) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_40))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_40) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_40) | (stochrsi_k_4h < 40.0) | roc_9_1d_lt_50)
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_60))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_40) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_100))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_45) | (rsi_3_1d_gt_45) | aroonu_14_1d_lt_100)
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_45) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_10))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_50) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_80))
# 4h down move, 1d high, 4h overbought
& ((rsi_3_4h_gt_55) | (stochrsi_k_1d_lt_90) | (roc_9_4h_lt_10))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_60) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_20))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_60) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_200))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 4h down move, 4h overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_60))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_5) | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_20))
# 1d down move, 1h & 4h still not low enough
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_20) | (stochrsi_k_4h < 20.0))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_10) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90))
# 1d down move, 1h high
& ((rsi_3_1d_gt_10) | aroonu_14_1h_lt_70)
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 1d down move, 1h overbought, 1d downtrend
& ((rsi_3_1d_gt_15) | (roc_9_1h_lt_20) | roc_9_1d_gt_neg_50)
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_20) | (stochrsi_k_1h_lt_90) | (roc_9_1d_gt_neg_10))
# 1d down move, 1h high, 1d overbought
& ((rsi_3_1d_gt_25) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_25))
# 1d down move, 1d still high, 1d downtrend
& ((rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_40) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_80))
# 1d down move, 4h high & overbought
& ((rsi_3_1d_gt_45) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_60))
# 1d down move, 1d still high, 4h still high
& ((rsi_3_1d_gt_50) | (rsi_14_1d_lt_50) | (stochrsi_k_4h_lt_50))
# 1d downtrend, 1d high & overbought
& ((cmf_20_1d_gt_neg_0_40) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_20))
# 1h high, 4h & 1d overbought
& (aroonu_14_1h_lt_70 | (roc_9_4h_lt_50) | (roc_9_1d_lt_200))
# 1h & 4h high, 1d overbought
& (aroonu_14_1h_lt_70 | (aroonu_14_4h_lt_90) | roc_9_1d_lt_50)
# 1h & 4h high, 1d downtrend
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1d_gt_neg_40))
# 1h high, 4h & 1d downtrend
& (aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_30) | roc_9_1d_gt_neg_50)
# 1h & 4h high, 1h overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_30))
# 1h & 4high, 1d downtrend
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_1d_gt_neg_20))
# 1h & 4h high, 1d overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_1d_lt_80))
# 1h & 1d high, 1d overbought
& (aroonu_14_1h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 1h high, 1d downtrend
& (aroonu_14_1h_lt_80 | (roc_9_1d_gt_neg_40))
# 1h & 4h high, 1d overbought
& ((aroonu_14_1h_lt_90) | aroonu_14_4h_lt_100 | (roc_9_1d_lt_30))
# 1h high, 4h & 1d overbought
& ((aroonu_14_1h_lt_90) | (roc_9_4h_lt_40) | (roc_9_1d_lt_40))
# 4h still high, 5m downtrend
& ((aroonu_14_4h_lt_40) | (roc_9 > -40.0))
# 4h high & overbought
& (aroonu_14_4h_lt_70 | (roc_9_4h_lt_80))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_40))
# 4h high, 1h & 4h overbought
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 1d high, 1d downtrend
& ((aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_30))
# 1d high, 1h & 4h downtrend
& ((aroonu_14_1d_lt_85) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_50))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_4h_lt_60) | (roc_9_1d_lt_60))
# 1d high, 1h & 4h down move
& (aroonu_14_1d_lt_100 | (roc_9_1h_lt_25) | (roc_9_4h_lt_60))
# 15m high, 1d overbought
& ((stochrsi_k_15m_lt_70) | (roc_9_1d_lt_60))
# 1h high, 1d downtrend
& ((stochrsi_k_1h_lt_70) | roc_9_1d_gt_neg_50)
# 1h high, 1d overbought
& ((stochrsi_k_1h_lt_70) | (roc_9_1d_lt_40))
# 1h high, 4h downtrend
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_gt_neg_20))
# 1h high, 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_80))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h < 80.0) | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 1d high, 1h & 1d overbought
& ((stochrsi_k_1d_lt_80) | (roc_9_1h_lt_10) | (roc_9_1d_lt_80))
# 1d high, 4h & 1d overbought
& ((stochrsi_k_1d_lt_80) | (roc_9_4h_lt_60) | (roc_9_1d_lt_60))
# 1d top wick, 1h & 4h down move, 1d high
& ((top_wick_pct_1d_lt_20) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_100))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# drop in last 20 days, 1h high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_70))
# drop in last 20 days. 4h high
& ((close > (high_max_20_1d * 0.10)) | (stochrsi_k_4h_lt_90))
)
# Logic
long_entry_logic.append(
# (df["RSI_3"] > 5.0)
(aroonu_14_lt_30)
& (stochrsi_k_lt_30)
# & (rsi_3_15m > 5.0)
& (aroonu_14_15m_lt_50)
& (close < (ema_20 * 0.948))
)
# Condition #3 - Normal mode (Long).
if long_entry_condition_index == 3:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 4h down move, 1h still high
((rsi_3_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_50))
# 5m down move, 15m high, 1d overbought
& ((rsi_3_gt_5) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_40))
# 5m down move, 15m still high, 1d downtrend
& ((rsi_3_gt_5) | (stochrsi_k_15m_lt_50) | (roc_9_1d_gt_neg_20))
# 5m down move, 1h still high, 4h downtrend
& ((rsi_3_gt_5) | (stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_10))
# 5m down move, 1h high. 1d downtrend
& ((rsi_3_gt_5) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_30))
# 5m down move, 15m & 1h high
& ((rsi_3_gt_10) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 5m down move, 15m & 1d high
& ((rsi_3_gt_10) | (aroonu_14_15m_lt_70) | aroonu_14_1d_lt_100)
# 5m down move, 1h & 1d high
& ((rsi_3_gt_15) | aroonu_14_1h_lt_80 | (aroonu_14_1d_lt_90))
# 15m & 1h dowbn move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_25) | (stochrsi_k_1d_lt_90))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (aroonu_14_15m_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_15m_lt_50))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_90))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_50) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_50) | (roc_9_1d_lt_100))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_60) | roc_9_1d_lt_50)
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_20))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_35) | (aroonu_14_4h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_50) | (aroonu_14_1h_lt_75))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | aroonu_14_4h_lt_70)
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (roc_9_1d > -30.0))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_50))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_20 | aroonu_14_1d_lt_100)
# 15m & 1d down move, 15m high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_15) | (aroonu_14_15m_lt_70))
# 15m down move, 4h downtrend. 15m high
& ((rsi_3_15m_gt_15) | (cmf_20_4h_gt_neg_0_30) | (aroonu_14_15m_lt_60))
# 15m down move, 15m still high, 1h still high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_40) | (aroonu_14_1h_lt_50))
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 15m high, 1d downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_60) | (roc_9_1d_gt_neg_70))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_60) | (roc_9_1d_lt_100))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | aroonu_14_1h_lt_70)
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | aroonu_14_4h_lt_70)
# 15m down move, 15m & 1d high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | aroonu_14_1d_lt_100)
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | roc_9_1d_lt_50)
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_20))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_15) | (roc_9_4h_lt_25) | (roc_9_1d_lt_100))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_85))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_45) | aroonu_14_4h_lt_80)
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_45) | aroonu_14_1d_lt_100)
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_20) | rsi_3_4h_gt_20 | (aroonu_14_15m_lt_60))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_30) | (aroonu_14_15m_lt_75))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_60) | aroonu_14_4h_lt_70)
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_25) | (stochrsi_k_15m_lt_50))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_25) | (stochrsi_k_1h_lt_50))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_40) | (aroonu_14_1h_lt_90))
# 15m &1d down move, 1d overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1d > 50.0) | (roc_9_1d_lt_20))
# 15m down move, 15m still not low enough, 4h overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_30) | (roc_9_4h_lt_60))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_40) | (stochrsi_k_4h_lt_90))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_100))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_70)
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_50) | roc_9_1d_lt_50)
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_60) | (roc_9_4h_gt_neg_40))
# 15m down move, 15m high, 4h overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_60) | (roc_9_4h_lt_10))
# 15m down move, 15m high, 4h overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | (roc_9_4h_lt_20))
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | (roc_9_4h_gt_neg_10))
# 15m down move, 15m high, 1d downtrend
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | (roc_9_1d_gt_neg_20))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | roc_9_1d_lt_50)
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_50))
# 15m down move, 1h high, 4h downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_30))
# 15m down move, 1h high
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_90))
# 15m down move, 4h still high, 1d downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_30))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_20) | (roc_9_4h_lt_25) | (roc_9_1d_lt_100))
# 15m & 1h & 4h down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (aroonu_14_15m_lt_30) | (aroonu_14_4h_lt_60))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_40) | (aroonu_14_15m_lt_75))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_50) | (aroonu_14_1h_lt_100))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_60) | (aroonu_14_1h_lt_100))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_60) | (aroonu_14_4h_lt_80))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_25) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_75))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_25) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_90))
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_70) | (roc_9_4h_gt_neg_20))
# 15m down move, 15m high, 4h overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_70) | (roc_9_4h_lt_10))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_60))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_70))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_70) | (roc_9_4h_gt_neg_10))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_90) | (roc_9_1d_lt_20))
# 15m down move, 4h high, 1d high
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_60) | (stochrsi_k_1d_lt_90))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_10))
# 15m down move, 15m still high, 1h still high
& ((rsi_3_15m_gt_25) | (stochrsi_k_15m_lt_50) | (aroonu_14_1h_lt_50))
# 15m down move, 1h high, 4h high
& ((rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_70) | (aroonu_14_4h_lt_100))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_25) | (roc_9_4h_lt_50) | (roc_9_1d_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_80))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_40))
# 15m & 1h & 4h down move, 15m high, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_55) | (rsi_3_4h_gt_60) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_70))
# 15m down move, 1d high, 15m high
& ((rsi_3_15m_gt_30) | (rsi_14_1d_lt_70) | (aroonu_14_15m_lt_70))
# 15m down move, 15m high, 1d downtrend
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_60) | (roc_9_1d_gt_neg_40))
# 15m down move, 15m high, 15m downtrend
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_70) | (cmf_20_15m_gt_neg_0_30))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_70))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_30) | (aroonu_14_1h_lt_100) | (roc_9_1d_lt_30))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_30) | (aroonu_14_4h_lt_70) | (roc_9_4h_lt_60))
# 15m down move, 15m high, 4h overbought
& ((rsi_3_15m_gt_30) | (stochrsi_k_15m_lt_70) | (roc_9_4h_lt_70))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_30) | (stochrsi_k_1h_lt_90) | (roc_9_1d_lt_50))
# 15m & 1h down move, 15m still high, 1h high
& ((rsi_3_15m_gt_35) | (rsi_3_1h_gt_40) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_90))
# 15m down move, 15m high, 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_60) | (stochrsi_k_4h_lt_90))
# 15m down move, 15m high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (roc_9_4h_lt_80))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_1h_lt_90) | (roc_9_4h_lt_100))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_4h_lt_80) | (roc_9_1d_lt_200))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_35) | (stochrsi_k_1h_lt_90) | roc_9_1d_gt_neg_50)
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_35) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20))
# 15m down move, 15m high, 1d high & overbought
& ((rsi_3_15m_gt_40) | (aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_85) | (rsi_3_1d_gt_35))
# 15m down move, 15m high, 1h downtrend
& ((rsi_3_15m_gt_40) | (aroonu_14_15m_lt_70) | (roc_9_1h_gt_neg_20))
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_40) | (aroonu_14_15m_lt_75) | (aroonu_14_4h_lt_75))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_40) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30))
# 1h & 4h down move, 15m still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_50))
# 1h down move, 4h still high, 4h downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_10) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_20))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_14_1d_lt_60))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_15m_lt_70))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (roc_9_1d > -30.0))
# 1h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_35) | (roc_9_1d_lt_10))
# 1h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_60) | (roc_9_1d_lt_40))
# 1h down move, 1h still not low enough, 1d downtrend
& ((rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_30) | (roc_9_1d > -30.0))
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1d overbought
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_25) | (roc_9_1d_lt_30))
# 1h down move, 4h high, 1d overbought
& (rsi_3_1h_gt_20 | aroonu_14_4h_lt_80 | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_80)
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_25) | (rsi_3_1d_gt_40) | (stochrsi_k_1d_lt_50))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_20))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h downtrend, 1d overbought
& ((rsi_3_1h_gt_25) | (roc_9_4h_gt_neg_40) | roc_9_1d_lt_50)
# 1h down move, 15m & 1h still high
& ((rsi_3_1h_gt_30) | (aroonu_14_15m_lt_40) | (aroonu_14_1h_lt_50))
# 1h down move, 1h still high 1d overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_200))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_60) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_60) | (roc_9_4h_lt_20))
# 1h down move, 4h & 1h overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_30) | (roc_9_1d_lt_40))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_35) | (rsi_3_1d_gt_35) | (aroonu_14_1h_lt_75))
# 1h down move, 15m still high, 4h high
& ((rsi_3_1h_gt_35) | (aroonu_14_15m_lt_40) | aroonu_14_4h_lt_80)
# 1h down move, 15m still high, 4h high
& ((rsi_3_1h_gt_35) | (aroonu_14_15m_lt_40) | (stochrsi_k_4h_lt_70))
# 1h down move, 15m still high, 4h high
& ((rsi_3_1h_gt_35) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_70)
# 1h down move, 15m & 1d high
& ((rsi_3_1h_gt_35) | (aroonu_14_15m_lt_60) | (aroonu_14_1d_lt_80))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | (stochrsi_k_4h_lt_90))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_80 | (aroonu_14_1d_lt_90))
# 1h down move, 1h downtrend, 4h overbought
& ((rsi_3_1h_gt_35) | (cmf_20_1h_gt_neg_0_30) | (roc_9_4h_lt_20))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_80))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_80 | roc_9_1d_lt_50)
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_80) | roc_9_1d_gt_neg_50)
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_40) | (rsi_3_4h_gt_50) | (stochrsi_k_1h_lt_70))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_40) | (rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_60))
# 1h down move, 15m still high, 4h downtrend
& ((rsi_3_1h_gt_40) | (stochrsi_k_15m_lt_40) | (roc_9_4h_gt_neg_15))
# 1h down move, 15m still high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_15m_lt_50) | roc_9_1d_lt_50)
# 1h down move, 15m & 4h high
& ((rsi_3_1h_gt_40) | (aroonu_14_15m_lt_70) | aroonu_14_4h_lt_70)
# 1h down move, 1h still high, 4h high
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | (stochrsi_k_4h_lt_80))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_100))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_20))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_85) | (roc_9_1d_gt_neg_60))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_90) | aroonu_14_4h_lt_100)
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80) | (cmf_20_1d_gt_neg_0_20))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_40) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 1h down move, 15m high, 4h overbought
& ((rsi_3_1h_gt_45) | (aroonu_14_15m_lt_70) | (roc_9_4h_lt_30))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_45) | (aroonu_14_1h_lt_100) | (roc_9_4h_lt_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_45) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_45) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_40))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_45) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_40) | (roc_9_1d_lt_200))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1d_lt_80) | (roc_9_1d_lt_10))
# 1h down move, 15m & 1h high
& ((rsi_3_1h_gt_50) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_50) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_10))
# 1h down move, 4h still high, 1d overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_4h_lt_50) | (roc_9_1d_lt_200))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_50))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_80) | aroonu_14_4h_lt_100)
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_10))
# 1h down move, 1h high, 1d high
& ((rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_70) | aroonu_14_1d_lt_100)
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_55) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_100))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_60) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_100))
# 1h down move, 15m & 1h high
& ((rsi_3_1h_gt_65) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_65) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_3) | (stochrsi_k_1h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 1h still high, 4h downtrend
& ((rsi_3_4h_gt_3) | (stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_30))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_3) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 15m high, 1h still high
& ((rsi_3_4h_gt_5) | (aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_50))
# 4h down move, 15m high
& ((rsi_3_4h_gt_5) | (stochrsi_k_15m_lt_70))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_5) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_50))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_20) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_30) | (stochrsi_k_4h_lt_50))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_35) | (stochrsi_k_1d_lt_40))
# 4h down move, 15m still not low enough, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_30) | (roc_9_1d_gt_neg_40))
# 4h down move, 15m high, 4h downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_60) | (roc_9_4h_gt_neg_50))
# 4h down move, 15m high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_70))
# 4h & 1d down move, 15m high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_35) | (stochrsi_k_15m_lt_70))
# 4h & 1d down move, 4h high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_35) | (stochrsi_k_4h_lt_70))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_40) | (aroonu_14_1d_lt_70))
# 4h down move, 15m still high, 1h high
& ((rsi_3_4h_gt_15) | (aroonu_14_15m_lt_50) | (stochrsi_k_1h_lt_60))
# 4h down move, 15m & 1d high
& ((rsi_3_4h_gt_15) | (aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_80))
# 4h down move, 15m high
& ((rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_80))
# 4h down move, 1d high
& ((rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_80))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h & 1d down move, 1h still high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (aroonu_14_1h_lt_40))
# 4h & 1d down move, 15m high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_25) | (stochrsi_k_15m_lt_70))
# 4h & 1d down move, 1d overbought
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_55) | roc_9_1d_lt_50)
# 4h down move, 15m & 4h still high
& (rsi_3_4h_gt_20 | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_50))
# 4h down move, 15m high, 1d high
& (rsi_3_4h_gt_20 | (aroonu_14_15m_lt_70) | (stochrsi_k_1d_lt_70))
# 4h down move, 4h still high, 1d downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_10))
# 4h down move, 15m high, 4h downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_80) | (roc_9_4h_gt_neg_50))
# 4h down move, 1h high, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_60) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h still not low enough, 4h downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30) | (roc_9_4h_gt_neg_10))
# 4h down move, 4h high, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_60))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_40) | (roc_9_1d_lt_30))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_80))
# 4h down move, 15m still high, 1h high
& ((rsi_3_4h_gt_25) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_100))
# 4h down move, 15m & 4h still high
& ((rsi_3_4h_gt_25) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_50))
# 4h down move, 15m high, 1d overbought
& ((rsi_3_4h_gt_25) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_100))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_25) | (aroonu_14_1h_lt_90) | roc_9_1d_lt_50)
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_60) | aroonu_14_1d_lt_100)
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_60) | (roc_9_1d_gt_neg_70))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_25) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_20))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_25) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_40))
# 4h down move, 1h still high, 1d overbought
& ((rsi_3_4h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_100))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_80) | roc_9_1d_gt_neg_50)
# 4h down move, 1h high, 1h downtrend
& ((rsi_3_4h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_1h_gt_neg_10))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_30) | (rsi_3_1d > 50.0) | (roc_9_1d_lt_100))
# 4h down move, 1d downtrend, 1d overbought
& ((rsi_3_4h_gt_30) | (cmf_20_1d_gt_neg_0_30) | (roc_9_1d_lt_40))
# 4h down move, 15m high, 4h high
& ((rsi_3_4h_gt_30) | (aroonu_14_15m_lt_60) | (aroonu_14_4h_lt_90))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_40))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_90) | roc_9_1d_lt_50)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_80) | (roc_9_1d_lt_10))
# 4h down move, 15m still high, 1h high
& ((rsi_3_4h_gt_35) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_90))
# 4h down move, 15m still high, 4h high
& ((rsi_3_4h_gt_35) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_80)
# 4h down move, 15m high, 1h high
& ((rsi_3_4h_gt_35) | (aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_70))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_35) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 4h down move, 1d high, 1d downtrend
& ((rsi_3_4h_gt_35) | (stochrsi_k_1d_lt_60) | (roc_9_1d_gt_neg_30))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_35) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_40))
# 4h down move, 15m still high, 1d overbought
& ((rsi_3_4h_gt_40) | (aroonu_14_15m_lt_50) | roc_9_1d_lt_50)
# 4h down move, 15m high, 1d overbought
& ((rsi_3_4h_gt_40) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_200))
# 4h down move, 1h & 4h high
& ((rsi_3_4h_gt_40) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_80)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_40) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 4h down move, 15m high, 1h high
& ((rsi_3_4h_gt_40) | (stochrsi_k_15m_lt_70) | (aroonu_14_1h_lt_100))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_40) | (stochrsi_k_1h_lt_70) | (roc_9_1d_lt_60))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_40) | (roc_9_4h_lt_10) | (roc_9_1d_lt_30))
# 4h down move, 15m still high, 4h high
& ((rsi_3_4h_gt_45) | (aroonu_14_15m_lt_40) | (aroonu_14_4h_lt_90))
# 45 down move, 15m high, 1h high
& ((rsi_3_4h_gt_45) | (aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_70))
# 4h down move, 15m high, 4h high
& ((rsi_3_4h_gt_45) | (aroonu_14_15m_lt_70) | (stochrsi_k_4h_lt_70))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_4h_lt_60) | (roc_9_1d_lt_100))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_45) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_30))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_30))
# 4h down move, 1d high, 1d downtrend
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_15))
# 4h down move, 1d high, 4h overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_10))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_45) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_45) | (roc_9_4h_lt_30) | (roc_9_1d_lt_200))
# 4h down move, 15m & 1h high
& ((rsi_3_4h_gt_50) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 4h down move, 4h still high, 1h high
& ((rsi_3_4h_gt_50) | (aroonu_14_4h_lt_40) | (stochrsi_k_1h_lt_70))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_40))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_50) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_80))
# 4h down move, 1d high, 4h overbought
& ((rsi_3_4h_gt_50) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_10))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h downtrend, 1d overbought
& ((rsi_3_4h_gt_50) | (roc_9_4h_gt_neg_20) | (roc_9_1d_lt_20))
# 4h down move, 1h high, 4h overbought
& ((rsi_3_4h_gt_55) | (aroonu_14_1h_lt_100) | (roc_9_4h_lt_20))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_55) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_20))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_55) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_60))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_55) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 4h down move, 15m high, 1h high
& ((rsi_3_4h_gt_60) | (aroonu_14_15m_lt_60) | (stochrsi_k_1h_lt_90))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_60) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_30))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_30) | roc_9_1d_lt_50)
# 4h down move, 15m high, 4h high
& ((rsi_3_4h_gt_65) | (aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_90))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_65) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_10))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_3) | (roc_9_4h_gt_neg_40) | roc_9_1d_gt_neg_50)
# 1d down move, 15m still high, 4h high
& ((rsi_3_1d_gt_10) | (aroonu_14_15m_lt_70) | (stochrsi_k_4h_lt_80))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_10) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_60))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_10) | (roc_9_4h_gt_neg_30) | roc_9_1d_gt_neg_50)
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_15) | (aroonu_14_1h_lt_85) | (roc_9_1d_gt_neg_30))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 1d down move, 15m high, 1h high
& ((rsi_3_1d_gt_20) | (aroonu_14_15m_lt_60) | (stochrsi_k_1h_lt_80))
# 1d down move, 15m high, 1h high
& ((rsi_3_1d_gt_20) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 1d down move, 4h high, 4h downtrend
& ((rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_70) | (roc_9_4h_gt_neg_20))
# 1d down move, 15m high, 4h high
& ((rsi_3_1d_gt_25) | (aroonu_14_15m_lt_70) | (stochrsi_k_4h_lt_80))
# 1d down move, 15m high, 4h downtrend
& ((rsi_3_1d_gt_25) | (aroonu_14_15m_lt_70) | (roc_9_4h_gt_neg_30))
# 1d down move, 1h & 1d high
& ((rsi_3_1d_gt_25) | aroonu_14_1h_lt_80 | (aroonu_14_1d_lt_80))
# 1d down move, 1d still high, 1d downtrend
& ((rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 1d down move, 1d high & overbought
& ((rsi_3_1d_gt_30) | (aroonu_14_1d_lt_60) | (roc_9_1d_lt_10))
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_70) | (roc_9_1d_lt_20))
# 1d down move, 1h & 1d high
& ((rsi_3_1d_gt_35) | aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_90))
# 1d down move, 1h high, 1d overbought
& ((rsi_3_1d_gt_40) | (aroonu_14_1h_lt_90) | (roc_9_1d_lt_80))
# 1d down move, 1d high & overbought
& ((rsi_3_1d_gt_40) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 1d down move, 1d high & overbought
& ((rsi_3_1d_gt_40) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_10))
# 1d down move, 1h high, 1d overbought
& ((rsi_3_1d_gt_40) | (stochrsi_k_1h_lt_70) | roc_9_1d_lt_50)
# 15m still high, 4h high, 1d overbought
& ((aroonu_14_15m_lt_50) | (rsi_14_4h < 60.0) | (roc_9_1d_lt_70))
# 15m still high, 1h downtrend, 4h overbought
& ((aroonu_14_15m_lt_50) | (roc_9_1h_gt_neg_10) | (roc_9_4h_lt_40))
# 15m high, 4h high & overbought
& ((aroonu_14_15m_lt_60) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_20))
# 15m & 4h high, 1d overbought
& ((aroonu_14_15m_lt_60) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_10))
# 15m high, 15m & 4h overbought
& ((aroonu_14_15m_lt_60) | (roc_9_15m < 10.0) | (roc_9_4h_lt_20))
# 15m high, 4h downtrend
& ((aroonu_14_15m_lt_60) | (roc_9_4h_gt_neg_30))
# 15m & 1h & 4h high
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100)
# 15m & 4h & 1d high
& ((aroonu_14_15m_lt_70) | aroonu_14_4h_lt_70 | (aroonu_14_1d_lt_90))
# 15m & 4h high, 4h overbought
& ((aroonu_14_15m_lt_70) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_10))
# 15m & 4h high, 1d downtrend
& ((aroonu_14_15m_lt_70) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_20))
# 15m & 1d high, 1d overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_100))
# 15m high, 4h downtrend, 1d overbought
& ((aroonu_14_15m_lt_70) | (roc_9_4h_gt_neg_30) | (roc_9_1d_lt_200))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_40) | roc_9_1d_gt_neg_50)
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_10))
# 1h high, 1d high & overbought
& ((aroonu_14_1h_lt_90) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 1h high, 4h downtrend
& ((aroonu_14_1h_lt_90) | (roc_9_4h_gt_neg_20))
# 1h high, 4h & 1d overbought
& ((aroonu_14_1h_lt_90) | (roc_9_4h_lt_10) | (roc_9_1d_lt_20))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_10))
# 4h & 1d high, 1d downtrend
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_1d_gt_neg_20))
# 1d high, 4h & 1d downtrend
& ((aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 1d high, 1h & 4h downtrend
& ((aroonu_14_1d_lt_85) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_50))
# 1d high, 4h downtrend
& ((aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_30))
# 1d high, 4h downtrend, 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_30) | (roc_9_1d_lt_70))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_30) | (roc_9_1d_lt_40))
# 15m & 1h high, 1d overbought
& ((stochrsi_k_15m_lt_70) | (stochrsi_k_1h_lt_70) | roc_9_1d_lt_50)
# 15m & 1d high
& ((stochrsi_k_15m < 90.0) | (stochrsi_k_1d_lt_90))
# 1h high, 4h & 1d downtrend
& ((stochrsi_k_1h_lt_60) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_30))
# 1h high, 4h downtrend
& ((stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_30))
# 1h high, 1d downtrend
& ((stochrsi_k_1h_lt_70) | (roc_9_1d_gt_neg_20))
# 4h high, 4h overbought, 1d downtrend
& ((stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_gt_neg_20))
# 1d still high, 4h & 1d downtrend
& ((stochrsi_k_1d_lt_50) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_30))
# 1d P&D, 4h downtrend
& ((change_pct_1d_gt_neg_50) | (change_pct_1d_shift.shift(288) < 50.0) | (rsi_3_4h_gt_15))
# 1d P&D, 15m high
& ((change_pct_1d_gt_neg_20) | (change_pct_1d_shift.shift(288) < 20.0) | (aroonu_14_15m_lt_70))
# 1d red with top wick, 4h high
& ((change_pct_1d_gt_neg_20) | (top_wick_pct_1d_lt_20) | aroonu_14_4h_lt_80)
# 1d red, previous 1d top wick, 15m high
& ((change_pct_1d_gt_neg_10) | (top_wick_pct_1d_shift.shift(288) < 40.0) | (aroonu_14_15m_lt_70))
# 1d green with top wick, 4h overbought
& ((change_pct_1d_lt_15) | (top_wick_pct_1d_lt_15) | (roc_9_4h_lt_20))
# 1d green, 15m down move, 1h high
& ((change_pct_1d_lt_50) | (rsi_3_15m_gt_25) | aroonu_14_1h_lt_70)
# 1d green, 4h down move, 4h still high
& ((change_pct_1d_lt_40) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_40))
# 1d top wick, 4h down move, 1d overbought
& ((top_wick_pct_1d_lt_50) | (rsi_3_4h_gt_35) | (roc_9_1d_lt_60))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(rsi_20 < rsi_20_shift.shift(1))
& (rsi_4 < 45.0)
& (rsi_14 > 30.0)
& (aroonu_14 < 20.0)
& (stochrsi_k_lt_20)
& (close < sma_16 * 0.965)
& (close < df["SMA_16_1h"] * 0.985)
)
# Condition #4 - Normal mode (Long).
if long_entry_condition_index == 4:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
rsi_3_15m_gt_3
# 5m & 1h down move, 1d still high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_3) | (aroonu_14_1d_lt_40))
# 5m & 1h & 4h down move
& ((rsi_3_gt_3) | (rsi_3_1h_gt_5) | (rsi_3_4h_gt_10))
# 5m & 1h down move, 1h still not low enough
& ((rsi_3_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30))
# 5m & 1h down move, 1d high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_15) | (aroonu_14_1d_lt_80))
# 5m & 1h down move, 1d high
& ((rsi_3_gt_3) | rsi_3_1h_gt_20 | aroonu_14_1d_lt_100)
# 5m & 1h down move, 1h high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_50) | aroonu_14_1h_lt_70)
# 5m & 1h down move, 1h still high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 5m & 1h down move, 1d downtrend
& ((rsi_3_gt_3) | (rsi_3_4h_gt_15) | (roc_9_1d > -30.0))
# 5m & 4h down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_25) | aroonu_14_4h_lt_70)
# 5m & 1d down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_20) | (stochrsi_k_15m_lt_40))
# 5m down move, 1h high, 4h overbought
& ((rsi_3_gt_3) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_50))
# 5m down move, 4h high, 1h overbought
& ((rsi_3_gt_10) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_30))
# 15m & 1h down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (aroonu_14_1d_lt_40))
# 15m & 1h down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_70))
# 15m & 1h & 4h down move, 1d high & overbought
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_45) | (rsi_3_4h_gt_45) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_50))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (roc_9_1d_lt_70))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_30) | aroonu_14_1d_lt_100)
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_5) | aroonu_14_1h_lt_70 | (roc_9_1h_lt_10))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_5) | (roc_9_1h_lt_10) | (roc_9_1d_lt_40))
# 15m & 1h down move, 15m stil high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_15m_lt_50))
# 15m & 1h down move, 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_40))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_70))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (roc_9_1d_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_80))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_70) | (roc_9_1d_lt_100))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_90) | (aroonu_14_1d_lt_100))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_70) | (roc_9_1d_gt_neg_50))
# 15m down move, 1h high
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_80))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_80))
# 15m & 4h down move, 4h & 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_80) | (aroonu_14_1d_lt_100))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_70) | (roc_9_4h_lt_20))
# 15m down move, 15m high
& ((rsi_3_15m_gt_15) | (stochrsi_k_15m_lt_80))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_10))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (aroonu_14_1h_lt_70))
# 15m & 1h & 4h & 1d down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_40) | (rsi_3_4h_gt_40) | (rsi_3_1d_gt_40) | (stochrsi_k_1h_lt_70))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_4h_lt_90) | (roc_9_1d_lt_100))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_4h_lt_100) | (roc_9_1h_lt_30))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_80))
# 15m down move, 4h high, 4h overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_60) | (roc_9_4h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_40) | (aroonu_14_4h_lt_85))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_40) | (rsi_3_1h_gt_50) | (roc_9_4h_lt_50))
# 1h & 4h down move, 15m downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | (roc_9_15m > -30.0))
# 1h & 4h down move, 15m downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (cmf_20_15m_gt_neg_0_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_70))
# 1h down move, 1h high, 4h high
& ((rsi_3_1h_gt_3) | aroonu_14_1h_lt_70 | (stochrsi_k_4h_lt_80))
# 1h down move, 15m still high
& ((rsi_3_1h_gt_3) | (stochrsi_k_15m_lt_50))
# 1h down move, 1h still high, 4h overbought
& ((rsi_3_1h_gt_3) | (stochrsi_k_1h_lt_50) | (roc_9_4h_lt_20))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (rsi_3_1d_gt_10))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (roc_9_1h_gt_neg_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_40))
# 1h down move, 4h high, 1h downtrend
& ((rsi_3_1h_gt_5) | (stochrsi_k_4h_lt_70) | (roc_9_1h_gt_neg_40))
# 1h down move, 4h high, 1h downtrend
& ((rsi_3_1h_gt_5) | (stochrsi_k_4h_lt_70) | (cmf_20_1h_gt_neg_0_40))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_5) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 1h down move, 1d overbought
& ((rsi_3_1h_gt_5) | (roc_9_1d_lt_100))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_15))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_20))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_35) | (rsi_14_4h_lt_40))
# 1h & 3h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_80))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_70))
# 1h down move, 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_85))
# 1h down move, 1d high, 15m downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_70) | (roc_9_15m > -50.0))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_15) | (roc_9_1d > -30.0))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_20))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_30))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_40))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_80))
# 1h down move, 1h still high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_30))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_40))
# 1h down move, 1h still high, 4h downtrend
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_50) | (roc_9_4h_gt_neg_50))
# 1h down move, 1h high
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_80)
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_20))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_30) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_70)
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_30))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_200))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_40))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (stochrsi_k_15m_lt_80))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (stochrsi_k_1h_lt_70))
# 1h down move, 15m still high, 1h high
& ((rsi_3_1h_gt_30) | (stochrsi_k_15m_lt_40) | (aroonu_14_1h_lt_60))
# 1h down move, 1h still high, 4h high
& ((rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_40) | (stochrsi_k_4h_lt_70))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_30) | (roc_9_4h_gt_neg_25) | (roc_9_1d_gt_neg_60))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_20) | (roc_9_1d_lt_100))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_20))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_85) | (roc_9_1d_lt_100))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_200))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_45) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_60))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_40))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_60) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 4h & 1d down move, 4h still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (aroonu_14_4h_lt_20))
# 4h down move, 4h high, 4h downtrend
& ((rsi_3_4h_gt_3) | (aroonu_14_4h_lt_50) | (roc_9_4h_gt_neg_40))
# 4h & 1d down move, 1h still not low enough
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_30))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_70))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_5) | (roc_9_4h_gt_neg_15) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1h still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (aroonu_14_1h_lt_40))
# 4h & 1d down move, 1h high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_70))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_40))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_60))
# 4h & 1d down move, 4h high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_70)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_15) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_20))
# 4h down move, 4h still high, 1d downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_10))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_80))
# 4h down move, 4h & 1d downtrend
& (rsi_3_4h_gt_20 | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_40) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_200))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_45) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_60) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_10))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1h still high, 4h & 1d downtrend
& ((aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_40))
# 1h & 4h high, 1h overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1h_lt_80))
# 1h high, 1d overbought
& (aroonu_14_1h_lt_70 | (roc_9_1d_lt_70))
# 1h & 4h high, 1h overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_30))
# 1h & 1d high, 1h overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_1d_lt_90) | (roc_9_1h_lt_30))
# 4h still not low enough, 4h & 1d downtrend
& ((aroonu_14_4h_lt_30) | (roc_9_4h_gt_neg_40) | (roc_9_1d_gt_neg_40))
# 4h still high, 5m downtrend
& ((aroonu_14_4h_lt_40) | (roc_9 > -40.0))
# 4h high, 4h & 1d overbought
& ((aroonu_14_4h_lt_60) | (roc_9_4h_lt_30) | roc_9_1d_lt_50)
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_50))
# 4h high, 1h & 1d overbought
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_30) | (roc_9_1d_lt_100))
# 4h high, 1h & 4h high
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_50) | (roc_9_4h_lt_100))
# 1d high, 4h & 1d downtrend
& ((aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_40) | (roc_9_1d_gt_neg_40))
# 1d high, 1h & 1d overbought
& ((aroonu_14_1d_lt_80) | (roc_9_1h_lt_30) | (roc_9_1d_lt_200))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_90) | (roc_9_4h_lt_20) | roc_9_1d_lt_50)
# 1h high, 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_80))
# 4h & 1d overbought
& ((roc_9_4h_lt_100) | (roc_9_1d_lt_200))
# 1d top wick, 1h & 4h down move, 1d high
& ((top_wick_pct_1d_lt_20) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_100))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# drop in last 20 days, 1h high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_70))
)
# Logic
long_entry_logic.append(
(aroonu_14_lt_25) & (aroonu_14_15m_lt_25) & (close < (ema_9 * 0.946)) & (close < (ema_20 * 0.960))
)
# Condition #5 - Normal mode (Long).
if long_entry_condition_index == 5:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
(rsi_3_15m_gt_20)
# 5m & 1h down move, 1h still not low enough
& ((rsi_3_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30))
# 5m & 1h down move, 1d high
& ((rsi_3_gt_3) | rsi_3_1h_gt_20 | aroonu_14_1d_lt_100)
# 5m & 1h down move, 1h still high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_3) | (stochrsi_k_15m_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_60))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (roc_9_4h_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_40) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_50) | (aroonu_14_1h_lt_85))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m stil not low enough, 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_30) | (aroonu_14_4h_lt_60))
# 15m down move, 15m high, 1h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_60) | (stochrsi_k_1h_lt_70))
# 15m down move, 1h & 4h overbought
& ((rsi_3_15m_gt_25) | (roc_9_1h_lt_40) | (roc_9_4h_lt_40))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_25) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_85))
# 15m down move, 15m still high, 1d high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_50) | (stochrsi_k_1d_lt_70))
# 15m down move, 15m high, 4h high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_60) | (stochrsi_k_4h_lt_70))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_30) | (aroonu_14_1h_lt_85) | aroonu_14_4h_lt_100)
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_30) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 15m down move, 4h high, 1h downtrend
& ((rsi_3_15m < 30.0) | (aroonu_14_4h_lt_85) | (roc_9_1h_gt_neg_40))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_30) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_25))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_35) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (roc_9_4h_lt_10))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_1h_lt_85) | (roc_9_4h_lt_80))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_35) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_20))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_40) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_100))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_45) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_5) | (aroonu_14_1d_lt_70))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (roc_9_1d_lt_15))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_40))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | roc_9_1d_gt_neg_50)
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_20 | (roc_9_1h_gt_neg_15))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_50))
# 1h & 4h down move, 15m still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_50))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_15))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_40))
# 1h down move, 4h downtrend. 4h still not low enough
& ((rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_20) | (aroonu_14_4h_lt_30))
# 1h down move, 15m still high, 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_15m_lt_40) | (stochrsi_k_4h_lt_90))
# 1h down move, 15m high, 4h downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_15m_lt_70) | (roc_9_4h_gt_neg_10))
# 1h down move, 1h still high, 15m downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_40) | (cmf_20_15m_gt_neg_0_30))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_20))
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_50) | (roc_9_1d_gt_neg_40))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (stochrsi_k_1d_lt_80) | (roc_9_1d_lt_30))
# 1h & 4h & 1d down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_55) | (aroonu_14_1d_lt_90))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_30))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_100))
# 1h & 1d down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_80))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_60) | roc_9_1d_lt_50)
# 1h down move, 4h high, 1d high
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_80) | (stochrsi_k_1d_lt_80))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_60))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_10))
# 1h down move, 1h downtrend, 1d overbought
& ((rsi_3_1h_gt_15) | (roc_9_1h_gt_neg_30) | (roc_9_1d_lt_80))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_15) | (roc_9_4h_lt_10) | (roc_9_1d_lt_60))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | aroonu_14_4h_lt_70)
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_80)
# 1h & 1d down move, 1h still high
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_50))
# 15m & 1h & 4h & 1d down move, 4h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (rsi_3_1d_gt_30) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (aroonu_14_15m_lt_70))
# 1h down move, 4h downtrend, 4h high
& ((rsi_3_1h_gt_25) | (cmf_20_4h_gt_neg_0_50) | aroonu_14_4h_lt_70)
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_85))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_85))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_70) | (roc_9_4h_lt_20))
# 1h & 4h down move, 4h & 1d high, 4h overbought
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_65) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_30))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_80) | (roc_9_1d_lt_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_100))
# 1h down move, 15m still high, 1h high
& ((rsi_3_1h_gt_30) | (stochrsi_k_15m_lt_40) | (aroonu_14_1h_lt_60))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_70) | (roc_9_1d_gt_neg_40))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_90) | (roc_9_1d_gt_neg_50))
# 1h down move, 4h downtrend, 1d over
& ((rsi_3_1h_gt_30) | (roc_9_4h_gt_neg_30) | (roc_9_1d_lt_50))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_100))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_70) | (roc_9_1d_gt_neg_25))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_80) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_200))
# 1h down move, 15m high, 1h high
& ((rsi_3_1h_gt_40) | (aroonu_14_15m_lt_60) | (aroonu_14_1h_lt_70))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_40) | (roc_9_1d_lt_100))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_30))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100)
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1d_lt_80) | roc_9_1d_lt_50)
# 1h down move, 1h & 4h overbought
& ((rsi_3_1h_gt_40) | (roc_9_1h_lt_20) | (roc_9_4h_lt_20))
# 1h down move, 1h overbought
& ((rsi_3_1h_gt_40) | (roc_9_1h_lt_30))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_45) | (rsi_3_4h_gt_65) | (roc_9_1d_lt_200))
# 1h down move, 15m still high, 1h high
& ((rsi_3_1h_gt_45) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_45) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_50))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_70) | roc_9_1d_lt_50)
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_30))
# 1h down move, 4h high, 1h overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_40))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_50) | aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100)
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_60))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_50) | (roc_9_4h_lt_20) | (roc_9_1d_lt_80))
# 1h down move, 15m high, 1h high
& ((rsi_3_1h_gt_55) | (aroonu_14_15m_lt_60) | (stochrsi_k_1h_lt_80))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_60) | (roc_9_1d_lt_10))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_60) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_60) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_40))
# 4h & 1d down move, 4h downtrend
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_10) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 1h still not low enough
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_30))
# 4h down move, 1d high, 4h downtrend
& ((rsi_3_4h_gt_5) | (aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_10))
# 4h & 1d down move, 15m high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_15m_lt_80))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (roc_9_1d_gt_neg_15))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50))
# 4h down move, 15m downtrend, 1d high
& ((rsi_3_4h_gt_10) | (cmf_20_15m_gt_neg_0_30) | (aroonu_14_1d_lt_80))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_20))
# 4h down move, 15m still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_50) | (roc_9_1d_gt_neg_25))
# 4h down move, 15m high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_80))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_70) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h downtrend, 1d overbought
& ((rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_20) | (roc_9_1d_lt_40))
# 4h & 1d down move, 4h downtrend
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_20) | (roc_9_4h_gt_neg_40))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_10))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h & 1ddown move, 1d high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_80))
# 4h & 1d down move, 1h still high, 4h still high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_40) | (aroonu_14_4h_lt_50))
# 4h down move, 1d high, 1d downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_30))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_70))
# 4h down move, 4h still high. 4h downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50) | (cmf_20_4h_gt_neg_0_40))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_70))
# 4h down move, 1h high, 4h downtrend
& ((rsi_3_4h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_10))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_60) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_35) | aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100)
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_10))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_40))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_50) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_10) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_10))
# 1d down move, 1h high, 4h downtrend
& ((rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_90) | (roc_9_4h_gt_neg_30))
# 15m & 1h & 4h downtrend
& ((cmf_20_15m_gt_neg_0_30) | (cmf_20_1h_gt_neg_0_30) | (cmf_20_4h_gt_neg_0_30))
# 1d downtrend, 1d high & overbought
& ((cmf_20_1d_gt_neg_0_40) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_20))
# 15m not low enough, 1h & 4h downtrend
& ((aroonu_14_15m_lt_20) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_50))
# 15m high, 1h high & overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_85) | (roc_9_1h_lt_10))
# 4h high, 4h & 1d overbought
& (aroonu_14_4h_lt_70 | (roc_9_4h_lt_60) | (roc_9_1d_lt_80))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_10))
# 1h & 1d high, 1d overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_200))
# 1h high, 1h overbought
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_10))
# 4h still high, 5m downtrend
& ((aroonu_14_4h_lt_40) | (roc_9 > -40.0))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_80))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_80))
# 4h high, 1h & 4h overbought
& ((aroonu_14_4h_lt_85) | (roc_9_1h_lt_80) | (roc_9_4h_lt_80))
# 4h high, 4h & 1d overbought
& ((aroonu_14_4h_lt_85) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_40))
# 4h high, 1h & 1d overbought
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_40) | (roc_9_1d_lt_100))
# 4h high, 4h & 1d overbought
& (aroonu_14_4h_lt_100 | (roc_9_4h_lt_20) | (roc_9_1d_lt_80))
# 1d high, 1h & 4h down move
& (aroonu_14_1d_lt_100 | (roc_9_1h_lt_25) | (roc_9_4h_lt_60))
# 1d high, 1h downtrend, 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_1h_gt_neg_30) | (roc_9_1d_lt_100))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_20) | (roc_9_1d_lt_80))
# 15m high, 4h & 1d downtrend
& ((stochrsi_k_15m_lt_70) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_30))
# 1h high, 4h & 1d overbought
& ((stochrsi_k_1h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_lt_100))
# 4h high, 1h overbought, 1d downtrend
& ((stochrsi_k_4h_lt_80) | (roc_9_1h_lt_40) | (roc_9_1d_gt_neg_70))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_4h_lt_80) | (roc_9_1d_lt_100))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_10) | (roc_9_4h_lt_80))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_20) | (roc_9_4h_lt_50))
# 1d high, 4h & 1d overbought
& ((stochrsi_k_1d_lt_90) | (roc_9_4h_lt_40) | (roc_9_1d_lt_100))
# 1d P&D, dh downtrend
& ((change_pct_1d_gt_neg_50) | (change_pct_1d_shift.shift(288) < 50.0) | (rsi_3_4h_gt_15))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# drop in last 20 days, 1h high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_70))
# drop in last 20 days. 4h high
& ((close > (high_max_20_1d * 0.10)) | (stochrsi_k_4h_lt_90))
)
# Logic
long_entry_logic.append(
(rsi_3_lt_50)
& (aroonu_14_lt_25)
& (stochrsi_k_lt_30)
& (ema_26 > ema_12)
& ((ema_26 - ema_12) > (open_rate * 0.020))
& ((ema_26_shift.shift() - ema_12_shift.shift()) > (open_rate / 100.0))
)
# Condition #6 - Normal mode (Long).
if long_entry_condition_index == 6:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 15m down move, 15m still high
((rsi_3_gt_3) | (rsi_3_15m_gt_10) | (stochrsi_k_15m_lt_40))
# 5m & 15m down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_15m_gt_15) | (aroonu_14_15m_lt_40))
# 5m & 15m down move, 1d downtrend
& ((rsi_3_gt_3) | (rsi_3_15m_gt_15) | (roc_9_1d_gt_neg_20))
# 5m & 15m down move, 1d downtrend
& ((rsi_3_gt_3) | (rsi_3_15m_gt_25) | (roc_9_1d_gt_neg_30))
# 5m & 1h down move, 1h still not low enough
& ((rsi_3_gt_3) | rsi_3_1h_gt_20 | (aroonu_14_1h_lt_30))
# 5m & 1h down move, 1h still high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 5m & 4h down move, 4h still high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_50))
# 5m & 4h & 1d down move
& ((rsi_3_gt_3) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_35))
# 5m & 4h down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_70))
# 5m & 4h down move, 4h still high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_55) | (aroonu_14_4h_lt_50))
# 5m & 1d down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_20) | (stochrsi_k_15m_lt_40))
# 5m down move, 4h & 1d overbought
& ((rsi_3_gt_3) | (roc_9_4h_lt_20) | (roc_9_1d_lt_40))
# 5m & 1h down move, 4h high
& ((rsi_3_gt_5) | (rsi_3_1h_gt_40) | (aroonu_14_4h_lt_60))
# 5m & 1h down move, 1h high
& ((rsi_3_gt_5) | (rsi_3_1h_gt_60) | aroonu_14_1h_lt_80)
# 5m & 4h down move, 1d downtrend
& ((rsi_3_gt_5) | (rsi_3_4h_gt_5) | (roc_9_1d_gt_neg_20))
# 5m & 4h down move, 4h still high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_50))
# 5m & 4h down move, 1d overbought
& ((rsi_3_gt_5) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_60))
# 5m & 4h down move, 4h high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_60) | aroonu_14_4h_lt_80)
# 5m down move, 15m still not low enough, 4h high
& ((rsi_3_gt_5) | (aroonu_14_15m_lt_20) | (stochrsi_k_4h_lt_70))
# 5m down move, 1h & 1d high
& ((rsi_3_gt_5) | aroonu_14_1h_lt_70 | aroonu_14_1d_lt_100)
# 5m down move, 4h high & overbought
& ((rsi_3_gt_5) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_25))
# 5m down move, 1h high
& ((rsi_3_gt_5) | (stochrsi_k_1h_lt_80))
# 5m & 1d down move, 1d still high
& ((rsi_3_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_1d_lt_40))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | (aroonu_14_4h_lt_20))
# 15m & 1h & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_25) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_10))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_20))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_40) | aroonu_14_4h_lt_70)
# 15m & 4h down move, 1h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_30))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_10))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_20))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_30) | (aroonu_14_15m_lt_25))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_40))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_45) | (stochrsi_k_1h_lt_60))
# 15m & 1d down move, 15m still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1d_gt_10) | (aroonu_14_15m_lt_30))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1d_gt_55) | (stochrsi_k_4h_lt_70))
# 1h & 1d downtrend, 1d high
& ((rsi_3_15m_gt_3) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_10))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_60))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_30))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (aroonu_14_4h_lt_90))
# 15m & 1h & 4h down move, 15m downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_40) | (rsi_3_4h_gt_50) | (cmf_20_15m_gt_neg_0_30))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_55) | (aroonu_14_4h_lt_100))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_20) | (aroonu_14_15m_lt_30))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_60))
# 15m down move, 15m still high, 1h still high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_50))
# 15m down move, 1h still high, 1d high
& ((rsi_3_15m_gt_5) | (stochrsi_k_1h_lt_40) | (aroonu_14_1d_lt_70))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_5) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_90))
# 15m down move, 15m & 1h still not low enough
& ((rsi_3_15m_gt_5) | (stochrsi_k_15m_lt_30) | (stochrsi_k_1h_lt_30))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (stochrsi_k_4h_lt_60))
# 15m & 1h & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_30))
# 15m & 1h & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_4h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_60))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_30))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_1d_gt_neg_40))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_45) | (roc_9_1d_lt_150))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_65) | aroonu_14_1h_lt_80)
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_80))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_70))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (rsi_14_1d_lt_60))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_1d_lt_90))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (roc_9_1d_lt_20))
# 15m & 4h down move, 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (cmf_20_4h_gt_neg_0_30))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_30))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_45) | aroonu_14_4h_lt_70)
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_75))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_80))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_75))
# 15m & 1d down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1d > 50.0) | (roc_9_1d_lt_20))
# 15m down move, 15m downtrend, 4h still high
& ((rsi_3_15m_gt_10) | (cmf_20_15m_gt_neg_0_40) | (stochrsi_k_4h_lt_50))
# 15m down move, 1h downtrend, 4h still high
& ((rsi_3_15m_gt_10) | (cmf_20_1h_gt_neg_0_30) | (stochrsi_k_4h_lt_40))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_30) | (aroonu_14_4h_lt_60))
# 15m down move, 15m still high, 1h still high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_50))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_20))
# 15m down move, 1h still not low enough, 1d overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_30) | (roc_9_1d_lt_100))
# 15m down move, 1h still high, 4h downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_10))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_70) | (roc_9_1d_lt_10))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (rsi_3_1h_gt_15))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 1h downtrend
& ((rsi_3_15m_gt_15) | rsi_3_1h_gt_20 | (cmf_20_1h_gt_neg_0_30))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | aroonu_14_4h_lt_70)
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (roc_9_1d_lt_100))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_30) | (stochrsi_k_1d_lt_80))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_50) | aroonu_14_4h_lt_100)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_55) | (aroonu_14_1h_lt_90))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_90))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_50))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_60))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_60))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_80)
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_40) | (roc_9_1d_lt_40))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_45) | (roc_9_1d_lt_80))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_55) | (stochrsi_k_4h_lt_70))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_30))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_20) | (stochrsi_k_1h_lt_50))
# 15m & 1d down move, 1d overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_30) | (roc_9_1d_lt_10))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_25) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_40) | (aroonu_14_4h_lt_70))
# 15m down move, 1h still high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_80))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_60) | (aroonu_14_4h_lt_90))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_80) | (aroonu_14_4h_lt_85))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_70) | (aroonu_14_1d_lt_70))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_85) | (stochrsi_k_4h_lt_90))
# 15m down move, 4h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_100))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_70) | (roc_9_4h_lt_30))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_25))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_100) | (roc_9_1h_lt_10))
# 15m down move, 1h still high, 4h overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_50) | (roc_9_4h_lt_10))
# 15m down move, 1h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_80) | (roc_9_4h_gt_neg_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_90) | (roc_9_1d_lt_30))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (stochrsi_k_1h_lt_20))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_30) | (roc_9_1d_gt_neg_30))
# 15m & 1h down move, 1h overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_50) | (roc_9_1h_lt_10))
# 15m & 1h & 4h down move, 1h still not low enough
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_30))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80))
# 15m & 1h & 4h down move, 15m & 1h still high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_45) | (aroonu_14_15m_lt_40) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_35) | (aroonu_14_1d_lt_100))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_60) | (aroonu_14_1h_lt_90))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_60) | (stochrsi_k_4h_lt_90))
# 15m & 4h & 1d down move
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_20))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_20) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 4h still high, 1d downtrend
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_45) | (stochrsi_k_1d_lt_90))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_20) | (aroonu_14_1h_lt_70))
# 15m & 1d down move, 15m still high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_30) | (stochrsi_k_15m_lt_50))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_25) | (stochrsi_k_1h_lt_90))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_40) | aroonu_14_1h_lt_70)
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_40) | aroonu_14_4h_lt_70)
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_80)
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_80 | (roc_9_1d_lt_10))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_30))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_20) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_30))
# 15m down move, 1d high, 4h downtrend
& ((rsi_3_15m_gt_20) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_20))
# 15m down move, 1d high, 4h overbought
& ((rsi_3_15m_gt_20) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_20))
# 15m down move, 1d high, 1d overbought
& ((rsi_3_15m_gt_20) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_15m_lt_60) | (roc_9_4h_gt_neg_50))
# 15 down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_70) | (roc_9_1d_lt_10))
# 15m down move, 4h high, 15m downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_4h_lt_70) | (cmf_20_15m_gt_neg_0_40))
# 15m & 1h & 4h down move, 1h still not low enough, 4h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_35) | (stochrsi_k_1h_lt_30) | (stochrsi_k_4h_lt_40))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (stochrsi_k_15m_lt_70))
# 15m & 1h & 4h down move, 4h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_50))
# 15m & 1h & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_70))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_40) | (stochrsi_k_1d_lt_90))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_40) | (roc_9_1d_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_50) | (aroonu_14_1h_lt_85))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_60) | aroonu_14_4h_lt_100)
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_60) | (stochrsi_k_4h_lt_90))
# 15m & 4h down move, 4h overbought
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_55) | (roc_9_4h_lt_30))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1d_gt_25) | aroonu_14_1h_lt_80)
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_25) | (stochrsi_k_1h_lt_90))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_80))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_60) | (roc_9_1d_lt_60))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_25) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_40))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_85) | aroonu_14_4h_lt_100)
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_90) | (aroonu_14_4h_lt_90))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_25) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_50))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_25) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_100))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_70) | (roc_9_1d_gt_neg_20))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_25) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_30))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_35) | aroonu_14_1h_lt_80)
# 15m & 1h & 4h down move, 1h still high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_40) | (rsi_3_4h_gt_60) | (stochrsi_k_1h_lt_50))
# 15m & 1h & 4h down move, 1h still high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_50) | (rsi_3_4h_gt_50) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_15m_lt_70))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_30) | (aroonu_14_1h_lt_90) | (roc_9_1h_lt_10))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_40) | (aroonu_14_4h_lt_85))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_30) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_40))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_30) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_35) | (rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_35) | (rsi_3_1h_gt_65) | aroonu_14_1h_lt_80)
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_35) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_25) | aroonu_14_1h_lt_80)
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_25) | (stochrsi_k_1h_lt_80))
# 15m down move, 1m still high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_40) | (roc_9_4h_lt_50))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_35) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_10))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_35) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_70))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_35) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_40) | (rsi_3_1h_gt_40) | aroonu_14_4h_lt_100)
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_40) | (rsi_3_4h_gt_45) | (stochrsi_k_1h_lt_90))
# 15m down move, 15m still high, 1d high
& ((rsi_3_15m_gt_40) | (stochrsi_k_15m_lt_40) | (roc_9_1d_lt_100))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_40) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_40))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_50) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_70))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_4h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_40) | (stochrsi_k_15m_lt_30))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (roc_9_1d > -30.0))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_70))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_50))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_10))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_70))
# 1h & 1d down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_1d > 50.0) | (stochrsi_k_1d_lt_60))
# 1h down move, 1h high, 1d overbought
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_60) | roc_9_1d_lt_50)
# 1h down move, 1h high, 1d overbought
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_70 | (roc_9_1d_lt_20))
# 1h down move, 1d high, 4h downtrend
& (rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_80) | (roc_9_4h_gt_neg_20))
# 1h down move, 4h downtrend, 1d overbought
& (rsi_3_1h_gt_20 | (roc_9_4h_gt_neg_10) | (roc_9_1d_lt_20))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_40))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (stochrsi_k_15m_lt_70))
# 1h down move, 4h downtrend, 4h high
& ((rsi_3_1h_gt_25) | (cmf_20_4h_gt_neg_0_50) | aroonu_14_4h_lt_70)
# 1h down move, 1h still high, 1d high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_40) | (aroonu_14_1d_lt_90))
# 1h down move, 1h still high, 4h overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_50) | (roc_9_4h_lt_60))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_1d_lt_100))
# 1h down move, 1d still high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_35) | (rsi_14_1d_lt_80))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_60))
# 1h & 4h & 1d down move, 1d still high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (rsi_3_1d_gt_60) | (stochrsi_k_1d_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_80))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_1d_gt_30) | (aroonu_14_1h_lt_60))
# 1h down move, 4h & 1d down move
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100)
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_85) | (roc_9_4h_lt_80))
# 1h down move, 1d still high, 1d downtrend
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_40) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_30) | aroonu_14_1d_lt_100 | (roc_9_4h_gt_neg_30))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_30) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_30) | (roc_9_4h_gt_neg_25) | (roc_9_1d_gt_neg_60))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_35) | (rsi_3_1d_gt_35) | (aroonu_14_1h_lt_75))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_60) | aroonu_14_4h_lt_70)
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_35) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_30))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_40))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_35) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_35) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_90))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_40) | (rsi_3_4h_gt_50) | (stochrsi_k_1h_lt_60))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_60) | (roc_9_1d_lt_40))
# 1h down move, 1h still high, 1d high
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | (aroonu_14_1d_lt_85))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_20))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_30))
# 1h down move, 1h high, 15m downtrend
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | (roc_9_15m > -15.0))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1d_lt_80) | roc_9_1d_lt_50)
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_1d_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 1h overbought
& ((rsi_3_1h_gt_40) | (roc_9_1h_lt_30))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_45) | (rsi_3_4h_gt_65) | (roc_9_1d_lt_200))
# 1h down move, 1h still not low enough, 1d downtrend
& ((rsi_3_1h_gt_45) | (aroonu_14_1h_lt_30) | (roc_9_1d_gt_neg_25))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_40) | (roc_9_1d_lt_100))
# 1h down move, 4h high, 1h overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_4h_lt_85) | (roc_9_1h_lt_20))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 1h down move, 1h & 4h overbought
& ((rsi_3_1h_gt_50) | (roc_9_1h_lt_10) | (roc_9_4h_lt_100))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_50) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_55) | (rsi_3_4h_gt_55) | (stochrsi_k_1h_lt_70))
# 1h & 1d down move, 1h & 1d high
& ((rsi_3_1h_gt_55) | (rsi_3_1d_gt_55) | (aroonu_14_1h_lt_60) | (aroonu_14_1d_lt_90))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_55) | (aroonu_14_1h_lt_80) | (roc_9_4h_lt_10))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_55) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_10))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_60) | (rsi_3_1d_gt_60) | (aroonu_14_1h_lt_70))
# 1h down move, 4 high, 1h overbought
& ((rsi_3_1h_gt_60) | (aroonu_14_4h_lt_100) | (roc_9_1h_lt_10))
# 1h down move, 1d high, 1h overbought
& ((rsi_3_1h_gt_60) | (aroonu_14_1d_lt_90) | (roc_9_1h_lt_10))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_60) | (stochrsi_k_1h_lt_70) | (roc_9_1d_gt_neg_10))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_60) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_100))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_65) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_25))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_65) | (stochrsi_k_1h_lt_90) | (roc_9_1d_lt_20))
# 4h down move, 1h still not low enough, 4h downtrend
& ((rsi_3_4h_gt_3) | (aroonu_14_1h_lt_20) | (roc_9_4h_gt_neg_10))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_3) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_10))
# 4h & 1d down move, 15m still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_25) | (stochrsi_k_15m_lt_40))
# 4h & 1d down move, 1h still not low enough
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_20))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (roc_9_1d_gt_neg_40))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_50))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_35) | (aroonu_14_1d_lt_100))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_10))
# 4h down move, 15m high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_70))
# 4h & 1d down move, 4h high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_70)
# 4h & 1d down move, 1h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_40))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_70))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | (roc_9_1d_gt_neg_15))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d > 50.0) | (stochrsi_k_4h_lt_40))
# 4h down move, 1d still high, 4h still not low enough
& ((rsi_3_4h_gt_15) | (rsi_14_1d_lt_40) | (stochrsi_k_4h_lt_30))
# 4h down move, 4h still not low enough, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h & 1d down move, 1d high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_60))
# 4h & 1d down move, 4h still high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_40))
# 4h & 1d down move, 1d overbought
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_45) | (roc_9_1d_lt_40))
# 4h down move, 15m high
& (rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_80))
# 4h down move, 1h high, 4h downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_20))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50) | (cmf_20_4h_gt_neg_0_40))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_30))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_30) | (rsi_3_1d > 50.0) | (aroonu_14_1d_lt_90))
# 4h down move, 1h high, 1h downtrend
& ((rsi_3_4h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_1h_gt_neg_10))
# 4h down move, 1h high, 4h downtrend
& ((rsi_3_4h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_10))
# 4h down move, 1h still high, 1d overbought
& ((rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_40) | (roc_9_1d_lt_30))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_35) | (rsi_3_1d > 50.0) | (roc_9_1d_lt_100))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_35) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_45) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_30))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_40) | (rsi_3_1d_gt_60) | aroonu_14_1d_lt_100)
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_60))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_20))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_60) | (roc_9_4h_lt_20))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_80) | (roc_9_1d_lt_10))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_10))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_55) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_20))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_55) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_100))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_55) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_60))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_60) | aroonu_14_4h_lt_70 | (aroonu_14_1d_lt_70))
# 4h down move, 1d high, 4h overbought
& ((rsi_3_4h_gt_60) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_10))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_60) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_200))
# 4h down move, 4h still high, 4h overbought
& ((rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_50) | (roc_9_4h_lt_10))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_65) | (aroonu_14_4h_lt_75) | (roc_9_1d_lt_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_65) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_20))
# 1d down move, 1d still not low enough, 1d downtrend
& ((rsi_3_1d_gt_5) | (aroonu_14_1d < 20.0) | (roc_9_1d_gt_neg_20))
# 1d down move, 15m still high
& ((rsi_3_1d_gt_5) | (stochrsi_k_15m_lt_40))
# 1d down move, 1h & 4h still not low enough
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_20) | (stochrsi_k_4h_lt_20))
# 1d down move, 1h high
& ((rsi_3_1d_gt_10) | aroonu_14_1h_lt_70)
# 1d down move, 4h downtrend, 4h high
& ((rsi_3_1d_gt_20) | (cmf_20_4h_gt_neg_0_25) | aroonu_14_4h_lt_70)
# 1d down move, 1d still high, 1d downtrend
& ((rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 1d down move, 4h & 1d high
& ((rsi_3_1d_gt_40) | aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100)
# 1d down move, 1d high & overbought
& ((rsi_3_1d_gt_40) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_10))
# 1d down move, 1h high, 1d overbought
& ((rsi_3_1d_gt_60) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_100))
# 4h downtrend, 4h high & over
& ((cmf_20_4h_gt_neg_0_10) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_30))
# 15m still high, 4h high, 1h overbought
& ((aroonu_14_15m_lt_40) | (aroonu_14_4h_lt_85) | (roc_9_1h_lt_20))
# 15m still high, 4h high, 1h overbought
& ((aroonu_14_15m_lt_40) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_20))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_40) | roc_9_1d_gt_neg_50)
# 1h high, 4h high & overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_80 | (roc_9_4h_lt_30))
# 1h & 4h high, 1h overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_30))
# 1h & 4h & 1d high
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100)
# 1h & 4h high, 1d overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_1d_lt_30))
# 1h high, 1h overbought
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_10))
# 1h & 1d high, 4h overbought
& (aroonu_14_1h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_10))
# 1h high, 1h & 4h overbought
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_10) | (roc_9_4h_lt_10))
# 1h high, 1h overbought, 1d downtrend
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_50) | roc_9_1d_gt_neg_50)
# 1h high, 4h &1d overbought
& ((aroonu_14_1h_lt_85) | (roc_9_4h_lt_30) | (roc_9_1d_lt_30))
# 1h high, 4h & 1d overbought
& ((aroonu_14_1h_lt_90) | (roc_9_4h_lt_10) | (roc_9_1d_lt_15))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_50))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 4h & 1d high, 4h overbought
& ((aroonu_14_4h_lt_90) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_30))
# 4h high, 4h overbought, 1d downtrend
& ((aroonu_14_4h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_gt_neg_40))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_70) | (roc_9_4h_lt_30) | (roc_9_1d_lt_200))
# 1d high, 1h & 1d overbought
& ((aroonu_14_1d_lt_80) | (roc_9_1h_lt_20) | roc_9_1d_lt_50)
# 1d high, 1d downtrend
& ((aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_30))
# 1d high, 1h & 4h downtrend
& ((aroonu_14_1d_lt_85) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_50))
# 1d high, 1h & 1d overbought
& ((aroonu_14_1d_lt_90) | (roc_9_1h_lt_10) | roc_9_1d_lt_50)
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_10) | (roc_9_1d_lt_20))
# 15m still not low enough, 4h high, 1d overbought
& ((stochrsi_k_15m_lt_30) | aroonu_14_4h_lt_100 | (roc_9_1d_lt_30))
# 15m still high, 4h high & overbought
& ((stochrsi_k_15m_lt_40) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30))
# 1h high, 1d overbought
& ((stochrsi_k_1h_lt_70) | (roc_9_1d_lt_40))
# 1h high, 1h overbought, 4h downtrend
& ((stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10) | (roc_9_4h_gt_neg_10))
# 1h high, 4h & 1d downtrend
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_80))
# 1h down move, 1h & 1d overbought
& ((stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10) | roc_9_1d_lt_50)
# 1h high & overbought
& ((stochrsi_k_1h_lt_90) | (roc_9_1h_lt_40))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_70) | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 4h high, 1h & 1d overbought
& ((stochrsi_k_4h_lt_70) | (roc_9_1h_lt_20) | (roc_9_1d_lt_200))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30) | (roc_9_1d_lt_30))
# 4h high, 1d downtrend
& ((stochrsi_k_4h_lt_80) | roc_9_1d_gt_neg_50)
# 4h high, 1h & 1d overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_20) | (roc_9_1d_lt_20))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_4h_lt_10) | (roc_9_1d_lt_10))
# 1d hihg, 1h & 1d overbought
& ((stochrsi_k_1d_lt_90) | (roc_9_1h_lt_30) | (roc_9_1d_lt_100))
# 1d P&D, dh downtrend
& ((change_pct_1d_gt_neg_50) | (change_pct_1d_shift.shift(288) < 50.0) | (rsi_3_4h_gt_15))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# drop in last 20 days, 1h high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_70))
# drop in last 20 days. 4h high
& ((close > (high_max_20_1d * 0.10)) | (stochrsi_k_4h_lt_90))
)
# Logic
long_entry_logic.append(
(rsi_20 < rsi_20_shift.shift(1))
& (rsi_3_lt_46)
& (aroonu_14_lt_25)
& (stochrsi_k_lt_20)
& (aroonu_14_15m_lt_50)
& (close < sma_16 * 0.960)
)
# Condition #21 - Pump mode (Long).
if long_entry_condition_index == 21:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
# long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m down move, 4h high, 1h overbought
((rsi_3_gt_10) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_30))
# 15m down move, 1h & 4h overbought
& ((rsi_3_15m_gt_5) | (roc_9_1h_lt_25) | (roc_9_4h_lt_50))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (roc_9_1d_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_80))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_45) | (roc_9_4h_lt_50))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_60) | (roc_9_4h_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_55) | (aroonu_14_4h_lt_90))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_80))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_70) | roc_9_1d_gt_neg_50)
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30))
# 15m down move, 1d high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_35) | (roc_9_4h_lt_100))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_35) | (aroonu_14_1h_lt_90))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_40) | aroonu_14_4h_lt_100)
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_40) | aroonu_14_4h_lt_100)
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_60) | (roc_9_4h_lt_80))
# 15m down move, 4h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_90) | (cmf_20_4h_gt_neg_0_25))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (roc_9_1h_lt_30) | (roc_9_4h_lt_50))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_15) | (roc_9_4h_lt_60) | (roc_9_1d_lt_80))
# 15m & 1h down move, 4h & 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_50) | (aroonu_14_4h_lt_80) | (aroonu_14_1d_lt_100))
# 15m & 1h down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_50) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_20))
# 15m & 1h down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_20))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_60) | (aroonu_14_4h_lt_100))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_4h_lt_80) | (roc_9_1h_lt_10))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_20) | (roc_9_4h_lt_80) | (roc_9_1d_lt_200))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (roc_9_1d_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_55) | (aroonu_14_1h_lt_90))
# 15m down move, 15m still high, 1d downtrend
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_40) | (roc_9_1d_gt_neg_25))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_90) | (aroonu_14_4h_lt_100))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_100) | (roc_9_1h_lt_20))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_100) | (roc_9_1d_lt_100))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_20))
# 15m down move, 1h & 4h overbought
& ((rsi_3_15m_gt_25) | (roc_9_1h_lt_40) | (roc_9_4h_lt_40))
# 15m & 4h & 1d down move, 4h & 1d high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_50) | (rsi_3_1d_gt_55) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_100))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_30) | (stochrsi_k_4h_lt_90) | (roc_9_4h < 200.0))
# 15m down move, 1h & 4h overbought
& ((rsi_3_15m_gt_30) | (roc_9_1h_lt_60) | (roc_9_4h_lt_80))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_40) | (roc_9_4h_lt_100) | (roc_9_1d_lt_100))
# 1h down move, 4h overbought, 1d downtrend
& ((rsi_3_1h_gt_15) | (roc_9_4h_lt_50) | (roc_9_1d > -30.0))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_20) | (roc_9_4h_lt_50) | aroonu_14_4h_lt_80)
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_20) | (roc_9_4h_lt_50) | (stochrsi_k_1h_lt_40))
# 1h & 4h down move, 4h overbought
& ((rsi_3_1h_gt_20) | (roc_9_4h_lt_50) | (roc_9_4h_lt_10))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_20) | (aroonu_14_1h_lt_80) | (aroonu_14_4h_lt_100))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_20) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_10))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_20) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_50))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_20) | (stochrsi_k_1h_lt_40) | (roc_9_4h_lt_10))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_20) | (roc_9_4h_lt_40) | (roc_9_1d_lt_100))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_25) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_60))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_30))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_80 | (roc_9_1d_gt_neg_40))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_80) | roc_9_1d_gt_neg_50)
# 1h down move, 1h & 1d overbought
& ((rsi_3_1h_gt_40) | (roc_9_1h_lt_30) | (roc_9_1d_lt_60))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_45) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_25))
# 1h down move, 4h high, 1h overbought
& ((rsi_3_1h_gt_45) | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_20))
# 1h down move, 4h high, 1h overbought
& ((rsi_3_1h_gt_45) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_10))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_45) | aroonu_14_1d_lt_100 | (roc_9_1d_gt_neg_25))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_1h_lt_90) | (roc_9_1h_lt_10))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_70) | (roc_9_1d_gt_neg_20))
# 1h down move, 1h & 1d overbought
& ((rsi_3_1h_gt_50) | (roc_9_1h_lt_25) | (roc_9_1d_lt_200))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_55) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_55) | (aroonu_14_4h_lt_85) | (roc_9_4h_lt_80))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_60) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_100))
# 1h down move, 1h & 1d overbought
& ((rsi_3_1h_gt_60) | (roc_9_1h_lt_10) | (roc_9_1d < 250.0))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_65) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_30))
# 1h down move, 1h overbought
& ((rsi_3_1h_gt_65) | (roc_9_1h_lt_40))
# 4h down move, 1h high & overbought
& ((rsi_3_4h_gt_3) | (aroonu_14_1h_lt_85) | (roc_9_1h_lt_60))
# 1d down move, 4h high & overbought
& ((rsi_3_1d_gt_5) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_50))
# 1d down move, 1h high
& ((rsi_3_1d_gt_10) | aroonu_14_1h_lt_70)
# 1d down move, 4h high, 1h overbought
& ((rsi_3_1d_gt_20) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_25))
# 1d down move, 4h high, 4h overbought
& ((rsi_3_1d_gt_20) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_40))
# 1d down move, 1h & 4h overbought
& ((rsi_3_1d_gt_30) | (roc_9_1h_lt_30) | (roc_9_4h_lt_60))
# 1d down move, 4h high & overbought
& ((rsi_3_1d_gt_35) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_20))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_40) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100)
# 1d down move, 4h & 1d high
& ((rsi_3_1d_gt_40) | aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100)
# 1d down move, 4h high & overbought
& ((rsi_3_1d_gt_45) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_30))
# 1d down move, 1h high, 1d overbought
& ((rsi_3_1d_gt_60) | (aroonu_14_1h_lt_75) | (roc_9_1d_lt_20))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_65) | (aroonu_14_1h_lt_90) | aroonu_14_4h_lt_100)
# 1d downtrend, 1d high & overbought
& ((cmf_20_1d_gt_neg_0_40) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_20))
# 15m not low enough, 1h high, 1d overbought
& ((aroonu_14_15m_lt_25) | (stochrsi_k_1h_lt_90) | (roc_9_1d_lt_200))
# 1h still high, 1h & 4h overbought
& ((aroonu_14_1h_lt_50) | (roc_9_1h_lt_40) | (roc_9_4h_lt_40))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_20))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_80 | (roc_9_4h_lt_30))
# 1h & 4h high, 1h overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_30))
# 1h & 4h high, 1d overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90) | (roc_9_1d_lt_100))
# 1h & 1d high, 4h overbought
& ((aroonu_14_1h_lt_90) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_30))
# 1h & 4h high, 1h overbought
& (aroonu_14_1h_lt_80 | (stochrsi_k_4h_lt_90) | (roc_9_1h_lt_10))
# 1h high & overbought
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_80))
# 1h high, 1h & 4h overbought
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_10) | (roc_9_4h_lt_10))
# 1h high, 4h overbought, 1d downtrend
& (aroonu_14_1h_lt_80 | (roc_9_4h_lt_10) | roc_9_1d_gt_neg_50)
# 1h & 4h high, 15m downtrend
& ((aroonu_14_1h_lt_85) | (aroonu_14_4h_lt_85) | (roc_9_15m > -40.0))
# 1h & 4h high, 1h overbought
& ((aroonu_14_1h_lt_90) | (aroonu_14_4h_lt_90) | (roc_9_1h_lt_10))
# 4h high, 1h overbought, 1d downtrend
& (aroonu_14_4h_lt_80 | (roc_9_1h_lt_30) | (roc_9_1d > -30.0))
# 4h & 1d high, 4h downtrend
& ((aroonu_14_4h_lt_85) | aroonu_14_1d_lt_100 | (cmf_20_4h_gt_neg_0_30))
# 4h & 1d high, 1h overbought
& ((aroonu_14_4h_lt_85) | (aroonu_14_1d_lt_90) | (roc_9_1h_lt_20))
# 4h & 1d high, 4h overbought
& ((aroonu_14_4h_lt_85) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_60))
# 4h high, 1h & 4h overbought
& ((aroonu_14_4h_lt_85) | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 4h high, 1d high & overbought
& ((aroonu_14_4h_lt_90) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 4h high, 1h & 4h overbought
& ((aroonu_14_4h_lt_90) | (roc_9_1h_lt_40) | (roc_9_4h_lt_40))
# 4h high, 4h & 1d overbought
& ((aroonu_14_4h_lt_90) | (roc_9_4h_lt_30) | (roc_9_1d_lt_100))
# 4h high, 1h & 4h overbought
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_40) | (roc_9_4h_lt_80))
# 1d high, 1h & 4h overbought
& (aroonu_14_1d_lt_100 | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 1h high, 1h & 4h overbought
& ((stochrsi_k_1h_lt_60) | (roc_9_1h_lt_40) | (roc_9_4h_lt_40))
# 1h high, 1h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 1h high, 4h overbought. 1d downtrend
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_40) | (cmf_20_1d_gt_neg_0_25))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 4h high & 4h & 1d overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1d high, 1h & 4h overbought
& ((stochrsi_k_1d_lt_80) | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 1d hihg, 1h & 1d overbought
& ((stochrsi_k_1d_lt_90) | (roc_9_1h_lt_30) | (roc_9_1d_lt_100))
# 1d high, 4h & 1d overbought
& ((stochrsi_k_1d_lt_90) | (roc_9_4h_lt_40) | (roc_9_1d_lt_100))
)
# Logic
long_entry_logic.append(
(aroonu_14_lt_25)
& (stochrsi_k_lt_20)
& (aroonu_14_15m_lt_50)
& (close < df["EMA_16"] * 0.960)
& (((df["EMA_50"] - df["EMA_200"]) / close * 100.0) > 6.0)
)
# Condition #41 - Quick mode (Long).
if long_entry_condition_index == 41:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
# long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 1d down move, 4h still high
((rsi_3_gt_15) | (rsi_3_1d_gt_30) | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 1d still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (stochrsi_k_1d_lt_50))
# 15m & 1h down move, 1h still not low enough
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_5) | (stochrsi_k_1h_lt_30))
# 15m & 1h & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_20))
# 15m & 1h down move, 15m downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (cmf_20_15m_gt_neg_0_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_80))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_60))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (roc_9_1d_gt_neg_20))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | rsi_3_1h_gt_20 | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_60))
# 15m & 1h down move, 1d still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (aroonu_14_1d_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1d_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_85))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_45) | (stochrsi_k_1h < 75.0))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_5) | aroonu_14_4h_lt_80)
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_50))
# 15m down move, 15m still high, 1d high
& ((rsi_3_15m_gt_3) | (aroonu_14_15m_lt_40) | (aroonu_14_1d_lt_80))
# 15m down move, 15m still high, 1d downtrend
& ((rsi_3_15m_gt_3) | (aroonu_14_15m_lt_50) | (roc_9_1d_gt_neg_20))
# 15m down move, 1h still high, 1d high
& ((rsi_3_15m_gt_3) | (aroonu_14_1h_lt_50) | (aroonu_14_1d_lt_70))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_3) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_80)
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_3) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_3) | (stochrsi_k_1h_lt_80) | (stochrsi_k_4h_lt_80))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_3) | (stochrsi_k_1h_lt_90) | (roc_9_4h_lt_10))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_3) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_3) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (roc_9_1d_gt_neg_10))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_80))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | aroonu_14_1h_lt_70)
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | aroonu_14_4h_lt_70)
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_5) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_25) | (roc_9_1d_gt_neg_70))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_5) | (aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100)
# 15m down move, 1h still high, 1d downtrend
& ((rsi_3_15m_gt_5) | (stochrsi_k_1h_lt_50) | (roc_9_1d_gt_neg_40))
# 5m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_5) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_40))
# 15m down move, 1h & 4h overbought
& ((rsi_3_15m_gt_5) | (roc_9_1h_lt_25) | (roc_9_4h_lt_25))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_5) | (roc_9_4h_lt_30) | (roc_9_1d_lt_100))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (roc_9_1d > -30.0))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_80))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_100))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_70))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (roc_9_1d_lt_20))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_30))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_90))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_100)
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_50) | (roc_9_1d_lt_30))
# 15m down move, 15m high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_70))
# 15m down move, 1h high, 15m downtrend
& ((rsi_3_15m_gt_10) | aroonu_14_1h_lt_80 | (roc_9_15m > -10.0))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_10) | aroonu_14_1h_lt_80 | (roc_9_1d > -30.0))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_85) | (roc_9_1d_lt_40))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_90) | aroonu_14_1d_lt_100)
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100)
# 15m down move, 4h high, 1h downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_85) | (roc_9_1h_gt_neg_25))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_90) | aroonu_14_1d_lt_100)
# 15m down move, 4h high, 15m downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_100) | (roc_9_15m > -30.0))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_10) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_60))
# 15m down move, 1d high, 1d downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_1d_lt_85) | (cmf_20_1d_gt_neg_0_40))
# 15m down move, 1h high, 15m downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_80) | (roc_9_15m > -10.0))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_90) | (roc_9_1d_gt_neg_30))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_90) | (roc_9_1d_lt_30))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (roc_9_1d_lt_30))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_15) | rsi_3_1h_gt_20 | (aroonu_14_1d_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_35) | aroonu_14_1h_lt_80)
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_90))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_100)
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_1d > 50.0) | (aroonu_14_1d_lt_80))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_90))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | (stochrsi_k_1h_lt_80))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100)
# 15m down move, 4h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_15) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 15m down move, 1h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_30))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_80) | roc_9_1d_gt_neg_50)
# 15m down move, 1d high, 4h overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_4h_lt_40))
# 15m down move, 1h downtrend, 4h overbought
& ((rsi_3_15m_gt_15) | (roc_9_1h_gt_neg_20) | (roc_9_4h_lt_80))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (roc_9_1d_lt_50))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (aroonu_14_1d_lt_100))
# 15m & 1h down move, 1h & 1d overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_50) | (roc_9_1h_lt_10) | (roc_9_1d_lt_40))
# 15m &4h down move, 4h still high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_50))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_40))
# 15m down move, 1h high, 4h downtrend
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_80 | (roc_9_4h_gt_neg_15))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_100) | (roc_9_1h_lt_50))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_20))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_20) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_60))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_60))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_90))
# 15m down move, 15m high, 1h high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_60) | (aroonu_14_1h_lt_90))
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_90) | (roc_9_4h_lt_30))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_100) | (roc_9_4h_lt_15))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_100) | (roc_9_1d_lt_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_10))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_30) | (aroonu_14_1h_lt_90) | (aroonu_14_4h_lt_90))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | (stochrsi_k_1d_lt_50))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (aroonu_14_1h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_70))
# 1h down move, 15m & 1h downtrend
& ((rsi_3_1h_gt_3) | (cmf_20_15m_gt_neg_0_30) | (cmf_20_1h_gt_neg_0_30))
# 1h down move, 1h still high, 1h downtrend
& ((rsi_3_1h_gt_3) | (aroonu_14_1h_lt_50) | (roc_9_1h_gt_neg_20))
# 1h down move, 1h high
& ((rsi_3_1h_gt_3) | aroonu_14_1h_lt_70)
# 1h down move, 4h high
& ((rsi_3_1h_gt_3) | aroonu_14_4h_lt_70)
# 1h down move, 1d high
& ((rsi_3_1h_gt_3) | (aroonu_14_1d_lt_70))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_50) | (roc_9_1h_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_3) | (stochrsi_k_1d_lt_60) | (roc_9_1d_lt_20))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_20))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_20))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | (cmf_20_1h_gt_neg_0_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 1h & 1d down move, 1h still high
& ((rsi_3_1h_gt_5) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_50))
# 1h down move, 1h high, 1d high
& ((rsi_3_1h_gt_5) | (aroonu_14_1h_lt_70) | (stochrsi_k_1d_lt_80))
# 1h down move, 1d high, 1h downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_85) | (roc_9_1h_gt_neg_50))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_30))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_100) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_20))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_5) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_50))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_5) | (roc_9_4h_gt_neg_25) | (roc_9_1d_gt_neg_50))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_15))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1h_lt_80))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 1d still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_20))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_35))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 15m downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (roc_9_15m > -20.0))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (roc_9_1d > -30.0))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_90))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 4h high & overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_55) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 1h & 1d down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_10) | (roc_9_1d > -30.0))
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_10) | (aroonu_14_4h_lt_40))
# 1h & 1d down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_70))
# 1h & 1d down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_20) | (stochrsi_k_1h_lt_20))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_70))
# 1h & 1d down move, 1h downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_30) | (cmf_20_1h_gt_neg_0_40))
# 1h down move, 1d downtrend, 4h high
& ((rsi_3_1h_gt_10) | (cmf_20_1d_gt_neg_0_30) | (stochrsi_k_4h_lt_90))
# 1h down move, 1h still high, 4h overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_50) | (roc_9_4h_lt_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_60) | (aroonu_14_4h_lt_60))
# 1h down move, 1h high, 1d high
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_60) | (stochrsi_k_1d_lt_90))
# 1h down move, 1d overbought
& ((rsi_3_1h_gt_10) | roc_9_1d_lt_50)
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_15))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_25))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_70))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_14_4h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | aroonu_14_4h_lt_70)
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_100))
# 1h & 1d down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_40))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_30) | (aroonu_14_1h_lt_80))
# 1h down move, 1h downtrend, 1h still high
& ((rsi_3_1h_gt_15) | (cmf_20_1h_gt_neg_0_30) | (stochrsi_k_1h_lt_40))
# 1h down move, 1d downtrend, 1d high
& ((rsi_3_1h_gt_15) | (cmf_20_1d_gt_neg_0_30) | (stochrsi_k_1d_lt_80))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70) | (aroonu_14_1d_lt_90))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70) | (roc_9_1d_lt_40))
# 1h down move, 1h high, 1h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_80) | (cmf_20_1h_gt_neg_0_25))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_80) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h still high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_1d_lt_60))
# 1h down move, 4h high, 15m downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_85) | (roc_9_15m > -15.0))
# 1h down move, 4h high, 1h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_85) | (roc_9_1h_gt_neg_30))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_10))
# 1h down move, 4h still not low enough, 1d downtrend
& ((rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_30) | (roc_9_1d > -30.0))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_100))
# 1h down move, 1h downtrend, 1d overbought
& ((rsi_3_1h_gt_15) | (roc_9_1h_gt_neg_30) | (roc_9_1d_lt_35))
# 1h down move, 4h downtrend, 1d overbought
& ((rsi_3_1h_gt_15) | (roc_9_4h_gt_neg_25) | (roc_9_1d_lt_100))
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_70))
# 1h & 1d down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_20) | (aroonu_14_4h_lt_90))
# 1h & 1d down move, 1h high
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_25) | aroonu_14_1h_lt_70)
# 1h & 1d down move, 4h overbought
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_30) | (roc_9_4h_lt_30))
# 1h down move, 1h still high, 4h high
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90))
# 1h down move, 1h high, 1d overbought
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_70 | (roc_9_1d_lt_100))
# 1h down move, 1d high & overbought
& (rsi_3_1h_gt_20 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_60))
# 1h down move, 1h high, 4h overbought
& (rsi_3_1h_gt_20 | (stochrsi_k_1h_lt_70) | (roc_9_4h_lt_10))
# 1h down move, 1d high, 1d downtrend
& (rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_80) | roc_9_1d_gt_neg_50)
# 1h down move, 1d high & overbought
& (rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_40))
# 1h down move, 1h & 4h overbought
& (rsi_3_1h_gt_20 | (roc_9_1h_lt_20) | (roc_9_4h_lt_40))
# 1h down move, 4h & 1d downtrend
& (rsi_3_1h_gt_20 | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_40) | (roc_9_1d_lt_100))
# 1h down move, 15m still high, 1h high
& ((rsi_3_1h_gt_25) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_90))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_200))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_90))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_20))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_85) | roc_9_1d_lt_50)
# 1h down move, 4h high
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_90))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_40))
# 1h down move, 15m downtrend, 4h overbought
& ((rsi_3_1h_gt_25) | (roc_9_15m > -25.0) | (roc_9_4h_lt_30))
# 1h down move, 1h & 1d downtrend
& ((rsi_3_1h_gt_25) | (roc_9_1h_gt_neg_50) | roc_9_1d_gt_neg_50)
# 1h down move, 1h downtrend, 4h overbought
& ((rsi_3_1h_gt_25) | (roc_9_1h_gt_neg_25) | (roc_9_4h_lt_50))
# 1h down move, 1h & 4h overbought
& ((rsi_3_1h_gt_25) | (roc_9_1h_lt_30) | (roc_9_4h_lt_100))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (aroonu_14_1h_lt_90))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h downtrend, 1h high
& ((rsi_3_1h_gt_30) | (cmf_20_1h_gt_neg_0_25) | (stochrsi_k_1h_lt_70))
# 1h down move, 4h downtrend, 4h high
& ((rsi_3_1h_gt_30) | (cmf_20_4h_gt_neg_0_50) | aroonu_14_4h_lt_100)
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_1h_lt_10))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_60))
# 1h down move, 4h high, 1h overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_80 | (roc_9_1h_lt_50))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_90) | (roc_9_1d_gt_neg_30))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_100 | (roc_9_1d_lt_20))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 1h down move, 15m & 1h high
& ((rsi_3_1h_gt_35) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_40))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100)
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_80 | (roc_9_1d_gt_neg_40))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_90) | (roc_9_4h_lt_10))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_35) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_200))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_35) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30))
# 1h down move, 1h downtrend, 4h overbought
& ((rsi_3_1h_gt_35) | (roc_9_1h_gt_neg_30) | (roc_9_4h_lt_100))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_35) | (roc_9_4h_lt_20) | (roc_9_1d_lt_70))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | (roc_9_1h_lt_10))
# 1h down move, 1h high, 1d high
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_85) | (roc_9_1d_lt_80))
# 1h down move, 1h high, 15m downtrend
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_90) | (roc_9_15m > -10.0))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_40) | (roc_9_4h_lt_20) | (roc_9_1d_lt_100))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_40) | (roc_9_4h_lt_30) | (roc_9_1d_lt_40))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_45) | (aroonu_14_1h_lt_100) | (roc_9_1d_lt_200))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_100))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (aroonu_14_1h_lt_60) | (roc_9_1d_gt_neg_70))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_70) | (roc_9_1d_lt_100))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_60))
# 1h down move, 1h high
& ((rsi_3_1h_gt_60) | (stochrsi_k_1h_lt_80))
# 1h down move, 1h overbought
& ((rsi_3_1h_gt_60) | (roc_9_1h_lt_30))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_60) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 4h & 1d down move, 1d still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_30))
# 4h down move, 4h high, 1h downtrend
& ((rsi_3_4h_gt_3) | aroonu_14_4h_lt_70 | (roc_9_1h_gt_neg_40))
# 4h down move, 1h still high, 4h downtrend
& ((rsi_3_4h_gt_3) | (stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_30))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_50))
# 4h down move, 15m still high, 1d downtrend
& ((rsi_3_4h_gt_5) | (aroonu_14_15m_lt_50) | (roc_9_1d_gt_neg_30))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_25) | roc_9_1d_gt_neg_50)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_80))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_70) | (roc_9_1d_lt_35))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_15) | (roc_9_1d > -35.0))
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40) | (roc_9_1d_lt_40))
# 4h down move, 1h still not low enough, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_20) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_70))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_200))
# 4h down move, 4h & 1d downtrend
& (rsi_3_4h_gt_20 | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_30))
# 4h down move, 15m high, 1d overbought
& ((rsi_3_4h_gt_25) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_100))
# 4h down move, 4h high
& ((rsi_3_4h_gt_25) | aroonu_14_4h_lt_80)
# 4h down move, 1d high, 1h downtrend
& ((rsi_3_4h_gt_25) | aroonu_14_1d_lt_100 | (roc_9_1h_gt_neg_40))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50) | (roc_9_1d_lt_200))
# 4h down move, 4h still not low enough, 1d overbought
& ((rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_20) | (roc_9_1d_lt_60))
# 4h down move, 1d high, 1d downtrend
& ((rsi_3_4h_gt_35) | (stochrsi_k_1d_lt_60) | (roc_9_1d_gt_neg_30))
# 1h & 4h down move, 1d high & overbought
& ((rsi_3_1h_gt_45) | (rsi_3_4h_gt_55) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_50))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_1h_lt_85) | roc_9_1d_lt_50)
# 4h down move, 1d high, 1d downtrend
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_15))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_45) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_25))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_10))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_50) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1d down move, 4h still high, 1d downtrend
& ((rsi_3_1d_gt_3) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_25))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_10) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_10) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_40))
# 1d down move, 4h high, 1d downtrend
& ((rsi_3_1d_gt_10) | (stochrsi_k_4h_lt_90) | (roc_9_1d_gt_neg_80))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_15) | (aroonu_14_1h_lt_90) | aroonu_14_4h_lt_100)
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_20) | (aroonu_14_1h_lt_100) | (roc_9_1d_gt_neg_30))
# 1d down move, 1h still high, 4h downtrend
& ((rsi_3_1d_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_30))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_35) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 15m downtrend, 4h & 1d high
& ((cmf_20_15m_gt_neg_0_30) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 15m & 1h high, 1h overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | (roc_9_1h_lt_50))
# 15m & 1d high, 1d overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h & 4h high, 1h downtrend
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (cmf_20_1h_gt_neg_0_30))
# 1h high, 4h high, 1h overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1h_lt_20))
# 1h & 1d high, 1h overbought
& (aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_70) | (roc_9_1h_lt_20))
# 1h high, 1d high & overbought
& (aroonu_14_1h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_200))
# 1h high, 1h & 1d overbought
& (aroonu_14_1h_lt_70 | (roc_9_1h_lt_20) | (roc_9_1d_lt_200))
# 1h high, 4h downtrend, 1d overbought
& (aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_40) | (roc_9_1d_lt_100))
# 1h high, 1h & 1d overbought
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_20) | (roc_9_1d_lt_20))
# 1h high, 1h overbought, 1d downtrend
& (aroonu_14_1h_lt_80 | (roc_9_1h_lt_30) | (roc_9_1d_gt_neg_40))
# 1h high, 4h & 1d overbought
& (aroonu_14_1h_lt_80 | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1h high, 4h & 1d downtrend
& ((aroonu_14_1h_lt_85) | (roc_9_4h_gt_neg_20) | roc_9_1d_gt_neg_50)
# 1h & 4h high, 1h overbought
& ((aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_10))
# 4h high, 4h & 1d overbought
& ((aroonu_14_4h_lt_60) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_30))
# 4h high, 4h & 1d overbought
& (aroonu_14_4h_lt_80 | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 4h high, 15m downtrend, 4h overbought
& (aroonu_14_4h_lt_100 | (roc_9_15m > -30.0) | (roc_9_4h_lt_30))
# 4h high, 1h & 4h overbought
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_30) | (roc_9_4h_lt_70))
# 4h & 1d high, 1h overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_1h_lt_50))
# 1d still high, 4h & 1d downtrend
& ((aroonu_14_1d_lt_50) | (roc_9_4h_gt_neg_50) | roc_9_1d_gt_neg_50)
# 1d high, 1h & 4h downtrend
& ((aroonu_14_1d_lt_85) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_50))
# 1d high, 4h downtrend, 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_25) | roc_9_1d_lt_50)
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_90) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 1h high, 1d overbought
& ((stochrsi_k_1h_lt_70) | (roc_9_1d_lt_40))
# 1h high, 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_80))
# 1h high, 1h overbought, 4h downtrend
& ((stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10) | (roc_9_4h_gt_neg_15))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_20) | (roc_9_4h_lt_50))
# 1d high, 4h & 1d overbought
& ((stochrsi_k_1d_lt_90) | (roc_9_4h_lt_100) | (roc_9_1d_lt_100))
# 1d P&D, 4h overbought
& ((change_pct_1d_gt_neg_10) | (change_pct_1d_shift.shift(288) < 30.0) | (roc_9_4h_lt_10))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(rsi_3_gt_5) & (rsi_14 < 36.0) & (aroonu_14_lt_25) & (aroond_14_gt_75) & (ema_9 < (ema_26 * 0.960))
)
# Condition #42 - Quick mode (Long).
if long_entry_condition_index == 42:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
# long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 1h down move, 1d still high
((rsi_3_gt_3) | (rsi_3_1h_gt_3) | (stochrsi_k_1d_lt_40))
# 5m & 1h down move, 1d high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_25) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 4h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_70))
# 15m & 1h down move, 1h downtrend
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (roc_9_1h_gt_neg_50))
# 15m & 1h down move, 1d still not low enough
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_5) | (stochrsi_k_1d_lt_30))
# 15m & 1h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_50))
# 15m & 1h down move, 1d high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_60))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_60))
# 15m & 4h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1d still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_40))
# 15m & 1h down move, 1d downtrend
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (roc_9_1d > -30.0))
# 15m down move, 4h still high, 1d downtrend
& (rsi_3_15m_gt_3 | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_40))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | rsi_3_4h_gt_20)
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (aroonu_14_1d_lt_70))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_15))
# 15m & 4h down move, 1h downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d > -30.0))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | aroonu_14_4h_lt_70)
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_100))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_1d_lt_90))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_60))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (roc_9_1d > -30.0))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | aroonu_14_4h_lt_100)
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (roc_9_1d_lt_10))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_90))
# 15m & 1d down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_70))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_15) | rsi_3_1h_gt_20 | (stochrsi_k_15m_lt_50))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_50))
# 15m & 4h & 1d down move, 15m still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_20) | (stochrsi_k_15m_lt_40))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_60))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_40) | (stochrsi_k_1d_lt_70))
# 15m down move, 15m high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_70))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_100))
# 15m & 1h down move, 1h still high, 1d overbought
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_40))
# 15m down move, 15m still not low enough, 1d downtrend
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_25) | (roc_9_1d_gt_neg_50))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_80))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_40))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_25) | (stochrsi_k_4h_lt_90) | (roc_9_1d_gt_neg_10))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_80))
# 1h & 4h down move
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_50))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_50))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_40))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_70))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_60))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_3) | (aroonu_14_1d_lt_70) | (roc_9_1h_gt_neg_50))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_15m_lt_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (roc_9_1d_gt_neg_30))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_40))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_25) | aroonu_14_1h_lt_70)
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_35) | (roc_9_1d_lt_40))
# 1h & 1d down move, 1h still high
& ((rsi_3_1h_gt_5) | (rsi_3_1d_gt_5) | (aroonu_14_1h_lt_50))
# 1h down move, 4h high
& ((rsi_3_1h_gt_5) | (aroonu_14_4h_lt_90))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_75))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_lt_10))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | aroonu_14_4h_lt_70)
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_90))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_35) | (aroonu_14_1d_lt_100))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_70))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1d_lt_50))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_25) | (rsi_14_1d_lt_50))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_70))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_70))
# 1h down move, 1h downtrend, 1h high
& ((rsi_3_1h_gt_10) | (cmf_20_1h_gt_neg_0_30) | (aroonu_14_1h_lt_70))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_40) | (roc_9_1d_gt_neg_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_60) | aroonu_14_4h_lt_70)
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_60) | (roc_9_1d_lt_20))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_40) | (roc_9_1d_gt_neg_40))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_10) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_20))
# 1h down move, 1d still high, 1d downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_40) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h down move, 15m high
& ((rsi_3_1h_gt_10) | (stochrsi_k_15m_lt_80))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 1d still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_14_1d_lt_40) | (roc_9_1d_gt_neg_15))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50))
# 1h & 4h down move, 15m still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_40))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_20))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_70))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_25) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 4h overbought
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_35) | (roc_9_4h_lt_10))
# 1h & 1d down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_60))
# 1h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_35) | (roc_9_1d_lt_10))
# 1h down move, 1h downtrend, 1h high
& ((rsi_3_1h_gt_15) | (cmf_20_1h_gt_neg_0_30) | (aroonu_14_1h_lt_70))
# 1h down move, 1h still high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_30))
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_1d_gt_neg_40))
# 1h down move, 1d still high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_50) | (roc_9_4h_gt_neg_20))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_30))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_50) | (roc_9_1d > -30.0))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_15) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (aroonu_14_1h_lt_70))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (aroonu_14_1d_lt_100))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (stochrsi_k_15m_lt_60))
# 1h & 4h down move, 15m still not low enough, 1d still not low enough
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (stochrsi_k_15m_lt_30) | (stochrsi_k_1d_lt_30))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (roc_9_1d_lt_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_80))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_20) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_60))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_20) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_100))
# 1h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_20) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_20))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_20) | (aroonu_14_1h_lt_60) | (roc_9_1d_lt_30))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_20) | (aroonu_14_1h_lt_70) | (roc_9_4h_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_20) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_30))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_20) | (stochrsi_k_1d_lt_80) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_70)
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_25) | (rsi_3_1d_gt_25) | aroonu_14_1h_lt_80)
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_25) | (rsi_3_1d_gt_45) | (stochrsi_k_1d_lt_80))
# 1h down move, 4h downtrend, 4h high
& ((rsi_3_1h_gt_25) | (cmf_20_4h_gt_neg_0_50) | aroonu_14_4h_lt_70)
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_60) | roc_9_1d_lt_50)
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_60) | (roc_9_1d_gt_neg_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_25) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_10))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_200))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_10))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (roc_9_1d_gt_neg_50))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_35) | (aroonu_14_15m_lt_80))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_75))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (stochrsi_k_15m_lt_80))
# 1h & 4h & 1d down move, 1h still high, 1d high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_45) | (rsi_3_1d_gt_45) | (aroonu_14_1h_lt_50) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_80))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_30) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_80))
# 1h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_30) | (rsi_3_1d_gt_40) | (roc_9_1d_lt_50))
# 1h down move, 4h high, 4h downtrend
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_70) | (cmf_20_4h_gt_neg_0_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_30))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_10))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_80))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_10) | (roc_9_1d_lt_30))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_45) | (aroonu_14_15m_lt_90))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_45) | (aroonu_14_4h_lt_90))
# 1h down move, 15m high, 1d downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_15m_lt_60) | (roc_9_1d_gt_neg_40))
# 1h down move, 1h still high, 1d high
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_50) | (aroonu_14_1d_lt_90))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | aroonu_14_1d_lt_100)
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_90) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_10))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_35) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_60))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_60) | roc_9_1d_gt_neg_50)
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_45) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_100))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_40))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_60) | (roc_9_4h_lt_30) | (roc_9_1d_lt_100))
# 4h & 1d down move
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_60))
# 4h down move, 1h downtrend, 4h still high
& ((rsi_3_4h_gt_3) | (cmf_20_1h_gt_neg_0_30) | (aroonu_14_4h_lt_40))
# 4h & 1d down move, 4h downtrend
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_15) | (roc_9_4h_gt_neg_10))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_15) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_40))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_50))
# 4h & 1d down move, 4h still not low enough
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (aroonu_14_4h_lt_20))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_70))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_5) | (roc_9_1h_gt_neg_15) | (roc_9_4h_gt_neg_20))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_5) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 15m still not low enough
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (aroonu_14_15m_lt_30))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 1d down move, 15m still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_15m_lt_50))
# 4h & 1d down move, 4d & 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_30) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 4h downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_30) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_10))
# 4h & 1d down move, 4h still not low enough
& ((rsi_3_4h_gt_10) | (rsi_3_1d > 50.0) | (stochrsi_k_4h_lt_20))
# 4h down move, 15m high, 1h downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_60) | (roc_9_1h_gt_neg_10))
# 4h down move, 15m high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_80))
# 4h down move, 4h still not low e nough, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 1d high
& ((rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_40) | (aroonu_14_1d_lt_80))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_40))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_15) | (roc_9_1d > -30.0))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_40))
# 15m & 1d down move, 15m high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_30) | (stochrsi_k_15m_lt_70))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_30) | (stochrsi_k_4h_lt_50))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_35) | (rsi_14_1d_lt_50))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_30))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_50))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_40) | roc_9_1d_gt_neg_50)
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_90) | (roc_9_1d > -30.0))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 4h down move, 4h still high, 1d high
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50) | (aroonu_14_1d_lt_70))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_40) | (roc_9_4h_gt_neg_40))
# 4h & 1d down move, 1d high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_80))
# 4h & 1d down move, 15m high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_30) | (stochrsi_k_15m_lt_80))
# 4h & 1d down move, 1d high
& (rsi_3_4h_gt_20 | (rsi_3_1d > 50.0) | (stochrsi_k_1d_lt_90))
# 4h down move, 15m high, 4h downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_15m_lt_70) | (roc_9_4h_gt_neg_30))
# 4h down move, 4h high
& (rsi_3_4h_gt_20 | aroonu_14_4h_lt_100)
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_70))
# 4h down move, 1d high, 4h downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_50))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_40))
# 4h down move, 15m high
& (rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_70))
# 4h down move, 4h still not low enough, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h & 1d downtrend
& (rsi_3_4h_gt_20 | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d high, 4h downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_80) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 1h high
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_90))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_90))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h high, 1h downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_60) | (roc_9_1h_gt_neg_10))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_30))
# 4h down move, 1d high, 4h downtrend
& ((rsi_3_4h_gt_25) | aroonu_14_1d_lt_100 | (roc_9_4h_gt_neg_20))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d overbought
& ((rsi_3_4h_gt_25) | (roc_9_1d_lt_100))
# 4h down move, 1h high, 4h downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_1h_lt_60) | (roc_9_4h_gt_neg_10))
# 4h down move, 4h still high, 1d high
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50) | aroonu_14_1d_lt_100)
# 4h down move, 4h high, 1h downtrend
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_80 | (roc_9_1h_gt_neg_40))
# 4h down move, 4h high
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_100)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_30) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_60))
# 4h down move, 15m still high, 4h high
& ((rsi_3_4h_gt_35) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_80)
# 4h down move, 1h high
& ((rsi_3_4h_gt_35) | aroonu_14_1h_lt_70)
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_35) | aroonu_14_4h_lt_80 | (roc_9_1d_gt_neg_20))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_35) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_30))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_35) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_50) | (roc_9_1d_lt_200))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_40) | aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100)
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_40) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_20))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h overbought, 1d downtrend
& ((rsi_3_4h_gt_40) | (roc_9_4h_lt_10) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_40) | (roc_9_4h_lt_60) | (roc_9_1d_lt_80))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_45) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 4h down move, 4h overbought
& ((rsi_3_4h_gt_55) | (roc_9_4h_lt_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1d down move, 1d still high
& ((rsi_3_1d_gt_15) | (stochrsi_k_1d_lt_40))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 1d down move, 15m high
& ((rsi_3_1d_gt_20) | (aroonu_14_15m_lt_80))
# 1d down move, 4h high, 4h downtrend
& ((rsi_3_1d_gt_20) | (aroonu_14_4h_lt_50) | (roc_9_4h_gt_neg_40))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_30))
# 1d down move, 1d still high, 1d downtrend
& ((rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 1d down move, 4h & 1d high
& ((rsi_3_1d_gt_30) | (aroonu_14_4h_lt_90) | (aroonu_14_1d_lt_90))
# 1h & 4h downtrend, 4h high
& ((cmf_20_1h_gt_neg_0_40) | (cmf_20_4h_gt_neg_0_40) | aroonu_14_4h_lt_80)
# 4h & 1d downtrend, 1d high
& ((cmf_20_4h_gt_neg_0_50) | (cmf_20_1d_gt_neg_0_50) | (aroonu_14_1d_lt_85))
# 15m & 1d high, 4h overbought
& ((aroonu_14_15m_lt_70) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_20))
# 15m & 4h high, 1d downtrend
& ((aroonu_14_15m_lt_85) | (aroonu_14_4h_lt_85) | (roc_9_1d_gt_neg_20))
# 1h still high, 1h & 4h downtrend
& ((aroonu_14_1h_lt_50) | (roc_9_1h_gt_neg_20) | (roc_9_4h_gt_neg_30))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_10))
# 4h high, 4h & 1d downtrend
& ((aroonu_14_4h_lt_60) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_30))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_30))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_80))
# 4h high, 4h & 1d overbought
& ((aroonu_14_4h_lt_90) | (roc_9_4h_lt_10) | (roc_9_1d_lt_10))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_70) | (roc_9_4h_lt_30) | (roc_9_1d_lt_200))
# 1d high, 4h downtrend, 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_20) | (roc_9_1d_lt_200))
# 1d high, 1h & 4h downtrend
& (aroonu_14_1d_lt_100 | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 1d high, 1h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_1h_lt_10) | (roc_9_1d_lt_30))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 15m still high, 1h & 4h downtrend
& ((stochrsi_k_15m_lt_50) | (roc_9_1h_gt_neg_20) | (roc_9_4h_gt_neg_20))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_20) | (roc_9_4h_lt_30))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_lt_80))
# 1d still high, 4h & 1d downtrend
& ((stochrsi_k_1d_lt_50) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_30))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(willr_14 < -50.0)
& (stochrsi_k_lt_20)
& (willr_84_1h < -70.0)
& (stochrsi_k_1h_lt_20)
& (bbb_20_2_0_1h > 16.0)
& (close_max_48 >= (close * 1.10))
)
# Condition #43 - Quick mode (Long).
if long_entry_condition_index == 43:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
# long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 15m down move, 15m still high
((rsi_3_gt_3) | (rsi_3_15m_gt_5) | (aroonu_14_15m_lt_40))
# 5m & 1h down move, 1h still not low enough
& ((rsi_3_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30))
# 5m & 1h down move, 1h still not low enough
& ((rsi_3_gt_3) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_30))
# 5m & 1h down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_60))
# 5m & 1d down move, 1d still not low enough
& ((rsi_3_gt_3) | (rsi_3_1d_gt_15) | (aroonu_14_1d_lt_30))
# 5m down move, 1h & 4h high
& ((rsi_3_gt_3) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100)
# 5m down move, 4h high & overbought
& ((rsi_3_gt_3) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_20))
# 5m down move, 1h high, 4h overbought
& ((rsi_3_gt_3) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 5m down move, 1d high & overbought
& ((rsi_3_gt_3) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 5m & 1h down move, 1d overbought
& ((rsi_3_gt_5) | (rsi_3_1h_gt_25) | (roc_9_1d_lt_100))
# 5m & 1d down move, 1h high
& ((rsi_3_gt_5) | (rsi_3_1d_gt_20) | (aroonu_14_1h_lt_90))
# 5m & 1h down move, 1h high
& ((rsi_3_gt_10) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_85))
# 15m & 1h down move
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_3))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (rsi_3_4h_gt_10))
# 15m & 1h & 1d down move
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_3_1d_gt_25))
# 15m & 1h down move, 1d still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_14_1d_lt_50))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_15m_lt_50))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_70))
# 15m & 1d down move, 1d overbought
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (roc_9_1d_lt_10))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (aroonu_14_1d_lt_90))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_70))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (roc_9_1d > -30.0))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | (aroonu_14_15m_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_100))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_1d_lt_90))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_200))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_45) | (aroonu_14_4h_lt_90))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_50))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_20) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_35) | (roc_9_1d_lt_60))
# 15m & 1d down move, 1d still high
& ((rsi_3_15m_gt_3) | (rsi_3_1d_gt_10) | (aroonu_14_1d_lt_40))
# 15m & 1d down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_50))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_70))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_3) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_100))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_3) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_40))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_3) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_3) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_40))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_3) | (stochrsi_k_4h_lt_80) | (roc_9_1d_lt_10))
# 15m down move, 1h downtrend, 4h overbought
& ((rsi_3_15m_gt_3) | (roc_9_1h_gt_neg_30) | (roc_9_4h_lt_100))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_3) | (roc_9_4h_gt_neg_70) | (roc_9_1d_gt_neg_70))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (rsi_14_4h_lt_40))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_20))
# 15m & 1h down move, 1d still high
& ((rsi_3_15m_gt_5) | rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_50))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_25) | (roc_9_1d_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (aroonu_14_4h_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_80))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 1h downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_50))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_20) | (aroonu_14_1d_lt_70))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_20) | (stochrsi_k_1h_lt_50))
# 15m down move, 15m & 1h still high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_40) | (aroonu_14_1h_lt_50))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_5) | (aroonu_14_1h_lt_70) | (roc_9_1h_lt_10))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_5) | (aroonu_14_1h_lt_80) | (aroonu_14_4h_lt_100))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_5) | (aroonu_14_1h_lt_80) | (roc_9_4h_lt_10))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_5) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_50))
# 15m down move, 1d still high, 1d downtrend
& ((rsi_3_15m_gt_5) | (stochrsi_k_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 15m down move, 1d downtrend
& ((rsi_3_15m_gt_5) | (roc_9_1d_gt_neg_60))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_5) | (roc_9_1h_lt_10) | (roc_9_1d_lt_40))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_15m_lt_70))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1d_lt_90))
# 15m & 1h down move, 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (roc_9_4h_gt_neg_20))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (roc_9_1d_gt_neg_40))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_15m_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_1d_lt_80))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (roc_9_1d_lt_80))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_4h_lt_90))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (roc_9_4h_lt_20))
# 15m & 1h & 4h down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_60) | (aroonu_14_15m_lt_30) | (aroonu_14_4h_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_60))
# 15m & 1h & 4h & 1d down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_40) | (rsi_3_4h_gt_40) | (rsi_3_1d_gt_40) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_40) | (aroonu_14_1d_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_90))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_90))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_40))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_90))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_70))
# 15m down move, 15m still high, 1d downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_40) | (roc_9_1d_gt_neg_30))
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_50) | (roc_9_1d_lt_30))
# 15m down move, 15m high, 1h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_60) | aroonu_14_1h_lt_80)
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_60) | (roc_9_4h_gt_neg_10))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_90) | aroonu_14_4h_lt_100)
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_40))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_90) | aroonu_14_1d_lt_100)
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_10) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_100))
# 15m down move, 4h still high, 1d overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_50) | (roc_9_1d_lt_30))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_10) | (roc_9_4h_lt_10) | (roc_9_1d_lt_200))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_90))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (stochrsi_k_1d_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_20) | (aroonu_14_1h_lt_100))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_20) | (aroonu_14_4h_lt_100))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_70))
# 15m down move. 15m still high, 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_100))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_80) | (roc_9_1d_lt_40))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_60) | (roc_9_4h_lt_30))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_70) | (roc_9_1d_lt_200))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_100) | (roc_9_1d_lt_100))
# 15m down move, 1h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_30))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_25))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_90) | (roc_9_1d_gt_neg_40))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_90) | (roc_9_1d_lt_30))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_100))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (roc_9_1d_lt_100))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_20) | (aroonu_14_4h_lt_90))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_80 | (roc_9_4h_lt_10))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_80 | (roc_9_1d_lt_10))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_10))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (stochrsi_k_15m_lt_70))
# 15m & 1h down move, 1h downtrend
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (roc_9_1h_gt_neg_30))
# 15m & 4h down move, 15m & 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_25) | (aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_70))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_30) | aroonu_14_1d_lt_100 | roc_9_1d_lt_50)
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_40))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_60))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_70))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_20))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_90))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_20 | aroonu_14_1d_lt_100)
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_35) | (rsi_14_4h_lt_40))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_5) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_30))
# 1h down move, 1d high, 1h downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_90) | (roc_9_1h_gt_neg_40))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_5) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_15))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_60))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_90))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d > -30.0))
# 1h & 1d down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_70))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_30) | (stochrsi_k_1d_lt_50))
# 1h down move, 15m downtrend, 1d high
& ((rsi_3_1h_gt_10) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1d_lt_70))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_80) | (roc_9_4h_lt_10))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_60) | (roc_9_1d > -30.0))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_20))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_15))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (roc_9_1d_lt_10))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (aroonu_14_1h_lt_70))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_70))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_50))
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_30) | (roc_9_1d > -30.0))
# 1h down move, 1h still high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_10))
# 1h & 4h down move, 1h still high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_50))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_75))
# 1h down move, 1h high, 4h overbought
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_70 | (roc_9_4h_lt_10))
# 1h down move, 1h high & overbought
& (rsi_3_1h_gt_20 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_100))
# 1h down move, 4h downtrend, 1d overbought
& (rsi_3_1h_gt_20 | (roc_9_4h_gt_neg_40) | roc_9_1d_lt_50)
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_20))
# 1h & 4h & 1d down move, 1d downtrend, 1d high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_35) | (rsi_3_1d_gt_45) | (cmf_20_1d_gt_neg_0_30) | (aroonu_14_1d_lt_70))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_80))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_60) | (roc_9_1d_gt_neg_40))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_70) | (aroonu_14_1d_lt_90))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_80) | (roc_9_1h_lt_10))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_80) | (roc_9_4h_lt_50))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_90) | (aroonu_14_1d_lt_100))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_70))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_30))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_25) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_60))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_1h_lt_70))
# 1h & 4h down move, 15m & 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_70))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_80) | (roc_9_1d_lt_10))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_70) | (roc_9_1d_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_30))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_40))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_30))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_30) | (roc_9_1d_lt_200))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_35) | (aroonu_14_1d_lt_90))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_90) | (roc_9_1d_lt_80))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_100) | (aroonu_14_4h_lt_100))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_200))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_20))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_40) | (rsi_3_1d_gt_40) | (aroonu_14_1h_lt_90))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | (roc_9_1d > -30.0))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_40) | aroonu_14_4h_lt_80 | (roc_9_1d_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_20))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_45) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_40))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (aroonu_14_1h_lt_60) | (roc_9_1d_gt_neg_70))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_50) | aroonu_14_1h_lt_80 | aroonu_14_1d_lt_100)
# 4h & 1d down move, 15m still high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (stochrsi_k_15m_lt_40))
# 4h & 1d down move, 1h still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_30))
# 4h down move, 4h still high
& ((rsi_3_4h_gt_3) | (aroonu_14_4h_lt_50))
# 4h down move, 1h still high, 4h downtrend
& ((rsi_3_4h_gt_3) | (stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_30))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (stochrsi_k_1d_lt_40))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_5) | (roc_9_1h_gt_neg_10) | (roc_9_4h_gt_neg_10))
# 4h & 1d down move, 4h downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (roc_9_1d > -30.0))
# 4h down move, 4h still high
& ((rsi_3_4h_gt_10) | (aroonu_14_4h_lt_50))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50) | (roc_9_1d > -30.0))
# 4h down move, 4h still not low enough, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_20) | (roc_9_1d > -30.0))
# 4h down move, 1h still high
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_50) | (roc_9_1d > -30.0))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 1d downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_70) | roc_9_1d_lt_50)
# 4h & 1d down move, 1h high
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_90))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 1d high, 1d downtrend
& ((rsi_3_4h_gt_35) | (stochrsi_k_1d_lt_60) | (roc_9_1d_gt_neg_30))
# 4h down move, 1d high, 1d downtrend
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_15))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 1d down move, 4h high, 1d downtrend
& ((rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_70))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_35) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_40) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_80))
# 4h downtrend, 1h & 4h high
& ((cmf_20_4h_gt_neg_0_30) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 15m still high, 1h & 4h overbought
& ((aroonu_14_15m_lt_50) | (roc_9_1h_lt_100) | (roc_9_4h_lt_100))
# 15m & 1d high, 1d overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h still high, 4h & 1d downtrend
& ((aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_40))
# 1h & 4h high, 1d downtrend
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1d_gt_neg_20))
# 1h & 4h high, 1d overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1d_lt_20))
# 1h & 1d high, 1d overbought
& (aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_200))
# 1h high, 4h downtrend, 1d overbought
& (aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_40) | (roc_9_1d_lt_100))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_30))
# 1h high, 1d downtrend
& (aroonu_14_1h_lt_80 | (roc_9_1d_gt_neg_60))
# 1h high, 1h & 4h overbought
& ((aroonu_14_1h_lt_100) | (roc_9_1h_lt_100) | (roc_9_4h_lt_100))
# 4h & 1d high, 1d overbought
& ((aroonu_14_4h_lt_60) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_70))
# 4h high, 1h & 4h overbought
& ((aroonu_14_4h_lt_85) | (roc_9_1h_lt_80) | (roc_9_4h_lt_80))
# 4h high, 1h downtrend, 4h overbought
& ((aroonu_14_4h_lt_90) | (roc_9_1h_gt_neg_40) | (roc_9_4h_lt_100))
# 4h & 1d high, 4h overbought
& ((aroonu_14_4h_lt_90) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_100))
# 4h high, 1h & 4h overbought
& ((aroonu_14_4h_lt_90) | (roc_9_1h_lt_10) | (roc_9_4h_lt_20))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_30))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_40))
# 1d high, 1h & 4h downtrend
& (aroonu_14_1d_lt_100 | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_20) | (roc_9_1d_lt_100))
# 1h high, 1d overbought
& ((stochrsi_k_1h_lt_70) | (roc_9_1d_lt_40))
# 1h high, 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_80))
# 1h high, 4h & 1d downtrend
& ((stochrsi_k_1h < 85.0) | (roc_9_4h_gt_neg_70) | (roc_9_1d_gt_neg_70))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_1h_lt_40) | (roc_9_4h_lt_100))
# 1d high, 4h & 1d overbought
& ((stochrsi_k_1d_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_lt_100))
# 1h & 4h overbought, 1d downtrend
& ((roc_9_1h_lt_40) | (roc_9_4h_lt_50) | (roc_9_1d_gt_neg_30))
# big drop in last hour, 15m high
& ((close > (close_max_12 * 0.60)) | (aroonu_14_15m_lt_70))
# big drop in last hour, 4h high
& ((close > (close_max_12 * 0.60)) | (aroonu_14_4h_lt_70))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(rsi_14 < 40.0)
& (mfi_14 < 40.0)
& (aroonu_14_lt_25)
& (ema_26 > ema_12)
& ((ema_26 - ema_12) > (open_rate * 0.024))
& ((ema_26_shift.shift() - ema_12_shift.shift()) > (open_rate / 100.0))
& (close < (ema_20 * 0.960))
& (close < (bbl_20_2_0 * 0.999))
)
# Condition #44 - Quick mode (Long).
if long_entry_condition_index == 44:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
# long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 1h & 4h down move
((rsi_3_gt_3) | (rsi_3_1h_gt_15) | (rsi_3_4h_gt_15))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_3) | (rsi_3_4h_gt_10))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_3) | (aroonu_14_1h_lt_60))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (rsi_3_4h_gt_10))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (roc_9_1d_gt_neg_30))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_100))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | aroonu_14_1h_lt_80)
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_40))
# 15m & 4h down move, 15m downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (roc_9_15m > -30.0))
# 15m & 4h down move, 1h downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_40) | (stochrsi_k_1h_lt_40))
# 15m down move, 1h still high, 1d overbought
& ((rsi_3_15m_gt_3) | (aroonu_14_1h_lt_40) | (roc_9_1d_lt_70))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_3) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_100))
# 15m down move, 1h high
& ((rsi_3_15m_gt_3) | (stochrsi_k_1h_lt_70))
# 15m down move, 4h high, 15m downtrend
& ((rsi_3_15m_gt_3) | (stochrsi_k_4h_lt_70) | (roc_9_15m > -30.0))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 1h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (roc_9_1h_gt_neg_20))
# 14m & 1h & 4h down move, 4h & 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_100))
# 15m & 4h down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_30))
# 15m down move, 4h overbought
& ((rsi_3_15m_gt_10) | (roc_9_4h_lt_30))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_75))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_45) | (aroonu_14_4h_lt_90))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_100))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | (aroonu_14_1h_lt_20))
# 1h & 4h down move
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_5))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_60))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_20) | (aroonu_14_1d_lt_60))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_20) | (stochrsi_k_4h_lt_60))
# 1h & 4h down move, 1h & 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_40) | (aroonu_14_4h_lt_40))
# 1h down move, 1h & 4h still high
& ((rsi_3_1h_gt_3) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_50))
# 1h down move, 1h still high, 1h downtrend
& ((rsi_3_1h_gt_3) | (aroonu_14_1h_lt_50) | (roc_9_1h_gt_neg_20))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_50) | (roc_9_1h_gt_neg_15))
# 1h downtrend, 4h high
& ((rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_70))
# 1h down move, 1h & 4h downtrend
& ((rsi_3_1h_gt_3) | (roc_9_1h_gt_neg_20) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_50))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_90))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | (rsi_14_4h_lt_40))
# 1h & 1d down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_1d_gt_5) | (roc_9_1d_gt_neg_20))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_70))
# 1h down move, 1h high
& ((rsi_3_1h_gt_5) | (aroonu_14_1h_lt_60))
# 1h down move, 4h high
& ((rsi_3_1h_gt_5) | aroonu_14_4h_lt_70)
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_5) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_25))
# 1h down move, 1d overbought
& ((rsi_3_1h_gt_5) | (roc_9_1d_lt_100))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (roc_9_1h_gt_neg_25))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_60) | (aroonu_14_1h_lt_70))
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_10) | (aroonu_14_4h_lt_40))
# 1h & 1d down move, 1h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (aroonu_14_1h_lt_50))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_40) | (aroonu_14_1h_lt_70))
# 1h down move, 1h still high, 4h downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_30))
# 1h down move, 1h still high, 1d high
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_50) | (aroonu_14_1d_lt_90))
# 1h down move, 1h high, 1h downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_60) | (roc_9_1h_gt_neg_10))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_70) | (roc_9_1d > -30.0))
# 1h down move, 1h high
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_80))
# 1h down move, 4h still high, 15m downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_50) | (cmf_20_15m_gt_neg_0_40))
# 1h down move, 4h still high, 4h downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_50) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_50) | (roc_9_1d > -30.0))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_60) | (aroonu_14_1d_lt_100))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_90) | (roc_9_1d_lt_100))
# 1h down move, 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_100))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_60))
# 1h down move, 4h overbought
& ((rsi_3_1h_gt_10) | (roc_9_4h_lt_10))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_20))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_45) | (aroonu_14_4h_lt_80))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_1d_gt_neg_40))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_60) | (aroonu_14_1d_lt_85))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_60) | (roc_9_1d > -30.0))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_60) | roc_9_1d_lt_50)
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70) | (roc_9_4h_gt_neg_10))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_100))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_100))
# 1h down move, 1h & 4h downtrend
& ((rsi_3_1h_gt_15) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 1h down move, 1h & 4h overbought
& ((rsi_3_1h_gt_15) | (roc_9_4h_lt_10) | (roc_9_1d_lt_50))
# 1h down move, 1h & 4h overbought
& ((rsi_3_1h_gt_15) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_90))
# 1h down move, 1h still high, 4h downtrend
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h high, 1d downtrend
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_40))
# 1h down move, 4h & 1d downtrend
& (rsi_3_1h_gt_20 | (roc_9_4h_gt_neg_30) | (roc_9_1d_gt_neg_40))
# 1h & 4h & 1d down move, 1d downtrend, 1d high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_35) | (rsi_3_1d_gt_45) | (cmf_20_1d_gt_neg_0_30) | (aroonu_14_1d_lt_70))
# 1h & 4h down ove, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_45) | (aroonu_14_4h_lt_90))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_70) | (aroonu_14_1d_lt_80))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_80) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_100))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 1h down move, 1h downtrend, 4h overbought
& ((rsi_3_1h_gt_25) | (roc_9_1h_gt_neg_20) | (roc_9_4h_lt_20))
# 1h down move, 1d overbought
& ((rsi_3_1h_gt_25) | (roc_9_1d_lt_200))
# 1h down move, 4h high
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_100))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 4h down move, 4h still high, 1d high
& ((rsi_3_4h_gt_3) | (aroonu_14_4h_lt_50) | (aroonu_14_1d_lt_100))
# 4h down move, 1d still high, 4h downtrend
& ((rsi_3_4h_gt_3) | (stochrsi_k_1d_lt_50) | (roc_9_4h_gt_neg_30))
# 4h down move, 1d overbought
& ((rsi_3_4h_gt_3) | (roc_9_1d_lt_200))
# 4h down move, 1h still high
& ((rsi_3_4h_gt_5) | (stochrsi_k_1h_lt_40))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_5) | (roc_9_1h_gt_neg_15) | (roc_9_4h_gt_neg_20))
# 4h down move, 4h downtrend
& ((rsi_3_4h_gt_5) | (roc_9_4h_gt_neg_40))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_80))
# 4h down move, 1d high, 4h downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_20))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h down move, 4h still not low enough, 1d overbought
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30) | roc_9_1d_lt_50)
# 4h down move, 4h high
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_60))
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40) | (roc_9_1d_lt_40))
# 15m down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_15) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_80))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_30) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 4h down move, 1h high & overbought
& ((rsi_3_4h_gt_35) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_100))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_40))
# 4h down move, 4h high
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_70))
# 4h down move, 4h overbought
& ((rsi_3_4h_gt_50) | (roc_9_4h_lt_60))
# 4h downtrend, 4h high
& ((cmf_20_4h_gt_neg_0_50) | aroonu_14_4h_lt_70)
# 1h & 1d high, 4h downtrend
& ((aroonu_14_1h_lt_40) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_20))
# 1h still high, 1h & 4h downtrend
& ((aroonu_14_1h_lt_40) | (roc_9_1h_gt_neg_20) | (roc_9_4h_gt_neg_30))
# 1h & 4h high, 1d overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1d_lt_20))
# 1h high, 4h & 1d downtrend
& (aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_20) | roc_9_1d_gt_neg_50)
# 1h high, 4h downtrend
& (aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_40))
# 1h & 1d high, 1d overbought
& (aroonu_14_1h_lt_80 | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_80))
# 1h & 1d high, 1h downtrend
& (aroonu_14_1h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_1h_gt_neg_20))
# 4h & 1d high, 1h downtrend
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_1h_gt_neg_30))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_40))
# 4h high, 1h downtrend
& (aroonu_14_4h_lt_80 | (roc_9_1h_gt_neg_40))
# 4h high & overbought
& (aroonu_14_4h_lt_80 | (roc_9_4h_lt_100))
# 4h high, 1d downtrend
& (aroonu_14_4h_lt_80 | (roc_9_1d > -30.0))
# 1d still high, 1d downtrend
& ((aroonu_14_1d_lt_50) | (roc_9_1d_gt_neg_30))
# 1d high, 15m downtrend
& ((aroonu_14_1d_lt_70) | (roc_9_15m > -50.0))
# 1d high, 1h downtrend
& ((aroonu_14_1d_lt_70) | (roc_9_1h > -70.0))
# 1d high, 4h downtrend
& ((aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_70))
# 1d high, 4h downtrend
& ((aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_40))
# 1d high & overbought
& ((aroonu_14_1d_lt_90) | (roc_9_1d_lt_200))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_20) | (roc_9_1d_lt_80))
# 1h still high, 4h & 1d downtrend
& ((stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_20) | roc_9_1d_gt_neg_50)
# 1h high, 15m downtrend
& ((stochrsi_k_1h_lt_70) | (roc_9_15m > -30.0))
# 4h high, 1d downtrend
& ((stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_70))
# 1d high, 1h downtrend
& ((stochrsi_k_1d_lt_90) | (roc_9_1h_gt_neg_20))
# 1d high, 1d downtrend
& ((stochrsi_k_1d_lt_60) | (roc_9_1d_gt_neg_30))
# 15m downtrend, 1d overbought
& ((roc_9_15m > -60.0) | (roc_9_1d_lt_200))
# 1h downtrend, 1d overbought
& ((roc_9_1h > -60.0) | (roc_9_1d_lt_200))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(rsi_3_lt_40)
& (rsi_3_15m_lt_50)
& (aroonu_14_15m_lt_25)
& (stochrsi_k_15m_lt_20)
& (df["EMA_26_15m"] > df["EMA_12_15m"])
& ((df["EMA_26_15m"] - df["EMA_12_15m"]) > (df["open_15m"] * 0.050))
& ((df["EMA_26_15m"].shift() - df["EMA_12_15m"].shift()) > (df["open_15m"] / 100.0))
)
# Condition #45 - Quick mode (Long).
if long_entry_condition_index == 45:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
# 5m & 15m down move, 4h still high
long_entry_logic.append(
((rsi_3_gt_3) | (rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_50))
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_40))
# 5m & 4h & 1d down move
& ((rsi_3_gt_3) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_20))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_60))
# 15m & 1h & 4h down move, 1d high & overbought
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_35) | (rsi_3_4h_gt_45) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_20))
# 15m & 4h down move
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10))
# 15m & 4h & 1d down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_25) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_30) | (rsi_14_4h < 35.0))
# 15m down move, 4h still high, 15m downtrend
& ((rsi_3_15m_gt_3) | (aroonu_14_4h_lt_40) | (cmf_20_15m_gt_neg_0_35))
# 15m & 1h down move
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_80))
# 15m down move, 1h still not low enough
& ((rsi_3_15m_gt_5) | (aroonu_14_1h_lt_30))
# 15m down move, 4h high
& ((rsi_3_15m_gt_5) | (aroonu_14_4h_lt_90))
# 15m & 1h & 1d down move
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (rsi_3_1d_gt_10))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (roc_9_1d_lt_30))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_45) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_65) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_80))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_40))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_10) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_10) | aroonu_14_1h_lt_70 | (roc_9_1h_lt_10))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_10) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_20))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_75) | aroonu_14_1d_lt_100)
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_10) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_10))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | aroonu_14_4h_lt_70)
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | aroonu_14_1h_lt_70 | (stochrsi_k_4h_lt_90))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_15) | aroonu_14_4h_lt_70 | roc_9_1d_lt_50)
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_40) | (roc_9_1d_lt_80))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_25) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_10))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | aroonu_14_1h_lt_70)
# 1h down move, 4h still not low enough
& ((rsi_3_1h_gt_3) | (aroonu_14_4h_lt_30))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | (aroonu_14_1h_lt_20))
# 1h down move, 1h still not low enough
& ((rsi_3_1h_gt_5) | (aroonu_14_1h_lt_30))
# 1h down move, 1h still not low enough
& ((rsi_3_1h_gt_5) | (stochrsi_k_1h < 25.0))
# 1h & 4h down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_60))
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_10) | (aroonu_14_4h_lt_40))
# 1h & 1d down move, 5m moving down
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (roc_2 > -0.0))
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_30) | (aroonu_14_4h_lt_50))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_30) | (stochrsi_k_1d_lt_70))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_30))
# 1h down move, 1h still not low enough, 1d high
& ((rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_20) | (aroonu_14_1d_lt_85))
# 1h down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (stochrsi_k_1h < 25.0))
# 1h down move, 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_85))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_70) | roc_9_1d_lt_50)
# 1h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_70))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_30))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (aroonu_14_1d_lt_100))
# 1h down move, 1h still high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h still high
& ((rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_30))
# 1h & 4h down move, 1d overbought
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (roc_9_1d_lt_20))
# 1h down move, 4h high
& (rsi_3_1h_gt_20 | (aroonu_14_4h_lt_90))
# 1h down move, 4h still high
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_60))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_70)
# 1h down move, 1h high
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_70)
# 1h down move, 4h high
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80))
# 1h & 1d down move, 1h still high
& ((rsi_3_1h_gt_30) | (rsi_3_1d > 50.0) | (stochrsi_k_1h_lt_50))
# 1h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_14_4h_lt_80))
# 14 down move, 1h high
& ((rsi_3_1h_gt_30) | aroonu_14_1h_lt_80)
# 1h down move, 4h high
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_80)
# 1h down move, 4h high
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_80))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_80) | (stochrsi_k_1d_lt_80))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | roc_9_1d_lt_50)
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_45) | aroonu_14_1h_lt_70 | (aroonu_14_4h_lt_90))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_60) | (stochrsi_k_1h_lt_70) | (aroonu_14_4h_lt_90))
# 4h down move, 1d high
& ((rsi_3_4h_gt_5) | aroonu_14_1d_lt_100)
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50))
# 4h downmove, 4h still high
& ((rsi_3_4h_gt_10) | (aroonu_14_4h_lt_40))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h & 1d downtrend
& ((rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_35) | (rsi_14_1d_lt_50))
# 4h down move, 1h still not low enough
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_30))
# 4h & 1d down move, 1d high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_80))
# 4h down move, 4h still high, 1d high
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50) | aroonu_14_1d_lt_100)
# 4h down move, 1d high
& ((rsi_3_4h_gt_25) | (stochrsi_k_1d_lt_90))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_25) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 4h down move, 1h high
& ((rsi_3_4h_gt_40) | (stochrsi_k_1h_lt_70))
# 4h down move, 4h still high
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_50))
# 4h down move, 1h high
& ((rsi_3_4h_gt_60) | (stochrsi_k_1h_lt_80))
# 4h down move, 4h high
& ((rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_80))
# 1d down move, 1h still not low enough
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_30))
# 1d down move, 1h still not low enough
& ((rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_30))
# 1d down move, 4h still high
& ((rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_50))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_35) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 15m still high, 1h & 4h high
& ((rsi_14_15m_lt_40) | aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_20))
# 4h high, 1d overbought
& (aroonu_14_4h_lt_70 | (roc_9_1d_lt_80))
# 4h high, 1h & 1d downtrend
& (aroonu_14_4h_lt_70 | (roc_9_1h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h high, 1h & 4h overbought
& (aroonu_14_4h_lt_80 | (roc_9_1h_lt_10) | (roc_9_4h_lt_10))
# 4h high & overbought
& ((aroonu_14_4h_lt_90) | (roc_9_4h_lt_80))
# 1d high, 4h & 1d downtrend
& ((aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 1h high, 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_80))
# 4h high, 1h & 1d downtrend
& ((stochrsi_k_4h_lt_70) | (roc_9_1h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_1h_lt_10) | (roc_9_4h_lt_10))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30) | (roc_9_1d_lt_30))
# 1d top wick, 4h still high
& ((top_wick_pct_1d < 40.0) | (aroonu_14_4h_lt_50))
# pump, 4h still high
& ((((high_max_24_4h - low_min_24_4h) / low_min_24_4h) < 2.0) | (stochrsi_k_4h_lt_50))
# pump, drop but not yet near the previous lows
& (
(((high_max_24_4h - low_min_24_4h) / low_min_24_4h) < 2.0)
| (close > (high_max_6_4h * 0.75))
| (close < (low_min_24_4h * 1.25))
)
# pump, drop but not yet near the previous lows
& (
(((high_max_12_1d - low_min_12_1d) / low_min_12_1d) < 2.0)
| (close > (high_max_24_4h * 0.70))
| (close < (low_min_12_1d * 1.25))
)
# big drop in last hour
& (close > (close_max_12 * 0.50))
# big drop in last hour, 1d down move
& ((close > (close_max_12 * 0.80)) | (rsi_3_1d_gt_15))
# big drop in the last 12 hours, 4h still high
& ((close > (df["high_max_12_1h"] * 0.50)) | (aroonu_14_4h_lt_50))
# big drop in the last 6 days, 1h still high
& ((close > (high_max_6_1d * 0.25)) | (aroonu_14_1h_lt_50))
# big drop in the last 12 days, 1h down move
& ((close > (high_max_12_1d * 0.45)) | (rsi_3_1h_gt_5))
# big drop in the last 12 days, 4h down move
& ((close > (high_max_12_1d * 0.40)) | (rsi_3_4h_gt_15))
# big drop in the last 12 days, 1h still high
& ((close > (high_max_12_1d * 0.25)) | (aroonu_14_1h_lt_75))
# big drop in the last 20 days, 1h down move
& ((close > (high_max_20_1d * 0.35)) | (rsi_3_1h_gt_10))
# big drop in the last 20 days, 1h down move
& ((close > (high_max_20_1d * 0.25)) | (rsi_3_1h_gt_15))
# big drop in the last 20 days, 1h down move
& ((close > (high_max_20_1d * 0.10)) | rsi_3_1h_gt_20)
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# big drop in the last 30 days, 4h down move, 4h still high
& ((close > (high_max_30_1d * 0.25)) | (rsi_3_4h_gt_45) | (rsi_14_4h_lt_40))
)
# Logic
long_entry_logic.append(
(rsi_3_lt_50)
& (aroonu_14_15m_lt_25)
& (stochrsi_k_15m_lt_20)
& (df["close_15m"] < (df["EMA_20_15m"] * 0.924))
)
# Condition #46 - Quick mode (Long).
if long_entry_condition_index == 46:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
# 5m & 1h down move
long_entry_logic.append(
((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_40))
# 15m & 4h down move
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_40))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_30))
# 15m & 1h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (rsi_14_4h_lt_30))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (rsi_3_4h_gt_20))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_20))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_90))
# 15m down move, 4h still high, 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_50) | (aroonu_14_1d_lt_90))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_20) | (aroonu_14_4h_lt_60))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_40))
# 15m & 1h & 1d down move, 1h still not low enough, 1d high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (rsi_3_1d_gt_30) | (rsi_14_1h < 30.0) | (aroonu_14_1d_lt_80))
# 15m & 1h down move, 4h still high, 4h overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (aroonu_14_4h_lt_50) | (roc_9_4h_lt_10))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | aroonu_14_4h_lt_70)
# 15m down move, 1h & 4h still high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_40) | (stochrsi_k_4h_lt_50))
# 15m & 1h & 4h down move, 1d high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_45) | (aroonu_14_4h_lt_85))
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | (aroonu_14_15m < 15.0))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_35) | (aroonu_14_1h_lt_80))
# 15m & 1h & 1d down move, 1h high
& ((rsi_3_15m_gt_35) | (rsi_3_1h_gt_35) | (rsi_3_1d_gt_35) | (aroonu_14_1h_lt_70))
# 1h down move, 1h still not low enough, 1d high
& ((rsi_3_1h_gt_3) | (aroonu_14_1h_lt_20) | (aroonu_14_1d_lt_90))
# 1h & 4h down move
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_30))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_80))
# 1h down move, 4h high
& ((rsi_3_1h_gt_5) | aroonu_14_4h_lt_70)
# 1h down move, 1d still high
& ((rsi_3_1h_gt_5) | (stochrsi_k_1d_lt_50))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (rsi_14_4h_lt_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_30))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (rsi_3_1d_gt_30))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_35) | roc_9_1d_lt_50)
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_45) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_40))
# 1h & 1d down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_4h_lt_30))
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_30) | (aroonu_14_4h_lt_50))
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_45) | (rsi_14_4h_lt_40))
# 1h down move, 1h still high
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_50))
# 1h down move, 4h still high, 1d high
& ((rsi_3_1h_gt_10) | (aroonu_14_4h_lt_60) | (aroonu_14_1d_lt_90))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_30))
# 1h & 4h down move, 1d stll high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_14_1d_lt_40))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_30))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | roc_9_1d_lt_50)
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_25) | (rsi_3_1d_gt_25))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 1h & 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | (rsi_14_1h_lt_40) | (rsi_14_4h_lt_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_40))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_15) | (aroonu_14_1d_lt_50))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40) | roc_9_1d_lt_50)
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_30))
# 1h down move, 4h high
& ((rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_70))
# 1h & 4h down move, 1h still not low enough
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_30))
# 1h & 4h down move, 4h still high
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (rsi_14_4h_lt_40))
# 1h & 4h down move, 4h still high
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50))
# 1h & 4h down move, 1d downtrend
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (roc_9_1d_gt_neg_30))
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_35) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_45) | (aroonu_14_4h < 65.0))
# 1h & 1d down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_70))
# 1h down move, 1h still high, 1d high
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_40) | (aroonu_14_1d_lt_90))
# 4h down move, 4h still high, 1d high
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50) | aroonu_14_1d_lt_100)
# 1h down move, 4h still high, 1d downtrend
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_25))
# 1h down move, 4h & 1d high
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_50) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_70)
# 1h down move, 15m still not low enough, 4h high
& ((rsi_3_1h_gt_25) | (rsi_14_15m_lt_30) | (stochrsi_k_4h_lt_60))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_50))
# 1h down move, 1h high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_60))
# 1h down move, 4h high
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_80))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_30) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_80))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_100))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_100 | (roc_9_1d > -30.0))
# 1h down move, 4h high
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_90))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_55) | (aroonu_14_4h_lt_80))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_90))
# 1h down move, 4h high, 4h downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_70) | (cmf_20_4h_gt_neg_0_30))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_40))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_70) | (roc_9_1d_lt_20))
# 1h & 1d down move, 1d downtrend, 1d high
& ((rsi_3_1h_gt_45) | (rsi_3_1d_gt_55) | (cmf_20_1d_gt_neg_0_30) | (aroonu_14_1d_lt_80))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_50) | (aroonu_14_1h_lt_70) | (aroonu_14_4h_lt_100))
# 1h down move, 1h overbought
& ((rsi_3_1h_gt_50) | (roc_9_1h_lt_40))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_70))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_5) | (roc_9_1h_gt_neg_15) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_20))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_10) | (rsi_3_1d > 50.0) | (aroonu_14_1d_lt_90))
# 4h down move, 4h & 1d still high
& ((rsi_3_4h_gt_10) | (aroonu_14_4h_lt_50) | (aroonu_14_1d_lt_50))
# 4h & 1d down move, 1d low
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | (cmf_20_1d_gt_neg_0_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_50))
# 4h & 1d down move, 1d overbought
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_50) | (roc_9_1d_lt_40))
# 4h & 1d down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_55) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_30))
# 4h down move, 4h still not low enough, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h & 1d downtrend
& (rsi_3_4h_gt_20 | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h high
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_90))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_35) | (aroonu_14_4h_lt_60) | (stochrsi_k_1d_lt_90))
# 4h down move, 1d high, 4h overbought
& ((rsi_3_4h_gt_45) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_10))
# 4h down move, 4h overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_40))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_10) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 15m down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_40))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_1d_gt_neg_30))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_20))
# 4h high, 1h overbought
& (aroonu_14_4h_lt_80 | (roc_9_1h_lt_40))
# 4h high, 4h overbought
& (aroonu_14_4h_lt_80 | (roc_9_4h_lt_40))
# 4h high, 1h overbought
& ((stochrsi_k_4h_lt_70) | (roc_9_1h_lt_40))
# 4h high, 4h overbought
& ((stochrsi_k_4h_lt_70) | (roc_9_4h_lt_40))
# 4h high, 4h overbought, 1d downtrend
& ((stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_gt_neg_20))
# 1d green, 4h down move, 4h still high
& ((change_pct_1d_lt_40) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_40))
# 4h top wick, 1h down move, 1h still high
& ((df["top_wick_pct_4h"] < 20.0) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_50))
# pump, drop but not yet near the previous lows
& (
(((high_max_6_1d - df["low_min_6_1d"]) / df["low_min_6_1d"]) < 2.0)
| (close > (high_max_12_4h * 0.50))
| (close < (low_min_24_4h * 1.05))
)
# 1d overbought, drop but not yet near the previous lows
& (roc_9_1d_lt_50 | (close > (high_max_6_1d * 0.70)) | (close < (low_min_12_1d * 1.25)))
# 1d overbought, drop but not yet near the previous lows
& (
(((high_max_12_1d - low_min_12_1d) / low_min_12_1d) < 2.5)
| (close > (high_max_6_1d * 0.60))
| (close < (low_min_12_1d * 1.25))
)
# big drop in the last 2 days, 1d down move
& ((close > (high_max_12_4h * 0.30)) | (rsi_3_1d_gt_30))
# big drop in the last 12 days, 1h down move
& ((close > (high_max_12_1d * 0.30)) | rsi_3_1h_gt_20)
# big drop in the last 12 days, 4h still high
& ((close > (high_max_12_1d * 0.40)) | (stochrsi_k_4h_lt_50))
# big drop in the last 20 days, 1h down move
& ((close > (high_max_20_1d * 0.40)) | (rsi_3_1h_gt_10))
# big drop in the last 20 days, 4h down move
& ((close > (high_max_20_1d * 0.10)) | (rsi_3_4h_gt_25))
# big drop in the last 30 days, 4h down move
& ((close > (high_max_30_1d * 0.40)) | (rsi_3_4h_gt_15))
# big drop in the last 30 days, 4h still not low enough
& ((close > (high_max_30_1d * 0.25)) | (stochrsi_k_4h_lt_30))
)
# Logic
long_entry_logic.append(
(rsi_3_lt_40)
& (rsi_3_15m_lt_50)
& (df["WILLR_14_15m"] < -50.0)
& (aroonu_14_15m_lt_25)
& (stochrsi_k_15m_lt_20)
& (willr_84_1h < -70.0)
& (stochrsi_k_1h_lt_20)
& (bbb_20_2_0_1h > 12.0)
& (close_max_48 >= (close * 1.10))
)
# Condition #61 - Rebuy mode (Long).
if long_entry_condition_index == 61:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 1h down move, 1h still not low enough
((rsi_3_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30))
# 5m & 1h down move, 1d high
& ((rsi_3_gt_3) | rsi_3_1h_gt_20 | aroonu_14_1d_lt_100)
# 5m & 4h down move, 4h high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_25) | aroonu_14_4h_lt_70)
# 5m down move, 1d high & overbought
& ((rsi_3_gt_3) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 15m & 1h & 4h down move
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (rsi_3_4h_gt_10))
# 15m & 1h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (rsi_14_4h_lt_40))
# 15m & 1h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 4h still not low enough
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_5) | (stochrsi_k_4h_lt_20))
# 15m & 1h & 4h down move
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_3))
# 15m & 1h down move, 1d still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (rsi_14_1d_lt_50))
# 15m & 1h down move, 4h downtrend
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (cmf_20_4h_gt_neg_0_30))
# 15m & 1h down move, 1d still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (stochrsi_k_1d_lt_50))
# 15m & 1h down move, 1d overbought
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (roc_9_1d_lt_40))
# 15m & 1h down move, 1d overbought
& (rsi_3_15m_gt_3 | rsi_3_1h_gt_20 | roc_9_1d_lt_50)
# 15m & 1h down move, 1d high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_30) | (aroonu_14_1d_lt_80))
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_45) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_60) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_40) | (rsi_14_4h_lt_40))
# 15m down move, 15m downtrend. 4h high
& (rsi_3_15m_gt_3 | (cmf_20_15m_gt_neg_0_50) | (aroonu_14_4h_lt_60))
# 15m down move, 15m still not low enough
& (rsi_3_15m_gt_3 | (aroonu_14_15m_lt_30))
# 15m down move, 4h high
& (rsi_3_15m_gt_3 | aroonu_14_4h_lt_80)
# 15m down move, 4h & 1d downtrend
& (rsi_3_15m_gt_3 | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | rsi_3_1h_gt_20 | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 1h downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (roc_9_1d_lt_70))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_5) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_80))
# 15m down move, 15m still low, 4h still high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_20) | (aroonu_14_4h_lt_50))
# 15m down move, 15m still high
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_50))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_5) | aroonu_14_1h_lt_70 | (roc_9_1h_lt_10))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_5) | (roc_9_1h_lt_10) | (roc_9_1d_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_50))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (roc_9_1d_lt_80))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (aroonu_14_15m_lt_50))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_4h_lt_50))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 4h still high, 1d high & overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_10))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_70))
# 15m & 4h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_55) | (roc_9_4h_lt_50))
# 15m down move, 15m still not low enough, 1d downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_30) | (roc_9_1d_gt_neg_30))
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_50) | (roc_9_1d_lt_30))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_60) | aroonu_14_1d_lt_100)
# 15m down move, 1d high, 1d downtrend
& ((rsi_3_15m_gt_10) | (aroonu_14_1d_lt_85) | (cmf_20_1d_gt_neg_0_40))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_20))
# 15m down move, 4h high
& ((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_70))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_10) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_15m_lt_60))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_35) | aroonu_14_1h_lt_80)
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | aroonu_14_1h_lt_80)
# 15m down move, 4h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 1d high, 4h overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_4h_lt_40))
# 15m down move, 1h & 4h overbought
& ((rsi_3_15m_gt_15) | (roc_9_1h_lt_20) | (roc_9_4h_lt_40))
# 15m down move, 4h & 1d downtrend
& ((rsi_3_15m_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_15) | (roc_9_4h_lt_20) | (roc_9_1d_lt_60))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_20) | rsi_3_1h_gt_20 | (aroonu_14_15m_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | rsi_3_1h_gt_20 | aroonu_14_1h_lt_70)
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (aroonu_14_4h_lt_90))
# 15m & 4h down move, 1d high & overbought
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_80))
# 15m down move, 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_90))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_20))
# 15m down move, 1h high
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_80))
# 15m down move, 4h high
& ((rsi_3_15m_gt_20) | (stochrsi_k_4h_lt_90))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1h_lt_100) | (roc_9_1d_lt_20))
# 15m & 1h & 4h down move, 1d high, 4h still not low enough
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_100) | (stochrsi_k_4h_lt_30))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_50) | (aroonu_14_1h_lt_100))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_50) | aroonu_14_4h_lt_100)
# 15m down move, 15m high, 4h high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_60) | (stochrsi_k_4h_lt_70))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_30) | (stochrsi_k_1h_lt_70) | (stochrsi_k_4h_lt_80))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_5) | (stochrsi_k_4h_lt_20))
# 1h & 4h down move, 15m stil high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_50))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_40))
# 1h down move, 1h still not low enough
& ((rsi_3_1h_gt_3) | (aroonu_14_1h_lt_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (roc_9_1d_lt_40))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_20) | (stochrsi_k_4h_lt_30))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_70))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_5) | (aroonu_14_4h_lt_60) | (roc_9_1d_lt_10))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_30))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_100) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_20))
# 1h & 4h down move, 15m downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_15m > -15.0))
# 1h & 3h down move, 4h downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_80))
# 1h down move, 15m still high, 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_15m_lt_40) | (stochrsi_k_4h_lt_90))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_10))
# 1h down move, 4h still high, 4d downtrend
& ((rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_50) | roc_9_1d_gt_neg_50)
# 1h down move, 4h downtrend, 1d overbought
& ((rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_10) | (roc_9_1d_lt_40))
# 1h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (roc_9_1d_lt_100))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_80))
# 1h down move, 1d downtrend, 1d high
& ((rsi_3_1h_gt_15) | (cmf_20_1d_gt_neg_0_30) | (stochrsi_k_1d_lt_80))
# 1h down move, 1h still high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_60) | roc_9_1d_lt_50)
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_15) | aroonu_14_4h_lt_70 | (aroonu_14_1d_lt_90))
# 1h & 4h down move, 1d overbought
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (roc_9_1d_lt_20))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_30) | aroonu_14_4h_lt_80)
# 1h down move, 1h high, 4h overbought
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_70 | (roc_9_4h_lt_10))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_40) | (roc_9_1d_lt_100))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_90))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_75))
# 1h & 4h down move, 15m & 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_70))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_80 | (roc_9_4h_gt_neg_40))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_200))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_20))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_35) | (roc_9_4h_lt_20) | (roc_9_1d_lt_80))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_70 | (aroonu_14_4h_lt_90))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_85) | (roc_9_1d_lt_80))
# 1h down move, 1h high, 4h downtrend
& ((rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80) | (roc_9_4h_gt_neg_20))
# 1h down move, 1h high, 1h overbought
& ((rsi_3_1h_gt_50) | aroonu_14_1h_lt_70 | (roc_9_1h_lt_25))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_60))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_60) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 4h & 1d down move, 15m still high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (stochrsi_k_15m_lt_40))
# 4h & 1d down move, 1h still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_30))
# 4h & 1d down move, 1d still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_30))
# 4h down move, 1d high
& ((rsi_3_4h_gt_3) | (aroonu_14_1d_lt_90))
# 4h down move, 1h still high, 4h downtrend
& ((rsi_3_4h_gt_3) | (stochrsi_k_1h_lt_50) | (roc_9_4h_gt_neg_30))
# 4h down move, 1d high
& ((rsi_3_4h_gt_3) | (stochrsi_k_1d_lt_90))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_3) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h down move, 1d overbought
& ((rsi_3_4h_gt_3) | (roc_9_1d_lt_40))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (stochrsi_k_1d_lt_40))
# 4h down move, 4h downtrend, 4h still high
& ((rsi_3_4h_gt_5) | (cmf_20_4h_gt_neg_0_20) | (aroonu_14_4h_lt_40))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (roc_9_1d_gt_neg_40))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_60) | (roc_9_1d_gt_neg_40))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_60))
# 4h down move, 4h high, 1h downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_60) | (roc_9_1h_gt_neg_20))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_15) | aroonu_14_4h_lt_70 | (aroonu_14_1d_lt_70))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | roc_9_1d_lt_50)
# 4h down move, 1h still not low enough, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_80 | roc_9_1d_lt_50)
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_40) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_1h_lt_85) | roc_9_1d_lt_50)
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_10))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_30))
# 1d down move, 1h still high, 1d downtrend
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_50) | (roc_9_1d_gt_neg_30))
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_10) | aroonu_14_1h_lt_80 | (roc_9_1d_gt_neg_10))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_10) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_40))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_35) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 1d downtrend, 1d high & overbought
& ((cmf_20_1d_gt_neg_0_30) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_100))
# 15m high, 1h high & overbought
& ((aroonu_14_15m_lt_60) | (aroonu_14_1h_lt_85) | (roc_9_1h_lt_10))
# 1h high, 4h high, 1h overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1h_lt_20))
# 1h & 1d high, 1h overbought
& (aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_70) | (roc_9_1h_lt_20))
# 1h & 4h high, 1d downtrend
& ((aroonu_14_1h_lt_85) | aroonu_14_4h_lt_100 | (roc_9_1d_gt_neg_80))
# 4h still high, 5m downtrend
& ((aroonu_14_4h_lt_40) | (roc_9 > -40.0))
# 4h high, 4h & 1d overbought
& ((aroonu_14_4h_lt_60) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_30))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | roc_9_1d_lt_50)
# 4h high, 4h & 1d overbought
& (aroonu_14_4h_lt_80 | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1d high, 1h & 4h downtrend
& ((aroonu_14_1d_lt_85) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_50))
# 1d high, 1h & 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_1h_lt_20) | (roc_9_1d_lt_100))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_90) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 1h high, 1d overbought
& ((stochrsi_k_1h_lt_70) | (roc_9_1d_lt_40))
# 4h high, 1h overbought, 1d downtrend
& ((stochrsi_k_4h_lt_80) | (roc_9_1h_lt_40) | (roc_9_1d_gt_neg_70))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_20) | (roc_9_4h_lt_50))
# 1h & 4h overbought
& ((roc_9_1h_lt_100) | (roc_9_4h_lt_100))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(rsi_3_lt_50)
& (aroonu_14_lt_25)
& (stochrsi_k_lt_30)
& (ema_26 > ema_12)
& ((ema_26 - ema_12) > (open_rate * 0.030))
& ((ema_26_shift.shift() - ema_12_shift.shift()) > (open_rate / 100.0))
)
# Condition #62 - Rebuy mode (Long).
if long_entry_condition_index == 62:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 4h down move, 1d high
((rsi_3_gt_3) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_90))
# 5m & 1d down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_20) | (stochrsi_k_15m_lt_40))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_50))
# 5m & 4h down move, 4h still not low enough
& ((rsi_3_gt_5) | (rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_20))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_20))
# 15m & 1h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_14_4h_lt_30))
# 15m & 1h & 4h down move, 1d high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_80))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (rsi_14_4h_lt_50))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_20) | (stochrsi_k_4h_lt_40))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_25) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_3) | (aroonu_14_4h_lt_20))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_3) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_20))
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (stochrsi_k_15m_lt_20))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_40))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_30))
# 15m & 4h down move, 1h downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_lt_20))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (rsi_14_4h_lt_40))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_40))
# 15m & 1h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_15m_lt_70))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_100))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_60))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (aroonu_14_4h_lt_90))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_15m_lt_20))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_70))
# 15m & 4h down move, 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (cmf_20_4h_gt_neg_0_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_40) | (roc_9_1d_lt_200))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_75))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_10) | aroonu_14_4h_lt_70 | (roc_9_1d_gt_neg_25))
# 15m & 1h & 4h & 1d down move, 4h still not low enough
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (rsi_3_4h_gt_35) | (rsi_3_1d_gt_35) | (aroonu_14_4h_lt_30))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_75))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_60))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_40))
# 15m down move, 15m downtrend, 4h high
& ((rsi_3_15m_gt_15) | (cmf_20_15m_gt_neg_0_30) | (aroonu_14_4h_lt_50))
# 15m down move, 15m still high, 4h overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_40) | (roc_9_4h_lt_40))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_15) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 15m down move, 15m still not low enough, 1d overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_15m_lt_30) | (roc_9_1d_lt_80))
# 15m & 4h down move, 15m stil high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_30) | (stochrsi_k_15m_lt_40))
# 15m down move, 15m still not low enough, 1d downtrend
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_25) | roc_9_1d_gt_neg_50)
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_35) | aroonu_14_4h_lt_70)
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_80)
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_40))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 1h down move, 15m still not low enough
& ((rsi_3_1h_gt_3) | (stochrsi_k_15m_lt_20))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_15m_lt_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_4h_lt_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_20))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_20 | (rsi_14_4h_lt_30))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_40))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_15))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_60))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_30))
# 1h & 4h down move, 1h downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_lt_10))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_40))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_30))
# 1h& 1d down move, 1h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_25) | (aroonu_14_1h_lt_40))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_60) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (rsi_14_1d_lt_60))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_70))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_90))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_45) | (roc_9_1d_gt_neg_40))
# 1h & 1d down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_80))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_15) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_100))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 4h & 1d still not low enough, 15m still not low enough
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_20) | (rsi_14_4h_lt_30) | (rsi_14_1d < 30.0) | (stochrsi_k_15m_lt_30))
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_25) | (stochrsi_k_1d_lt_70))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_70))
# 1h & 4h down move, 4h overbought
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_40) | (roc_9_4h_lt_10))
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_45) | aroonu_14_1d_lt_100)
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_80))
# 1h down move, 1h high
& (rsi_3_1h_gt_20 | aroonu_14_1h_lt_70)
# 1h down move, 4h still high, 1d downtrend
& (rsi_3_1h_gt_20 | (aroonu_14_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h high
& (rsi_3_1h_gt_20 | (aroonu_14_4h_lt_85))
# 1h down move, 1h still not low enough, 4h stil high
& (rsi_3_1h_gt_20 | (stochrsi_k_1h_lt_20) | (aroonu_14_4h_lt_40))
# 1h down move, 4h still high, 1d downtrend
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_40))
# 1h down move, 1d high, 4h downtrend
& (rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_80) | (roc_9_4h_gt_neg_20))
# 1h down move, 4h high
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_80))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_1h_lt_20))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | roc_9_1d_lt_50)
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_60))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_60) | aroonu_14_1d_lt_100)
# 1h down move, 4h high, 4h downtrend
& ((rsi_3_1h_gt_25) | aroonu_14_4h_lt_70 | (cmf_20_4h_gt_neg_0_50))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_25) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_10))
# 1h down move, 15m still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_15m_lt_50) | (roc_9_1d_lt_30))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_100))
# 1h & dh down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_85))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_30) | (roc_9_4h_gt_neg_25) | (roc_9_1d_gt_neg_60))
# 1h down move, 4h & 1h overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_30) | (roc_9_1d_lt_40))
# 1h down move, 4h high, 4h downtrend
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | (cmf_20_4h_gt_neg_0_40))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_30))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_30) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_20))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_80))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_10) | (roc_9_1d_lt_30))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_80)
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1d_lt_90) | (roc_9_4h_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_45) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_100))
# 1h down move, 1h overbought
& ((rsi_3_1h_gt_50) | (roc_9_1h_lt_40))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_60) | (roc_9_4h_lt_30) | (roc_9_1d_lt_100))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_40))
# 4h & 1d down move, 4h still not low enough
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (aroonu_14_4h_lt_20))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_70))
# 4h down move, 1h high, 4h downtrend
& ((rsi_3_4h_gt_5) | aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_20))
# 4h down move, 4h high
& ((rsi_3_4h_gt_5) | (aroonu_14_4h_lt_60))
# 4h & 1d down move, 1d still not low enough
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (aroonu_14_1d_lt_30))
# 4h down move, 15m still high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_40))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (rsi_14_1d_lt_40) | (roc_9_1d_gt_neg_15))
# 4h down move, 1h downtrend, 1d downtrend
& ((rsi_3_4h_gt_15) | (cmf_20_1h_gt_neg_0_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 15m high, 1d overbought
& ((rsi_3_4h_gt_15) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_100))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 4h down move, 15m still not low enough, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 4h & 1d down move, 1d overbought
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_45) | (roc_9_1d_lt_40))
# 4h down move, 15m high, 4h downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_15m_lt_70) | (roc_9_4h_gt_neg_30))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_30))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_10))
# 4h down move, 15m high, 4h high
& ((rsi_3_4h_gt_25) | (aroonu_14_15m_lt_70) | aroonu_14_4h_lt_80)
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50) | (cmf_20_4h_gt_neg_0_40))
# 4h down move, 4h high, 1d high
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_70 | (stochrsi_k_1d_lt_80))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_1d_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_30) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 4h down move, 4h still not low enough, 1d overbought
& ((rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_20) | (roc_9_1d_lt_40))
# 4h down move, 1h high
& ((rsi_3_4h_gt_35) | aroonu_14_1h_lt_70)
# 4h down move, 15m & 4h still high
& ((rsi_3_4h_gt_40) | (stochrsi_k_15m_lt_50) | (stochrsi_k_4h_lt_50))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_40) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_200))
# 4h down move, 4h high
& ((rsi_3_4h_gt_40) | aroonu_14_4h_lt_100)
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h overbought
& ((rsi_3_4h_gt_55) | (roc_9_4h_lt_30))
# 4h down move, 4h overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_40))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_10) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_30))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1d down move, 4h & 1d downtrend
& ((rsi_3_1d_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_40))
# 4h & 1d downtrend, 1d high
& ((cmf_20_4h_gt_neg_0_50) | (cmf_20_1d_gt_neg_0_50) | (aroonu_14_1d_lt_85))
# 4h still not low enough, 4h & 1d downtrend
& ((aroonu_14_4h_lt_30) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_25))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_30))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_80))
# 4h high, 1h & 4h overbought
& (aroonu_14_4h_lt_80 | (roc_9_1h_lt_40) | (roc_9_4h_lt_40))
# 1d high, 4h downtrend, 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_20) | (roc_9_1d_lt_200))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_90) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_70) | (roc_9_1h_lt_40) | (roc_9_4h_lt_40))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1d green, 4h down move, 4h still high
& ((change_pct_1d_lt_40) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_40))
)
# Logic
long_entry_logic.append(
(rsi_3_lt_40)
& (aroonu_14_lt_30)
& (stochrsi_k_lt_20)
& (stochrsi_k_15m_lt_70)
& (willr_84_1h < -70.0)
& (stochrsi_k_1h_lt_30)
& (bbb_20_2_0_1h > 12.0)
& (close_max_48 >= (close * 1.10))
)
# Condition #63 - Rebuy mode (Long).
if long_entry_condition_index == 63:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
(rsi_3_15m_gt_5)
# 5m & 1h down move, 1h still not low enough
& ((rsi_3_gt_3) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_30))
# 5m & 1d down move, 1d downtrend
& ((rsi_3_gt_3) | (rsi_3_1d_gt_15) | (cmf_20_1d_gt_neg_0_25))
# 5m down move, 1h high, 4h overbought
& ((rsi_3_gt_3) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 5m down move, 1d high & overbought
& ((rsi_3_gt_3) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_30))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_50))
# 15m & 1h down move 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (aroonu_14_15m_lt_50))
# 15m & 1h down move 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_4h_lt_10))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_90))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_80))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (aroonu_14_15m_lt_50))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_80))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (aroonu_14_1d_lt_70))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_75))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_80)
# 15m down move, 1h still high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_60))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_60) | (roc_9_1d_lt_60))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_20))
# 15m down move, 1d high, 4h overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_1d_lt_90) | (roc_9_4h_lt_10))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (rsi_3_4h_gt_15))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | aroonu_14_1h_lt_70)
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_25) | (aroonu_14_15m_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_15m_lt_60))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_60))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_100)
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | (stochrsi_k_4h_lt_80))
# 15m down move, 4h high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_60) | (roc_9_4h_gt_neg_20))
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_75) | aroonu_14_1d_lt_100)
# 15m down move, 15m still not low enough, 1h still high
& ((rsi_3_15m_gt_15) | (stochrsi_k_15m_lt_30) | (stochrsi_k_1h_lt_50))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_15) | (roc_9_4h_lt_20) | (roc_9_1d_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | rsi_3_1h_gt_20 | (stochrsi_k_1h_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_85))
# 15m down move, 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_75))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_80))
# 15m down move, 15m high, 4h downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_15m_lt_60) | (roc_9_4h_gt_neg_50))
# 15m down move, 4h overbought
& ((rsi_3_15m_gt_20) | (roc_9_4h_lt_40))
# 15m & 1h & 4h & 1d down move, 4h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (rsi_3_1d_gt_30) | (rsi_14_4h_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | aroonu_14_1h_lt_70)
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_40) | (roc_9_1d_lt_80))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_60))
# 15m down move, 1d high, 4h overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_4h_lt_10))
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_25) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_40) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m downtrend, 4h high
& ((rsi_3_15m_gt_30) | (cmf_20_15m_gt_neg_0_30) | aroonu_14_4h_lt_100)
# 15m down move, 15m still high, 1d high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_50) | (stochrsi_k_1d_lt_70))
# 15m down move, 15m high, 4h high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_60) | (stochrsi_k_4h_lt_70))
# 15m down move, 4h high, 1h downtrend
& ((rsi_3_15m_gt_30) | (aroonu_14_4h_lt_85) | (roc_9_1h_gt_neg_40))
# 15m down move, 4h high
& ((rsi_3_15m_gt_30) | (stochrsi_k_4h_lt_90))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_35) | (rsi_3_1h_gt_45) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_35) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m still high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_40) | (roc_9_4h_lt_20))
# 15m down move, 15m still high, 1d overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_40) | (roc_9_1d_lt_30))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_4h_lt_60) | (roc_9_4h_lt_20))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_35) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_20))
# 15m still high, 4h high
& ((rsi_3_15m < 40.0) | (aroonu_14_4h_lt_85))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h > 2.0) | (rsi_3_4h_gt_15) | (rsi_14_4h_lt_30))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | (stochrsi_k_15m_lt_30))
# 1h & 4h down move, 15m downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | (roc_9_15m > -30.0))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_40))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_40))
# 1h & 4h down move, 4h stil high
& ((rsi_3_1h_gt_3) | rsi_3_4h_gt_20 | (rsi_14_4h_lt_40))
# 1h ^ 4h down move, 1d downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | roc_9_1d_gt_neg_50)
# 1h & 1d down move, 4h still high
& ((rsi_3_1h_gt_3) | (rsi_3_1d_gt_10) | (stochrsi_k_4h_lt_40))
# 1h & 1d down move, 1h downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_1d_gt_15) | (roc_9_1h_gt_neg_40))
# 1h down move, 15m downtrend, 1h still high
& ((rsi_3_1h_gt_3) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1h_lt_40))
# 1h down move, 15m still not low enough, 4h still high
& ((rsi_3_1h_gt_3) | (aroonu_14_15m_lt_30) | (stochrsi_k_4h_lt_40))
# 1h down move, 1h still not low enough
& ((rsi_3_1h_gt_3) | (stochrsi_k_1h_lt_30))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h high
& ((rsi_3_1h_gt_3) | (stochrsi_k_4h_lt_70))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_1d_lt_60))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_20))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30))
# 1g & 4h & 1d down move, 1h still not low enough, 1d still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_30) | (stochrsi_k_1d_lt_50))
# 15m & 4h down move, 4h still not low enough, 15m still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_20) | (stochrsi_k_15m_lt_20))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_35) | (rsi_14_4h_lt_40))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_5) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (roc_9_4h_gt_neg_20))
# 1h, 1d downtrend
& ((rsi_3_1h_gt_5) | roc_9_1d_gt_neg_50)
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (rsi_14_4h_lt_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_30))
# 1h & 4h down move, 15m still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_50))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_15m_lt_30))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_20))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (roc_9_1d_gt_neg_40))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_35) | (roc_9_1d_lt_70))
# 1h & 1d down move, 1h still high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_40))
# 1h & 1d down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_4h_lt_70))
# 1h & 1d downtrend, 1d overbought
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_10))
# 1h down move, 1h downtrend, 1h still not low enough
& ((rsi_3_1h_gt_10) | (cmf_20_1h_gt_neg_0_20) | (aroonu_14_1h_lt_30))
# 1h down move, 1h downtrend, 1h still not low enough
& ((rsi_3_1h_gt_10) | (cmf_20_1h_gt_neg_0_20) | (stochrsi_k_1h_lt_30))
# 1h down move, 1h downtrend
& ((rsi_3_1h_gt_10) | (cmf_20_1h_gt_neg_0_30))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_70) | roc_9_1d_lt_50)
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_20))
# 1h down move, 1d overbought
& ((rsi_3_1h_gt_10) | (roc_9_1d_lt_100))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_30))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_15m < 90.0))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (roc_9_1d_gt_neg_40))
# 1h & 4h down mov, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_100))
# 1h down move, 1d downtrend, 1d high
& ((rsi_3_1h_gt_15) | (cmf_20_1d_gt_neg_0_30) | (stochrsi_k_1d_lt_80))
# 1h down move, 1h still high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_20))
# 1h down move, 1d high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h down move, 1h still high
& ((rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_40))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_20) | (rsi_3_4h_gt_45) | (aroonu_14_1h_lt_60))
# 1h & 1d down move, 1d high & overbought
& ((rsi_3_1h_gt_20) | (rsi_3_1d_gt_55) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_20))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_20) | (aroonu_14_1h_lt_70) | (roc_9_1d_lt_100))
# 1h down move, 4h still high
& ((rsi_3_1h_gt_20) | (aroonu_14_4h_lt_40))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_20) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_25))
# 1h down move, 4h high & overbought
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_10))
# 1h & 4h & 1d down move, 1d downtrend, 1d high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_35) | (rsi_3_1d_gt_45) | (cmf_20_1d_gt_neg_0_30) | (aroonu_14_1d_lt_70))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_70) | (aroonu_14_1d_lt_90))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_85))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_50) | (roc_9_1d_lt_100))
# 1h down move, 1h still not low enough, 4h still high
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_30) | (stochrsi_k_4h_lt_50))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_40))
# 1h down move, 1h still high, 1h downtrend
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_40) | (roc_9_1h_gt_neg_50))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_20))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_4h_lt_80) | (roc_9_1d_lt_70))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_60))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | aroonu_14_1h_lt_70)
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_90))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_70) | (roc_9_4h_lt_30))
# 1h down move, 1h high
& ((rsi_3_1h_gt_30) | (aroonu_14_1h_lt_80))
# 1h down move, 4h & 1d high, 4h overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_200))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_90) | (roc_9_4h_gt_neg_40))
# 1h down move, 1d high, 4h overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_100) | (roc_9_4h_lt_80))
# 1h down move, 1h & 4h still high
& ((rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_40) | (stochrsi_k_4h_lt_50))
# 1h down move, 1h highm 1d overbought
& ((rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_60) | (roc_9_1d_lt_30))
# 1h down move, 4h overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_50))
# 4h down move, 1d downtrend
& ((rsi_3_4h_gt_30) | (roc_9_1d_gt_neg_50))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_70) | (roc_9_4h_lt_40))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_35) | (aroonu_14_1h_lt_70) | (roc_9_1d_gt_neg_25))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_85) | (roc_9_4h_lt_100))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_10))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_35) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_100))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_200))
# 1h & 1d down move, 1d high & overbought
& ((rsi_3_1h_gt_40) | (rsi_3_1d_gt_50) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_40) | (rsi_14_1d_lt_80) | (roc_9_1d_lt_150))
# 1h down move, 15m high, 1h high
& ((rsi_3_1h_gt_40) | (aroonu_14_15m_lt_60) | (aroonu_14_1h_lt_70))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_80) | (roc_9_1d_lt_80))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80) | (roc_9_4h_lt_20))
# 1h down move, 1h & 4h overbought
& ((rsi_3_1h_gt_40) | (roc_9_1h_lt_10) | (roc_9_4h_lt_10))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_45) | (rsi_3_4h_gt_65) | (roc_9_1d_lt_200))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_45) | (aroonu_14_1h_lt_70) | (roc_9_1h_lt_10))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_45) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_40))
# 1h down move, 1h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_4h_lt_100) | (roc_9_4h_lt_100))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_60) | (roc_9_1d_gt_neg_60))
# 1h down move, 15m high, 1h high
& ((rsi_3_1h_gt_55) | (aroonu_14_15m_lt_60) | (stochrsi_k_1h_lt_80))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_55) | (aroonu_14_1h_lt_90) | (roc_9_1h_lt_10))
# 4h & 1d down move, 4h still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (aroonu_14_4h_lt_20))
# 4h down move, 1h still not low enough, 4h downtrend
& ((rsi_3_4h_gt_3) | (stochrsi_k_1h_lt_20) | (roc_9_4h_gt_neg_30))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_3) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 4h down move, 1d high, 4h downtrend
& ((rsi_3_4h_gt_5) | (aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_10))
# 4h down move, 1h still high
& ((rsi_3_4h_gt_5) | (stochrsi_k_1h_lt_50))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_5) | (roc_9_4h_gt_neg_15) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_10))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50) | (roc_9_1d > -30.0))
# 4h down move, 1d high, 4h downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_20))
# 4h down move, 15m high, 15m downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_60) | (roc_9_15m > -10.0))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h high
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_70))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h downtrend, 1d overbought
& ((rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_30) | (roc_9_1d_lt_40))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_60))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_40) | (aroonu_14_1d_lt_80))
# 4h down move, 1h high
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_50) | (roc_9_1d > -30.0))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 4h down move, 15m still high
& (rsi_3_4h_gt_20 | (aroonu_14_15m < 45.0))
# 4h down move, 1h still not low enough, 1d downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_1h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still high, 1d high
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50) | aroonu_14_1d_lt_100)
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_80))
# 4h down move, 15m still high, 4h high
& ((rsi_3_4h_gt_25) | (aroonu_14_15m_lt_40) | aroonu_14_4h_lt_70)
# 4h down move, 1h & 4h still high
& ((rsi_3_4h_gt_25) | (stochrsi_k_1h_lt_40) | (stochrsi_k_4h_lt_40))
# 4h dowqn move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_80 | roc_9_1d_lt_50)
# 4h down move, 1h high, 4h downtrend
& ((rsi_3_4h_gt_30) | aroonu_14_1h_lt_70 | (roc_9_4h_gt_neg_10))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_40) | aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_40) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_80))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_40) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_40) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high, 1d overbought
& ((rsi_3_4h_gt_50) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_40))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_30))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_60) | (stochrsi_k_1h_lt_90) | (roc_9_1d_lt_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_20))
# 1d down move, 1h & 4h still not low enough
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_20) | (stochrsi_k_4h_lt_20))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_35) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_40) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_80))
# 1d down move, 4h high & overbought
& ((rsi_3_1d_gt_45) | aroonu_14_4h_lt_80 | (roc_9_4h_lt_30))
# 1h downtrend, 1h high
& ((cmf_20_1h_gt_neg_0_20) | aroonu_14_1h_lt_80)
# 4h & 1d downtrend, 1d high
& ((cmf_20_4h_gt_neg_0_30) | (cmf_20_1d_gt_neg_0_30) | (stochrsi_k_1d_lt_60))
# 1d downtrend, 1d high & overbought
& ((cmf_20_1d_gt_neg_0_30) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_100))
# 1d downtrend, 1d high & overbought
& ((cmf_20_1d_gt_neg_0_40) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_20))
# 15m still high, 1h overbought
& ((aroonu_14_15m_lt_40) | (roc_9_1h_lt_40))
# 15m still high, 4h overbought
& ((aroonu_14_15m_lt_40) | (roc_9_4h_lt_80))
# 15m still high, 1h high
& ((aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 15m still high, 4h high & overbought
& ((aroonu_14_15m_lt_50) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_30))
# 15m still high, 4h downtrend, 1d overbought
& ((aroonu_14_15m_lt_50) | (roc_9_4h_gt_neg_20) | (roc_9_1d_lt_40))
# 1h still high, 4h & 1d downtrend
& ((aroonu_14_1h_lt_40) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_40))
# 1h high, 4h high, 1h overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_1h_lt_20))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100 | (roc_9_4h_lt_40))
# 1h & 1d high, 1h overbought
& (aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_70) | (roc_9_1h_lt_20))
# 1h high, 1h & 4h overbought
& (aroonu_14_1h_lt_70 | (roc_9_1h_lt_10) | (roc_9_4h_lt_40))
# 1h high, 1d downtrend
& (aroonu_14_1h_lt_80 | (roc_9_1d_gt_neg_40))
# 4h still not low enough, 4h & 1d downtrend
& ((aroonu_14_4h_lt_30) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_25))
# 4h still high, 1d high, 4h downtrend
& ((aroonu_14_4h_lt_50) | aroonu_14_1d_lt_100 | (roc_9_4h_gt_neg_30))
# 4h high, 1h & 1d downtrend
& (aroonu_14_4h_lt_70 | (roc_9_1h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | roc_9_1d_lt_50)
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_10))
# 4h high, 1h & 4h overbought
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_10) | (roc_9_4h_lt_40))
# 1d high, 4h & 1d downtrend
& ((aroonu_14_1d_lt_80) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 1d high, 1h & 4h downtrend
& ((aroonu_14_1d_lt_85) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_50))
# 1d high, 1h & 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_1h_lt_20) | (roc_9_1d_lt_100))
# 1d high, 1h & 4h down move
& (aroonu_14_1d_lt_100 | (roc_9_1h_lt_25) | (roc_9_4h_lt_60))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_20) | (roc_9_1d_lt_30))
# 1h high, 4h & 1d overbought
& ((stochrsi_k_1h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_lt_100))
# 4h still high, 4h & 1d downtrend
& ((stochrsi_k_4h_lt_40) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_40))
# 4h high, 1h & 1d downtrend
& ((stochrsi_k_4h_lt_70) | (roc_9_1h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_70) | (roc_9_4h_lt_20) | (roc_9_1d_lt_30))
# 4h high, 1h overbought, 1d downtrend
& ((stochrsi_k_4h_lt_80) | (roc_9_1h_lt_40) | (roc_9_1d_gt_neg_70))
# 4h high, 4h overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 4h high, 1h & 4h overbought
& ((stochrsi_k_4h_lt_90) | (roc_9_1h_lt_20) | (roc_9_4h_lt_50))
# 1d high, 4h & 1d overbought
& ((stochrsi_k_1d_lt_90) | (roc_9_4h_lt_40) | (roc_9_1d_lt_100))
# 1h & 4h overbought
& ((roc_9_1h_lt_30) | (roc_9_4h_lt_80))
# 1d green with top wick, 4h high
& ((change_pct_1d_lt_30) | (top_wick_pct_1d_lt_20) | aroonu_14_4h_lt_80)
# 1d top wick, 4h down move, 1d overbought
& ((top_wick_pct_1d_lt_50) | (rsi_3_4h_gt_35) | (roc_9_1d_lt_60))
# drop in last 20 days, 4h high
& ((close > (high_max_20_1d * 0.10)) | (stochrsi_k_4h_lt_90))
# drop in last 20 days, 1h high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | aroonu_14_1h_lt_70 | (roc_9_1d_gt_neg_70))
# drop in last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
)
# Logic
long_entry_logic.append(
(rsi_3 > 0.0)
& (rsi_3_lt_50)
& (aroonu_14_lt_25)
& (ema_26 > ema_12)
& ((ema_26 - ema_12) > (open_rate * 0.022))
& ((ema_26_shift.shift() - ema_12_shift.shift()) > (open_rate / 100.0))
)
# Condition #101 - Rapid mode (Long).
if long_entry_condition_index == 101:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(rsi_14_1h_lt_80)
long_entry_logic.append(rsi_14_4h_lt_80)
long_entry_logic.append(rsi_14_1d_lt_80)
# big drop in the last hour
long_entry_logic.append(
(close > (close_max_12 * 0.50))
# 5m & 4h down move, 1d downtrend
& ((rsi_3_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_50))
# 5 & 15m down move, 1h high
& ((rsi_3_gt_10) | (rsi_3_15m_gt_40) | (stochrsi_k_1h_lt_90))
# 5m down move, 1h & 4h high
& ((rsi_3_gt_10) | (aroonu_14_1h_lt_85) | (aroonu_14_4h_lt_90))
# 15m & 1h & 4h & 1d down move, 1d still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_50) | (rsi_14_1d_lt_40))
# 15m & 1h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (stochrsi_k_4h_lt_30))
# 15m & 1h down move, 1d still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_5) | (aroonu_14_1d_lt_40))
# 15m & 1h & 4h down move, 4h still not low enough, 1d still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_20) | (rsi_14_1d_lt_50))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_15) | (rsi_14_4h_lt_40))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_30) | (aroonu_14_4h_lt_75))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_30))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_20))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_30))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_30))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_3) | (aroonu_14_15m_lt_20) | (stochrsi_k_1h_lt_60))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_3) | (aroonu_14_15m_lt_30) | (stochrsi_k_4h_lt_70))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_3) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_30))
# 15m & 1h & 1d down move
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (rsi_3_1d_gt_20))
# 15m down move, 1h still not low enough, 1d high
& ((rsi_3_15m_gt_5) | (stochrsi_k_1h_lt_30) | (aroonu_14_1d_lt_90))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_30))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_40) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_90))
# 15m & 4h down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_1d_lt_40))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_50))
# 15m & 1d down move
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_5))
# 15m & 1d down move, 4h still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_30) | (stochrsi_k_4h_lt_30))
# 15m down move, 1h still high, 4h high
& ((rsi_3_15m_gt_5) | (aroonu_14_1h_lt_50) | (stochrsi_k_4h_lt_90))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_5) | aroonu_14_1h_lt_80 | (roc_9_1h_lt_10))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_5) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_50))
# 15m & 1h & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_25))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_50) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_50) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_15m < 10.0))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (roc_9_1d_gt_neg_25))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_85))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_70))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_1h_lt_50))
# 15m down move, 15m still not low enough, 1h still high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_50))
# 15m down move, 1h still high, 4h high
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_50) | (aroonu_14_4h_lt_85))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_70) | (stochrsi_k_4h < 75.0))
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (stochrsi_k_15m_lt_30))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_90))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_55) | (aroonu_14_4h_lt_60) | (roc_9_4h_lt_30))
# 15m & 4h & 1d down move
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_15))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_25) | (aroonu_14_15m_lt_30))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_50))
# 1h & 1d down move, 1d overbought
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_35) | (roc_9_1d_lt_10))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_25) | (stochrsi_k_1h_lt_80))
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_40))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_70) | (aroonu_14_4h_lt_85))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_90))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_20) | (stochrsi_k_1h_lt_70))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_20) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_20))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_60) | (aroonu_14_1h_lt_85))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_25) | (aroonu_14_4h_lt_60))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_25) | (stochrsi_k_15m_lt_30) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_45) | aroonu_14_1h_lt_70)
# 1h & 4h down move, 15m downtrend
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_3) | (roc_9_15m > -30.0))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_25))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_30))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_20))
# 1h & 4h down move, 1d low
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (cmf_20_1d_gt_neg_0_20))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_20))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_30))
# 1h & 1d down move, 5m moving down
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (roc_2 > -0.0))
# 1h down move, 4h downtrend
& ((rsi_3_1h_gt_10) | (roc_9_4h_gt_neg_30))
# 1h down move, 1d downtrend
& ((rsi_3_1h_gt_10) | (roc_9_1d > -30.0))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_30))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_40))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | (stochrsi_k_1h_lt_30))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_10) | (aroonu_14_1h_lt_40))
# 1h down move, 1d high & overbought
& (rsi_3_1h_gt_20 | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 1h down move, 1h still not low enough, 4h high
& (rsi_3_1h_gt_20 | (stochrsi_k_1h_lt_20) | aroonu_14_4h_lt_80)
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_1h_lt_50))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_80))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_80))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (stochrsi_k_1h_lt_50))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_90) | (roc_9_1d_lt_40))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 1h down move, 15m high
& ((rsi_3_1h_gt_35) | (stochrsi_k_15m_lt_80))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100)
# 1h down move, 1h high, 1d high & overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_60) | (stochrsi_k_1d_lt_70) | (roc_9_1d_lt_40))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 1h down move, 4h high
& ((rsi_3_1h_gt_60) | (aroonu_14_4h_lt_90))
# 4h down move, 15m still high
& ((rsi_3_4h_gt_5) | (stochrsi_k_15m_lt_40))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_20))
# 4h down move, 15m 4h still high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_40) | (aroonu_14_4h_lt_50))
# 4h & 1d down move, 4h high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_70)
# 4h down move, 1h still high
& ((rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 4h down move, 4h still high
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_20))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_15) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_15))
# 4h down move, 4h & 1d downtrend
& (rsi_3_4h_gt_20 | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_30))
# 4h dowqn move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_35) | aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100)
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_40) | (rsi_3_1d_gt_10) | (stochrsi_k_4h_lt_50))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_40) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_60))
# 4h down move, 4h still high
& ((rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_40))
# 4h down move, 4h overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_20))
# 1d down move, 1h still high, 4h high
& ((rsi_3_1d_gt_20) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_85))
# 1d down move, 1h high & overbought
& ((rsi_3_1d_gt_35) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 1d down move, 4h high, 1d overbought
& ((rsi_3_1d_gt_45) | (stochrsi_k_4h_lt_90) | (roc_9_1d_lt_10))
# 4h still high, 4h moving lower, 4h overbought
& ((aroonu_14_4h_lt_50) | (aroonu_14_4h > aroonu_14_4h_shift.shift(48)) | (roc_9_4h_lt_40))
# 1h high, 1d downtrend
& ((aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_30))
# 1d high, 4h & 1d overbought
& ((aroonu_14_1d_lt_85) | (roc_9_4h_lt_60) | (roc_9_1d_lt_60))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_10) | (roc_9_1d_lt_20))
# 1h high, 4h downtrend
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_gt_neg_20))
# 1h high, 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_4h_lt_80))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30) | (roc_9_1d_lt_30))
# 1d high, 4h & 1d overbought
& ((stochrsi_k_1d_lt_80) | (roc_9_4h_lt_60) | (roc_9_1d_lt_60))
# 1d red, 4h down move, 1h still high
& ((change_pct_1d_gt_neg_30) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_50))
# pump, drop but not yet near the previous lows
& (
(((high_max_24_4h - low_min_24_4h) / low_min_24_4h) < 2.0)
| (close > (high_max_6_4h * 0.75))
| (close < (low_min_24_4h * 1.25))
)
# 4h high, drop but not yet near the previous lows
& (aroonu_14_4h_lt_70 | (close > (high_max_6_4h * 0.80)) | (close < (low_min_24_4h * 1.25)))
# 4h high, drop but not yet near the previous lows
& (aroonu_14_4h_lt_80 | (close > (high_max_6_4h * 0.85)) | (close < (low_min_24_4h * 1.25)))
# 1h down move, drop but not yet near the previous lows
& ((rsi_3_1h_gt_30) | (close > (high_max_12_4h * 0.50)) | (close < (low_min_24_4h * 1.25)))
# 1d overbought, drop but not yet near the previous lows
& (roc_9_1d_lt_50 | (close > (high_max_6_1d * 0.70)) | (close < (low_min_12_1d * 1.25)))
# big drop in last 6 hours, 1d overbought
& ((close > (df["high_max_6_1h"] * 0.65)) | roc_9_1d_lt_50)
# big drop in last 4 hours, 4h still not low enough
& ((close > (high_max_24_4h * 0.50)) | (stochrsi_k_4h_lt_30))
# big drop in the last 4 days, 4h down move
& ((close > (high_max_24_4h * 0.20)) | rsi_3_4h_gt_20)
# big drop in the last 6 days, 1d down move
& ((close > (high_max_6_1d * 0.30)) | (rsi_3_1d_gt_15))
# big drop in the last 12 days, 4h high
& ((close > (high_max_12_1d * 0.50)) | (stochrsi_k_4h_lt_90))
# big drop in the last 30 days, 4h down move
& ((close > (high_max_20_1d * 0.10)) | (rsi_3_4h_gt_30))
# big drop in the last 20 days, 1h still high
& ((close > (high_max_20_1d * 0.05)) | (aroonu_14_1h_lt_50))
# big drop in the last 20 days, 1d high, 1d downtrend
& ((close > (high_max_20_1d * 0.20)) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# big drop in the last 30 days, 1h down move
& ((close > (high_max_30_1d * 0.25)) | (rsi_3_1h_gt_15))
)
# Logic
long_entry_logic.append(
(rsi_3_gt_3)
& (rsi_14 < 36.0)
& (aroonu_14_lt_25)
& (stochrsi_k_lt_20)
& (close < (sma_16 * 0.946))
& (aroonu_14_15m_lt_50)
)
# Condition #102 - Rapid mode (Long).
if long_entry_condition_index == 102:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(rsi_3_lt_46)
long_entry_logic.append(rsi_3_15m_gt_5)
long_entry_logic.append(rsi_3_1h_gt_10)
long_entry_logic.append(rsi_3_4h_gt_10)
# 5m & 15m down move, 4h still high
long_entry_logic.append(
((rsi_3_gt_3) | (rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_50))
# 5m & 15m down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_15m_gt_20) | (aroonu_14_15m_lt_40))
# 5m & 15m down move, 1h still high
& ((rsi_3_gt_3) | (rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_40))
# 5m & 1h down move, 4h still high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_25) | (aroonu_14_4h_lt_50))
# 5m & 4h & 1d down move
& ((rsi_3_gt_3) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_20))
# 5m & 1d down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_10) | (stochrsi_k_15m_lt_40))
# 5m down move, 15m high
& ((rsi_3_gt_3) | (aroonu_14_15m_lt_70))
# 5m down move, 15m & 1h still high
& ((rsi_3_gt_3) | (stochrsi_k_15m_lt_40) | (aroonu_14_1h_lt_40))
# 5m down move, 1h high
& ((rsi_3_gt_3) | aroonu_14_1h_lt_70 | (stochrsi_k_1h_lt_50))
# 5m & 1h down move, 1h high
& ((rsi_3_gt_5) | (rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_60))
# 5m & 4h down move, 4h high
& ((rsi_3_gt_5) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 5m down move, 15m still high, 1h high
& ((rsi_3_gt_5) | (rsi_14_15m_lt_40) | aroonu_14_1h_lt_80)
# 5m down move, 15m still high, 1h high
& ((rsi_3_gt_5) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_50))
# 5m down move, 15m & 4h high
& ((rsi_3_gt_5) | (stochrsi_k_15m_lt_70) | (stochrsi_k_4h_lt_90))
# 5m & 15m down move, 4h high
& ((rsi_3_gt_10) | (rsi_3_15m_gt_20) | (aroonu_14_4h_lt_90))
# 5m & 15m down move, 1d high
& ((rsi_3_gt_10) | (rsi_3_15m_gt_20) | (stochrsi_k_1d_lt_80))
# 5m & 15m down move, 1h high
& ((rsi_3_gt_10) | (rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_90))
# 5m & 1h down move, 4h still high
& ((rsi_3_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_50))
# 5m down move, 1h & 4h high
& ((rsi_3_gt_10) | (aroonu_14_1h_lt_85) | (aroonu_14_4h_lt_90))
# 5m down move, 4h high, 1d high
& ((rsi_3_gt_10) | (aroonu_14_4h_lt_60) | (stochrsi_k_1d_lt_90))
# 5m down move, 15m still high, 1h high
& ((rsi_3_gt_15) | (rsi_14_15m_lt_40) | (stochrsi_k_1h_lt_90))
# 5m down move, 15m still high, 4h high
& ((rsi_3_gt_15) | (rsi_14_15m_lt_40) | (stochrsi_k_4h_lt_90))
# 15m down move, 15m still not low enough, 1h high
& (rsi_3_15m_gt_3 | (aroonu_14_15m_lt_20) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (aroonu_14_1d_lt_70))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (stochrsi_k_1h_lt_20))
# 15m & 1h & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_1h_lt_30))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_35) | aroonu_14_4h_lt_70)
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30))
# 15m& 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_40))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_15m_lt_50))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_85))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | aroonu_14_4h_lt_70)
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_25) | (stochrsi_k_1h_lt_50))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_80))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_10) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_50))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_20))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_40))
# 15m & 1h & 4h & 1d down move, 1d high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_40) | (rsi_3_1d_gt_50) | (stochrsi_k_1d_lt_70))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_45) | (aroonu_14_4h_lt_80))
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_45) | (stochrsi_k_15m_lt_50))
# 15m & 4h & 1d down move
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (rsi_3_1d_gt_15))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_15m < 25.0))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_60))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_70))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_50))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_15) | (rsi_14_15m_lt_35) | (stochrsi_k_4h_lt_90))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_30) | (stochrsi_k_4h_lt_90))
# 15m down move, 15m & 4h still high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_50))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_15) | (stochrsi_k_15m_lt_40) | (stochrsi_k_1h_lt_70))
# 15m down move, 1h still high, 4h high
& ((rsi_3_15m_gt_15) | (stochrsi_k_1h_lt_50) | (stochrsi_k_4h_lt_60))
# 15m down move, 4h still high 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_50) | roc_9_1d_lt_50)
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_20) | rsi_3_1h_gt_20 | (aroonu_14_15m_lt_30))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_90))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_40) | (aroonu_14_15m_lt_60))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_20) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_60))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_60) | aroonu_14_4h_lt_80)
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_20) | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_90))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_20) | (rsi_14_15m_lt_35) | (rsi_14_4h < 85.0))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m still not low enough, 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_30) | (stochrsi_k_4h_lt_70))
# 15m down move, 15m still high, 4d downtrend
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_40) | (roc_9_4h_gt_neg_20))
# 15m down move, 15m still not low enough, 1h still high
& ((rsi_3_15m_gt_20) | (stochrsi_k_15m_lt_30) | (aroonu_14_1h_lt_50))
# 15m down move, 15m & 1h still high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_50) | (stochrsi_k_1h_lt_40))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_20) | aroonu_14_1h_lt_70 | (aroonu_14_4h_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | aroonu_14_1h_lt_80)
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_80))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_40) | (stochrsi_k_1d_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_60) | (aroonu_14_1h_lt_85))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_40) | (aroonu_14_15m_lt_50))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1d_gt_25) | (stochrsi_k_4h_lt_70))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_25) | (rsi_3_1d_gt_30) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m & 1h still high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_50) | (stochrsi_k_1h_lt_50))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_50) | (stochrsi_k_4h_lt_70))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_100))
# 15m down move, 15m high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_85))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_25) | aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_70) | (aroonu_14_4h_lt_90))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_25) | aroonu_14_4h_lt_80 | roc_9_1d_lt_50)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_45) | (aroonu_14_1h_lt_60))
# 15m down move, 15m high, 4h still high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_50))
# 15m down move, 15m still not low enough, 1h high
& ((rsi_3_15m_gt_30) | (stochrsi_k_15m_lt_30) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m still high, 1d high, 1d downtrend
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_50) | (stochrsi_k_1d_lt_70) | (roc_9_1d_gt_neg_15))
# 15m down move, 1h still high, 4h high
& ((rsi_3_15m_gt_30) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_70))
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (stochrsi_k_4h_lt_70))
# 15m down move, 15m high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_80))
# 15m down move, 4h still high, 4h overbought
& ((rsi_3_15m_gt_35) | (stochrsi_k_4h_lt_50) | (roc_9_4h_lt_20))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_40) | (rsi_14_15m_lt_50) | aroonu_14_1h_lt_80)
# 15m down move, 15m high, 1h high
& ((rsi_3_15m_gt_40) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_90))
# 15m down move, 15m high
& ((rsi_3_15m_gt_45) | (aroonu_14_15m_lt_90))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_14_4h_lt_40))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_50))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_40))
# 1h & 1d down move, 4h downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_35) | (cmf_20_4h_gt_neg_0_40))
# 1h down move, 1d high & overbought
& (rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_30))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_70)
# 1h down move, 1h still not low enough, 4h high
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_30) | (stochrsi_k_4h_lt_70))
# 1h down move, 1d still high, 1d downtrend
& ((rsi_3_1h_gt_25) | (stochrsi_k_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_10))
# 1h down move, 4h high, 1d downtrend
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | roc_9_1d_gt_neg_50)
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_40))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_55) | (stochrsi_k_4h_lt_80))
# 1h down move, 1h high, 1d overbought
& ((rsi_3_1h_gt_35) | aroonu_14_1h_lt_70 | (roc_9_1d_lt_20))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_40) | (rsi_14_4h_lt_75) | (roc_9_1d_lt_100))
# 1h down move, 1h still high, 1d high
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | (aroonu_14_1d_lt_85))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | (roc_9_1d_lt_20))
# 1h down move 1h high & overbought
& ((rsi_3_1h_gt_45) | (aroonu_14_1h_lt_90) | (roc_9_1h_lt_10))
# 1h down move, 1h high & overbought
& ((rsi_3_1h_gt_55) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_10))
# 1h down move, 1d high, 1h overbought
& ((rsi_3_1h_gt_60) | (aroonu_14_1d_lt_90) | (roc_9_1h_lt_10))
# 4h down move, 4h still not low enough, 1d overbought
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30) | (roc_9_1d_lt_100))
# 4h down move, 15m still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_50) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 15m still not low enough
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_20) | (stochrsi_k_15m_lt_30))
# 4h down move, 4h still not low enough, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d high, 4h downtrend
& ((rsi_3_4h_gt_30) | (stochrsi_k_1d_lt_90) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 4h still high, 1d high
& ((rsi_3_4h_gt_35) | (rsi_3_1d_gt_35) | (stochrsi_k_4h_lt_50) | (aroonu_14_1d_lt_60))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_30))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_40) | (rsi_3_1d_gt_60) | aroonu_14_1d_lt_100)
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_20))
# 4h down move, 15m high, 4h overbought
& ((rsi_3_4h_gt_60) | (stochrsi_k_15m_lt_80) | (roc_9_4h_lt_20))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_60) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1d down move, 1h & 4h still not low enough
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_20) | (stochrsi_k_4h_lt_20))
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_10) | (aroonu_14_1h_lt_85) | (roc_9_1d_gt_neg_30))
# 1d down move, 15m still not low enough, 1h still high
& ((rsi_3_1d_gt_15) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_50))
# 15m still not low enough, 1h high, 1d overbought
& ((aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_100))
# 15m still high, 4h high & overbought
& ((aroonu_14_15m_lt_40) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_30))
# 15m & 1h & 4h high
& ((aroonu_14_15m_lt_70) | aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90))
# 15m & 1h high, 4h overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_90) | (roc_9_4h_lt_20))
# 15m & 1d high, 1d overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_100))
# 15m high
& ((aroonu_14_15m_lt_80) | (stochrsi_k_15m_lt_60))
# 15m & 4h high
& ((aroonu_14_15m_lt_80) | (stochrsi_k_4h_lt_70))
# 15m high, 1d overbought
& ((aroonu_14_15m_lt_80) | roc_9_1d_lt_50)
# 15m & 4h high
& ((aroonu_14_15m_lt_90) | aroonu_14_4h_lt_70)
# 15m & 1h high
& ((aroonu_14_15m_lt_90) | (aroonu_14_1h_lt_90))
# 1h still high, 4h high & overbought
& ((aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_80))
# 1h & 4h high, 1h overbought
& (aroonu_14_1h_lt_80 | aroonu_14_4h_lt_100 | (roc_9_1h_lt_40))
# 1h & 1d high, 1d overbought
& (aroonu_14_1h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 1h high, 4h & 1d overbought
& ((aroonu_14_1h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_lt_40))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_80 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_30))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_10))
# 4h high & overbought
& ((aroonu_14_4h_lt_90) | (stochrsi_k_4h < 85.0) | (roc_9_4h_lt_50))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_20) | (roc_9_1d_lt_40))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_70) | (roc_9_4h_lt_30) | (roc_9_1d_lt_30))
# 5m red, 1h still high
& ((df["change_pct"] > -5.0) | (stochrsi_k_1h_lt_50))
# 1d top wick, 4h down move, 4h still high
& ((top_wick_pct_1d_lt_30) | (rsi_3_4h_gt_60) | (aroonu_14_4h_lt_50))
# pump, drop but not yet near the previous lows
& (
(((high_max_24_4h - low_min_24_4h) / low_min_24_4h) < 2.0)
| (close > (high_max_6_4h * 0.75))
| (close < (low_min_24_4h * 1.25))
)
# 4h high, drop but not yet near the previous lows
& ((stochrsi_k_4h_lt_90) | (close > (close_max_48 * 0.85)) | (close < (df["low_min_24_1h"] * 1.25)))
# 4h high, drop but not yet near the previous lows
& (aroonu_14_4h_lt_70 | (close > (high_max_6_4h * 0.80)) | (close < (low_min_24_4h * 1.25)))
# 1d overbought, drop but not yet near the previous lows
& (roc_9_1d_lt_50 | (close > (high_max_6_1d * 0.70)) | (close < (low_min_12_1d * 1.25)))
# big drop in the last 4 days, 4h down move
& ((close > (high_max_24_4h * 0.20)) | rsi_3_4h_gt_20)
# big drop in the last 12 days, 1h high
& ((close > (high_max_12_1d * 0.30)) | (stochrsi_k_1h_lt_90))
# big drop in the last 20 days, 1d down move
& ((close > (high_max_20_1d * 0.40)) | (rsi_3_1d_gt_30))
# big drop in the last 30 days, 4h down move, 4h still high
& ((close > (high_max_30_1d * 0.25)) | (rsi_3_4h_gt_45) | (rsi_14_4h_lt_40))
# big drop in the last 30 days, 1h high
& ((close > (high_max_30_1d * 0.20)) | (stochrsi_k_1h_lt_80))
)
# Logic
long_entry_logic.append(
(willr_14 < -95.0) & (stochrsi_k < 10.0) & (close < (bbl_20_2_0 * 0.999)) & (close < (ema_20 * 0.960))
)
# Condition #103 - Rapid mode (Long).
if long_entry_condition_index == 103:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(roc_2 > -0.0)
# 15m down move, 4h high, 1d overbought
long_entry_logic.append(
((rsi_3_15m_gt_10) | (stochrsi_k_4h_lt_70) | (roc_9_1d_lt_80))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_10) | rsi_3_4h_gt_20)
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_40) | aroonu_14_1h_lt_70)
# 15m down move, 4h high & overbought
& ((rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_30))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_45) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_20) | rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_50))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_20) | (rsi_14_15m_lt_40) | (stochrsi_k_1h_lt_70))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_20) | (rsi_14_15m_lt_40) | (aroonu_14_4h_lt_90))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_50) | (aroonu_14_4h_lt_90))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_60) | aroonu_14_1h_lt_70)
# 15m down move, 15m high, 4h still high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_50))
# 15m down move, 15m & 1h still high
& ((rsi_3_15m_gt_20) | (stochrsi_k_15m_lt_50) | (stochrsi_k_1h_lt_50))
# 15m down move, 4h overbought
& ((rsi_3_15m_gt_20) | (roc_9_4h_lt_70))
# 15m down move, 15m still high, 1h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_50) | aroonu_14_1h_lt_80)
# 15m down move, 4h & 1d high
& ((rsi_3_15m_gt_25) | (aroonu_14_4h_lt_90) | (stochrsi_k_1d_lt_90))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_80) | (stochrsi_k_1d_lt_90))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_25) | (stochrsi_k_1h_lt_80) | (roc_9_1h_lt_20))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_30) | (rsi_3_1h_gt_30) | (aroonu_14_15m_lt_70))
# 15m & 4h & 1d down move, 4h & 1d high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_50) | (rsi_3_1d_gt_55) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_100))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_90))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_30) | (stochrsi_k_1h_lt_70) | (aroonu_14_4h_lt_90))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_35) | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_80))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_80)
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_80))
# 15m down move, 1h high, 4h overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_1h_lt_85) | (roc_9_4h_lt_80))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_40))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_10))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_40))
# 1h down move, 4h still high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_4h_gt_neg_20))
# 1h down move, 15m still not low enough, 4h high
& (rsi_3_1h_gt_20 | (aroonu_14_15m_lt_25) | aroonu_14_4h_lt_80)
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | (stochrsi_k_1d_lt_80))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | (roc_9_4h_lt_10))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_40))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_30) | (roc_9_4h_lt_30) | (roc_9_1d_lt_40))
# 1h down move, 15m & 1h still high
& ((rsi_3_1h_gt_40) | (aroonu_14_15m_lt_50) | (stochrsi_k_1h_lt_50))
# 1h down move, 1h still high, 4h high
& ((rsi_3_1h_gt_40) | (aroonu_14_1h_lt_50) | (aroonu_14_4h_lt_90))
# 1h down move, 1h high, 4h overbought
& ((rsi_3_1h_gt_40) | aroonu_14_1h_lt_70 | (roc_9_4h_lt_30))
# 1h down move, 1h overbought
& ((rsi_3_1h_gt_40) | (roc_9_1h_lt_30))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_45) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 1h down move, 15m & 1h still high
& ((rsi_3_1h_gt_50) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_60) | (rsi_3_4h_gt_60) | aroonu_14_4h_lt_80)
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_60) | (rsi_3_4h_gt_60) | (stochrsi_k_4h_lt_80))
# 4h down move, 1h & 4h downtrend
& ((rsi_3_4h_gt_5) | (roc_9_1h_gt_neg_30) | (roc_9_4h_gt_neg_30))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20))
# 4h down move, 4h still high, 1d downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 1h down move, 15m & 1h still high
& (rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_40) | (stochrsi_k_1h_lt_50))
# 4h down move, 15m still high, 4h high
& ((rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_50) | (aroonu_14_4h_lt_70))
# 4h down move, 1h high, 4h downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_1h_lt_70) | (roc_9_4h_gt_neg_10))
# 4h down move, 15m still not low enough, 4h high
& ((rsi_3_4h_gt_35) | (aroonu_14_15m_lt_30) | (aroonu_14_4h_lt_70))
# 1d down move, 4h & 1d high
& ((rsi_3_1d_gt_55) | (aroonu_14_4h_lt_100) | (aroonu_14_1d_lt_100))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_50) | (aroonu_14_4h_lt_80) | (roc_9_4h_lt_20))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_30))
# 4h down move, 15m still high, 1h high
& ((rsi_3_4h_gt_60) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_90))
# 4h down move, 1h high, 1d overbought
& ((rsi_3_4h_gt_60) | (stochrsi_k_1h_lt_90) | (roc_9_1d_lt_30))
# 1d down move, 1h high, 1d downtrend
& ((rsi_3_1d_gt_10) | (aroonu_14_1h_lt_80) | (roc_9_1d_gt_neg_10))
# 1d down move, 4h high
& ((rsi_3_1d_gt_10) | (stochrsi_k_4h_lt_80))
# 1d down move, 15m still high, 1h high
& ((rsi_3_1d_gt_15) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 1d down move, 1h & 1d overbought
& ((rsi_3_1d_gt_45) | (roc_9_1h_lt_80) | (roc_9_1d_lt_80))
# 15m still high, 1h & 4h high
& ((rsi_14_15m_lt_40) | aroonu_14_1h_lt_80 | (aroonu_14_4h_lt_90))
# 15m & 1h still high, 4h high
& ((rsi_14_15m < 45.0) | (aroonu_14_1h_lt_40) | (stochrsi_k_4h_lt_70))
# 15m still high, 4h high & overbought
& ((rsi_14_15m_lt_50) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_80))
# 15m still high, 1h high, 4h still high
& ((aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_90) | (stochrsi_k_4h_lt_50))
# 15m still high, 1d high
& ((aroonu_14_15m_lt_50) | (stochrsi_k_1d_lt_90))
# 15m & 1h
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_90))
# 15m & 1h & 4h high
& ((aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_70) | (aroonu_14_4h_lt_90))
# 1h & 1d high, 4h downtrend
& ((aroonu_14_1h_lt_40) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_20))
# 1h & 4h high, 4h overbought
& (aroonu_14_1h_lt_70 | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_10))
# 1h high, 1h & 1d overbought
& ((aroonu_14_1h_lt_90) | (roc_9_1h_lt_10) | (roc_9_1d_lt_30))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_10))
# 4h high, 4h & 1d overbought
& (aroonu_14_4h_lt_80 | (roc_9_4h_lt_80) | (roc_9_1d_lt_100))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 15m still high, 1h high
& ((stochrsi_k_15m_lt_40) | (aroonu_14_1h_lt_90) | (stochrsi_k_1h_lt_90))
# 15m still high, 1d high
& ((stochrsi_k_15m_lt_50) | (stochrsi_k_1d_lt_90))
# 4h high, 4h & 1d overbought
& ((stochrsi_k_4h_lt_80) | (roc_9_4h_lt_40) | (roc_9_1d_lt_100))
# 1d green, 4h down move, 4h still high
& ((change_pct_1d_lt_40) | (rsi_3_4h_gt_35) | (aroonu_14_4h_lt_40))
# 1d top wick, 4h high
& ((top_wick_pct_1d_lt_30) | (aroonu_14_4h_lt_90))
# pump, 4h overbought
& ((((df["high_max_6_1h"] - df["low_min_6_1h"]) / df["low_min_6_1h"]) < 0.5) | (roc_9_4h_lt_50))
# pump, drop but not yet near the previous lows
& (
(((high_max_24_4h - low_min_24_4h) / low_min_24_4h) < 2.0)
| (close > (high_max_6_4h * 0.85))
| (close < (low_min_24_4h * 1.25))
)
# pump, 1h high
& ((((high_max_24_4h - low_min_24_4h) / low_min_24_4h) < 4.0) | (stochrsi_k_1h_lt_90))
# big drop in the last 2 days, 1d down move
& ((close > (high_max_12_4h * 0.30)) | (rsi_3_1d_gt_30))
# big drop in the last 12 days, 1h still high
& ((close > (high_max_12_1d * 0.25)) | (aroonu_14_1h_lt_50))
# big drop in the last 12 days, 1h still not low enough
& ((close > (high_max_12_1d * 0.10)) | (stochrsi_k_1h_lt_30))
# big drop in the last 12 days, 15m still high
& ((close > (high_max_12_1d * 0.20)) | (aroonu_14_15m_lt_50))
# big drop in the last 20 days, 4h down move
& ((close > (high_max_20_1d * 0.10)) | rsi_3_4h_gt_20)
)
# Logic
long_entry_logic.append(
(rsi_4 < 45.0)
& (rsi_14 > 35.0)
& (rsi_20 < rsi_20_shift.shift(1))
& (aroonu_14_lt_25)
& (close < sma_16 * 0.960)
)
# Condition #104 - Rapid mode (Long).
if long_entry_condition_index == 104:
# Protections
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
# 5m & 4h & 1d down move
long_entry_logic.append(
((rsi_3_gt_3) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_20))
# 5m & 4h down move, 1d downtrend
& ((rsi_3_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 5m & 1h down move, 1h still high
& ((rsi_3_gt_5) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 15m & 4h & 1d down move
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_15))
# 15m & 1h down move
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3))
# 15m & 1h down move, 4h still not low enough
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_5) | (rsi_14_4h < 35.0))
# 15m & 1h down move, 1d still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_50))
# 15m & 1h down move, 1h still not low enough
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_30))
# 15m & 4h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_30) | (rsi_14_4h_lt_40))
# 15m & 1h & 4h down move
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | (rsi_3_4h_gt_15))
# 15m & 1h & 4h down move, 15m downtrend
& ((rsi_3_15m_gt_5) | rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (cmf_20_15m_gt_neg_0_20))
# 15m & 1h down move, 4h still not low enough
& ((rsi_3_15m_gt_5) | rsi_3_1h_gt_20 | (aroonu_14_4h_lt_20))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50))
# 15m & 1h down move, 15m & 1h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (cmf_20_15m_gt_neg_0_40) | (cmf_20_1h_gt_neg_0_40))
# 15m & 1h down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_20))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_50))
# 15m & 1h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_40) | (roc_9_4h_lt_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | aroonu_14_1h_lt_80)
# 15m & 4h down move, 1h & 4h downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (cmf_20_1h_gt_neg_0_20) | (cmf_20_4h_gt_neg_0_20))
# 15m & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_30))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_90))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_70))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (roc_9_1d_gt_neg_25))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_20))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_80)
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_15) | rsi_3_1h_gt_20 | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | aroonu_14_4h_lt_70)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_30) | (aroonu_14_1h_lt_40))
# 15m down move, 4h still high, 4h downtrend
& ((rsi_3_15m_gt_15) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 15m down move, 1d high, 4h overbought
& ((rsi_3_15m_gt_15) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_50))
# 15m & 3h down move, 15m still not low enough
& ((rsi_3_15m_gt_20) | rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_20))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_25) | (rsi_14_1h_lt_40))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_25) | aroonu_14_4h_lt_70)
# 15m down move, 15m still not low enough, 1d overbought
& ((rsi_3_15m_gt_25) | (stochrsi_k_15m_lt_20) | (roc_9_1d_lt_80))
# 1h & 4h down move
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 1h & 4h down move
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_50))
# 1h down move, 1h still high
& ((rsi_3_1h_gt_5) | (aroonu_14_1h_lt_50))
# 1h down move, 4h high
& ((rsi_3_1h_gt_5) | (aroonu_14_4h_lt_85))
# 1h & 4h down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_30))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_1d_lt_50))
# 1h & 1d down move, 1h still moving lower
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (cci_20_change_pct_1h_gt_neg_0))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_10) | (aroonu_14_1d_lt_85) | (roc_9_4h_gt_neg_10))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_50))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_30))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_20))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_25) | (rsi_3_1d_gt_25))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_40) | (aroonu_14_1h_lt_80))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_70))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_70))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_60) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 1d overbought
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | roc_9_1d_lt_50)
# 1h & 4h down move, 1h still high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_25) | (stochrsi_k_1h_lt_50))
# 1h & 1d down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_70))
# 4h & 1d down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_40) | (aroonu_14_1d_lt_80))
# 1h down move, 1h still high, 4h high
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_50) | aroonu_14_4h_lt_70)
# 1h down move, 4h high
& (rsi_3_1h_gt_20 | (stochrsi_k_4h_lt_90))
# 1h down move, 1h & 1d high
& ((rsi_3_1h_gt_25) | aroonu_14_1h_lt_70 | (aroonu_14_1d_lt_90))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 1h down move, 1h still high, 1d overbought
& ((rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_45) | aroonu_14_4h_lt_80)
# 1h & dh down move, 4h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_85))
# 1h down move, 4h still not low enough, 1d overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_30) | roc_9_1d_lt_50)
# 1h down move, 1h still not low enough, 4h downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_30) | (roc_9_4h_gt_neg_20))
# 1h down move, 4h still high, 1d downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_20))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_40) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_20))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_20))
# 4h down move, 15m not low enough, 1h still high
& ((rsi_3_4h_gt_3) | (stochrsi_k_15m_lt_20) | (stochrsi_k_1h_lt_40))
# 4h & 1d down move, 4h downtrend
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_20) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (aroonu_14_1d_lt_70))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_5) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d still not low enough, 1d downtrend
& ((rsi_3_4h_gt_5) | (stochrsi_k_1d_lt_30) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h downtrend, 1h still not low enough
& ((rsi_3_4h_gt_10) | (cmf_20_1h_gt_neg_0_25) | (aroonu_14_1h_lt_30))
# 4h down move, 1h & 1d downtrend
& ((rsi_3_4h_gt_10) | (roc_9_1h_gt_neg_20) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_45) | (stochrsi_k_4h_lt_40))
# 4h & 1d down move, 1d high
& (rsi_3_4h_gt_20 | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_60))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_70) | roc_9_1d_lt_50)
# 4h down move, 1h still high, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_50) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h high
& (rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_80))
# 4h down move, 1d high, 1h downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_70) | (roc_9_1h_gt_neg_10))
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_40) | (roc_9_1d_lt_100))
# 4h down move, 4h high, 1h downtrend
& ((rsi_3_4h_gt_30) | aroonu_14_4h_lt_80 | (roc_9_1h_gt_neg_30))
# 4h down move, 4h still high, 1d overbought
& ((rsi_3_4h_gt_35) | (aroonu_14_4h_lt_50) | (roc_9_1d_lt_40))
# 4h down move, 4h still high, 1d high
& ((rsi_3_4h_gt_40) | (aroonu_14_4h_lt_50) | aroonu_14_1d_lt_100)
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_40) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 1d down move, 1h still not low enough
& ((rsi_3_1d_gt_5) | (stochrsi_k_1h_lt_20))
# 1h & 4h high, 4h overbought
& ((aroonu_14_1h_lt_60) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_30))
# 4h & 1d high, 4h overbought
& ((aroonu_14_4h_lt_60) | aroonu_14_1d_lt_100 | (roc_9_4h_lt_40))
# 4h & 1d high,1d overbought
& (aroonu_14_4h_lt_70 | aroonu_14_1d_lt_100 | roc_9_1d_lt_50)
# 1d red, 4h down move, 1h still high
& ((change_pct_1d_gt_neg_30) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_50))
# 1d top wick, 4h down move, 1d high
& ((top_wick_pct_1d_lt_20) | (rsi_3_4h_gt_40) | (aroonu_14_1d_lt_100))
# pump, drop but not yet near the previous lows
& (
(((high_max_24_4h - low_min_24_4h) / low_min_24_4h) < 2.0)
| (close > (high_max_12_4h * 0.60))
| (close < (low_min_24_4h * 1.10))
)
# pump, drop but not yet near the previous lows
& (
(((high_max_12_1d - low_min_12_1d) / low_min_12_1d) < 5.0)
| (close > (high_max_6_1d * 0.30))
| (close < (low_min_12_1d * 1.25))
)
# big drop in the last hour
& (close > (close_max_12 * 0.50))
# big drop in the last 12 days, 15m & 4h down move
& ((close > (high_max_12_1d * 0.40)) | (rsi_3_15m_gt_10) | (rsi_3_4h_gt_10))
# big drop in the last 20 days, 15m & 1h down move
& ((close > (high_max_20_1d * 0.40)) | (rsi_14_15m < 10.0) | (rsi_14_1h < 10.0))
# big drop in the last 20 days, 1d down move
& ((close > (high_max_20_1d * 0.25)) | (rsi_3_1d_gt_30))
# big drop in the last 20 days, 4h still not low enough
& ((close > (high_max_20_1d * 0.10)) | (rsi_14_4h_lt_30))
# big drop in the last 30 days, 4h down move
& ((close > (high_max_30_1d * 0.25)) | rsi_3_4h_gt_20)
)
# Logic
long_entry_logic.append(
(rsi_3_lt_40)
& (aroonu_14_lt_25)
& (stochrsi_k_lt_20)
& (aroonu_14_15m_lt_25)
& (stochrsi_k_15m_lt_30)
& (close < df["EMA_16"] * 0.975)
& (((df["EMA_50"] - df["EMA_200"]) / close * 100.0) < -5.5)
)
# Condition #120 - Grind mode (Long).
if long_entry_condition_index == 120:
# Protections
long_entry_logic.append(num_open_long_grind_mode < self.grind_mode_max_slots)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(is_pair_long_grind_mode)
long_entry_logic.append(rsi_3 <= 50.0)
long_entry_logic.append(rsi_3_15m >= 20.0)
long_entry_logic.append(rsi_3_1h >= 10.0)
long_entry_logic.append(rsi_3_4h >= 10.0)
long_entry_logic.append(rsi_14_1h_lt_80)
long_entry_logic.append(rsi_14_4h_lt_80)
long_entry_logic.append(rsi_14_1d_lt_80)
long_entry_logic.append(aroonu_14_15m_lt_70)
long_entry_logic.append(aroonu_14_1h_lt_100)
long_entry_logic.append(aroonu_14_4h_lt_100)
long_entry_logic.append(aroonu_14_1d_lt_100)
long_entry_logic.append(stochrsi_k_1d_lt_90)
# Logic
long_entry_logic.append(
(stochrsi_k_lt_20) & (willr_14 < -80.0) & (aroonu_14_lt_25) & (close < (ema_20 * 0.978))
)
# Condition #141 - Top Coins mode (Long).
if long_entry_condition_index == 141:
# Protections
long_entry_logic.append(is_pair_long_top_coins_mode)
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 15m down move, 15m high
((rsi_3_gt_3) | (rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70))
# 5m & 15m down move, 4h still high
& ((rsi_3_gt_3) | (rsi_3_15m_gt_15) | (stochrsi_k_4h_lt_50))
# 5m & 15m down move, 15m high
& ((rsi_3_gt_3) | (rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70))
# 5m & 1h down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_15) | (aroonu_14_15m_lt_40))
# 5m & 1h down move, 1h high
& ((rsi_3_gt_3) | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_80))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_5) | (aroonu_14_15m_lt_40))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_5) | (stochrsi_k_15m_lt_40))
# 5m & 4h down move, 15m still high
& ((rsi_3_gt_3) | rsi_3_4h_gt_20 | (stochrsi_k_15m_lt_50))
# 5m & 4h down move, 1h high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_45) | (stochrsi_k_1h_lt_80))
# 5m & 1d down move, 15m high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_10) | (aroonu_14_15m_lt_70))
# 5m & 1d down move, 15m stil high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_10) | (stochrsi_k_15m_lt_40))
# 5m & 1d down move, 4h still high
& ((rsi_3_gt_3) | (rsi_3_1d_gt_10) | (stochrsi_k_4h_lt_40))
# 5m down move, 1h high
& ((rsi_3_gt_3) | (stochrsi_k_1h_lt_90))
# 5m down move, 15m & 1d high
& ((rsi_3_gt_5) | (aroonu_14_15m_lt_60) | aroonu_14_1d_lt_100)
# 5m down move, 1h & 1d high
& ((rsi_3_gt_10) | aroonu_14_1h_lt_80 | aroonu_14_1d_lt_100)
# 15m & 1h down move, 1d overbought
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (roc_9_1d_lt_100))
# 15m & 1h down move, 1h still not low enough
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_20))
# 15m & 1h down move, 1d overbought
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (roc_9_1d_lt_60))
# 15m & 1h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 4h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_90))
# 15m & 1h down move, 1d still high
& (rsi_3_15m_gt_3 | rsi_3_1h_gt_20 | (stochrsi_k_1d_lt_50))
# 15m & 1h & 4h down move, 1d downtrend
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_25) | (rsi_14_4h_lt_40) | (roc_9_1d_gt_neg_10))
# 15m & 1h down move, 15m still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_30) | (aroonu_14_15m_lt_50))
# 15m & 1h down move, 1d high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_30) | (aroonu_14_1d_lt_80))
# 15m & 1h down move, 4h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_85))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_40) | (stochrsi_k_1h_lt_80))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_80))
# 15m & 1h down move, 1d high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_45) | (stochrsi_k_1d_lt_80))
# 15m & 4h down move, 15m downtrend
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_3) | (cmf_20_15m_gt_neg_0_30))
# 15m & 4h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_40))
# 15m down move, 1h high, 4h overbought
& (rsi_3_15m_gt_3 | aroonu_14_1h_lt_70 | (roc_9_4h_lt_10))
# 15m down move, 1d high & overbought
& (rsi_3_15m_gt_3 | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_10))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_50))
# 15m & 1h & 4h down move, 15m still not low enough, 1h still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_30))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_70))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80))
# 15m & 1d down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_10) | (aroonu_14_1d_lt_40))
# 15m down move, 15m downtrend, 1d high
& ((rsi_3_15m_gt_5) | (cmf_20_15m_gt_neg_0_40) | aroonu_14_1d_lt_100)
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_5) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_10))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_85))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_85))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_15m_lt_50))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 1d still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1d_lt_50))
# 15m & 1h & 4h & 1d down move, 1h still not low enough
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_40) | (stochrsi_k_1h_lt_30))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_15m_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (aroonu_14_1h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_60))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_15m_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_80))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d_lt_20))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (rsi_14_1d_lt_70))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_15m_lt_60))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_70))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_80))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | roc_9_1d_lt_50)
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_30))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_40) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_45) | aroonu_14_4h_lt_70)
# 15m down move, 1h high
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_90))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_50))
# 15m & 1d down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_30) | (stochrsi_k_1d_lt_60))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_60) | (aroonu_14_1h_lt_100))
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_60) | aroonu_14_4h_lt_70)
# 15m down move, 15m high, 1h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_80))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_10) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_100))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_20))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_80))
# 15m & 1h & 1d down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | (rsi_3_1d_gt_25) | (stochrsi_k_1h_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_90))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_15m_lt_50))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_70))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_20) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_60))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_90))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_30))
# 15m down move, 15m downtrend, 1h high
& ((rsi_3_15m_gt_15) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1h_lt_60))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_20))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100)
# 15m down move, 4h & 1d overbought
& ((rsi_3_15m_gt_15) | (roc_9_4h_lt_20) | (roc_9_1d_lt_80))
# 15m & 1h & 1d down move, 4h still high, 4h downtrend
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 15m & 1h down move, 4h high & overbought
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_30) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_20) | (aroonu_14_1h_lt_80) | (roc_9_1d_lt_10))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 15m down move, 4h high, 1d downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_4h_lt_80) | (roc_9_1d_gt_neg_30))
# 15m & 1h & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | (aroonu_14_4h_lt_70))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_25) | (rsi_3_4h_gt_30) | (stochrsi_k_15m_lt_70))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 15m & 4h down mve, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_30) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_90))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_30) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_10))
# 15m down move, 15m high, 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_90))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_10))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_40))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_10))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_40))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (stochrsi_k_15m_lt_20))
# 1h & 4h down move, 4h downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_10))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_60))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50))
# 1h & 4h down move, 15m still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_40))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_25) | (stochrsi_k_4h_lt_60))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_40) | aroonu_14_4h_lt_70)
# 1h & 1d down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_15) | (aroonu_14_1h_lt_20))
# 1h & 1d down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_20) | (aroonu_14_1h_lt_30))
# 1h down move, 15m downtrend, 1d high
& ((rsi_3_1h_gt_10) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1d_lt_70))
# 1h down move, 1h high, 4h high
& ((rsi_3_1h_gt_10) | (aroonu_14_1h_lt_70) | (stochrsi_k_4h_lt_80))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_40))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_50))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (roc_9_1d > -30.0))
# 1h & 1d down move, 4h downtrend
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_15) | (roc_9_4h_gt_neg_30))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_50))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_35) | (aroonu_14_1d_lt_70))
# 1h down move, 1h still high, 1d high
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50) | (stochrsi_k_1d_lt_80))
# 1h down move, 1h still high, 4h overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_4h_lt_10))
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_1d > -30.0))
# 1h down move, 4h still high, 1d overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_1d_lt_40))
# 1h down move, 1d high, 4h downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_20))
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1d overbought
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_30) | (roc_9_1d_lt_100))
# 1h & 4h down move, 1h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_35) | aroonu_14_1h_lt_70)
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_100)
# 1h & 4h down move, 1d downtrend
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_25) | (roc_9_1d_gt_neg_30))
# 1h down move, 15m still high, 1d high
& (rsi_3_1h_gt_20 | (aroonu_14_15m_lt_40) | (aroonu_14_1d_lt_90))
# 1h down move, 1h high, 1d overbought
& (rsi_3_1h_gt_20 | (aroonu_14_1h_lt_60) | (roc_9_1d_lt_10))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | aroonu_14_1h_lt_80)
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 1d high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_35) | (rsi_14_1d_lt_80))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_40))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_30) | (stochrsi_k_1d_lt_80) | (roc_9_1d_lt_20))
# 1h down move, 15m still high, 1h high
& ((rsi_3_1h_gt_30) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_30) | (aroonu_14_4h_lt_90) | (roc_9_1d_lt_40))
# 1h & 4h down move, 1h still high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_35) | (stochrsi_k_1h_lt_50))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_35) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_80)
# 1h down move, 1h high , 1d overbought
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_80) | (roc_9_1d_lt_30))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_35) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_100))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_45) | (rsi_3_1d_gt_45) | aroonu_14_1h_lt_80)
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_45) | (aroonu_14_1h_lt_75) | aroonu_14_4h_lt_100)
# 1h down move, 1h high, 1d high & overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_60) | (stochrsi_k_1d_lt_70) | (roc_9_1d_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_25))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_60) | (rsi_3_1d_gt_60) | aroonu_14_1h_lt_70)
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_20) | (rsi_14_1d_lt_40))
# 4h down move, 1h still not low enough, 4h downtrend
& ((rsi_3_4h_gt_3) | (aroonu_14_1h_lt_20) | (roc_9_4h_gt_neg_10))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_30) | (stochrsi_k_1d_lt_40))
# 4h down move, 1h high
& ((rsi_3_4h_gt_5) | (stochrsi_k_1h_lt_90))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_5) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_10))
# 4h & 1d down move, 1h high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_60))
# 4h & 1d down move, 4h downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (aroonu_14_1d_lt_40))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (roc_9_1d > -30.0))
# 4h & 1d down move, 1h high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_30) | (aroonu_14_1h_lt_100))
# 4h down move, 15m still high, 1h still high
& ((rsi_3_4h_gt_10) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_50))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 4h down move, 15m high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_80))
# 4h down move, 1h still not low enough, 4h downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_20) | (roc_9_4h_gt_neg_20))
# 4h & 1d down move, 15m still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_15) | (stochrsi_k_15m_lt_50))
# 4h & 1d down move, 1h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_40))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_20) | (aroonu_14_1d_lt_60))
# 4h & 1d down move, 4h high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_70)
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_30) | (stochrsi_k_4h_lt_50))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_40) | (aroonu_14_1d_lt_70))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d > 50.0) | (stochrsi_k_4h_lt_40))
# 4h down move, 1d still high, 4h still not low enough
& ((rsi_3_4h_gt_15) | (rsi_14_1d_lt_40) | (stochrsi_k_4h_lt_30))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_4h_gt_neg_10))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_1d_lt_50) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h still not low enough, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 1h downtrend, 1d overbought
& ((rsi_3_4h_gt_15) | (roc_9_1h_gt_neg_10) | (roc_9_1d_lt_200))
# 4h down move, 4h high, 4h downtrend
& (rsi_3_4h_gt_20 | (aroonu_14_4h_lt_60) | (roc_9_4h_gt_neg_20))
# 4h down move, 1d high & overbought
& (rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_70))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_25) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_10))
# 1h down move, 4h still not low enough, 1d downtrend
& (rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_30) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1h high
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_25) | (stochrsi_k_1h_lt_80))
# 4h down move, 1h high
& ((rsi_3_4h_gt_25) | (stochrsi_k_1h_lt_70))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_40) | (roc_9_1d_lt_30))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_30) | (rsi_3_1d_gt_30) | (stochrsi_k_4h_lt_50))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_30) | (rsi_3_1d_gt_60) | (aroonu_14_1d_lt_90))
# 4h down move, 15m & 4h high
& ((rsi_3_4h_gt_30) | (aroonu_14_15m_lt_70) | aroonu_14_4h_lt_70)
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_30) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_35) | (stochrsi_k_1d_lt_80) | (roc_9_1d_lt_20))
# 4h down move, 15m still high, 1h high
& ((rsi_3_4h_gt_35) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_100))
# 4h down move, 1h high
& ((rsi_3_4h_gt_40) | aroonu_14_1h_lt_80)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_20))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_55) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_80))
# 1d down move, 1d high, 4h downtrend
& ((rsi_3_1d_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_40))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_30) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 1d down move, 4h high, 1d overbought
& ((rsi_3_1d_gt_45) | (stochrsi_k_4h_lt_90) | (roc_9_1d_lt_10))
# 1d down move, 1d high & overbought
& ((rsi_3_1d_gt_55) | (stochrsi_k_1d_lt_80) | (roc_9_1d_lt_10))
# 1d down move, 1d overbought
& ((rsi_3_1d_gt_60) | (roc_9_1d_lt_200))
# 15m & 1h high, 4h overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | (roc_9_4h_lt_15))
# 15m & 1h high, 1d overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | (roc_9_1d_lt_100))
# 15m & 1h high, 1d downtrend
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | (roc_9_1d_gt_neg_10))
# 15m high, 1d high & overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_90) | (roc_9_1d_lt_30))
# 15m high, 1d high & overbought
& ((aroonu_14_15m_lt_70) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 15m high, 1h high, 1d downtrend
& ((aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 1h & 4h high, 4h overbought
& ((aroonu_14_1h_lt_90) | (aroonu_14_4h_lt_90) | (roc_9_4h_lt_10))
# 1h & 4h high, 1d overbought
& ((aroonu_14_1h_lt_90) | aroonu_14_4h_lt_100 | roc_9_1d_lt_50)
# 1h & 1d high, 1d overbought
& ((aroonu_14_1h_lt_100) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_40))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_50))
# 4h & 1d high, 1d overbought
& ((aroonu_14_4h_lt_90) | aroonu_14_1d_lt_100 | roc_9_1d_lt_50)
# 1h high, 1h & 4h overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_1h_lt_20) | (roc_9_4h_lt_20))
# 4h & 1d overbought
& ((roc_9_4h_lt_100) | (roc_9_1d_lt_200))
)
# Logic
long_entry_logic.append(
(rsi_20 < rsi_20_shift.shift(1)) & (rsi_3 < 30.0) & (aroonu_14_lt_25) & (close < sma_16 * 0.960)
)
# Condition #142 - Top Coins mode (Long).
if long_entry_condition_index == 142:
# Protections
long_entry_logic.append(is_pair_long_top_coins_mode)
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 4h down move, 15m high
((rsi_3_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_15m_lt_40))
# 5m & 1d down move, 15m high
& ((rsi_3_gt_10) | (rsi_3_1d_gt_30) | (aroonu_14_15m_lt_80))
# 5m down move, 1h & 1d high
& ((rsi_3_gt_10) | aroonu_14_1h_lt_80 | aroonu_14_1d_lt_100)
# 5m down move, 15m & 1h high
& ((rsi_3_gt_10) | (aroonu_14_15m_lt_85) | (aroonu_14_1h_lt_100))
# 15m & 1h & 4h down move
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (rsi_3_4h_gt_15))
# 15m & 1h & 4h down move, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_4h_lt_20))
# 15m & 1h down move, 1d high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (aroonu_14_1d_lt_70))
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 1d overbought
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_10) | (roc_9_1d_lt_60))
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50))
# 15m & 1h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 4h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_90))
# 15m & 1h down move, 15m high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_30) | (aroonu_14_15m_lt_70))
# 15m & 1h down move, 1h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_75))
# 15m & 4h down move, 1d downtrend
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_25) | (aroonu_14_4h_lt_40))
# 15m down move, 1h high, 4h overbought
& (rsi_3_15m_gt_3 | aroonu_14_1h_lt_70 | (roc_9_4h_lt_10))
# 15m down move, 4h high
& (rsi_3_15m_gt_3 | (aroonu_14_4h_lt_90))
# 15m down move, 1h high, 1d overbought
& (rsi_3_15m_gt_3 | (stochrsi_k_1h_lt_60) | (roc_9_1d_lt_20))
# 15m down move, 4h high
& (rsi_3_15m_gt_3 | (stochrsi_k_4h_lt_80))
# 15m & 1d down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (aroonu_14_1d_lt_40))
# 15m & 1h down move, 15m still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_5) | (stochrsi_k_15m_lt_30))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_50))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_70))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_5) | rsi_3_4h_gt_20 | (aroonu_14_15m_lt_60))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_85))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_60))
# 15m & 1h & 4h down move, 15m still not low enough, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (aroonu_14_15m_lt_30) | (stochrsi_k_1h_lt_40))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_5) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80))
# 15m down move, 4h high, 1h overbought
& ((rsi_3_15m_gt_5) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_10))
# 15m & 1h & 4h & 1d down mode, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_20) | (roc_9_1d_gt_neg_50))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_85))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (stochrsi_k_4h_lt_60))
# 15m & 1h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 15m high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | (aroonu_14_15m_lt_60))
# 15m & 1h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (aroonu_14_15m_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (roc_9_1d_lt_60))
# 15m & 4h down move, 1d still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_15m_lt_50))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_80))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (roc_9_1d_lt_20))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (rsi_14_1d_lt_70))
# 15m & 4h down move, 4h still high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_4h_lt_50))
# 14m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_1d_lt_80))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1h_lt_70))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | (stochrsi_k_1d_lt_80))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_10) | rsi_3_4h_gt_20 | roc_9_1d_lt_50)
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 1d high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_30) | (roc_9_1d_lt_30))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_90))
# 15m & 4h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_35) | (roc_9_4h_lt_10))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_40) | (aroonu_14_15m_lt_70))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_50))
# 15m down move, 15m high, 1h high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_70) | (stochrsi_k_1h_lt_80))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_10) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_100))
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_20))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_25) | aroonu_14_4h_lt_100)
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_90))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_15) | (roc_9_1d_gt_neg_20))
# 15m & 4h down move, 1d overbought
& ((rsi_3_15m_gt_15) | rsi_3_4h_gt_20 | roc_9_1d_lt_50)
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_90))
# 15m & 4h down move, 4h overbought
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_45) | (roc_9_4h_lt_20))
# 15m & 1d down move, 4h high
& ((rsi_3_15m_gt_15) | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m downtrend, 1h high
& ((rsi_3_15m_gt_15) | (cmf_20_15m_gt_neg_0_40) | (aroonu_14_1h_lt_60))
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_50) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_15m_lt_70) | (roc_9_1d_lt_10))
# 15m down move, 1h & 4h high
& ((rsi_3_15m_gt_15) | (aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100)
# 15m down move, 1d high & overbought
& ((rsi_3_15m_gt_15) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_20) | (stochrsi_k_1h_lt_60))
# 15m & 1h & 4h & 1d down move, 1h high
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_40) | (rsi_3_4h_gt_40) | (rsi_3_1d_gt_40) | (stochrsi_k_1h_lt_70))
# 15m & 1h & 1d down move, 4h still high, 4h downtrend
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_20) | (aroonu_14_15m_lt_70))
# 15m & 4h down move, 15m still high
& ((rsi_3_15m_gt_20) | (rsi_3_4h_gt_20) | (stochrsi_k_15m_lt_50))
# 15m down move, 15m & 1h high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100))
# 15m down move, 15m high, 1d high
& ((rsi_3_15m_gt_20) | (aroonu_14_15m_lt_90) | aroonu_14_1d_lt_100)
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_20))
# 15m down move, 1h high & overbought
& ((rsi_3_15m_gt_20) | (stochrsi_k_1h_lt_90) | (roc_9_1h_lt_10))
# 15m & 1h & 4h down move, 4h high
& ((rsi_3_15m_gt_25) | (rsi_3_1h_gt_30) | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_70)
# 15m down move, 15m still high, 4h high
& ((rsi_3_15m_gt_25) | (aroonu_14_15m_lt_50) | aroonu_14_4h_lt_80)
# 15m & 4h down mve, 1h high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_80))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_30) | (rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_80))
# 15m down move, 1h high, 1d downtrend
& ((rsi_3_15m_gt_30) | (aroonu_14_1h_lt_90) | (roc_9_1d_gt_neg_10))
# 15m down move, 15m high, 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (stochrsi_k_4h_lt_80))
# 15m down move, 15m & 4h high
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_90))
# 15m down move, 15m high, 1d overbought
& ((rsi_3_15m_gt_35) | (aroonu_14_15m_lt_80) | roc_9_1d_lt_50)
# 15m down move, 1d high, 1h overbought
& ((rsi_3_15m_gt_40) | (stochrsi_k_1d_lt_80) | (roc_9_1h_lt_20))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_3) | (rsi_3_4h_gt_25) | (roc_9_1d_lt_10))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_40))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_5) | rsi_3_4h_gt_20 | (rsi_3_1d_gt_25))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_60))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_15))
# 1h & 4h down move, 1d still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_20))
# 1h & 4h down move, 15m still high
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_50))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_30))
# 1h & 4h down move, 1d overbought
& ((rsi_3_1h_gt_10) | rsi_3_4h_gt_20 | (roc_9_1d_lt_100))
# 1h & 1d downtrend, 1d high
& ((rsi_3_1h_gt_10) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_70))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1h_lt_20))
# 1h & 4h down move. 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_60))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_1d_lt_50))
# 1h & 4h down move, 1h still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_1h_lt_30))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (stochrsi_k_15m_lt_30))
# 1h & 4h down move, 4h still high
& ((rsi_3_1h_gt_15) | rsi_3_4h_gt_20 | (stochrsi_k_4h_lt_40))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_20) | (stochrsi_k_1d_lt_40))
# 1h & 1d down move, 1d high
& ((rsi_3_1h_gt_15) | (rsi_3_1d_gt_35) | (aroonu_14_1d_lt_70))
# 1h down move, 15m & 1d high
& ((rsi_3_1h_gt_15) | (aroonu_14_15m_lt_70) | (aroonu_14_1d_lt_100))
# 1h down move, 1h still high, 4h overbought
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_4h_lt_10))
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (aroonu_14_1h_lt_50) | (roc_9_1d > -30.0))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_15) | (roc_9_4h_lt_30) | roc_9_1d_lt_50)
# 1h & 4h down move, 1h still high
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | (aroonu_14_1h_lt_50))
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 1d overbought
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_30) | (roc_9_1d_lt_100))
# 1h & 4h down move, 1h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_35) | aroonu_14_1h_lt_70)
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_100)
# 1h down move, 1d high, 4h & 1d overbought
& ((rsi_3_1h_gt_20) | (aroonu_14_1d_lt_80) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1h down move, 4h high & overbought, 1d downtrend
& ((rsi_3_1h_gt_20) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 15m high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_25) | (stochrsi_k_15m_lt_70))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_25) | (rsi_3_4h_gt_30) | (aroonu_14_4h_lt_60))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_25) | (roc_9_4h_lt_30) | (roc_9_1d_lt_60))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_25) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_50))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_60))
# 1h & 4g down move, 4h still high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_4h_lt_50))
# 1h down move, 15m still high, 1h high
& ((rsi_3_1h_gt_30) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 1h down move, 4h high, 1d overbought
& ((rsi_3_1h_gt_35) | aroonu_14_4h_lt_70 | (roc_9_1d_lt_100))
# 1h down move, 4h & 1d high
& ((rsi_3_1h_gt_35) | aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100)
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_35) | (stochrsi_k_1h_lt_50) | (roc_9_1d_gt_neg_30))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_45) | (rsi_3_1d_gt_45) | aroonu_14_1h_lt_80)
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_45) | (aroonu_14_1h_lt_75) | aroonu_14_4h_lt_100)
# 1h down move, 1h high, 1d high & overbought
& ((rsi_3_1h_gt_45) | (stochrsi_k_1h_lt_60) | (stochrsi_k_1d_lt_70) | (roc_9_1d_lt_40))
# 1h down move, 4h high & overbought
& ((rsi_3_1h_gt_50) | (stochrsi_k_4h_lt_90) | (roc_9_4h_lt_25))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_10) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_20) | (rsi_14_1d_lt_40))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_45) | (aroonu_14_1d_lt_70))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_5) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_10))
# 4h down move, 1h high
& ((rsi_3_4h_gt_5) | (stochrsi_k_1h_lt_90))
# 4h & 1d down move, 1h still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_50))
# 4h & 1d down move, 1h high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (stochrsi_k_1h_lt_70))
# 4h down move, 15m still high, 1h still high
& ((rsi_3_4h_gt_10) | (aroonu_14_15m_lt_40) | (stochrsi_k_1h_lt_50))
# 4h down move, 1d still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50) | (roc_9_1d > -30.0))
# 4h down move, 15m high
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_80))
# 4h down move, 15m still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_15m_lt_50) | (roc_9_1d > -30.0))
# 4h down move, 1h still high, 1d downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_50) | (roc_9_1d > -30.0))
# 4h down move, 1h high, 4h downtrend
& ((rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_70) | (roc_9_4h_gt_neg_20))
# 4h down move, 4h & 1d downtrend
& ((rsi_3_4h_gt_10) | (roc_9_4h_gt_neg_15) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_15) | (aroonu_14_1d_lt_50))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_20) | (aroonu_14_4h_lt_40))
# 4h & 1d down move, 4h high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_25) | aroonu_14_4h_lt_70)
# 4h & 1d down move, 15m high
& ((rsi_3_4h_gt_15) | (rsi_3_1d_gt_30) | (stochrsi_k_15m_lt_80))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_15) | (rsi_3_1d > 50.0) | (stochrsi_k_4h_lt_40))
# 4h down move, 1d still high, 4h still not low enough
& ((rsi_3_4h_gt_15) | (rsi_14_1d_lt_40) | (stochrsi_k_4h_lt_30))
# 4h down move, 15m still not low enough, 1d high
& ((rsi_3_4h_gt_15) | (aroonu_14_15m_lt_30) | (aroonu_14_1d_lt_70))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50) | (roc_9_4h_gt_neg_10))
# 4h down move, 4h still not low enough, 1d downtrend
& ((rsi_3_4h_gt_15) | (stochrsi_k_4h_lt_20) | (roc_9_1d_gt_neg_20))
# 4h down move, 4h & 1d high
& ((rsi_3_4h_gt_20) | (aroonu_14_4h_lt_70) | (aroonu_14_1d_lt_70))
# 4h down move, 4h high
& ((rsi_3_4h_gt_20) | (aroonu_14_4h_lt_80))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_20) | (aroonu_14_1d_lt_80) | (roc_9_1d_lt_70))
# 4h down move, 4h still high, 4h downtrend
& ((rsi_3_4h_gt_20) | (stochrsi_k_4h_lt_50) | (roc_9_4h_gt_neg_20))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_20) | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_20))
# 4h down move, 1d overbought
& ((rsi_3_4h_gt_20) | (roc_9_1d_lt_80))
# 4h & 1d down move, 4h overbought
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_45) | (roc_9_4h_lt_5))
# 4h & 1d down move, 1d overbought
& ((rsi_3_4h_gt_25) | (rsi_3_1d_gt_45) | (roc_9_1d_lt_10))
# 4h down move, 15m still not low enough, 4h still high
& ((rsi_3_4h_gt_25) | (aroonu_14_15m_lt_30) | (stochrsi_k_4h_lt_40))
# 4h down move, 1d high, 4h overbought
& ((rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80) | (roc_9_4h_lt_5))
# 4h & 1d down move, 4h still high
& ((rsi_3_4h_gt_30) | (rsi_3_1d_gt_30) | (stochrsi_k_4h_lt_50))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_30) | (rsi_3_1d_gt_60) | (aroonu_14_1d_lt_90))
# 4h down move, 4h high, 1d high
& ((rsi_3_4h_gt_30) | (aroonu_14_4h_lt_70) | (stochrsi_k_1d_lt_80))
# 4h down move, 1d stil high, 1d downtrend
& ((rsi_3_4h_gt_30) | (aroonu_14_1d_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 1h high, 1d downtrend
& ((rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_80) | (roc_9_1d_gt_neg_40))
# 4h & 1d down move, 4h still high, 1d high
& ((rsi_3_4h_gt_35) | (rsi_3_1d_gt_35) | (stochrsi_k_4h_lt_50) | (aroonu_14_1d_lt_60))
# 4h down move, 15m still high, 1h high
& ((rsi_3_4h_gt_35) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_100))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_35) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_30))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_35) | (stochrsi_k_1d_lt_80) | (roc_9_1d_lt_20))
# 4h down move, 1h high
& ((rsi_3_4h_gt_40) | (aroonu_14_1h_lt_80))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_45) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_20))
# 4h down move, 4h high, 1d downtrend
& ((rsi_3_4h_gt_45) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_25))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_50) | (aroonu_14_1d_lt_85) | (roc_9_1d_lt_200))
# 4h down move, 4h high & overbought
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_70) | (roc_9_4h_lt_10))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_50) | (stochrsi_k_4h_lt_50) | (roc_9_1d_gt_neg_40))
# 4h down move, 4h & 1d overbought
& ((rsi_3_4h_gt_50) | (roc_9_4h_lt_10) | roc_9_1d_lt_50)
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_55) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_80))
# 1d down move, 1d high, 4h downtrend
& ((rsi_3_1d_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_4h_gt_neg_40))
# 1d down move, 1d high, 1d downtrend
& ((rsi_3_1d_gt_15) | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1d down move, 1h & 4h high
& ((rsi_3_1d_gt_30) | aroonu_14_1h_lt_70 | aroonu_14_4h_lt_100)
# 15m & 1h high, 4h overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | (roc_9_4h_lt_15))
# 15m & 1h high, 1d overbought
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | (roc_9_1d_lt_100))
# 15m & 1h high, 1d downtrend
& ((aroonu_14_15m_lt_70) | (aroonu_14_1h_lt_100) | (roc_9_1d_gt_neg_10))
# 15m & 4h & 1d high
& ((aroonu_14_15m_lt_70) | (aroonu_14_4h_lt_90) | aroonu_14_1d_lt_100)
# 15m high, 1d high & overbought
& ((aroonu_14_15m_lt_70) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_20))
# 15m high, 1h & 4h overbought
& ((aroonu_14_15m_lt_70) | (roc_9_1h_lt_10) | (roc_9_4h_lt_10))
# 15m high, 4h overbought, 1d downtrend
& ((aroonu_14_15m_lt_80) | (roc_9_4h_lt_20) | (roc_9_1d_gt_neg_30))
# 15m & 1h high
& ((aroonu_14_15m_lt_90) | (aroonu_14_1h_lt_100))
# 15m & 4h high
& ((aroonu_14_15m_lt_90) | aroonu_14_4h_lt_100)
# 1h & 1d high, 1d overbought
& ((aroonu_14_1h_lt_100) | aroonu_14_1d_lt_100 | (roc_9_1d_lt_10))
# 1h & 4h high, 1h overbought
& ((aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100 | (roc_9_1h_lt_10))
# 1h & 4h high, 4h overbought
& ((aroonu_14_1h_lt_100) | aroonu_14_4h_lt_100 | (roc_9_4h_lt_10))
# 4h & 1d high, 4h overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_4h_lt_20))
# 4h & 1d high, 1d overbought
& (aroonu_14_4h_lt_100 | aroonu_14_1d_lt_100 | (roc_9_1d_lt_30))
# 4h high, 1h & 4h overbought
& (aroonu_14_4h_lt_100 | (roc_9_1h_lt_20) | (roc_9_4h_lt_40))
# 1d high, 4h & 1d downtrend
& ((aroonu_14_1d_lt_60) | (roc_9_4h_gt_neg_20) | (roc_9_1d_gt_neg_30))
# 1d high, 4h & 1d overbought
& (aroonu_14_1d_lt_100 | (roc_9_4h_lt_60) | (roc_9_1d_lt_100))
# 15m high, 4h & 1d overbought
& ((stochrsi_k_15m_lt_70) | (roc_9_4h_lt_20) | (roc_9_1d_lt_20))
# 1h high, 1h & 1d overbought
& ((stochrsi_k_1h_lt_80) | (roc_9_1h_lt_20) | (roc_9_1d_lt_100))
# 4h high, 4h overbought, 1d downtrend
& ((stochrsi_k_4h_lt_90) | (roc_9_4h_lt_20) | (roc_9_1d_gt_neg_20))
# 1d high, 1h & 4h overbought
& ((stochrsi_k_1d_lt_80) | (roc_9_1h_lt_20) | (roc_9_4h_lt_20))
)
# Logic
long_entry_logic.append(
(rsi_3_gt_5)
& (rsi_4 < 46.0)
# & (stochrsi_k < 20.0)
& (rsi_20 < rsi_20_shift.shift(1))
& (close < sma_16 * 0.960)
)
# Condition #143 - Top Coins mode (Long).
if long_entry_condition_index == 143:
# Protections
long_entry_logic.append(is_pair_long_top_coins_mode)
long_entry_logic.append(num_empty_288 <= allowed_empty_candles_288)
long_entry_logic.append(protections_long_global == True)
long_entry_logic.append(
# 5m & 4h & 1d down move
((rsi_3_gt_3) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_10))
# 5m & 4h down move, 4h still high
& ((rsi_3_gt_3) | (rsi_3_4h_gt_10) | (stochrsi_k_4h_lt_50))
# 15m & 1h down move, 1h still not low enough
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_3) | (aroonu_14_1h_lt_25))
# 15m & 1h & 4h down move
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_5) | (rsi_3_4h_gt_10))
# 15m & 1h & 4h down move, 15m still not low enough, 4h still not low enough
& ((rsi_3_15m_gt_3) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_20) | (aroonu_14_15m_lt_20) | (aroonu_14_4h_lt_20))
# 15m & 1h down move, 15m still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (aroonu_14_15m_lt_40))
# 15m & 1h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (aroonu_14_4h_lt_40))
# 15m & 1h down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_50))
# 15m & 1h down move, 4h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_15) | (stochrsi_k_4h_lt_90))
# 15m & 1h down move, 15m high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_30) | (aroonu_14_15m_lt_70))
# 15m & 1h down move, 1d downtrend
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_35) | (roc_9_1d_gt_neg_30))
# 15m & 1h down move, 4h high
& (rsi_3_15m_gt_3 | (rsi_3_1h_gt_40) | (aroonu_14_1h_lt_85))
# 15m & 4h down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_50))
# 15m & 4h down move, 15m still high
& (rsi_3_15m_gt_3 | rsi_3_4h_gt_20 | (aroonu_14_15m_lt_50))
# 15m & 1d down move, 4h still high
& (rsi_3_15m_gt_3 | (rsi_3_1d_gt_20) | (stochrsi_k_4h_lt_50))
# 15m & 4h down move, 1d still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_5) | (rsi_14_1d_lt_40))
# 15m & 1h down move, 4h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_10) | (rsi_14_4h_lt_40))
# 15m & 1h down move, 1d high
& ((rsi_3_15m_gt_5) | (rsi_3_1h_gt_15) | (aroonu_14_1d_lt_100))
# 15m & 4h down move, 15m still not low enough
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_15m_lt_30))
# 15m & 4h down move, 4h high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_4h_lt_80))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_40))
# 15m & 4h down move, 1d downtrend
& ((rsi_3_15m_gt_5) | (rsi_3_4h_gt_10) | (roc_9_1d_gt_neg_20))
# 15m & 1d down move, 1h still high
& ((rsi_3_15m_gt_5) | (rsi_3_1d_gt_10) | (aroonu_14_1h_lt_50))
# 15m & 1d down move, 1h still high
& (rsi_3_15m_gt_3 | (rsi_3_1d_gt_25) | (stochrsi_k_1h_lt_50))
# 15m down move, 1h high, 4h overbought
& (rsi_3_15m_gt_3 | aroonu_14_1h_lt_70 | (roc_9_4h_lt_10))
# 15m down move, 4h high, 1d downtrend
& (rsi_3_15m_gt_3 | (stochrsi_k_4h_lt_70) | (roc_9_1d_gt_neg_20))
# 15m down move, 15m still high, 1d downtrend
& ((rsi_3_15m_gt_5) | (aroonu_14_15m_lt_50) | (roc_9_1d_gt_neg_20))
# 15m down move, 1h high, 1d overbought
& ((rsi_3_15m_gt_5) | (stochrsi_k_1h_lt_50) | (roc_9_1d_lt_40))
# 15m & 1h & 4h & 1d down mode, 1d downtrend
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (rsi_3_4h_gt_20) | (rsi_3_1d_gt_20) | (roc_9_1d_gt_neg_50))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_1h_lt_60))
# 15m & 1h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_10) | (aroonu_14_4h_lt_60))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | rsi_3_1h_gt_20 | aroonu_14_1h_lt_80)
# 15m & 1h & 4h down move, 4h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_20) | (rsi_3_4h_gt_40) | (aroonu_14_4h_lt_80))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_25) | (stochrsi_k_1h_lt_70))
# 15m & 1h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1h_gt_30) | (stochrsi_k_1h_lt_70))
# 15m & 4h down move, 1h still high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1h_lt_50))
# 15m & 4h down move, 4h still high, 1d high & overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_40) | (aroonu_14_1d_lt_70) | (roc_9_1d_lt_10))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_20) | (stochrsi_k_1h_lt_70))
# 15m & 4h down move, 4h overbought
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_35) | (roc_9_4h_lt_10))
# 15m & 1d down move, 1h high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_70))
# 15m & 1d down move, 4h still high
& ((rsi_3_15m_gt_10) | (rsi_3_1d_gt_10) | (stochrsi_k_4h_lt_40))
# 15m & 4h down move, 15m high
& ((rsi_3_15m_gt_10) | (rsi_3_4h_gt_40) | (aroonu_14_15m_lt_70))
# 15m down move, 15m high, 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_15m_lt_60) | (aroonu_14_1d_lt_100))
# 15m down move, 1h & 1d high
& ((rsi_3_15m_gt_10) | (aroonu_14_1h_lt_90) | (aroonu_14_1d_lt_100))
# 15m down move, 4h high, 1d overbought
& ((rsi_3_15m_gt_10) | (aroonu_14_4h_lt_70) | (roc_9_1d_lt_100))
# 15m down move, 1h still high, 1d downtrend
& ((rsi_3_15m_gt_10) | (stochrsi_k_1h_lt_50) | (roc_9_1d_gt_neg_20))
# 15m & 1h down move, 1h high, 1d high & overbought
& ((rsi_3_15m_gt_15) | (rsi_3_1h_gt_15) | (aroonu_14_1h_lt_70) | (aroonu_14_1d_lt_100) | (roc_9_1d_lt_10))
# 15m & 4h down move, 1h high
& ((rsi_3_15m_gt_15) | (rsi_3_4h_gt_35) | (aroonu_14_1h_lt_90))
# 15m & 1h & 1d down move, 4h still high, 4h downtrend
& ((rsi_3_15m_gt_20) | (rsi_3_1h_gt_25) | (rsi_3_1d_gt_25) | (aroonu_14_4h_lt_40) | (roc_9_4h_gt_neg_20))
# 1h & 1d down move, 1d still high
& ((rsi_3_1h_gt_3) | (rsi_3_1d_gt_25) | (stochrsi_k_1d_lt_40))
# 1h & 4h down move, 1d downtrend
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_5) | (roc_9_1d_gt_neg_30))
# 1h & 4h down move, 1d still high
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (aroonu_14_1d_lt_50))
# 1h & 4h & 1d down move
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_10) | (rsi_3_1d_gt_20))
# 1h & 4h down move, 4h still not low enough
& ((rsi_3_1h_gt_5) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_30))
# 1h down move, 4h & 1d downtrend
& ((rsi_3_1h_gt_5) | (roc_9_4h_gt_neg_10) | (roc_9_1d_gt_neg_20))
# 1h & 4h down move, 1d still not low enough
& ((rsi_3_1h_gt_10) | (rsi_3_4h_gt_10) | (stochrsi_k_1d_lt_20))
# 1h & 4h down move, 15m still not low enough
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_3) | (stochrsi_k_15m_lt_30))
# 1h & 4h down move, 4h high
& ((rsi_3_1h_gt_15) | (rsi_3_4h_gt_15) | (aroonu_14_4h_lt_60))
# 1h down move, 1h still not low enough, 1d overbought
& ((rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_30) | roc_9_1d_lt_50)
# 1h down move, 1h still high, 1d downtrend
& ((rsi_3_1h_gt_15) | (stochrsi_k_1h_lt_40) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high & overbought
& ((rsi_3_1h_gt_15) | (stochrsi_k_1d_lt_90) | (roc_9_1d_lt_40))
# 1h & 4h down move, 1h high
& (rsi_3_1h_gt_20 | rsi_3_4h_gt_20 | aroonu_14_1h_lt_70)
# 1h & 4h down move, 1d high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_25) | (aroonu_14_1d_lt_80))
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_35) | aroonu_14_4h_lt_70)
# 1h & 4h down move, 4h high
& (rsi_3_1h_gt_20 | (rsi_3_4h_gt_50) | aroonu_14_4h_lt_100)
# 1h & 1d down move, 1d overbought
& (rsi_3_1h_gt_20 | (rsi_3_1d_gt_40) | (roc_9_1d_lt_30))
# 1h down move, 1d high, 1d downtrend
& (rsi_3_1h_gt_20 | (aroonu_14_1d_lt_70) | (roc_9_1d_gt_neg_20))
# 1h down move, 1d high, 4h & 1d overbought
& ((rsi_3_1h_gt_20) | (aroonu_14_1d_lt_80) | (roc_9_4h_lt_10) | (roc_9_1d_lt_40))
# 1h down move, 4h high & overbought, 1d downtrend
& ((rsi_3_1h_gt_20) | (stochrsi_k_4h_lt_80) | (roc_9_4h_lt_10) | (roc_9_1d_gt_neg_20))
# 1h down move, 1h & 4h high
& ((rsi_3_1h_gt_25) | (aroonu_14_1h_lt_80) | (aroonu_14_4h_lt_100))
# 1h down move, 4h & 1d overbought
& ((rsi_3_1h_gt_25) | (roc_9_4h_lt_20) | (roc_9_1d_lt_30))
# 1h & 4h down move, 1h high
& ((rsi_3_1h_gt_30) | (rsi_3_4h_gt_30) | (stochrsi_k_1h_lt_60))
# 1h down move, 15m still high, 1h high
& ((rsi_3_1h_gt_30) | (aroonu_14_15m_lt_50) | (aroonu_14_1h_lt_85))
# 1h & 1d down move, 1h high
& ((rsi_3_1h_gt_45) | (rsi_3_1d_gt_45) | aroonu_14_1h_lt_80)
# 4h & 1d down move, 15m still not low enough
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_15) | (aroonu_14_15m_lt_20))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_3) | (rsi_3_1d_gt_25) | (aroonu_14_1d_lt_70))
# 4h & 1d down move, 1d downtrend
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_5) | (roc_9_1d_gt_neg_30))
# 4h & 1d down move, 1h still high
& ((rsi_3_4h_gt_5) | (rsi_3_1d_gt_10) | (stochrsi_k_1h_lt_50))
# 4h down move, 4h still high, 1d downtrend
& ((rsi_3_4h_gt_5) | (stochrsi_k_4h_lt_40) | (roc_9_1d_gt_neg_20))
# 4h & 1d down move, 1d high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_15) | (aroonu_14_1d_lt_70))
# 4h & 1d down move, 15m still high
& ((rsi_3_4h_gt_10) | (rsi_3_1d_gt_20) | (stochrsi_k_15m_lt_40))
# 4h down move, 1d high & overbought
& ((rsi_3_4h_gt_10) | (aroonu_14_1d_lt_10