Exchanges, symboles, sources et timeframes
Un indicateur ne se résume pas à une formule. Quand vous définissez un bloc, vous choisissez aussi le marché qu’il lit, le timeframe sur lequel il calcule sa série et la source qu’il prend en entrée. Ces trois dimensions correspondent à symbol, timeframe et source.
Le bloc [backtest] fixe le symbole principal et le timeframe principal de la stratégie. Si un bloc indicateur n’indique pas son propre symbol ou son propre timeframe, il utilise ces valeurs par défaut.
[backtest]
symbol = "BINANCE:BTCUSDT"
timeframe = "240"Avec cette configuration, un bloc qui ne précise pas symbol ou timeframe travaille par défaut sur BINANCE:BTCUSDT en 240 (4h).
Exchanges, symboles et timeframes
Whale‑E télécharge les données de marché via des endpoints publics. Les marchés disponibles dépendent de l’exchange. Les types de marchés qui exigent une authentification ne sont pas pris en charge.
| Exchange | Préfixe | Marchés disponibles |
|---|---|---|
| Binance | BINANCE | Spot, Futures USD‑M, Futures COIN‑M |
| KuCoin | KUCOIN | Spot, Futures perpétuels USDT‑M, Futures perpétuels COIN‑M |
| Bitget | BITGET | Spot, Futures perpétuels USDT‑M/USDC‑M, Futures perpétuels COIN‑M |
| Bybit | BYBIT | Spot, Futures perpétuels Linear (USDT‑M), Futures perpétuels Inverse (COIN‑M) |
| OKX | OKX | Spot, Swaps perpétuels Linear/Inverse |
La clé symbol accepte une chaîne unique ou un tableau de chaînes, dans [backtest] comme dans les blocs qui l’acceptent. Chaque valeur doit être écrite au format EXCHANGE:SYMBOLE.
symbol = "BINANCE:BTCUSDT"
symbol = ["KUCOIN:ETHUSDT", "BINANCE:BTCUSDT"]La clé timeframe accepte elle aussi une chaîne unique ou un tableau de chaînes. Vous pouvez utiliser un nombre de minutes de 1 à 1440, un nombre de jours suivi de D comme 1D ou 7D, ou un nombre de semaines suivi de W comme 1W ou 4W. D et W sont acceptés comme alias de 1D et 1W. Les timeframes mensuels, par exemple 1M, ne sont pas pris en charge.
timeframe = "60"
timeframe = ["15", "D", "W"]Les timeframes mensuels comme 1M ne sont pas pris en charge.
Ce que désigne source
La clé source définit la série d’entrée lue par le bloc avant son propre calcul.
Lorsqu’un bloc l’accepte, source peut être une chaîne unique ou un tableau de chaînes. Une valeur de source peut désigner :
- une source standard de bougie :
open,close,high,low,hl2,hlc3,ohlc4,hlcc4,volume - l’
idd’un autre indicateur
Quand source lit un prix standard, symbol indique sur quel marché cette série doit être lue. Quand source lit un autre indicateur, le bloc réutilise directement la série déjà calculée en amont.
Certains blocs n’exposent pas de clé source, parce qu’ils utilisent toujours les mêmes entrées, par exemple high, low et close. Dans ce cas, symbol et timeframe restent utiles, car ils définissent quand même sur quel marché et sur quel axe temporel ces séries fixes sont lues.
source = "close"
source = ["close", "hlc3"]
source = "rsi_fast"Comment une série est relue par un autre bloc
Chaque bloc calcule sa sortie sur son propre marché et sur son propre timeframe. Mais lorsqu’un autre bloc ou une expression utilise cette sortie, elle est lue dans le contexte du bloc qui la consomme. Une série est toujours interprétée selon le timeframe du bloc ou de l’expression qui la consomme, pas selon le timeframe du bloc qui l’a produite.
Prenons un exemple simple : si un indicateur est calculé en 240 et qu’il est ensuite relu par un bloc ou par une stratégie qui s’exécute en 60, la série devient visible comme une série projetée sur l’axe 60. Entre deux clôtures de 4 heures, la valeur reste inchangée sur les bougies de 1 heure intermédiaires.
Cette règle vaut aussi pour l’historique. Dans ce même cas, serie[1] signifie la valeur visible une bougie de 60 plus tôt sur l’axe du bloc qui lit la série. Cela ne signifie pas la bougie 240 précédente du bloc qui l’a calculée. La même logique s’applique dans les blocs conditionnels, dans les indicateurs qui relisent un autre indicateur et dans les formules [[custom_series]].
Quand source lit un prix standard
Si source contient une valeur de prix comme open, close, high ou low, le bloc lit directement les données de marché. Dans ce cas, symbol choisit le marché et timeframe choisit l’axe temporel sur lequel cette série est lue.
[backtest]
symbol = "BINANCE:BTCUSDT"
timeframe = "240"
[[rsi]]
id = "rsi_eth_daily"
source = "close"
symbol = "BINANCE:ETHUSDT"
timeframe = "D"
length = 14Ici, rsi_eth_daily est calculé sur la clôture journalière de BINANCE:ETHUSDT. Si vous utilisez ensuite cette série dans une stratégie qui s’exécute en 240, Whale‑E la rend visible sur l’axe 4 heures de la stratégie. Entre deux clôtures journalières, le moteur réutilise simplement la dernière valeur journalière connue.
Quand source lit un autre indicateur
Si source désigne l’id d’un autre indicateur, le timeframe du producteur n’est jamais hérité. Le bloc consommateur garde son propre timeframe. S’il ne définit pas de timeframe, il retombe sur le timeframe principal du bloc [backtest].
[backtest]
symbol = "BINANCE:BTCUSDT"
timeframe = "240" # 4 heures
[[rsi]]
id = "rsi_daily"
source = "close"
length = 14
timeframe = "D" # Journalier
[[moving_average]]
id = "ma_rsi"
source = "rsi_daily"
type = "sma"
length = 10Dans cet exemple, ma_rsi lit la série déjà calculée par rsi_daily. Le bloc [[moving_average]] n’indique pas de timeframe, il utilise donc le timeframe principal de 4 heures. La série RSI journalière est d’abord calculée sur son propre axe, puis projetée sur l’axe 4 heures, sur lequel la moyenne mobile est ensuite calculée.
Quand source mélange prix standards et sorties d’indicateurs
Un même bloc peut utiliser à la fois des valeurs comme close et des ids d’indicateurs. Quand source désigne une valeur comme close, symbol indique sur quel marché cette valeur doit être lue. Quand source désigne l’id d’un autre indicateur, symbol n’intervient pas : le bloc réutilise directement la série déjà produite par cet indicateur. Si source ne contient que des ids d’indicateurs, la clé symbol du bloc est ignorée.
[backtest]
symbol = "BINANCE:BTCUSDT"
timeframe = "240"
[[price]]
id = "eth_daily"
symbol = "BINANCE:ETHUSDT"
timeframe = "D"
[[moving_average]]
id = "ma_mix"
source = ["close", "eth_daily"]
symbol = ["BINANCE:BTCUSDT", "BINANCE:SOLUSDT"]
type = "sma"
length = 10Dans cet exemple, trois grilles sont construites pour ma_mix :
- une moyenne mobile construite à partir de
closesurBINANCE:BTCUSDT - une moyenne mobile construite à partir de
closesurBINANCE:SOLUSDT - une moyenne mobile construite à partir de la série
eth_daily
Combinaisons de sources, symboles et timeframes
Les valeurs qualitatives comme source, symbol et timeframe créent des grilles distinctes. Dès qu’un bloc accepte un tableau pour l’une de ces clés, une combinaison est générée pour chaque choix possible.
[backtest]
symbol = ["BINANCE:BTCUSDT", "BINANCE:ETHUSDT"]
timeframe = "240"
[[moving_average]]
id = "ma_fast"
source = ["close", "hlc3"]
timeframe = ["240", "D"]
type = "sma"
length = 20Dans cet exemple, le bloc de moyenne mobile propose :
- 2 symboles principaux dans
[backtest] - 2 sources (
closeethlc3) - 2 timeframes de bloc (
240etD)
Il y a donc 2 × 2 × 2 = 8 grilles différentes. Le paramètre numérique length, lui, ne crée pas de nouvelles grilles : il est exploré à l’intérieur de chaque grille.