Vis à vis de ton dernier point, que penses-tu de récupérer plutôt les flux tick-by-tick (ceux de ib par exemple) afin de mieux anticiper la volatilité ?
Compliqué techniquement ? Risque de "manquer" des ticks dans la récupération en live ?
Code : #
//---parameters
MaxDailyLoss=c //Max daily loss allowed (in money)
// first time we launch the code, the trading is allowed
once TradeAllowed=1
// reset the current state of the strateygprofit each new day
If intradaybarindex=0 then
MyProfit=STRATEGYPROFIT
TradeAllowed=1
endif
// test if the strategyprofit of the day is currently below the daily loss allowed
If Strategyprofit<=MyProfit-MaxDailyLoss then
TradeAllowed=0
endif
...
if TradeAllowed=1 and conditionsachat then
buy
endif
Code : #
// --- Paramètres ---
maxDailyLoss = 200 // Perte max journalière
initialSize = 1 // Taille de base
profitStep = 500 // Gain requis pour +1 taille
maxSize = 10 // Taille max autorisée
// --- Variables internes ---
defparam cumulateorders = false
if day <> day[1] then
dailyLoss = 0
tradedToday = 0
endif
// Mise à jour perte journalière (si trade clôturé et en perte)
if positionperf(1) < 0 then
dailyLoss = dailyLoss + positionperf(1)
endif
// Autorisation de trader ?
canTrade = (dailyLoss > -maxDailyLoss)
// Calcul de la taille linéaire
currentProfit = StrategyProfit
size = initialSize + floor(currentProfit / profitStep)
if size < 1 then
size = 1
endif
if size > maxSize then
size = maxSize
endif
// Exemple d’entrée (à adapter à ta stratégie)
if canTrade and tradedToday = 0 and close > average[20](close) then
buy size contract at market
tradedToday = 1
endif
// Exemple de sortie (à adapter aussi)
if positionprofit > 100 or positionprofit < -50 then
sell at market
endif
Code : #
// FONCTION PROBUILDER : TrendDirection
// Retourne 1 = tendance haussière, -1 = baissière, 0 = neutre
once ema50 = close
once ema200 = close
ema50 = ExponentialAverage[50](close)
ema200 = ExponentialAverage[200](close)
penteEMA200 = ema200 - ema200[1]
adxVal = ADX[14]
trend = 0
if ema50 > ema200 and penteEMA200 > 0 and adxVal > 20 then
trend = 1 // Tendance haussière
elsif ema50 < ema200 and penteEMA200 < 0 and adxVal > 20 then
trend = -1 // Tendance baissière
else
trend = 0 // Neutre ou range
endif
RETURN trend
Code : #
// ===========================================
// MODULE : SORTIE AUTO DES POSITIONS LONGS
// Condition : Rupture probable de tendance haussière
// ===========================================
DEFPARAM CumulateOrders = False
DEFPARAM PreLoadBars = 500
// ==== Paramètres de rupture ====
StructurePeriod = 10 // Période pour détecter le dernier plus bas
RSIPeriod = 14
EMAPeriod = 50
DivergenceLookback = 2 // Pour détecter divergence simple sur les 2 derniers points
// ==== Détection des signaux de rupture ====
// 1. Cassure du dernier creux
DernierPlusBas = Lowest[StructurePeriod](low)
CassureStructure = close < DernierPlusBas
// 2. Divergence RSI
rsi = RSI[RSIPeriod](close)
DivergenceRSI = (high > high[1]) AND (rsi < rsi[1]) // Prix en hausse, RSI en baisse
// 3. Rupture EMA50
ema50 = ExponentialAverage[EMAPeriod](close)
CassureEMA = close < ema50
// 4. Confluence rupture
RuptureHaussiereProbable = CassureStructure OR (DivergenceRSI AND CassureEMA)
// ==== Gestion de la position ====
// Ce code suppose qu’on est déjà en position longue via un autre module
IF LongOnMarket AND RuptureHaussiereProbable THEN
SELL AT MARKET
ENDIF
Code : #
// ===================================
// INDICATEUR D'ANTICIPATION DE RUPTURE HAUSSIÈRE
// Nasdaq - UT 15 minutes
// ===================================
// --- PARAMÈTRES ---
periodeResistance = 20 // Période pour calculer la résistance
seuilVolume = 1.5 // Multiplicateur de volume moyen
periodeVolume = 20 // Période pour le volume moyen
seuilCompression = 0.7 // Seuil de compression (ATR)
periodeATR = 14 // Période ATR
// --- CALCUL DE LA RÉSISTANCE ---
plusHaut = highest[periodeResistance](high)
resistance = plusHaut
// --- DÉTECTION DE LA COMPRESSION ---
atrActuel = AverageTrueRange[periodeATR](close)
atrMoyen = average[periodeResistance](atrActuel)
compression = (atrActuel < atrMoyen * seuilCompression)
// --- ANALYSE DU VOLUME ---
volumeMoyen = average[periodeVolume](volume)
volumeCroissant = (volume > volumeMoyen * seuilVolume)
// --- PROXIMITÉ DE LA RÉSISTANCE ---
distanceResistance = ((resistance - close) / close) * 100
procheResistance = (distanceResistance < 0.5 AND distanceResistance > 0)
// --- MOMENTUM HAUSSIER ---
rsi = RSI[14](close)
rsiHaussier = (rsi > 50 AND rsi < 70)
// EMA pour tendance
ema20 = ExponentialAverage[20](close)
ema50 = ExponentialAverage[50](close)
tendanceHaussiere = (ema20 > ema50 AND close > ema20)
// --- PATTERN DE CHANDELIER ---
// Bougie haussière avec mèche haute faible
corpsBougie = close - open
mecheHaute = high - close
bougieHaussiere = (corpsBougie > 0 AND mecheHaute < corpsBougie * 0.3)
// --- SIGNAL D'ANTICIPATION ---
signalAnticipation = compression AND procheResistance AND tendanceHaussiere AND rsiHaussier
// Signal fort avec volume
signalFort = signalAnticipation AND volumeCroissant AND bougieHaussiere
// --- AFFICHAGE ---
IF signalFort THEN
signal = 2 // Signal FORT
ELSIF signalAnticipation THEN
signal = 1 // Signal de préparation
ELSE
signal = 0
ENDIF
// --- TRACÉ DE LA RÉSISTANCE ---
r = resistance
g = resistance
b = resistance
// --- RETOUR DES VALEURS ---
RETURN signal AS "Signal Anticipation", r AS "Résistance", signal * 100 AS "Force Signal %", distanceResistance AS "Distance Résistance %"
// --- GRAPHIQUE ---
// Signal = 0 : Pas de signal
// Signal = 1 : Préparation (JAUNE)
// Signal = 2 : Signal FORT - Rupture imminente (VERT)