Bonjour,
Je souhaite placer un SL fixe sur le plus bas de la dernière bougie et un TP à distance égale au stop mais force est de constater qu’il ne se place pas.
Ca me fait un ratio de winrate de 99% (pas mal mais pas raisonnable haha)
Voici mon code :
DEFPARAM CumulateOrders = False
//Variables
BollingerPeriod = 20
BollingerDeviation = 2.5
BollingerMiddle = Average[BollingerPeriod](Close)
BollingerUpper = BollingerMiddle + BollingerDeviation * Std[BollingerPeriod](Close)
BollingerLower = BollingerMiddle – BollingerDeviation * Std[BollingerPeriod](Close)
DistanceBollinger = (BollingerUpper-BollingerLower)
Bas = low[1]
DistanceStop = tradeprice – low[1]
if close > average[7] and low < average[7] and DistanceBollinger > 0.01 then
buy 1 share at market
set stop ploss Bas
set target profit DistanceStop
endif
set stop ploss : il faut un nombre de Point
il faut ecrire
set stop ploss close-Bas
ou remplacer par distancestop
et le TP il est au dessus du close a revoir
En examinant votre code, je constate quelques erreurs dans le calcul du Stop Loss (SL) et du Take Profit (TP), ce qui empêche l'exécution correcte des ordres.
Problèmes avec Bas = low[1]
- Vous définissez le Stop Loss à une distance = Bas donc le stop sera rarement déclenché.
- Au lieu de cela, vous pouvez définir un prix d'arrêt Bas. Mais cela a un problème et c'est que nous ne connaissons pas le prix d'entrée (il sera dans le prochain bar à l'ouverture).
Calcul DistanceStop incorrect
- Vous utilisez
DistanceStop = tradeprice - low[1] , mais tradeprice est le prix de la dernière transaction effectuée. - Au moment de l'entrée, aucune transaction n'a encore été exécutée, donc cette valeur n'a pas de sens car il s'agit du prix de sortie de la dernière transaction.
- De plus, il se pourrait que la distance soit négative…
Voici une proposition avec les conditions suivantes :
- Condition
not onmarket → Empêche le SL et le TP d'être constamment recalculés une fois qu'une position est déjà ouverte. - Nouveau calcul
stoploss → Il est désormais calculé comme le minimum entre la bougie actuelle et la bougie précédente, garantissant qu'il est toujours à un niveau valide. - Calcul de la distance du Stop Loss (
distanceStop ) → Elle est désormais basée sur le prix de clôture de la bougie sur laquelle se produit la condition d'entrée ( entryprice = close ). - Utilisation
set stop price et set target price → Les arrêts sont désormais définis sur des prix exacts au lieu d'une distance relative, évitant ainsi les erreurs d'exécution.
DEFPARAM CumulateOrders = False
//Variables
BollingerPeriod = 20
BollingerDeviation = 2.5
BollingerMiddle = Average[BollingerPeriod](Close)
BollingerUpper = BollingerMiddle + BollingerDeviation * Std[BollingerPeriod](Close)
BollingerLower = BollingerMiddle - BollingerDeviation * Std[BollingerPeriod](Close)
DistanceBollinger = (BollingerUpper-BollingerLower)
if not onmarket and close > average[7] and low < average[7] and DistanceBollinger > 0.01 then
entryprice=close
stoploss=min(low,low[1])
distanceStop=entryprice-stoploss
targetprofit=entryprice+distanceStop
buy 1 contract at market
set stop price stoploss
set target price targetprofit
endif
graphonprice targetprofit coloured("blue")
graphonprice stoploss coloured("red")