Take profit à distance du dernier plus bas

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #134125 quote
    Stef1618
    Participant
    Average

    Bonjour,

     

    Je cherche à définir un take profit à une distance en point égale au dernier plus bas pour un achat long.

    J’ai essayé les 2 codes suivants et à chaque fois le take profit est placé bien plus loin que la valeur attendue:

    once tp1 = 12000 //valeur fixée arbitrairement comme point de départ
    
    if rsi[14] < 50 then
    tp1 = min(tp1,close)
    endif
    
    if tp1 < 12000 and rsi[14] crosses over 50 then
    buy X contracts at market
    set target pprofit (close - tp1)
    endif
    if rsi[14] < 50 and close < close[1] then
    tp1 = close
    endif
    
    if rsi[14] crosses over 50 then
    buy X contracts at market
    set target pprofit (close - tp1)
    endif

    Auriez-vous une idée de codage valide?

     

    Merci,

    #134143 quote
    Nicolas
    Keymaster
    Master

    Je pense que ta deuxième version est meilleure, mais je modifierai le pprofit en profit pour être en version prix et non en points, si le pointsize n’est pas égal à 1, cela pourrait poser problème.

    set target profit (close - tp1)

    Par ailleurs, il est possible que parfois cette soustraction donne une valeur négative ? à tester avec un GRAPH close-tp1

    #135340 quote
    Stef1618
    Participant
    Average

    Bonjour,

    J’avais posté une réponse il y a quelques jours mais je vois qu’elle n’est pas parue. L’ayant fait depuis mon smartphone il y a du avoir un soucis.

    Juste pour dire que je suis effectivement arrivé à mes fin en utilisant la deuxième version et “profit” au lieu de “pprofit”.

    Merci encore Nicolas

    #135345 quote
    Stef1618
    Participant
    Average

    Du coup pour aller plus loin, j’utilise ce code en semi-automatique, c’est-à-dire que je lance le code seulement quand je repère une potentielle opportunité et n’est pas destiné à tourner tout seul tout le temps.

    Dans l’idée je souhaite acheter quand le MACD passe 0, mais je ne souhaite pas forcément que la position soit prise au premier croisement mais à un croisement ultérieur.

    Par exemple sur l’image je lance le robot au niveau de la flèche rouge et je souhaite que l’ordre soit pris à la flèche verte, et non la bleue, soit au deuxième croisement du macd au dessus de 0.

    En utilisant le code suivant la position s’ouvre au premier croisement alors que j’ai ajouté la variable m comme déclencheur.

    defparam cumulateorders = false
    if strategyprofit <> 0 then
    quit
    endif
    
    X = 0.5
    
    i1 = monmacd
    
    once m = 0
    
    
    if i1 crosses under 0 then
    tp = close
    m = 1
    endif
    
    if i1 < 0 and not onmarket and close < close[1] then
    tp = close
    endif
    
    if m = 1 and i1 crosses over 0 then
    buy X contracts at market
    set target pprofit (close - tp)
    endif
    
    if onmarket and i1 crosses under 0 then
    sell at market
    endif
    
    
    set stop ploss 150
    

     

    Quelle modification puis-je apporter?

    Capture-2.png Capture-2.png
    #135376 quote
    Nicolas
    Keymaster
    Master

    Logique puisque ta condition ‘if m = 1’ est juste en dessous de ‘m=1’ (ligne 15), donc le code fera ce que tu lui demandes, à la ligne 22 la variable m est bien égale à 1.

    Le code est lu de haut en bas.

    Soit tu fais un incrément de m :

    m = m+1

    et à la ligne 15 tu testes si m>1

    Soit tu inverses la position des lignes pour que ta ligne 15 soit lu aux bougies après celle ou tu donnes à m la valeur 1.

    #135520 quote
    Stef1618
    Participant
    Average

    Merci pour ton retour mais j’ai du mal à saisir. Car je commence avec m = 0 et m est censé passer à 1 seulement si la consition i1 crosses under 0 est réalisée, or le trade est pris alors que la condition n’est pas réalisée.

    #135540 quote
    Nicolas
    Keymaster
    Master

    La variable prend une valeur à 1 peut être avant le backtest lors de la lecture de l’historique, dans ce cas faire un

    defparam prealoadbars=0

    en tête du code de la stratégie.

    Quand on veut tester la valeur d’une variable on peut utilise GRAPH, soit ici :

    GRAPH m

    ce qui pourrait t’aider à comprendre pourquoi “m” change d’état, et quand !

    #135547 quote
    Stef1618
    Participant
    Average

    C’est bien ce que je me disais, que la valeur est prise à la lecture de l’historique.

    Je vais donc jongler avec la valeur du preloadbars et un incrément de m.

    Tres bonne journée

Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.

Take profit à distance du dernier plus bas


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Stef1618 @stef1618 Participant
Summary

This topic contains 7 replies,
has 2 voices, and was last updated by Stef1618
5 years, 9 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 06/01/2020
Status: Active
Attachments: 1 files
Logo Logo
Loading...