Instruction TRADEPRICE et prix négatif
Forums › ProRealTime forum Français › Support ProOrder › Instruction TRADEPRICE et prix négatif
- This topic has 5 replies, 2 voices, and was last updated 5 years ago by Nicolas.
-
-
01/09/2019 at 10:38 AM #88228
Bonjour,
J’ai un problème récurrent avec le code suivant:
123456if longonmarket thensell at (tradeprice - 0.00100) stopendifif shortonmarket thenexitshort at (tradeprice + 0.00100) stopendifL’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.
01/09/2019 at 11:04 AM #88232En 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.
01/09/2019 at 12:17 PM #88237Merci 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?
01/09/2019 at 1:11 PM #88244J’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)
12345678910111213141516171819202122232425defparam cumulateorders=falseirsi=rsi[14]if irsi crosses over 50 thenbuy at marketendifif irsi crosses under 50 thensellshort at marketendifif longonmarket thena = tradeprice - 0.00100sell at (tradeprice - 0.00100) stopendifif shortonmarket thena = tradeprice + 0.00100exitshort at (tradeprice + 0.00100) stopendifif onmarket thengraph a coloured(255,0,0)graph tradepriceendifLa 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.
01/09/2019 at 2:30 PM #88256Très bonne idée d’enregistrer le prix du close.
Pour filtrer un TRADEPRICE négatif je pourrais aussi écrire
123if longonmarket and tradeprice > 0.00100 thensell at (Z - 0.00100) stopendifMais ton idée d’enregistrer le prix du close est meilleure 😉
En reprenant ton exemple cela donnerait ceci, est-ce correct?
1234567891011121314151617181920defparam cumulateorders=falseirsi=rsi[14]if irsi crosses over 50 thenbuy at marketZ = closeendifif irsi crosses under 50 thensellshort at marketZ = closeendifif longonmarket thensell at (Z - 0.00100) stopendifif shortonmarket thenexitshort at (Z + 0.00100) stopendif01/09/2019 at 3:19 PM #88261Oui 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.
-
AuthorPosts
Find exclusive trading pro-tools on