Integration Points
Referenced Files in This Document
- NostalgiaForInfinityX6.py
- docker-compose.yml
- docker-compose.tests.yml
- configs/trading_mode-futures.json
- configs/trading_mode-spot.json
- configs/exampleconfig.json
- configs/blacklist-binance.json
- configs/pairlist-static-binance-spot-usdt.json
- README.md
Table of Contents
- Freqtrade Framework Integration
- Exchange Integration and Configuration
- Docker-Based Deployment
- Extending Integrations
Freqtrade Framework Integration
The NostalgiaForInfinityX6 strategy is built on the Freqtrade framework, a popular open-source cryptocurrency trading bot written in Python. It leverages Freqtrade's modular architecture to define trading logic through a well-defined interface. The strategy inherits from IStrategy, which mandates the implementation of specific methods to control entry, exit, and position management logic.
Required Strategy Methods and Contracts
The following methods are essential components of the integration contract between NostalgiaForInfinityX6 and the Freqtrade engine:
populate_indicators
This method computes technical indicators used for generating trading signals. It receives a DataFrame containing historical price data (OHLCV) and returns the same DataFrame enriched with calculated indicators.
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
In NostalgiaForInfinityX6, this method orchestrates the calculation of indicators across multiple timeframes (5m, 15m, 1h, 4h, 1d) using pandas_ta. It also merges BTC/USD data for cross-asset correlation analysis. The method ensures that all necessary indicators such as RSI, EMA, CMF, Bollinger Bands, and Stochastic RSI are precomputed before signal generation.
populate_entry_trend
Responsible for generating buy/long or sell/short entry signals based on the indicators computed in populate_indicators.
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
The strategy uses a complex set of conditions grouped into different "modes" (e.g., normal, pump, quick, rebuy). Entry signals are generated by evaluating combinations of RSI divergences, volume spikes, moving average crossovers, and market structure breaks. Each condition can be toggled via configuration parameters like long_entry_condition_1_enable.
populate_exit_trend
Determines when to close a position by generating exit signals.
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
Exit logic is mode-specific and includes trailing profit targets, stop-loss mechanisms, and dynamic take-profit levels. The strategy evaluates both profit ratios and market momentum (e.g., RSI, CMF) to decide optimal exit points. For example, rapid mode exits are triggered earlier than normal mode to lock in quick gains during volatile moves.
custom_exit
Provides advanced, state-aware exit logic beyond simple trend-based signals.
def custom_exit(self, pair: str, trade: Trade, current_time: datetime, current_rate: float, current_profit: float, **kwargs):
This method allows the strategy to inspect the full trade history, including filled orders and profit calculations. It enables sophisticated behaviors such as:
- Mode-specific exit strategies (e.g., long_exit_normal, long_exit_rapid)
- Derisking after partial profit realization
- Stop-loss activation based on cumulative drawdown
- Integration with external profit caching via target_profit_cache
adjust_trade_position
Enables dynamic position sizing and pyramiding (adding to winning positions).
def adjust_trade_position(self, trade: Trade, current_time: datetime, current_rate: float, current_profit: float, min_stake: float, max_stake: float, **kwargs):
This method supports: - Rebuy logic: Adds to positions when price retraces within predefined thresholds - Grinding: Implements a multi-tiered averaging-down strategy with configurable stakes and stop-grind levels - Derisking: Reduces exposure after reaching certain profit milestones - Mode-specific adjustments (e.g., rebuy mode uses higher leverage)
The method returns a stake amount to add or None if no adjustment is needed.
custom_stake_amount
Customizes the initial stake size based on entry mode and market conditions.
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float, proposed_stake: float, min_stake: float, max_stake: float, entry_tag: str, side: str, **kwargs):
Stake multipliers vary by mode:
- Rebuy mode: Uses rebuy_mode_stake_multiplier
- Rapid mode: Applies reduced stakes (rapid_mode_stake_multiplier)
- Grind mode: Selects stake size from a predefined list based on available slots
This allows risk management tailored to each trading scenario.
Section sources - NostalgiaForInfinityX6.py
Exchange Integration and Configuration
NostalgiaForInfinityX6 integrates with multiple cryptocurrency exchanges through Freqtrade's unified exchange adapter layer. This abstraction allows the same strategy code to run across different platforms with minimal changes.
Supported Exchanges
The strategy has been tested and configured for the following exchanges: - Binance - Kucoin - Gate.io - OKX - Bybit - Bitget - Bitmart - Bitvavo - HTX (Huobi) - Kraken - MEXC - Hyperliquid
Exchange-specific nuances are handled via configuration files rather than code changes.
Configuration-Driven Exchange Handling
Exchange behavior is controlled through JSON configuration files located in the configs/ directory:
Trading Mode Configuration
trading_mode-spot.json: Configures spot trading parameterstrading_mode-futures.json: Enables futures trading with leverage settings
These files set:
"trading_mode": "futures",
"margin_mode": "isolated",
"leverage": 3.0
Pair Lists
Dynamic pair selection based on volume or static lists:
- pairlist-volume-binance-usdt.json: Selects top N pairs by trading volume
- pairlist-static-binance-spot-usdt.json: Fixed list of pairs
Blacklists
Prevents trading undesirable assets:
- blacklist-binance.json: Blocks leveraged tokens (BULL, BEAR), low-volume pairs, and known scam tokens
- Exchange-specific blacklists ensure compliance with platform characteristics
Exchange-Specific Startup Candles
Due to API limitations on historical data retrieval, the required warm-up period varies:
if self.config["exchange"]["name"] in ["okx", "okex"]:
self.startup_candle_count = 480
elif self.config["exchange"]["name"] in ["kraken"]:
self.startup_candle_count = 710
elif self.config["exchange"]["name"] in ["bybit"]:
self.startup_candle_count = 199
This ensures sufficient data for indicator calculation on exchanges with limited API depth.
CCXT Configuration
Fine-tunes exchange adapter behavior:
config["exchange"]["ccxt_config"]["options"] = {
"brokerId": None,
"broker": {"spot": None, "future": None},
"partner": {"spot": {"id": None, "key": None}}
}
This allows setting broker IDs, rate limiting, and other low-level parameters.
Section sources - NostalgiaForInfinityX6.py - configs/trading_mode-futures.json - configs/trading_mode-spot.json - configs/blacklist-binance.json - configs/pairlist-static-binance-spot-usdt.json
Docker-Based Deployment
The strategy uses Docker Compose for both production deployment and CI/CD testing, ensuring environment consistency across stages.
Production Deployment (docker-compose.yml)
services:
freqtrade:
image: freqtradeorg/freqtrade:stable
container_name: ${FREQTRADE__BOT_NAME}_${FREQTRADE__EXCHANGE__NAME}_${FREQTRADE__TRADING_MODE}-${FREQTRADE__STRATEGY}
volumes:
- "./user_data:/freqtrade/user_data"
- "./configs:/freqtrade/configs"
- "./${FREQTRADE__STRATEGY}.py:/freqtrade/${FREQTRADE__STRATEGY}.py"
environment:
FREQTRADE__BOT_NAME: Example_Test_Account
FREQTRADE__EXCHANGE__NAME: binance
FREQTRADE__TRADING_MODE: futures
FREQTRADE__STRATEGY: NostalgiaForInfinityX6
command: trade --db-url sqlite:///user_data/tradesv3.sqlite --strategy-path .
Key Integration Points:
- Volume Mounts: Connect local configuration and strategy files to the container
./user_data:/freqtrade/user_data: Persistent data storage./configs:/freqtrade/configs: Configuration files./NostalgiaForInfinityX6.py:/freqtrade/NostalgiaForInfinityX6.py: Strategy file- Environment Variables: Control bot behavior without modifying code
FREQTRADE__BOT_NAME: Distinguishes multiple bot instancesFREQTRADE__EXCHANGE__NAME: Switches between exchangesFREQTRADE__TRADING_MODE: Toggles spot vs futuresFREQTRADE__STRATEGY: Specifies strategy class- Health Checks: Monitors API server availability
- Restart Policy: Ensures high availability
CI/CD Testing (docker-compose.tests.yml)
Provides isolated environments for backtesting and analysis:
services:
backtesting:
image: freqtrade_with_numba
command: >
backtesting
--strategy-list NostalgiaForInfinityX6
--config configs/trading_mode-spot.json
--config configs/exampleconfig.json
--config configs/pairlist-backtest-static-binance-spot-usdt.json
--config configs/blacklist-binance.json
--timerange 20230101-
Testing Workflow Integration:
- Backtesting: Evaluates strategy performance across historical data
- Backtesting Analysis: Generates statistical reports and win rate analysis
- Plotting: Visualizes trades and indicators for debugging
- Parameter Sweeps: Tests different market conditions via
TIMERANGEandEXCHANGEvariables
Environment Variables for Testing:
EXCHANGE: Switches between Binance, Kucoin, Gate.io, etc.TRADING_MODE: Tests spot vs futures behaviorTIMERANGE: Specifies historical period (e.g.,20230101-)STRATEGY_NAME: Allows testing strategy variants
Configuration File Integration
The Docker setup enables seamless configuration management:
# Run with custom configuration
FREQTRADE__EXCHANGE__NAME=kucoin \
FREQTRADE__TRADING_MODE=spot \
docker-compose up
This approach allows: - Easy switching between exchanges - Parallel testing of different trading modes - Isolated configuration for multiple bot instances - Reproducible environments for development and production
Section sources - docker-compose.yml - docker-compose.tests.yml - configs/exampleconfig.json
Extending Integrations
The architecture supports easy extension to new exchanges and data sources.
Adding New Exchanges
To integrate with a new exchange:
- Verify CCXT Support: Ensure the exchange is supported by CCXT (Freqtrade's underlying library)
- Create Configuration Files:
bash cp configs/blacklist-binance.json configs/blacklist-newexchange.json cp configs/pairlist-static-binance-spot-usdt.json configs/pairlist-static-newexchange-spot-usdt.json - Adjust Startup Candles: If the exchange has API limitations, update
startup_candle_countin the strategy - Test with Docker:
bash EXCHANGE=newexchange docker-compose -f docker-compose.tests.yml up backtesting
Integrating New Data Sources
To incorporate alternative data (e.g., on-chain metrics, sentiment):
- Implement Informative Pair:
python def informative_pairs(self): pairs = super().informative_pairs() # Add custom data feed pairs.append(("BTC/USDT", "1d")) pairs.append(("ONCHAIN_DATA", "1d")) return pairs - Fetch and Process Data: Use
self.dp.get_pair_dataframe()to retrieve external data - Merge with Price Data: Use
merge_informative_pair()to align timeframes - Use in Indicators: Incorporate external signals into entry/exit logic
Custom Strategy Variants
Create specialized versions by:
- Inheriting from NostalgiaForInfinityX6
- Overriding specific methods (e.g., adjust_trade_position)
- Using configuration parameters to toggle features
- Deploying with unique strategy names via Docker environment variables
This modular design ensures that core logic remains stable while allowing customization for specific trading objectives or market conditions.
Section sources - NostalgiaForInfinityX6.py - docker-compose.yml - docker-compose.tests.yml