Instruction TRADEPRICE et prix négatif

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

    Bonjour,

    J’ai un problème récurrent avec le code suivant:

     

    if longonmarket then
    sell at (tradeprice - 0.00100) stop
    endif
    if shortonmarket then
    exitshort at (tradeprice + 0.00100) stop
    endif

     

    L’utilisation de (TRADEPRICE +/- une valeur) entraîne parfois (pas systématiquement) l’arrêt de mon système au motif:

    “Ce système de trading a été arrêté car il a essayé de placer un Stop ou une Limite avec un prix négatif. Merci d’ajouter des protections à votre code pour éviter la placement d’ordres possédant un prix négatif”

     

    Je ne n’identifie pas d’anomalie de prix au moment du rejet (cf la capture d’écran).

     

    En vous remerciant pour vos éclairages.

    Sans-titre.png Sans-titre.png
    #88232 quote
    Nicolas
    Keymaster
    Master

    En graphant TRADEPRICE dans un backtest, tu te rendras compte que cette instruction renvoie également le prix d’ouverture de tes ordres STOP, normal puisque ce sont aussi des ordres classiques finalement et non des STOPLOSS “ordinaires”. Donc à l’ouverture d’un nouvel ordre, le tradeprice est toujours celui de l’un de tes derniers STOP, donc si tu es en dessus/dessous, il est possible que l’opération que tu effectue pour calculer tes niveaux de stop se retrouvent négatifs.

    #88237 quote
    Stef1618
    Participant
    Average

    Merci pour ton retour Nicolas.

    J’avais compris que TRADEPRICE renvoyait le prix du dernier ordre exécuté, que ce soit un ordre d’achat, vente, stop ou limite.

    A la lecture de ta réponse je comprends que je me trompe et que ce n’est pas le cas puisque tu indique que “le tradeprice est toujours celui de l’un de tes derniers STOP“, donc même si le stop n’a pas été exécuté?

     

    Pourtant je constate que d’une manière générale le “(tradeprice – 0.00100) stop” place bien un stop 10 points sous le prix d’entrée LONG exécuté, et non pas en prenant pour référence le prix du dernier stop.

    Cela veut-il dire que parfois TRADEPRICE va renvoyer le dernier prix exécuté, donc le prix d’entrée en position, ou parfois le prix d’ouverture du dernier stop, et ce de manière aléatoire?

     

    De surcroit dans le cas présent le rejet intervient à la troisième bougie suite entrée en position, étrange qu’il ne se soit pas produit dès l’entrée en position…

     

    Quoiqu’il en soit et plus concrètement il semble que mon script actuel ne convienne pas car il n’est pas stable.

    Je souhaite placer un stop à X points sous chacune de mes entrées en position LONG ou SHORT, sans utiliser l’instruction SET STOP LOSS que j’utilise déjà comme stop garanti à la fin du code.

    Comment peut-on coder cela?

    #88244 quote
    Nicolas
    Keymaster
    Master

    J’ai répondu peut-être un peu trop vite, et tu as raison puisque les instructions ONMARKET ont besoin de savoir qu’un ordre est déjà lancé, hors il faut donc une bougie révolue et par conséquent le TRADEPRICE devrait bien être celui de l’ordre au marché.

    Avec le code ci-dessous, j’ai bien ce comportement: (voir image)

    defparam cumulateorders=false
    
    irsi=rsi[14]
    
    if irsi crosses over 50 then
    buy at market
    endif
    
    if irsi crosses under 50 then
    sellshort at market
    endif
    
    if longonmarket then
    a = tradeprice - 0.00100
    sell at (tradeprice - 0.00100) stop
    endif
    if shortonmarket then
    a = tradeprice + 0.00100
    exitshort at (tradeprice + 0.00100) stop
    endif
    
    if onmarket then
    graph a coloured(255,0,0)
    graph tradeprice
    endif

     

    La variable “a” en rouge dans l’image, représentant le niveau de stop est toujours correctement placé et n’a pas de valeur négative, ce qui était à prévoir 🙂

    Je pense que dans la liste des ordres rejetés, tu dois avoir l’information du niveau de prix où tu as voulu placé un ordre, as-tu regardé ?

    Pour le moment, je ne comprends pas ce comportement, soit tu lances un ticket au support technique PRT, soit tu peux aussi éviter d’utiliser TRADEPRICE en enregistrant le prix du Close au moment où tu lances ton ordre et fait tes calculs de STOP en fonction de ce dernier, ainsi tu es sûr de la valeur.

    tradeprice-levels.png tradeprice-levels.png
    #88256 quote
    Stef1618
    Participant
    Average

    Très bonne idée d’enregistrer le prix du close.

     

    Pour filtrer un TRADEPRICE négatif je pourrais aussi écrire

    if longonmarket and tradeprice > 0.00100 then
    sell at (Z - 0.00100) stop
    endif

    Mais ton idée d’enregistrer le prix du close est meilleure 😉

    En reprenant ton exemple cela donnerait ceci, est-ce correct?

    defparam cumulateorders=false
     
    irsi=rsi[14]
     
    if irsi crosses over 50 then
    buy at market
    Z = close
    endif
     
    if irsi crosses under 50 then
    sellshort at market
    Z = close
    endif
     
    if longonmarket then
    sell at (Z - 0.00100) stop
    endif
    if shortonmarket then
    exitshort at (Z + 0.00100) stop
    endif
    #88261 quote
    Nicolas
    Keymaster
    Master

    Oui pour ta première idée, mais ton calcul ne devrait pas être négatif de toute manière .. bref.

    Pour ton code d’exemple, c’est OK, à condition qu’il n’y ai pas de gap important entre le Close enregistré et l’Open suivant (les ordres sont ouverts à l’Open suivant). Même si ça résout le problème du code d’erreur, cela ne reste pas vraiment idéal je trouve.

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

Instruction TRADEPRICE et prix négatif


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Stef1618 @stef1618 Participant
Summary

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

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 01/09/2019
Status: Active
Attachments: 2 files
Logo Logo
Loading...