JSParticipant
Senior
Bonjour,
Essayez ceci…
DefParam CumulateOrders=False
//Timeframe(5 minutes)
If OpenTime=090000 then
TodayOpening=Close
If (TodayOpening-PreviousPrice)/PreviousPrice*100>0.5 then
Buy 1 contract at Market
ElsIf (TodayOpening-PreviousPrice)/PreviousPrice*100<-0.5 then
SellShort 1 contract at Market
EndIf
EndIf
If OpenTime=100000 then
PreviousPrice=CurrentPrice
CurrentPrice=Close
EndIf
Set Stop pLoss 100
Set Target pProfit 300
JSParticipant
Senior
Éditer:
« TodayOpening=Close » devrait être « TodayOpening=Open » (le « Open » à 09:00)
« CurrentPrice=Close » devrait être « CurrentPrice=Open » (le « Open » à 10:00)
Un grand merci à toi @
JS , je test cela dans la journée et te fais un retour !
<span class=”bbp-author-name”>JS</span> encore un grand merci car la base du code fonctionne, et j’ai des premier echantillons sur le probacktest. Par contre les entrées auto ne se font pas à l’endroit que j’aimerais.
Actuellement avec le code l’entrée se fait à 9:05 donc fin de clôture de la bougie de 9:00 … j’aimerais pour ma part que l’entrée se fasse juste après 9:00 dès que le bot à pu calculer la variation.
Un example visuel sera plus parlant je pense (piece jointe) :
- Cloture de 10:00 le 25/07 se fait à 39856
- Open de 9:00 le 26:07 se fait à 40082
–>soit une variation de +0.56%, le bot doit donc long instantanement au marché avec 100pts de SL / 300pts de TP car nous sommes au dessus des 0.5% de variation demandée pour entrer en position.
PS : J’ai essayé le code avec et sans ton edit et je n’ai pas vu de difference dans les prises de positions sur le backtest
JSParticipant
Senior
Salut,
Une position est ouverte « normalement », sur le « Ouvert » de la barre suivante (09:05), vous pouvez ajuster ce moment en utilisant « multi time (MTF) ». Vous pouvez alors effectuer le calcul dans un laps de temps de 5 minutes, et le placement des commandes dans un laps de temps de, par exemple, 1 minute. Une fois l’ordre exécuté, le « Stop Loss » et le « Take Profit » respectifs seront liés à l’ordre…
Le graphique en question doit être ouvert dans le laps de temps le plus bas (ici 1 minute)…
DefParam CumulateOrders=False
Once Long=0
Once Short=0
Timeframe(5 minutes)
If NOT OnMarket then
Long=0
Short=0
EndIf
If OpenTime=090000 then
TodayOpening=Open
If (TodayOpening-PreviousPrice)/PreviousPrice*100>0.5 then
Long=1
ElsIf (TodayOpening-PreviousPrice)/PreviousPrice*100<-0.5 then
Short=1
EndIf
EndIf
If OpenTime=100000 then
PreviousPrice=CurrentPrice
CurrentPrice=Open
EndIf
TimeFrame(1 minutes)
If Long then
Buy 1 contract at Market
ElsIf Short then
SellShort 1 contract at Market
EndIf
Set Stop pLoss 100
Set Target pProfit 300
Malheureusement le code V2 ne fonctionne pas, j’ai un message d’erreur en me mettant sur une chart 1 minute.
Penses-tu qu’il existe un moyen de rentrer vraiment à l’open de 9:00 (dès l’apparition de la candle) sans attendre la cloture M1 ? Mes datas sont faites sur une entrée precise à 9:00 et non à 9:01.
Je vais tenter de mailer le support prorealcode pour voir ce qu’ils en disent également.
En tout cas merci bcp pour tes retours JS
Vous ne pouvez pas utiliser le même nom de variable dans des périodes différentes.
Commentez ou supprimez les lignes 3 et 4.
JSParticipant
Senior
L’algo fonctionne bien ici, quel type de message d’erreur obtenez-vous ?
Comme le calcul a lieu à 09h00 (Open), votre position ne peut jamais être ouverte exactement à 09h00 …
Ok je vais tenter en supprimant les lignes 3/4. Oui je conçois que l’open de 9:00 donne l’information pour le calcul et ensuite la prise de decision, rentrer 10/20 secondes après 9:00 serait possible ?
Voici le message que j’obtiens :
JSParticipant
Senior
Vous pouvez réduire le délai de la « seconde » à au moins 1 seconde, mais cela affectera la quantité de données « backtest » que vous pouvez utiliser…
Par exemple, si vous souhaitez utiliser 10 secondes, remplacez la deuxième période par 10 secondes… « TimeFrame (10 seconds) »
bonjour JS, effectivement en 10 seconds j’ai beaucoup moins d’occurences sur le graphique. (mais ce sera plus proche des datas que j’ai relevé manuellement).
Pour faire fonctionner le code V2 je suis obligé d’effacer la ligne 6 pour qu’il fonctionne, cela n’a pas d’incidence sur le reste ? Car j’ai observé des erreurs de calcul de variation, certaines fois le robot à une variation inferieur a -0.5 donc devrait short mais il prend un long. Peut-etre est-ce du au fait que j’ai effacé la ligne 6 : Timeframe(5 minutes)
En supprimant la ligne 3/4 comme indiqué plus haut le code ne voulais pas se lancer sur mon prorealtime.
Belle soirée à toi
Ps: j’ai egalement demandé de l’aide sur le forum anglais pour avoir un 2nd avis, je te tiendrai informé du résultat
JSParticipant
Senior
Salut,
Par exemple, lorsque vous travaillez avec la version « Complete » de PRT, vous disposez d’un maximum de 200 000 unités de données historiques (données BackTest)…
200 000 * 10 s = 2 000 000 / (60 * 60 * 24) = 23 jours
(Les données du BackTest dépendent de la période chronologique)
Le code ci-dessous a été testé sur 200 kUnités…
DefParam CumulateOrders=False
Timeframe(5 minutes)
If NOT OnMarket then
Long=0
Short=0
EndIf
If OpenTime=090000 then
TodayOpening=Open
If (TodayOpening-PreviousPrice)/PreviousPrice*100>0.5 then
Long=1
ElsIf (TodayOpening-PreviousPrice)/PreviousPrice*100<-0.5 then
Short=1
EndIf
EndIf
If OpenTime=100000 then
PreviousPrice=CurrentPrice
CurrentPrice=Open
EndIf
TimeFrame(10 seconds)
If Long then
Buy 1 contract at Market
ElsIf Short then
SellShort 1 contract at Market
EndIf
Set Stop pLoss 100
Set Target pProfit 300
Encore merci pour ton temps JS. c’est vraiment très gentil !
Oui j’ai bien la version complete / Premium de ProRealtime avec 1M de données historique sur mon broker (SAXO).
Je viens de tester le code V3 sur un graphique 10secondes, il semble bien fonctionner mise à part le fait que l’entrée en position se fasse à 9:05 (au lieu de 9:00:10 souhaité)
Bien à toi
JSParticipant
Senior
Salut,
Dans le code/backtest montré, toutes les positions ont été ouvertes à 09:00:10 … ?