Me resterait idéalement à faire en sorte que le RSI mesuré soit en 21 ticks (ma préférence) mais mon code tourne sur PRT en 1 seconde pour être réactif.
A suivre.
Les codes fonctionnent bien a priori.
Seul problème relevé, le système prend parfois un 2è ordre sur le 1er support (visiblement dans la même seconde qui est mon UT de trading automatique, ce qui me fait 2 positions ouvertes). Ce n’est pas mon souhait à ce stade. Existe-t-il un moyen d’empêcher cela ?
J’ai même eu à l’instant un 2è ordre (également visiblement dans la même seconde) sur mon support de secours… Là, c’est beaucoup plus embêtant, car à l’atteinte de l’objectif median, le système déclenche 2 VENTE LIMITES non souhaitées…
Bref, existe-t-il un moyen dans le code afin de prévenir ces doubles exécutions ?
Je poursuis les tests.
Ce genre de problème peut venir du fait que le programme ne sait pas qu’il est déjà au marché et donc qu’il ouvre un deuxième ordre conditionnel, qui est lui même aussi déclenché. Pour empêcher cela, je verrai peut être une nouvelle condition à ajouter aux lignes 13 et 19 pour ne pas poser de nouveaux ordres conditionnels si il l’a déjà fait sur la même barre:
niveau1 = 12109
niveau2 = 12099
ecart=abs(niveau1-niveau2)
ecartabs=ROUND(ecart/2)
if ecart/2=ecartabs then
constante=1
else
constante=0
endif
//1er trade
if not longonmarket and alreadytraded=0 and rsi[14]>32 and barindex>lastbar then
BUY 1 contract at niveau1 limit
lastbar=barindex
endif
//2eme trade
if longonmarket and positionperf<0 and countoflongshares=1 and barindex>lastbar then
BUY 1 contract at niveau2 limit
lastbar=barindex
alreadytraded=1
endif
//objectif si 1 trade
if countoflongshares=1 then
set target pprofit 1
endif
//objectif si 2 trades
if countoflongshares=2 then
sell at positionprice+constante LIMIT
endif
Pas testé en live, dit nous ce qu’il en est !
Merci Nicolas.
Tests en-cours.
J’ai eu un cas que je souhaiterais éviter : achat sur support, vente TP1 mais dans la seconde qui suit 2nd achat sur support (dans le cas présent, s’est “bien” terminé, sans même aller chercher le support de secours).
(Le support était en l’occurrence 12 102) :
15:31:51 1 ACHAT LIMITE @12 102
15:31:57 1 VENTE LIMITE @12 103
15:31:58 1 ACHAT LIMITE @12 102
15:42:59 1 VENTE LIMITE @12 103
Fin du programme
De nouveau un cas similaire où malheureusement la fermeture de la position ne ferme pas le programme (un nouvel ordre LIMITE d’achat est posé):
16:16:38 1 ACHAT LIMITE @12 102
16:16:41 1 VENTE LIMITE @12 103 (immédiatement après 1 nouvel ordre achat limite est posé)
16:20:08 ACHAT LIMITE @12 102
(suite en cours)
Il y a décidément quelquechose qui ne colle pas.
Dans la suite en-cours évoquée dans le message précédent il se passe ceci :
16:27:43 1 ACHAT LIMITE @ 12 092 (Normal)
16h2743 1 ACHAT LIMITE @ 12 091 (non désiré)
on a alors 3 positions ouvertes @12 095 (alors qu’on devrait avoir 2 positions ouvertes @12097)
puis
16h33:24 3 VENTE LIMITE @12 096 (cohérent dans le principe)
et ensuite instantanément , je ne sais pourquoi :
16:33:24 2 VENTE LIMITE @12 095
Ces 2 positions sont ouvertes alors que le programme est en fait arrêté. (L’instruction STOP ALL trading automatique ne provoque pas de changement) Elles doivent et peuvent être fermées manuellement.
J’avoue que je suis un peu perdu…
A suivre…
J’ai relancé un dernier test du soir pour y voir + clair.
Je reviens vers vous au besoin.
Le test est malheureusement non concluant.
Il y a bizarement 1 seconde après l’ordre de VENTE LIMITE des 2 positions moyennées, un deuxième ordre similaire.
Exécuté :
17:06:47 1 ACHAT LIMITE @12095
17:30:31 1 ACHAT LIMITE @12085
En attente :
17:30:31 2 VENTE LIMITE @12 091
17:30:32 2 VENTE LIMITE @12 091 (cet ordre ne devrait pas apparaître)
Je joins le code.
niveau1 = 12095
niveau2 = 12085
ecart=abs(niveau1-niveau2)
ecartabs=ROUND(ecart/2)
if ecart/2=ecartabs then
constante=1
else
constante=0
endif
//1er trade
if not longonmarket and alreadytraded=0 and rsi[14]>32 and barindex>lastbar then
BUY 1 contract at niveau1 limit
lastbar=barindex
endif
//2eme trade
if longonmarket and positionperf<0 and countoflongshares=1 and barindex>lastbar then
BUY 1 contract at niveau2 limit
lastbar=barindex
alreadytraded=1
endif
//objectif si 1 trade
if countoflongshares=1 then
set target pprofit 1
endif
//objectif si 2 trades
if countoflongshares=2 then
sell at positionprice+constante LIMIT
endif
Je reteste en rajoutant “and barindex>lastbar” à la ligne 31 aussi…
Pour moi le problème vient de l’utilisation du timeframe 1s, avec un tf un peu supérieur ça pourrait s’améliorer. Sinon, au cas ou, il faudrait essayer de placer la ligne 15 au dessus de la ligne 14 (les intervertir en fait..).