Skip to main content

Schism Strategy Deep Analysis

Strategy Number: #375 (375th of 465 strategies)
Strategy Type: Multi-condition trend following + Dynamic take-profit/stop-loss + Real-time position awareness
Timeframe: 5 minutes (5m) + 1-hour information layer (1h)


1. Strategy Overview

Schism is a medium-to-short-term trading strategy combining momentum indicators with trend judgment. Its core features include "sticky buy signals" and "dynamic stop-loss mechanisms." The strategy uses RMI (Relative Momentum Index) dual timeframe analysis, combined with Momentum Pinball and ADR (Average Daily Range) positioning, to implement a trading logic of "bottom fishing but not blind bottom fishing."

This strategy was developed by @werkkrew and @JimmyNixx and is the foundational version of the Schism series, which later evolved into advanced versions like Schism2 and Schism2MM.

Core Features

FeatureDescription
Buy Conditions2 independent buy signal groups (new position buy + position continuation signals), supports ignore_roi_if_buy_signal
Sell ConditionsDynamic stop-loss + Tiered ROI take-profit, combined with other trade status decisions
Protection MechanismsOrder timeout protection, entry confirmation, price slippage protection
TimeframeMain timeframe 5m + Information timeframe 1h
Dependenciesnumpy, talib, qtpylib, arrow, pandas, technical.indicators.RMI, cachetools.TTLCache

2. Strategy Configuration Analysis

2.1 Basic Risk Parameters

# ROI exit table
minimal_roi = {
"0": 0.10, # Immediately requires 10% profit
"15": 0.05, # After 15 minutes requires 5%
"30": 0.025, # After 30 minutes requires 2.5%
"60": 0.01, # After 1 hour requires 1%
"120": 0.005, # After 2 hours requires 0.5%
"1440": 0 # After 24 hours accepts any profit
}

# Stop-loss setting
stoploss = -0.40 # 40% hard stop-loss

# Signal configuration
use_sell_signal = True
sell_profit_only = True
ignore_roi_if_buy_signal = True # Key: Ignore ROI when buy signal is active

Design Philosophy:

  • ROI thresholds decrease over time, from 10% down to 0%, adapting to medium-term holdings
  • Stop-loss is relatively wide (-40%), providing ample room for volatility
  • ignore_roi_if_buy_signal = True is the core, allowing position continuation signals to override ROI

2.2 Order Type Configuration

The strategy does not explicitly define order_types, using Freqtrade default configuration.

2.3 Buy Parameters

buy_params = {
'rmi-slow': 20, # Slow RMI lower limit
'rmi-fast': 20, # Fast RMI upper limit
'mp': 50, # Momentum Pinball upper limit
'inf-rsi': 30, # Information layer RSI lower limit
'inf-pct-adr': 0.8 # ADR percentile threshold
}

3. Buy Conditions Detailed

3.1 Technical Indicator System

The strategy uses a multi-dimensional indicator combination:

Indicator CategorySpecific IndicatorParametersPurpose
MomentumRMI-slowlength=21, mom=5Trend direction judgment
MomentumRMI-fastlength=8, mom=4Fast signal capture
MomentumROCtimeperiod=6Rate of change measurement
CompositeMomentum PinballRSI(ROC, 6)Overbought/oversold positioning
TrendRMI-up-trendrolling(3) >= 2Uptrend confirmation
TrendRMI-dn-trendrolling(3) >= 2Downtrend confirmation
Info LayerRSI_1htimeperiod=14Higher-dimension trend judgment
Info Layer1d_high/3d_lowrolling(24/72)Price range positioning
Info LayerADR1d_high - 3d_lowVolatility range calculation

3.2 Buy Condition Classification

The strategy uses different buy logic based on whether there's an active trade:

Condition Group #1: New Position Buy Signal (No Active Trade)

# Core logic
conditions = [
RSI_1h >= 30, # 1-hour RSI not below 30
close <= 3d_low_1h + 0.8 * ADR_1h, # Price within 80% volatility range above 3-day low
rmi-dn-trend == 1, # RMI downtrend confirmation
rmi-slow >= 20, # Slow RMI not below 20
rmi-fast <= 20, # Fast RMI not above 20
mp <= 50, # Momentum Pinball not exceeding 50
volume > 0 # Has volume
]

Logic Interpretation:

  • Information layer RSI >= 30: Ensures not in extreme oversold state
  • Price positioning: Bottom fish but not at the lowest point, leaving 80% volatility space
  • RMI configuration: Slow RMI >= 20 (not extremely weak), Fast RMI <= 20 (short-term momentum low)
  • Trend confirmation: Looking for reversal opportunities during RMI downtrend
  • Momentum Pinball: Waiting for momentum to stabilize

Condition Group #2: Position Continuation Buy Signal (Active Trade Exists)

# Core logic - for ignore_roi_if_buy_signal mechanism
conditions = [
rmi-up-trend == 1, # RMI uptrend
current_profit > peak_profit * profit_factor, # Dynamic profit factor
rmi-slow >= rmi_grow # RMI dynamic growth threshold
]

# profit_factor calculation
profit_factor = 1 - (rmi-slow / 400) # rmi 30 -> 0.925, rmi 80 -> 0.80

# rmi_grow calculation (linear growth)
rmi_grow = linear_growth(30, 70, 180, 720, open_minutes)
# Grows from 30 to 70
# Start time: after 180 minutes
# End time: after 720 minutes

Logic Interpretation:

  • Trend continuation: RMI uptrend confirmation, preventing premature selling
  • Dynamic profit factor: As RMI rises, profit requirements decrease (encouraging trend holding)
  • Linear growth threshold: As holding time increases, RMI threshold gradually increases, forcing trend confirmation

3.3 Buy Conditions Summary

Condition GroupApplicable ScenarioCore Logic
New position buyNo active tradeInformation layer positioning + RMI contrarian bottom fishing + Momentum confirmation
Position continuationActive trade existsTrend confirmation + Dynamic profit factor + RMI growth threshold

4. Sell Logic Detailed

4.1 Tiered Take-Profit System (ROI)

The strategy uses a time-decay ROI mechanism:

Holding Time      Profit Threshold    Description
─────────────────────────────────────────────────
0 minutes 10% Very short-term high profit target
15 minutes 5% Quick take-profit
30 minutes 2.5% Medium-term target
60 minutes 1% Lowered expectations
120 minutes 0.5% Accept small profit
1440 minutes 0% Accept any profit

4.2 Dynamic Stop-Loss Sell

The strategy's sell signal is mainly used for "dynamic stop-loss" rather than active take-profit:

# Dynamic stop-loss conditions
if active_trade:
loss_cutoff = linear_growth(-0.03, 0, 0, 300, open_minutes)
# Grows from -3% to 0%
# Start time: immediately
# End time: after 300 minutes

conditions = [
current_profit < loss_cutoff, # Profit below dynamic threshold
current_profit > stoploss, # But hasn't hit hard stop-loss
rmi-dn-trend == 1, # RMI downtrend
volume > 0 # Has volume
]

# Profit status branching
if peak_profit > 0:
conditions += [rmi-slow crossed_below 50] # Was profitable: RMI crosses below 50
else:
conditions += [rmi-slow crossed_below 10] # Never profitable: RMI crosses below 10

Logic Interpretation:

  • Dynamic threshold: Longer holding time means higher stop-loss threshold (from -3% to 0%)
  • Trend confirmation: Only triggers during downtrend, avoiding false sells in choppy markets
  • Profit status branching: Previously profitable trades use looser sell conditions (RMI 50), never profitable trades use stricter conditions (RMI 10)

4.3 Other Trade Status Awareness

The strategy implements a global position awareness mechanism:

if other_trades:
if free_slots > 0:
# When there are free slots, reference other trades' average profit
max_market_down = -0.04
hold_pct = (1 / free_slots) * max_market_down
conditions += [avg_other_profit >= hold_pct]
# More free slots means more willing to hold
# 1 slot -> avg_other_profit >= -0.04
# 4 slots -> avg_other_profit >= -0.01
else:
# When no free slots, only allow biggest losing trade to sell
conditions += [biggest_loser == True]

Design Philosophy:

  • When there are free slots, decide whether to sell based on overall market state
  • When fully invested, prioritize stopping out the biggest losing trade to release capital

5. Technical Indicator System

5.1 Core Indicators

Indicator CategorySpecific IndicatorPurpose
Relative Momentum IndexRMI-slow (21, 5)Main trend judgment
Relative Momentum IndexRMI-fast (8, 4)Fast signal
Rate of ChangeROC (6)Momentum measurement
Momentum PinballMP = RSI(ROC, 6)Overbought/oversold positioning
Trend DirectionRMI-up/dnSingle period direction
Trend StrengthRMI-up-trend/dn-trendThree-period confirmation

5.2 Information Timeframe Indicators (1h)

The strategy uses the 1-hour timeframe as an information layer for higher-dimension trend judgment:

  • RSI_1h: 14-period RSI, ensures not entering extreme oversold state
  • 1d_high: 24-hour (1 day) high
  • 3d_low: 72-hour (3 day) low
  • ADR: Average Daily Range (1d_high - 3d_low)

Price Positioning Logic:

Buy price upper limit = 3d_low + inf_pct_adr * ADR
= 3d_low + 0.8 * ADR

6. Risk Management Features

6.1 Hard Stop-Loss Combined with Dynamic Stop-Loss

The strategy uses a dual stop-loss mechanism:

Stop-Loss TypeThresholdTrigger Condition
Hard stop-loss-40%Fixed trigger
Dynamic stop-loss-3% → 0%Holding time + Trend confirmation

Dynamic Stop-Loss Advantages:

  • Early period (holding 0-300 minutes): Stop-loss threshold gradually increases from -3%
  • Late period (holding >300 minutes): Stop-loss threshold is 0%, protecting realized profit
  • Only triggers during downtrend, avoiding false sells in choppy markets

6.2 Order Timeout Protection

def check_buy_timeout(self, pair, trade, order, **kwargs):
# Buy order timeout: Cancel if price slippage > 1%
if current_price > order_price * 1.01:
return True # Cancel order
return False

def check_sell_timeout(self, pair, trade, order, **kwargs):
# Sell order timeout: Cancel if price slippage > 1%
if current_price < order_price * 0.99:
return True # Cancel order
return False

6.3 Entry Confirmation Mechanism

def confirm_trade_entry(self, pair, order_type, amount, rate, time_in_force, **kwargs):
# Pre-entry confirmation: Reject if price slippage > 1%
if current_price > rate * 1.01:
return False # Reject entry
return True

Slippage Protection Logic:

  • Uses real-time order book to get current price
  • Cancel/reject when order price differs from current price by > 1%
  • Prevents unfavorable fills during extreme market conditions

6.4 Price Cache Mechanism

custom_current_price_cache: TTLCache = TTLCache(maxsize=100, ttl=300)  # 5-minute TTL

Cache Strategy:

  • Maximum cache of 100 trading pairs
  • TTL 300 seconds (5 minutes)
  • Reduces unnecessary API calls

7. Strategy Advantages and Limitations

✅ Advantages

  1. Dynamic Profit Factor: ignore_roi_if_buy_signal mechanism combined with dynamic profit factor maximizes holding returns during trending markets

  2. Global Position Awareness: Strategy is aware of other trade statuses, enabling cross-trade coordinated decisions and avoiding misoperations when fully invested

  3. Multi-Layer Protection Mechanism: Hard stop-loss + Dynamic stop-loss + Order timeout + Entry confirmation, four-layer protection network

  4. Information Layer Enhancement: 1-hour timeframe provides higher-dimension trend judgment, reducing noise interference

  5. Linear Growth Threshold: Dynamically adjusted RMI threshold adapts to different holding durations

⚠️ Limitations

  1. Live Trading Only: ignore_roi_if_buy_signal and position continuation signals are not compatible with backtesting and hyperparameter optimization

  2. Wide Stop-Loss: 40% hard stop-loss may be too wide for conservative traders

  3. Real-Time Data Dependency: Requires database access to query other trade statuses, demanding high system stability

  4. Computational Complexity: Multiple indicators, multiple timeframes, multiple trade awareness, significant computational overhead

  5. Parameter Sensitivity: Buy parameters are optimized, may have overfitting risk


8. Applicable Scenario Recommendations

Market EnvironmentRecommended ConfigurationDescription
Slow bull marketDefault configurationTrend continuation signals work effectively
Choppy marketRaise stop-loss thresholdReduce false breakout-induced stop-losses
Sharp declineLower RSI thresholdBottom fish earlier, but increased risk
High volatility coinsExpand ADR percentageAdapt to larger volatility ranges

Recommended Trading Pairs:

  • Liquid major coins (BTC, ETH, large-cap altcoins)
  • Avoid extremely volatile small coins (stop-loss may not trigger in time)

9. Applicable Market Environment Details

The Schism series is a "bottom-fishing trend following strategy". Based on its code architecture and long-term live trading verification from the community, it is best suited for rebound markets after oscillating declines, while performing poorly during one-sided crashes.

9.1 Strategy Core Logic

  • Bottom fish but not at the lowest point: Price positioned at 80% volatility range above 3-day low, leaving safety margin
  • Momentum confirmation: Looking for reversal opportunities during RMI downtrend, avoiding chasing highs
  • Trend continuation: During holding period, maximize trend returns through buy signal continuation mechanism
  • Global coordination: Aware of other trade statuses, enabling cross-trade capital management

9.2 Performance in Different Market Environments

Market TypePerformance RatingReason Analysis
📈 Slow bull market⭐⭐⭐⭐⭐Trend continuation mechanism fully发挥作用,持仓收益最大化
🔄 Choppy market⭐⭐⭐☆☆Bottom fishing signals may trigger multiple times, watch out for fees
📉 One-sided crash⭐⭐☆☆☆Bottom fishing signals may trigger too early, wide stop-loss poses risk
⚡️ Rapid rise/fall⭐☆☆☆☆Order timeout protection may fail, high slippage risk

9.3 Key Configuration Recommendations

Configuration ItemRecommended ValueDescription
max_open_trades3-5Coordinate with global position awareness, avoid over-diversification
stake_amountEqual allocationCoordinate with free_slots logic
timeframe5mNative configuration, not recommended to modify
inf_timeframe1hInformation layer configuration, not recommended to modify

10. Important Warning: The Cost of Complexity

10.1 Learning Curve

Schism strategy code is approximately 200 lines, including:

  • Multi-timeframe indicator calculations
  • Real-time database queries
  • Dynamic threshold calculations
  • Global position awareness

It is recommended to run in dry_run mode for at least 1 week before live trading to familiarize yourself with strategy behavior.

10.2 Hardware Requirements

Number of Trading PairsMinimum MemoryRecommended Memory
1-10 pairs2 GB4 GB
10-30 pairs4 GB8 GB
30+ pairs8 GB16 GB

Note: The strategy requires database access to query other trade statuses, with significant memory overhead in multi-pair scenarios.

10.3 Differences Between Backtesting and Live Trading

Key Differences:

  • ignore_roi_if_buy_signal and position continuation signals only work in live trading/dry run
  • Cannot access Trade.get_trades() data during backtesting
  • Backtesting results may differ significantly from live trading performance

Recommended Workflow:

  1. First use backtesting to verify buy signal quality
  2. Then use dry_run to verify dynamic logic
  3. Finally small position live trading verification

10.4 Manual Trader Recommendations

Schism's core concepts can be borrowed:

  • Momentum-confirmed bottom fishing: Look for reversals during RMI downtrend, not blind bottom fishing
  • Dynamic stop-loss: Longer holding time means tighter stop-loss threshold
  • Global perspective: Consider the overall state of all positions, avoid full-investment risks

11. Summary

Schism is a "bottom-fishing trend following strategy" that implements a trading logic of "bottom fishing but not at the lowest point" through RMI momentum indicator multi-dimensional analysis combined with 1-hour information layer trend judgment. Its core value lies in:

  1. Dynamic Position Continuation: ignore_roi_if_buy_signal mechanism maximizes returns during trending markets
  2. Global Position Awareness: Cross-trade coordinated decisions, avoiding capital management failures
  3. Multi-Layer Protection Network: Hard stop-loss + Dynamic stop-loss + Order timeout + Entry confirmation
  4. Information Layer Enhancement: 1-hour timeframe provides higher-dimension trend judgment

For quantitative traders, Schism is a live-trading-oriented strategy, suitable for experienced traders. Not recommended for beginners to use directly. It is recommended to start with Schism2 (evolved version) or default parameters and gradually optimize.