Skip to content

Allora AI Price Predictions ​

Allora Network provides machine learning-powered price predictions that can enhance your trading strategies. This guide explains how Allora predictions work and how to leverage them in your strategies.

What is Allora Network? ​

Allora Network is a decentralized AI network that generates price predictions for cryptocurrencies using machine learning models. These predictions are produced by a network of inference nodes and validated through blockchain consensus.

Features:

  • Decentralized ML Predictions: Multiple inference nodes contribute predictions, aggregated on-chain
  • Multiple Horizons: Predictions available for different timeframes (5m, 8h, 24h, 1 week)
  • Two Prediction Types:
    • Log Return: Expected percentage change (e.g., 0.03 = +3% expected return)
    • Absolute Price: Direct price prediction (e.g., ETH at $2,450 in 8 hours)
  • On-Chain Consensus: Predictions use outlier-resistant aggregation and consensus timestamps
  • Historical Data: Full prediction history available for backtesting

Available Predictions ​

Robonet provides access to Allora predictions through two networks:

Mainnet Topics (10 Available) ​

SymbolHorizonTypeTopic ID
BTC-USD8hLog Return1
ETH-USD8hLog Return2
SOL-USD8hLog Return3
ETH-USD8hPrice9
SOL-USD8hPrice10
BTC-USD8hPrice14
BTC-USD24hLog Return15
ETH-USD24hLog Return16
SOL-USD24hLog Return17
BTC-USD20mLog Return18
NEAR-USD8hLog Return19

Testnet Topics (26 Available) ​

Testnet provides extended coverage with more symbols and horizons:

  • Horizons: 5m, 8h, 24h, 1 week
  • Symbols: BTC, ETH, SOL, NEAR
  • Types: Both price and log_return predictions

TIP

Use testnet for development and experimentation before deploying to mainnet. Testnet predictions are free and have more variety for testing different strategies.

How Allora Predictions Work ​

Understanding Log Return Predictions ​

Log return predictions express the expected price change as a percentage:

log_return = log(future_price) - log(current_price)

Example Interpretation:

  • log_return = 0.03 → Expect ~+3% price increase
  • log_return = -0.02 → Expect ~-2% price decrease
  • log_return = 0 → Expect no significant change

Threshold-Based Signals:

python
if log_return > 0.01:    # +1% threshold
    signal = "Long"
elif log_return < -0.01: # -1% threshold
    signal = "Short"
else:
    signal = "Neutral"

Understanding Price Predictions ​

Price predictions provide direct price targets:

python
predicted_price = 2450.00  # ETH predicted at $2,450
current_price = 2400.00    # ETH currently at $2,400

# Calculate implied log return
log_return = log(predicted_price) - log(current_price)
# log_return ≈ 0.0206 (≈2% expected gain)

Prediction Lifecycle ​

Allora Network → PostgreSQL → Strategy.get_predictions() → Trading Decision
     ↓              ↓                     ↓                        ↓
  Inference    Stored with       Filtered by time        Entry/Exit Signal
   Nodes       timestamp         (backtesting safe)
  1. Generation: Inference nodes produce predictions
  2. Consensus: On-chain aggregation with outlier resistance
  3. Storage: Predictions stored with consensus timestamps
  4. Access: Strategies retrieve predictions via get_predictions()
  5. Usage: Time-aware filtering prevents look-ahead bias

Enabling Allora in Strategies ​

The easiest way to add Allora predictions to an existing strategy is through AI enhancement.

Via Chat Interface ​

Simply ask:

"Enhance my strategy 'MyTrendFollower' with Allora predictions for BTC-USDT on the 8h timeframe"

The AI will:

  1. Analyze your existing strategy logic
  2. Identify optimal integration points
  3. Add Allora prediction signals
  4. Preserve your risk management rules
  5. Run before/after backtests for comparison

Via MCP Server ​

python
# In your AI coding agent (Claude Code, Cursor, etc.)
"Use enhance_with_allora tool to add Allora predictions to MyTrendFollower
strategy for BTC-USDT, 8h timeframe. Compare backtest results from
2024-01-01 to 2024-12-31."

The MCP tool provides:

  • Side-by-side performance comparison
  • Integration recommendations
  • Risk-adjusted improvement metrics

Cost-Effective Testing

Use generate_ideas tool first ($0.05) to explore Allora integration approaches, then use enhance_with_allora ($0.25-0.50) for implementation. This saves credits while exploring options.

Method 2: Direct Integration ​

For full control, integrate Allora predictions directly in your strategy code.

Basic Integration Pattern ​

python
from jesse.strategies import Strategy
import jesse.indicators as ta
from jesse import utils

class MyAlloraStrategy(Strategy):

    @property
    def eth_prediction(self):
        """Get latest ETH 8h log return prediction"""
        try:
            predictions = self.get_predictions(
                symbol='ETH-USDT',
                horizon='8h',
                prediction_type='log_return'
            )
            return predictions[-1]['value'] if predictions else 0
        except:
            return 0

    def should_long(self):
        # Long when prediction > 2%
        return self.eth_prediction > 0.02

    def should_short(self):
        # Short when prediction < -2%
        return self.eth_prediction < -0.02

    def go_long(self):
        qty = utils.size_to_qty(
            self.available_margin,
            self.price,
            fee_rate=self.fee_rate
        )
        self.buy = qty, self.price

    def go_short(self):
        qty = utils.size_to_qty(
            self.available_margin,
            self.price,
            fee_rate=self.fee_rate
        )
        self.sell = qty, self.price

Advanced Integration: Ensemble Strategy ​

Combine Allora predictions with technical analysis:

python
class EnsembleStrategy(Strategy):

    @property
    def allora_signal(self):
        """Get Allora prediction signal"""
        predictions = self.get_predictions('ETH-USDT', '24h', 'log_return')
        if not predictions:
            return 0

        log_return = predictions[-1]['value']
        if log_return > 0.01:
            return 1   # Bullish
        elif log_return < -0.01:
            return -1  # Bearish
        return 0       # Neutral

    @property
    def technical_signal(self):
        """Get technical analysis signal"""
        sma_bullish = self.sma_fast > self.sma_slow
        macd_bullish = self.macd.hist > 0
        rsi_oversold = self.rsi < 40
        rsi_overbought = self.rsi > 60

        if sma_bullish and macd_bullish and not rsi_overbought:
            return 1   # Bullish
        elif not sma_bullish and not macd_bullish and not rsi_oversold:
            return -1  # Bearish
        return 0

    def should_long(self):
        # Require BOTH signals to agree
        return (self.allora_signal == 1 and
                self.technical_signal == 1)

    def should_short(self):
        return (self.allora_signal == -1 and
                self.technical_signal == -1)

    def go_long(self):
        # Base position size: 2% risk
        base_qty = utils.risk_to_qty(
            self.available_margin * 0.02,
            entry=self.price,
            stop=self.stop_loss_price,
            fee_rate=self.fee_rate
        )

        # Increase 25% when Allora is highly confident
        predictions = self.get_predictions('ETH-USDT', '24h', 'log_return')
        if predictions and abs(predictions[-1]['value']) > 0.03:
            base_qty *= 1.25

        self.buy = base_qty, self.price

Strategy Examples ​

Example 1: Pure Allora Strategy ​

Concept: Trade based solely on 24h log return predictions

Entry Logic:

  • Long: log_return > 0.01 (>1% expected gain)
  • Short: log_return < -0.01 (<-1% expected loss)
  • Neutral: -0.01 <= log_return <= 0.01

Exit Logic:

  • Exit when signal reverses direction
  • Exit when signal weakens below threshold
  • Only exit on NEW predictions (not recalculations)

Position Sizing:

  • Fixed 100% of available margin per trade
  • No leverage scaling

Use Case: Testing raw Allora prediction accuracy without other factors

Example 2: Allora + Momentum ​

Concept: Combine Allora predictions with momentum indicators for confirmation

Entry Logic:

  • Long: Allora bullish (log_return > 0.01) AND SMA(10) > SMA(20) AND MACD > 0
  • Short: Allora bearish (log_return < -0.01) AND SMA(10) < SMA(20) AND MACD < 0

Exit Logic:

  • Stop loss: 2 ATR from entry
  • Take profit: 3 ATR default, 4 ATR when Allora confidence high
  • Trailing stop when Allora continues bullish/bearish

Position Sizing:

  • Base: 2% risk per trade
  • Increase 25% when abs(log_return) > 0.03 (high confidence)

Use Case: Reducing false signals by requiring technical confirmation

Example 3: 5-Minute Price Predictions ​

Concept: Ultra-short-term trading using 5m price predictions

Entry Logic:

  • Calculate: log_return = log(predicted_price) - log(current_price)
  • Long: log_return > 0.002 (>0.2% expected)
  • Short: log_return < -0.002 (<-0.2% expected)

Exit Logic:

  • Time-based: Exit after 5 minutes (next prediction available)
  • Stop loss: 0.5% from entry
  • Take profit: 0.3% from entry

Position Sizing:

  • Fixed 50% of available margin
  • Allows 2 simultaneous positions

Use Case: High-frequency scalping with ML edge

Prediction Lag

5-minute predictions may have 10-30 second latency from generation to availability. Factor this into your strategy logic to avoid stale signals.

Interpreting Allora Signals ​

Signal Strength Guidelines ​

Abs(Log Return)StrengthConfidenceRecommended Action
< 0.01WeakLowNeutral / No trade
0.01 - 0.02ModerateMediumStandard position
0.02 - 0.03StrongHighIncrease position 15-25%
> 0.03Very StrongVery HighIncrease position 25-50%

Backtesting Best Practices ​

  1. Use Historical Predictions: Strategies automatically use time-accurate predictions during backtests
  2. Compare Before/After: Run backtests with and without Allora to measure improvement
  3. Test Multiple Thresholds: Experiment with different entry/exit thresholds (0.01, 0.015, 0.02)
  4. Network Selection: Use testnet for development, mainnet for final validation
  5. Overfitting Awareness: Avoid over-optimizing on prediction thresholds

Live Trading Considerations ​

  • Prediction Availability: New predictions arrive every 5-60 minutes depending on topic
  • Outlier Filtering: Allora consensus removes outlier predictions automatically
  • Network Reliability: Predictions may be delayed during high network congestion
  • Fallback Logic: Always include fallback behavior when predictions unavailable
python
@property
def safe_allora_signal(self):
    """Allora signal with fallback to neutral"""
    try:
        predictions = self.get_predictions('ETH-USDT', '8h', 'log_return')
        if not predictions:
            return 0  # Neutral fallback

        log_return = predictions[-1]['value']
        if log_return > 0.01:
            return 1
        elif log_return < -0.01:
            return -1
        return 0
    except Exception as e:
        # Log error and return neutral
        print(f"Allora prediction error: {e}")
        return 0

Getting Allora Topics ​

To see all available prediction topics:

Via Chat Interface ​

"What Allora prediction topics are available?"

Via MCP Server ​

python
# The get_allora_topics tool returns:
{
  "mainnet": [
    {
      "topic_id": 1,
      "symbol": "BTC-USD",
      "horizon": "8h",
      "prediction_type": "log_return",
      "epoch_seconds": 300
    },
    // ... 9 more topics
  ],
  "testnet": [
    // ... 26 topics
  ]
}

Via Strategy Code ​

python
from jesse.services.allora_predictions import (
    TOPIC_MAPPING_MAINNET,
    TOPIC_MAPPING_TESTNET,
    get_topic_mapping
)

# Get all topics for current network
topics = get_topic_mapping(self.network)

# Find specific topic
topic_id = get_topic_id_for_symbol(
    symbol='BTC-USD',
    network='mainnet'
)

Common Integration Patterns ​

Pattern 1: Signal Filter ​

Use Allora as a filter to confirm other signals:

python
def should_long(self):
    # Primary signal from your strategy
    primary_signal = self.rsi < 30 and self.macd.hist > 0

    # Allora confirmation
    allora_bullish = self.eth_prediction > 0.01

    # Only enter when both agree
    return primary_signal and allora_bullish

Pattern 2: Dynamic Position Sizing ​

Adjust position size based on prediction strength:

python
def go_long(self):
    base_qty = utils.size_to_qty(self.available_margin, self.price)

    # Scale based on prediction confidence
    prediction = self.eth_prediction
    if abs(prediction) > 0.03:
        multiplier = 1.5      # 50% larger
    elif abs(prediction) > 0.02:
        multiplier = 1.25     # 25% larger
    else:
        multiplier = 1.0      # Standard size

    self.buy = base_qty * multiplier, self.price

Pattern 3: Dynamic Take Profit ​

Adjust profit targets based on prediction magnitude:

python
def update_position(self):
    if self.is_long:
        prediction = self.eth_prediction

        # Higher targets when prediction strong
        if prediction > 0.03:
            take_profit = self.average_entry_price * 1.04  # +4%
        elif prediction > 0.02:
            take_profit = self.average_entry_price * 1.03  # +3%
        else:
            take_profit = self.average_entry_price * 1.02  # +2%

        # Place take profit order
        if self.price >= take_profit:
            self.liquidate()

Pattern 4: Prediction Caching ​

Cache predictions to avoid redundant lookups:

python
def __init__(self):
    super().__init__()
    self._cached_prediction = None
    self._cached_timestamp = 0

@property
def eth_prediction(self):
    # Only fetch new predictions every 5 minutes
    current_time = self.time
    if current_time - self._cached_timestamp >= 300000:  # 5 minutes in ms
        predictions = self.get_predictions('ETH-USDT', '8h', 'log_return')
        if predictions:
            self._cached_prediction = predictions[-1]['value']
            self._cached_timestamp = current_time

    return self._cached_prediction or 0

Troubleshooting ​

No Predictions Available ​

Symptoms: get_predictions() returns empty list

Solutions:

  1. Check Symbol Format: Use ETH-USDT or ETH-USDC, not ETH-USD in strategy code
  2. Verify Network: Ensure strategy network matches prediction topic network (mainnet/testnet)
  3. Check Topic Coverage: Symbol may not have predictions for requested horizon
  4. Data Not Downloaded: Initial download may take time, check Allora downloader cron job

Stale Predictions ​

Symptoms: Same prediction value for extended period

Solutions:

  1. Check Prediction Timestamp: Compare prediction['timestamp'] to current time
  2. Network Issues: Allora Network may be experiencing downtime
  3. Cron Job Status: Verify AlloraDownloader is running and healthy
  4. Implement Staleness Check:
    python
    def is_prediction_stale(self, prediction, max_age_minutes=30):
        age_ms = self.time - prediction['timestamp']
        return age_ms > (max_age_minutes * 60 * 1000)

Inconsistent Backtest Results ​

Symptoms: Different results when running same backtest multiple times

Solutions:

  1. Use Exact Date Ranges: Specify start and end dates explicitly
  2. Check Prediction Availability: Ensure predictions exist for entire backtest period
  3. Verify Symbol Conversion: Check that route symbols match prediction symbols
  4. Network Consistency: Use same network (mainnet/testnet) for all runs

Performance Issues ​

Symptoms: Slow backtest execution with Allora strategies

Solutions:

  1. Cache Predictions: Store in instance variables to avoid repeated lookups
  2. Batch Loading: Predictions are pre-loaded for backtest period (automatic)
  3. Reduce Lookups: Only call get_predictions() when needed, not every candle
  4. Optimize Thresholds: Fewer trades = faster execution

Advanced Topics ​

Prediction Horizon Selection ​

5-Minute Predictions:

  • Suited for: High-frequency scalping, very short holds
  • Considerations: Higher noise, requires tight stops
  • Typical hold: 5-15 minutes

8-Hour Predictions:

  • Suited for: Intraday swing trading, momentum strategies
  • Considerations: Balanced noise/signal ratio
  • Typical hold: 4-12 hours

24-Hour Predictions:

  • Suited for: Daily swing trading, trend following
  • Considerations: Smoother signals, lower frequency
  • Typical hold: 12-48 hours

1-Week Predictions:

  • Suited for: Position trading, long-term trends
  • Considerations: Very low noise, rare signals
  • Typical hold: 3-10 days

Multi-Horizon Strategies ​

Combine predictions across multiple horizons:

python
@property
def multi_horizon_signal(self):
    # Get predictions for different horizons
    pred_8h = self.get_predictions('ETH-USDT', '8h', 'log_return')
    pred_24h = self.get_predictions('ETH-USDT', '24h', 'log_return')

    if not pred_8h or not pred_24h:
        return 0

    val_8h = pred_8h[-1]['value']
    val_24h = pred_24h[-1]['value']

    # Strong signal when both horizons agree
    if val_8h > 0.01 and val_24h > 0.01:
        return 2    # Very bullish
    elif val_8h > 0.01 or val_24h > 0.01:
        return 1    # Moderately bullish
    elif val_8h < -0.01 and val_24h < -0.01:
        return -2   # Very bearish
    elif val_8h < -0.01 or val_24h < -0.01:
        return -1   # Moderately bearish
    return 0

Prediction Confidence Metrics ​

While Allora doesn't provide explicit confidence scores, you can derive confidence from:

  1. Magnitude: Larger absolute values suggest stronger conviction
  2. Consistency: Compare prediction to recent price action
  3. Agreement: Check if multiple horizons align
  4. Historical Accuracy: Track prediction errors in your backtest

Learn More ​

Tips & Best Practices ​

Start Simple:

  • Begin with pure Allora strategies to understand prediction behavior
  • Add technical indicators gradually for confirmation
  • Test on testnet before using mainnet predictions

Cost Optimization:

  • Use generate_ideas ($0.05) before enhance_with_allora ($0.25-0.50)
  • Testnet predictions are free for development
  • Cache predictions to avoid redundant API calls

Risk Management:

  • Don't rely solely on ML predictions - use stop losses
  • Size positions based on prediction confidence
  • Always implement fallback logic for missing predictions

Performance Tuning:

  • Test multiple entry/exit thresholds (0.01, 0.015, 0.02)
  • Experiment with different horizons for your trading style
  • Compare ensemble vs pure Allora strategies
  • Track prediction accuracy over time in your backtests

Avoiding Overfitting:

  • Use walk-forward validation, not single backtest period
  • Don't over-optimize prediction thresholds
  • Test on multiple symbols and market conditions
  • Reserve recent data for out-of-sample testing