Stop Profit à X en fonction d'un gain à Y

Forum d'entraide ProRealTime : prise en main, réglages, indicateurs, programmation ProBuilder et ProOrder, astuces entre utilisateurs de la plateforme.
Avatar du membre
fxbravo
Membre du Conseil Jedi
Messages : 8273
Enregistré le : 18 févr. 2016 09:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par fxbravo »

Salut Toto,

Petite question sur ton code: A quoi correspond la variable "TOBESAVED=0"?

Pour ma mémoire: je dois toujours laisser "lock=0"?

Merci d'avance pour ton retour :top:
Avatar du membre
fxbravo
Membre du Conseil Jedi
Messages : 8273
Enregistré le : 18 févr. 2016 09:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par fxbravo »

Et en prime je rajoute une autre question concernant le MTF:

Comment aurais-tu écrit le code si on devait tester les conditions sur 3 TF (genre la TF par défaut + TF15min +TF1H)?

Merci d'avance pour ton retour ;)
Avatar du membre
Toto le Héros
Chevalier Jedi
Messages : 2425
Enregistré le : 07 oct. 2016 10:51

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par Toto le Héros »

Salut FX,
Tobesaved et lock sont =0 pour la phase d'initialisation des variables. (instruction : "once") Il faut laisser tel quel en effet.
Tobesaved retournera ensuite dans le programme la valeur des gains à conserver (avec PROTECT qui définit le % à conserver).
Pour le MTF, à ma connaissance, on ne peut travailler qu'avec 2 UTs simultanément.
A+
Avatar du membre
fxbravo
Membre du Conseil Jedi
Messages : 8273
Enregistré le : 18 févr. 2016 09:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par fxbravo »

Super! Merci beaucoup Toto pour tes réponse :top:
Avatar du membre
fxbravo
Membre du Conseil Jedi
Messages : 8273
Enregistré le : 18 févr. 2016 09:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par fxbravo »

Salut Toto,

Petite question en passant (postée aussi sur prorealcode):

J’ai une stratégie basée sur un indicateur sur UT 4H, avec un SL à 35 points et un TP à 100 points.

La position se ferme par 3 critères:

SL touché
TP touché
Next Bougie 4H qui ne respecte pas l’indicateur (sortie AT MARKET)
Ma demande est la suivante:

Je souhaiterais que si la position est en gain de X points (20 par exemple), le SL remonte automatiquement à +Y points (+3 points par exemple).

Est-il possible de le faire tel quel dans l’UT 4H, où bien est-il possible de se baser sur une autre UT (MTF inside ;)) comme l’UT 15min par exemple, pour exécuter cette condition (du style, IF UT15 = +20 points Then SL=+3)?

Ci-dessous le code que j’utilise:

Code UT H4:

==================

indicator1 = CALL "Signal"(close)
c1 = (indicator1 = 1)

IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF


// Conditions pour ouvrir une position en vente à découvert
indicator3 = CALL "Signal"(close)
c2 = (indicator3 = -1)

IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF


SET stop ploss 35
set target pprofit 100

=================


Merci d’avance pour ton retour ;)


Excellente journée et surtout excellent weekend :top:
Avatar du membre
fxbravo
Membre du Conseil Jedi
Messages : 8273
Enregistré le : 18 févr. 2016 09:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par fxbravo »

Réponse de Nicolas, l'admin de ProRealCode:

En effet, on peut le faire dans un timeframe plus petit, pour éviter d’attendre la fin de la bougie de 4 heures pour le faire. Dans ce cas, il faudra lancer la stratégie dans le timeframe le plus petit, ci-dessous le code de ta stratégie modifiée, incluant le breakeven (non testé).

Code : #

timeframe(4 hours,updateonclose)
indicator1 = CALL "Signal"(close)
c1 = (indicator1 = 1)
 
IF c1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF
 
 
// Conditions pour ouvrir une position en vente à découvert
indicator3 = CALL "Signal"(close)
c2 = (indicator3 = -1)
 
IF c2 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
 
 
SET stop ploss 35
set target pprofit 100
 
timeframe(1 minute)
startBreakeven = 20 //how much pips/points in gain to activate the breakeven function?
PointsToKeep = 3 //how much pips/points to keep in profit above of below our entry price when the breakeven is activated (beware of spread)
 
//reset the breakevenLevel when no trade are on market
IF NOT ONMARKET THEN
breakevenLevel=0
ENDIF
 
// --- BUY SIDE ---
//test if the price have moved favourably of "startBreakeven" points already
IF LONGONMARKET AND close-tradeprice(1)>=startBreakeven*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)+PointsToKeep*pipsize
ENDIF
 
//place the new stop orders on market at breakevenLevel
IF breakevenLevel>0 THEN
SELL AT breakevenLevel STOP
ENDIF
// --- end of BUY SIDE ---
 
// --- SELL SIDE ---
//test if the price have moved favourably of "startBreakeven" points already
IF SHORTONMARKET AND tradeprice(1)-close>=startBreakeven*pipsize THEN
//calculate the breakevenLevel
breakevenLevel = tradeprice(1)-PointsToKeep*pipsize
ENDIF
 
//place the new stop orders on market at breakevenLevel
IF breakevenLevel>0 THEN
EXITSHORT AT breakevenLevel STOP
ENDIF
// --- end of SELL SIDE ---
Avatar du membre
pierrep
Membre du Conseil Jedi
Messages : 6475
Enregistré le : 09 févr. 2015 20:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par pierrep »

Bonjour Toto,

J'avais en tête une stratégie de protection de la position à parti d'un code définissant le niveau d'entré, et j'ai vu ce que tu as proposé a FX au niveau de codage. Je m'en suis inspiré pour écrire le code et je t'en remercie :merci: . Mais je butte sur un problème. Je te l'expose.

D'abord, j'ai défini d'autres critères de protection de la position prise; en gros, je détermine deux (ce sera 5 mais ici je simplifie) seuils de protection après la prise de position. Exemple:

On va dire achat 11200. L'achat est déterminé par un algo qui donne le niveau d'achat. UT = 1 min
SL=20
TP =50

si seuil 1 =+X dépassé alors vente si gain sécurisé de n point
si seuil 2= +XX dépassé alors vente si gain sécurisé de m points
protect1= n
pretect2=m

Je me suis fortement inspiré de tes codes. Mais j'ai un problème en backtest, dès que la première position est prise et qu'elle est clôturée en fonctionnant parfaitement (TP ou SL atteint ou déclenchement d'un des seuils), les positions suivantes sont mal gérées: clôture en avance de phase hors des niveau définis, etc...
Enfin c'est ce qu'il me semblait par ce qu'en relançant les test j'ai l'impression que ça ne marche plus du tout.... :(

j'ai bien sûr pas mis de strategyprofit=0 dans le code car je veux pouvoir prendre position a chaque fois que l'algo me donne l'opportunité dans la journée.


le code que j'ai rentré:

Code : #


DEFPARAM CumulateOrders = False 
DEFPARAM FLATAFTER = 173000

noEntryBeforeTime = 090000
timeEnterBefore = time >= noEntryBeforeTime

noEntryAfterTime = 170000
timeEnterAfter = time < noEntryAfterTime

ENTREE=11138 //Seuil de déclenchement pour entrer à l'achat sur le marché

//seuils déclenchant les protections de la position
Seuil1=6
seuil2=7

SL=20   //Stop Loss INITIAL
TP=50    //Target Profit

//gains minimums protégés
protect1=1  
protect2 = 4

once lock1=0
once lock2 = 0

// Conditions pour ouvrir une position acheteuse
IF close<ENTREE and NOT longonmarket and timeEnterBefore AND timeEnterAfter THEN
BUY 1 CONTRACT AT ENTREE STOP
SELL AT ENTREE+TP LIMIT
SELL AT ENTREE-SL STOP
ENDIF

IF longonmarket then
SELL AT TRADEPRICE+TP LIMIT
SELL AT TRADEPRICE-SL STOP
if close>=(TRADEPRICE+SEUIL1) or lock1=1 then
lock1=1
SELL AT TRADEPRICE+protect1 STOP
endif
if close>=(TRADEPRICE+SEUIL2) or lock2=1 then
lock2=1
lock1=0
SELL AT TRADEPRICE+protect2 STOP
endif

ENDIF
Avatar du membre
Toto le Héros
Chevalier Jedi
Messages : 2425
Enregistré le : 07 oct. 2016 10:51

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par Toto le Héros »

De mémoire c'est normal car le robot était sensé être arrêté, puis redémarré.
Mais je peux revérifier çà dans la journée de lundi je pense.
Je te tiens au jus lundi après-midi.
Avatar du membre
pierrep
Membre du Conseil Jedi
Messages : 6475
Enregistré le : 09 févr. 2015 20:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par pierrep »

Merci Toto :top:
Bon week end

Pierre
Avatar du membre
Toto le Héros
Chevalier Jedi
Messages : 2425
Enregistré le : 07 oct. 2016 10:51

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par Toto le Héros »

@pierrep :
Spontanément, je dirais ceci.
Le problème vient certainement des "locks" qui ne peuvent pas être remis à 0 systématiquement ; et qui doivent l'être pour que le programme comprenne qu'il doit attendre le franchissement d'un seuil avant de remonter le SL initial.
Il me semblait que ceci n'était en fait pas un problème puisque de toute façon, il fallait changer le niveau du seuil d'entrée (11 138 dans ton programme) après chaque exécution ; puisque le trade suivant n'avait généralement pas le même niveau d'entrée cible.
(L'instruction once lock1=0 et once lock2=0 permettent d'initialiser à 0 les locks à chaque redémarrage du programme)

Pour pallier au problème, (si tu souhaites répèter des entrées sur le même niveau, c'est à dire sans arrêt manuel du programme après chaque sortie de position) tu peux essayer d'intercaler les lignes de code suivantes dans ton programme (avant //Conditions pour ouvrir une position acheteuse) :
if not on market then
lock1=0
lock2=0
endif

Cela va réinitialiser les protections dès qu'il n'y a pas de position ouverte.
(NB : par ailleurs, si lock2>lock1, je t'encourage à ne pas repasser lock1 à 0 (après lock2=1 dans ton programme). C'est une ligne de code inutile et si tu as 5 niveaux tu vas taper pas mal de lignes inutiles... et rendre le programme moins lisible.)
Si la fonction des "lock" n'est pas claire, n'hésite pas à me redemander.

En espèrant que çà fonctionne. Tu me diras et si ce n'est pas le cas, j’approfondirai.
A+
Avatar du membre
pierrep
Membre du Conseil Jedi
Messages : 6475
Enregistré le : 09 févr. 2015 20:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par pierrep »

Bonsoir Toto

Merci pour le retour, je vais tester cela dès que j'aurai un peu de temps. Là ça tombe mal, j'ai commencé un nouveau boulot depuis ce matin, donc en semaine plus trop de dispo.

Je te tiendrai au courant.
Et un grand merci encore.
Pierre
Pierre
Avatar du membre
pierrep
Membre du Conseil Jedi
Messages : 6475
Enregistré le : 09 févr. 2015 20:38

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par pierrep »

Bonsoir Toto,

je viens de tester avec tes modifications. C'est nickel, ça marche.
Merci beaucoup. :merci:

J'ai une question supplémentaire;


J'ai l'algo qui détermine mon niveau d'achat P1.
Je veux qu'à ce niveau P1 je ne puisse prendre qu'une seule fois une position, avant que l'algo ne détermine un nouveau niveau P2.
Si je veux faire cela, il faut ?
1) que je mette un compteur "pos" qui passe à 1 lorsque P1 est déterminé.
2) que je rajoute dans les conditions pour ouvrir une positions acheteuse la condition pos =1
3) une remise de pos à 0 lorsque une position est prise.

Tu trouve cela correct?


Pierre
Avatar du membre
Toto le Héros
Chevalier Jedi
Messages : 2425
Enregistré le : 07 oct. 2016 10:51

Re: Stop Profit à X en fonction d'un gain à Y

Message non lu par Toto le Héros »

@pierrep :
Salut,
Super si çà marche.
Oui, je ferais comme tu le suggères.
Avec un once compteur=0 comme initialisation.
A+