Bonjour,
Pardonnez d’abord mon ignorance, je viens poser une question de grande débutante en trading automatique !
Je souhaite ajouter un déclenchement de position sur un niveau de prix précis que j’aurais moi-même défini dans le code suite à une analyse graphique personnelle… (je ne pensais pas être en difficulté dès cette étape lol).
J’ai essayé des choses du type
C1 = (close = XXXX)
C1 = XXXX
C1 = (tradeprice crosses over XXXX)
Rien ne se déclenche… “Tradeprice” n’est que pour une position déclenchée je crois, et pour “close” j’ai cru comprendre que le robot ne prenait position qu’à la clôture de la bougie (comme son nom l’indique), or je souhaite que la position soit prise au marché dès que le cours arrive à un niveau de prix déterminé. Je ne vois pas quelle autre variable correspondrait à ma demande.
Merci d’avance pour votre aide, j’espère mieux me débrouiller pour la suite !
Bon, je me réponds à moi-même. Déjà je viens de voir qu’il n’y a, a priori, pas moyen de mettre un déclenchement en dehors des clôtures ou ouvertures de bougies.
Du coup, en essayant C1 = (close < XXXX) j’ai enfin eu mon ordre déclenché puisque j’ai donné une hypothèse qui s’est effectivement rencontrée sur le marché à l’horaire backtesté.
Question 1 : si on ne peut vraiment déclencher qu’en fermeture ou ouverture de bougies, à quoi sert le mode “tick par tick” du backtest ?
Question 2 : ce que j’en comprends c’est qu’il faut éventuellement que je me positionne sur unité inférieure et plus proche. Est-ce qu’on peut se positionner en UT = 1 tick ??? Là je serai au plus près du marché.
Car quand je fais cela, je reçois une erreur “Vérifiez la date de début et de fin de votre backtest”. J’ai mis une tranche de 10h à 10h15 aujourd’hui.
Si impossible, quelle serait la valeur minimale du coup ?
Merci, je continue mes recherches mais au moins j’avance dans ma compréhension globale du système !
Pour ma Question 2, la réponse est que mon graphique s’affichant en 200 unités, l’horaire demandé n’était pas disponible pour le backtest ! Donc en modifiant l’horaire ou l’affichage cela est résolu.
Et en mettant mon robot en mode 1 tick, même en conservant la seule fonction “close = XXX” je suis sûre d’être bien exécuté au prix souhaité.
Voilà, voilà. En espérant que cela serve à d’autres newbie !
Bon, c’est encore moi, pardonnez le nombre d’auto réponses mais je ne peux pas éditer mes posts passé un certain délai.
Tout ça pour dire que ma solution ne marche pas à tous les coups et je ne comprends pas pourquoi.
Voici un bout du code en question, réduit à son plus simple appareil juste pour vérifier le bon déclenchement d’un ordre au passage d’un niveau de prix défini :
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Conditions pour ouvrir une position acheteuse
c1 = (close = 11801)
IF NOT LONGONMARKET AND c1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Conditions pour ouvrir une position vendeuse
c2 = (close = 11776)
IF NOT SHORTONMARKET AND c2 THEN
SELL 1 CONTRACT AT MARKET
ENDIF
J’ai fait un backtest sur le DAX30 en CFD, UT 1 tick de 14:50 à 16:50 ce jour et ça ne m’a déclenché aucune position malgré que le prix soit passé plusieurs fois par ces niveaux…
Pourtant, dans un autre backtest sur l’heure de midi ça fonctionnait. Une idée ?
bonsoir,
et si tu fais un crosses over ou under ?
Pareil avec le crosses over ou under, j’ai ensuite affiné d’ailleurs en mettant un (close > XXXX and close < XXXXX) pour être sûre de la fenêtre de prise de position.
J’ai essayé la formule ci-dessous toujours sur le DAX30 CFD en 1 tick entre 10:25 et 10:45 ce matin et il ne m’a déclenché qu’une position acheteuse qui était passée par un TP10 que j’avais paramétré pour le test (sans le prendre) pour finir sur mon SL de 5… En regardant le 1 tick c’est pourtant sûr qu’il aurait dû déclencher au moins une position vendeuse et qu’il est bien passé par le niveau exactement indiqué dans le code.
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Conditions pour ouvrir une position acheteuse
c1 = (close > 11789 and close < 11790)
IF NOT LONGONMARKET AND c1 THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Conditions pour ouvrir une position vendeuse
c2 = (close < 11775 and close > 11774)
IF NOT SHORTONMARKET AND c2 THEN
SELL 1 CONTRACT AT MARKET
ENDIF
// Conditions de TP et SL
SET TARGET PROFIT 10
SET STOP LOSS 5
J’avoue ne vraiment pas comprendre ce défaut de déclenchement alors que le code est pour l’instant extrêmement simple normalement.
Décidément, je fais les questions et les réponses lol. Donc pour me répondre à mon interrogation de ci-dessus, le code ne pouvait fonctionner en short car la commande n’était pas bonne.
A la ligne 15 il faut en effet remplacer “SELL” par “SELLSHORT”…
SELL étant la commande pour liquider une position déjà en cours, SELLSHORT pour déclencher une position vendeuse.