Bonjour à tous,
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:
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 votre retour.
Excellente journée.
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é).
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 ---
Merci pour ton retour Nicolas!
Je vais bien essayer de comprendre le code.
D’ailleurs, j’ai une autre question qui est un peu en rapport avec celle du dessus:
- J’ai une stratégie sur UT 4H qui à un signal de déclenchement au bout de 1h par exemple. Dans un code classique, le code se déclenchera à la clôture de la bougie si le signal est toujours OK (enfin, il me semble que c’est cette logique qui s’applique). Or, est-il possible de déclencher, via le MTF, la stratégie UT 4H sur l’UT1 Min par exemple?
Si ça pollue la file, je créerai une autre file pour les réponses.
Excellente journée à toi.
Oui c’est possible en utilisant les variables/conditions du timeframe 4h dans un timeframe plus petit, tout simplement.
Merci pour ton retour Nicolas.
Du coup, ça donnerai ça? J’ai bon?
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
timeframe(1 minute,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
Autre question subsidière 😉
- quel est l’UT minimum avec laquelle ProOrder fonctionne parfaitement? Toto le Heros m’avait parlé de UT 1 min. Impossible mettre en 10 Ticks par exemple?
Du coup, ça donnerai ça? J’ai bon?
Difficile de répondre, je ne connais pas du tout la stratégie, à quoi correspond “signal”, etc..
ProOrder fonctionne à partir du timeframe 1 sec. Les graphiques en ticks, ça n’est pas encore possible.
Salut Nicolas,
Merci pour ton retour. Sais-tu quand les sticks seront disponibles pour ProOrder?
Sinon, concernant signal, c’est une stratégie que j’ai codé qui m’envoie juste un “-1” ou “1” en fonction de certains critères.
Mon besoin est donc:
- dès que le signal est donné (1 ou -1) sur l’UT 4H (par exemple au bout de 1h21 de durée de la bougie 4H en cours) cela déclenche la stratégie (à la seconde près donc, et pas à la prochaine bougie 4H).
Pour le moment, cela se déclenche sur la nouvelle bougie 4H, et pas en “temps réel”, ce qui fait perdre en efficacité 😉
Quand j’ai écrit le code “J’ai Bon?”, je voulais savoir su j’étais sur la bonne piste, à savoir: mettre les conditions d’activation de la stratégie basée sur le signal 1 ou -1 sur l’UT 4H et 1s.
N’hésite pas à me dire si je n’ai pas été clair sur le besoin que j’ai exprimé.
Ok, sans avoir testé voilà à quoi ça pourrait ressembler:
timeframe(4 hours)
indicator1 = CALL "Signal"(close)
timeframe(1 second,updateonclose)
IF indicator1=1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF
IF indicator1=-1 AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
SELLSHORT 1 CONTRACT AT MARKET
ENDIF
SET stop ploss 35
set target pprofit 100
Dans ce cas de figure, et puisqu’on attend pas la clôture de la bougie de 4h pour prendre un signal, il est fort probable qu’il y ai une multitude de signaux dans ce laps de temps de 4h.
La stratégie est donc à lancer sur un timeframe de 1 seconde.
Merci pour ton retour Nicolas.
Pour éviter le cumul des positions comme tu l’as relevé, il est donc conseillé de rajouter la ligne suivante en début de code je suppose?
DEFPARAM CumulateOrders = False
Salut Nicolas, après relecture de mon dernier message, je m’aperçois que je n’avais pas compris ce que tu m’avais dit 😉
Du coup, 2 autres questions me viennent:
- comment faire pour limiter à X positions consécutives dans la même timeframe UT4h?
- si la première solution n’est pas faisable, comment faire pour limiter la stratégie à 1 fois par jour? (et le must: si elle est en gain?)
Merci d’avance pour ton retour.
Excellente fin de journée.
Bonjour Nicolas,
Merci pour ton retour. Je vais faire chauffer la fonction recherche 😉
Excellente journée.