Sortie de tposition refusée sur niveau
Forums › ProRealTime forum Français › Support ProOrder › Sortie de tposition refusée sur niveau
- This topic has 2 replies, 2 voices, and was last updated 1 year ago by Lurubu.
-
-
03/11/2023 at 12:04 PM #211364
Bonjour,
dans ce programme de breakout classique, tout fonctionne sauf deux ocurences que j’ai souligné en gras
Si quelqu’un peut y jeter un coup d’oeil, celà me soulagerais.
Merci d’avance.
//On établit trois niveaux à la hausse et à la baisse, on entre 4 lots puis on sort successivement 1 lot sur chaque niveau le dernier étant sorti sur stop suiveur
//parameters :
boxsize = 0.4
//———————— Etablissement du renko —————-
once topprice = high
once bottomprice = low – boxsize*ticksize
if(high > topprice + boxsize) THEN
topprice = high
bottomprice = topprice – boxsize
ELSIF (low < bottomprice – boxsize) THEN
bottomprice = low
topprice = bottomprice + boxsize
ELSE
topprice = topprice
bottomprice = bottomprice
ENDIF
//——————- Canal d’ouverture ——————-
once pH=high
once PB=low
once CA1=high
once CA2=high
once CA3=high
once CV1=low
once CV2=low
once CV3=low
once stopSA=high
once stopSV=low
debut=143000
if time<debut then
cpt=0
PH=topprice
PB=bottomprice
stopSA=topprice
stopSV=bottomprice
elsif topprice<>topprice[1] then
cpt=cpt+1
PH=max(PH,topprice)
PB=min(PB,bottomprice)
if high>CA3 then
stopSA1=max(stopSA,high-2*ecart)
endif
if low<CV3 then
stopSV1=min(stopSV,low+2*ecart)
endif
endif
if cpt>5 then
PH=PH[1]
PB=PB[1]
endif
ecart=PH-PB
CA1=PH+1*ecart
CA2=PH+2*ecart
CA3=pH+3*ecart
CV1=PB-1*ecart
CV2=PB-2*ecart
CV3=PB-3*ecart
//——————-Initialisation ———————
if not onmarket then
etat=0
cptA=0
cptV=0
endif
//————————- Achats ———————
CondAchat1=not longonmarket and time>debut and time<=155000 and topprice[1]<=PH and topprice>PH
CondAchat2=not longonmarket and time>155000 and time<173000 and cptA=0 and topprice[1]<=PH and topprice>PH
if CondAchat1 or CondAchat2 then
buy 4 shares at market
cptA=cptA+1
endif
//———————— Etat0 (4 lots) —————————————-
if longonmarket and etat=0 then
if high[1]<= CA1 and high>=CA1 then
sell 1 share at market
etat=1
elsif bottomprice[1]>=PB and bottomprice<PB then
sell 4 shares at market
etat=0
endif
endif
//———————— Etat1(Reste 3 lots) —————————————-
if longonmarket and etat=1 then
if high[1]<=CA2 and high>=CA2 then
sell 1 share at market
etat=2
elsif topprice[1]>=PH and topprice<PH then // il faut que topprice passe en dessous de PH pour pouvoir reprendre une position à l’achat
sell 3 shares at market
etat=0
endif
endif
//———————— Etat2 (Reste 2 lots)—————————————-
if longonmarket and etat=2 then
if high[1]<=CA3 and high>=CA3 then
sell 1 share at market
etat=3
elsif bottomprice[1]>=CA1 and bottomprice<CA1 then // à cet endroit, il me sort les 2 lots restants
// au lieu d’un seul
sell 1 share at market
etat=4
endif
endif
//———————— Etat3 (Reste 1 lot) —————————————-
if longonmarket and etat=3 then // ici, il ne veut pas prendre mon stop suiveur
if low<stopSA1 then
sell 1 share at market
etat=0
cptA=0
cptV=0
elsif time>214500 then
sell 1 share at market
etat=0
cptA=0
cptV=0
endif
endif
//———————— Etat4 (Reste 1 lot)—————————————-
if longonmarket and etat=4 then
if high<max(tradeprice,high-2*ecart) then
sell 1 share at market
etat=0
cptA=0
cptV=0
elsif time>214500 then
sell 1 share at market
etat=0
cptA=0
cptV=0
endif
endif
03/12/2023 at 3:03 PM #211417Sans savoir l’actif et le timeframe pour pouvoir reproduire le même problème, je pense à la lecture du code que là où tu as mis “à cet endroit, il me sort les 2 lots restants au lieu d’un seul”, ce n’est probablement pas ce qu’il se passe.
En effet prenons une bougie à travers laquelle passe CA2 et CA3 alors qu’on est en etat=1 : tu peux très bien avoir d’abord réduit la position de 1 et être passé à “etat=2”, puis juste après dans le code en étant dans la même bougie à la lecture du if suivant qui considère etat=2, avoir sorti un lot de plus. Le tout donne 2 lots sortis, sans que ce soit 2 au même endroit du code, avec tout ayant marché tel qu’écrit.
Il faudrait sans doute inverser l’ordre de tes if, à savoir au lieu de tester etat de plus en plus grand tout en l’augmentant au risque de le retester ) sa plus grande valeur, tester etat de moins en moins grand et l’augmenter de sorte que sa nouvelle valeur n’est pas testée par les if suivants dans la même bougie. Donc traiter d’abord “//———————— Etat4…”, puis “//———————— Etat3…”, puis “//———————— Etat2”, etc…
03/12/2023 at 10:11 PM #211447Bonjour et merci de ta réponse.
Je suis en 5 secondes et en rangebar 0.4 (sur indice ou mieux sur matières premières). Avec ce réglage, il ne peut pas y avoir de bougies qui croisent deux niveaux en même temps.
Dans ces conditions je ne vois pas l’intérêt de tester avec les états en ordres décroissants, ou je n’ai pas compris.
Je vais tout de même essayer, mais je pense que pour une raison ou une autre, le programme comprend en franchissant CA1 après CA2( c’est-à-dire une correction)
que l’histoire est finie et donc il clôture tout. Je cherche cette raison.
Je vais retester à partir de demain car je n’ai pas fait attention si les deux lots ne sont pas partis sur des niveaux précédents.
Je te tiens au courant et merci encore.
Bonne soirée
-
AuthorPosts