Mise en route
Configurez PineBag une fois, puis préparez votre premier test en quelques minutes.
Vous avez besoin de trois choses
- Google Chrome 116 ou version ultérieure.
- Un compte TradingView connecté avec accès aux symboles que vous souhaitez tester.
- Un fichier Pine Script qui déclare
strategy(), non seulementindicator().
Installez et ouvrez PineBag
-
Installez l'extension.
Utilisez le bouton d'installation de PineBag. Épinglez l’extension si vous souhaitez un accès rapide. -
Ouvrez un graphique TradingView.
Connectez-vous d'abord, puis ouvrez n'importe quel marché et délai pris en charge. -
Rechargez l'onglet graphique.
Faites cela après avoir installé ou mis à jour PineBag afin que la carte puisse se connecter. -
Ouvrez PineBag.
Sélectionnez l'icône PineBag. L'indicateur de connexion devient vert lorsque le graphique est prêt.
Le panneau latéral, contrôle par contrôle
Les chiffres sur l'interface réelle correspondent aux explications. Rien dans cette image n'est une maquette.
1
2
3
4
5
6
7
8
9
10
11
- 1Stratégie
La stratégie chargée. Cliquez sur la carte pour l'ouvrir dans l'éditeur ; la corbeille de l'en-tête de section la supprime.
- 2Résumé de l'exécution
Délai, capital, taille de la commande et commission qui seront utilisés.
- 3Recherche
Ouvre la recherche de symboles TradingView afin que vous puissiez ajouter un ticker qualifié pour la bourse.
- 4Sac à copies
Copie chaque ticker, un
EXCHANGE:SYMBOLpar ligne. - 5Sachet de pâte
Accepte les lignes, les virgules, les points-virgules ou les espaces et ignore les doublons.
- 6Effacer
Demande un second clic, copie les tickers, puis vide la liste ; « Coller les tickers » la rétablit.
- 7Balises téléscripteuses
Affiche le sac actuel. Utilisez × pour supprimer un symbole ; additionnez jusqu'à 500.
- 8Lancer le backtest
Valide la configuration et démarre l'exécution séquentielle du portefeuille.
- 9Rapports
Enregistrez les 50 derniers rapports localement et exportez JSON ou CSV.
- 10Jours restants
Active days: 05— Jours restants. - 11Assistance
Une assistance est disponible pour les demandes techniques, de facturation, de licence et de confidentialité.
Charger une stratégie
- Choisissez la source.
Déposez un.pinedans Strategy, ou ouvrez l'éditeur et collez le code. - Corrigez tout message de validation.
Le script doit contenirstrategy(). PineBag affiche une erreur claire s'il ne peut pas être utilisé. - Vérifiez le résumé.
Confirmez le nom du script, la période, le capital et la taille de la commande indiqués ci-dessus Exécuter.
indicator(), convertissez-le en stratégie avant d'exécuter PineBag.Modèle de stratégie
Chaque champ de l'onglet Properties de TradingView correspond à un argument de strategy(). Gardez les valeurs dans des constantes nommées en tête du script : avec la priorité du script, chaque ticker est testé avec les mêmes hypothèses.
TIMEFRAMEUnité de temps
INITIAL_CAPITAL · CURRENCYCapital initial
ORDER_SIZE · ORDER_SIZE_TYPETaille d'ordre par défaut
PYRAMIDINGPyramidage
BAR_MAGNIFIERDétail des barres
CALC_EVERY_TICK · CALC_ON_FILLSExécution du script
COMMISSION · COMMISSION_TYPECommission
MARGIN_LONG · MARGIN_SHORTEffet de levier long et short
SLIPPAGEGlissement
LIMIT_FILL_TICKSExécution des ordres limites
FILL_ON_BAR_CLOSEDélai d'exécution des ordres
runtime.error()Arrête le script sur toute autre unité de temps.
//@version=6
// ============================================================================
// Trend breakout · ATR risk — PineBag strategy template
// ============================================================================
// ----------------------------------------------------------------------------
// STRATEGY PROPERTIES (TradingView: Settings → Properties)
// ----------------------------------------------------------------------------
// TIMEFRAME takes a standard TradingView interval. Paste one of these, by the
// lowest TradingView plan that has it (tradingview.com/pricing, Charts):
// Basic days "1D" "1W" "1M" "3M" "6M" "12M"
// Essential minutes "1" "3" "5" "15" "30" "45"
// hours "60" "120" "180" "240"
// ranges "1R" "10R" "100R" "1000R"
// Premium seconds "1S" "5S" "10S" "15S" "30S" "45S"
// Ultimate ticks "1T" "10T" "100T" "1000T"
// Other intervals are custom and not used: a week is "1W", not "7D".
const string TIMEFRAME = "1D" // Chart timeframe
const float INITIAL_CAPITAL = 100000 // Initial capital
const string CURRENCY = currency.USD // Initial capital currency
const float ORDER_SIZE = 100 // Default order size
const string ORDER_SIZE_TYPE = strategy.percent_of_equity // Order size: % of equity
const int PYRAMIDING = 1 // Pyramiding
const bool BAR_MAGNIFIER = false // Bar detalization: Default (4 ticks per bar)
const bool CALC_EVERY_TICK = false // Script execution: On bar close
const bool CALC_ON_FILLS = false // Script execution: no recalculation after fills
const float COMMISSION = 0 // Commission
const string COMMISSION_TYPE = strategy.commission.percent // Commission: Percent
const float MARGIN_LONG = 100 // Long leverage 1x (leverage = 100 / margin)
const float MARGIN_SHORT = 100 // Short leverage 1x
const int SLIPPAGE = 0 // Slippage, ticks
const int LIMIT_FILL_TICKS = 0 // Limit order execution: Requested price
const bool FILL_ON_BAR_CLOSE = false // Order execution delay: One tick
strategy("Trend breakout · ATR risk", overlay = true,
initial_capital = INITIAL_CAPITAL,
currency = CURRENCY,
default_qty_type = ORDER_SIZE_TYPE,
default_qty_value = ORDER_SIZE,
pyramiding = PYRAMIDING,
use_bar_magnifier = BAR_MAGNIFIER,
calc_on_every_tick = CALC_EVERY_TICK,
calc_on_order_fills = CALC_ON_FILLS,
commission_type = COMMISSION_TYPE,
commission_value = COMMISSION,
margin_long = MARGIN_LONG,
margin_short = MARGIN_SHORT,
slippage = SLIPPAGE,
backtest_fill_limits_assumption = LIMIT_FILL_TICKS,
process_orders_on_close = FILL_ON_BAR_CLOSE)
// Stops with a clear message on any other timeframe; PineBag reads TIMEFRAME
// and selects it for the run.
if timeframe.period != TIMEFRAME
runtime.error("Switch the chart to the " + TIMEFRAME + " timeframe.")
// ----------------------------------------------------------------------------
// INPUT SETTINGS (TradingView: Settings → Inputs)
// ----------------------------------------------------------------------------
fastLength = input.int(20, "Fast EMA", minval = 1)
slowLength = input.int(50, "Slow EMA", minval = 2)
breakoutLength = input.int(20, "Breakout lookback", minval = 2)
atrLength = input.int(14, "ATR length", minval = 1)
atrStop = input.float(2.0, "ATR stop multiplier", minval = 0.1, step = 0.1)
// ----------------------------------------------------------------------------
// CALCULATIONS
// ----------------------------------------------------------------------------
fast = ta.ema(close, fastLength)
slow = ta.ema(close, slowLength)
atr = ta.atr(atrLength)
highestBefore = ta.highest(high, breakoutLength)[1]
// ----------------------------------------------------------------------------
// ENTRIES AND EXITS
// ----------------------------------------------------------------------------
longSignal = fast > slow and close > highestBefore
if longSignal and strategy.position_size == 0
strategy.entry("Long", strategy.long)
stopPrice = strategy.position_avg_price - atr * atrStop
strategy.exit("ATR stop", "Long", stop = stopPrice)
// ----------------------------------------------------------------------------
// PLOTS
// ----------------------------------------------------------------------------
plot(fast, "Fast EMA", color = color.rgb(0, 153, 255))
plot(slow, "Slow EMA", color = color.rgb(123, 97, 255))
Valeurs de TIMEFRAME
Indiquez entre guillemets l’un des intervalles standard de TradingView. Ceux qui se chargent dépendent de votre offre TradingView, comme indiqué sur tradingview.com/pricing.
Jours, semaines et mois.
"1D" "1W" "1M" "3M" "6M" "12M"
Minutes, heures et barres de range. Les minutes n’ont pas de lettre ; une heure s’écrit 60.
"1" "3" "5" "15" "30" "45""60" "120" "180" "240""1R" "10R" "100R" "1000R"
Intervalles en secondes.
"1S" "5S" "10S" "15S" "30S" "45S"
Intervalles en ticks.
"1T" "10T" "100T" "1000T"
const string TIMEFRAME = "1D" // 1 day
// const string TIMEFRAME = "1W" // 1 week
// const string TIMEFRAME = "240" // 4 hours
// const string TIMEFRAME = "15" // 15 minutes
// const string TIMEFRAME = "30S" // 30 seconds, Premium and higher
Taille d’ordre : pourcentage, montant ou quantité
ORDER_SIZE contient le nombre et ORDER_SIZE_TYPE indique ce qu’il représente. Ensemble, ils remplissent le champ Order size de l’onglet Properties de TradingView.
strategy.percent_of_equity
Un pourcentage du capital actuel. 10 signifie 10 % du capital par trade.
strategy.cash
Un montant dans la devise de la stratégie. 1000 signifie 1 000 USD par trade.
strategy.fixed
Un nombre de contrats, d’actions ou de coins. 0.5 signifie 0,5 BTC par trade.
qty = …
La taille par défaut ne s’applique qu’aux ordres sans qty propre. Une entrée avec qty = … utilise cette valeur à la place.
// 10% of equity per trade
const float ORDER_SIZE = 10
const string ORDER_SIZE_TYPE = strategy.percent_of_equity
// 1,000 USD per trade (CURRENCY = currency.USD)
// const float ORDER_SIZE = 1000
// const string ORDER_SIZE_TYPE = strategy.cash
// 0.5 contracts, shares or coins per trade
// const float ORDER_SIZE = 0.5
// const string ORDER_SIZE_TYPE = strategy.fixed
Vos propres variables
Placez les réglages de votre propre logique de stratégie dans un bloc INPUT SETTINGS séparé. Chaque appel à input.int(), input.float() ou input.bool() devient un champ de l'onglet Inputs de TradingView, que vous pouvez ajuster sans modifier le code.
// ----------------------------------------------------------------------------
// INPUT SETTINGS (TradingView: Settings → Inputs)
// ----------------------------------------------------------------------------
fastLength = input.int(20, "Fast EMA", minval = 1)
slowLength = input.int(50, "Slow EMA", minval = 2)
breakoutLength = input.int(20, "Breakout lookback", minval = 2)
atrLength = input.int(14, "ATR length", minval = 1)
atrStop = input.float(2.0, "ATR stop multiplier", minval = 0.1, step = 0.1)