bonjour j’aimerai créer un signal avec deux conditions mais ces conditions peuvent ne pas se déclencher au même instant, existence d’un décalage et c’est cela qui pose problème.
Y a t’il une instruction sur PRT permettant de valider la condition avec condition 1 validé a un instant T et condition 2 validé a un autre instant T, pas forcément au même moment.
J’ai utilisé And mais c’est en même temps.
Or: il me valide l’une ou l’autre
et je n’ai rien trouvé pour si condition 1 puis condition 2 alors signal validé
Attention le décalage temps est aléatoire puisque la condition ne dépend pas du temps
ex: MACD sous zéro et prix qui croise La MM 20 mais pas au même moment avec un décalage, le signale est validé alors
merci
Bonjour Ghary,
A mon humble avis (car je débute) il te faut choisir une des 2 conditions qui déclenchera la stratégie.
Ci dessous le MACD < 0 et la stratégie se déclenche quand les prix BarClose croise la MM20 (Long)
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 090000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 170000
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
noEntryBeforeTime = 090000
timeEnterBefore = time >= noEntryBeforeTime
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
noEntryAfterTime = 170000
timeEnterAfter = time < noEntryAfterTime
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Conditions pour ouvrir une position acheteuse
indicator1 = ExponentialAverage[20](close)
c1 = (close CROSSES OVER indicator1)
indicator2 = MACDline[12,26,9](close)
c2 = (indicator2 < 0)
IF (c1 AND c2) AND timeEnterBefore AND timeEnterAfter AND not daysForbiddenEntry THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Stops et objectifs
SET STOP pLOSS 30
SET TARGET pPROFIT 40
Bonjour
merci pour la réponse mais on revient toujours à la condition and qui oblige à avoir les deux conditions ici MACD < 0 et croisement bougie MM20 sauf que j’aimerai avoir le signal en ayant le MACD qui a été < 0 mais qui au moment du croisement prix MM 20 n’est pas forcément < 0.
Le soucis se situe donc bien au niveau de la condition 1 qui peut être présente ou passé.
Bonjour
je reviens vers vous afin de savoir s’il existe une fonction sur PRT permetttant de valider deux conditions décalées dans le temps ou pas ?
Dans l’exemple donné nous avons un nombre de bougie déterminer ici 10 mais si l’on ne connaît pas sur quel nombre de bougie la condition 1 a été validé c’est plus compliqué la non ?
// on passe result à 1 si A a était supérieur à B 1 fois dans les 10 dernière périodes:
result = 0
for a = 0 to 10 do
if A[a]>B[a] then
result = 1
endif
next
Donne nous ton code complet et je ferai en sorte que ça marche 🙂 Je te l’expliquerai directement à l’intérieur, ça sera plus rapide et plus simple pour tous les deux !
Bonjour Nicolas voici l’idée générale, niveau code c’est assez simple, c’est surtout la condition qui complique la validation du signal.
Condition 1 Initiale
MACD (36 72 27) < 0 et MACD (12 26 9) croise à la hausse son signal.
Validation du signal si condition 1 effectué (en même temps ou non) et après condition 2
Condition 2
Prix croise à la baisse la MM 20 alors signal Vente.
La condition 1 n’arrive pas forcement au même moment.
Condition 1 Initiale
MACD (36 72 27) > 0 et MACD (12 26 9) croise à la baisse son signal.
Condition 2 validée s’il y a eu condition 1
Prix croise à la hausse la MM 20 alors signal Achat.
Il faut aussi que MACD(36 72 27) reste >0 ou<0 lors de la condition 2 .
Niveau codage cela reste simple mais c’est la validation de la condition 1 qui n’a pas lieux forcement au même moment que la condition 2.
L’exemple ci-dessous est ta Condition1 :
macd1 = MACD[36,72,7](close)
macd2 = MACD[12,26,9](close)
signal = average[9](macd2)
if macd1<0 and macd2 crosses over signal then
buyc=1
endif
return buyc
Tant que tu te remets pas buyc à une autre valeur que 1, cette condition reste valide. Donc tu peux l’utiliser plus tard dans le temps .. (voir image).
Ce code est un indicateur, juste pour te faire voir que ta condition1 enregistré dans la variable ‘buyc’ reste valide tant que tu ne la remets pas à zéro toi même.
Le code de la stratégie pour une condition de vente devrait ressembler à cela:
macd1 = MACD[36,72,7](close)
macd2 = MACD[12,26,9](close)
signal = average[9](macd2)
if macd1<0 and macd2 crosses over signal then
buyc=1
endif
if buyc and (close crosses under average[20]) then //entre parenthèses c'est ta condition2 !
SELLSHORT 1 CONTRACT AT MARKET
//je reset ici la condition1 :
buyc=0
endif
Pas testé ! à vérifier.
D’ailleurs je viens de me rendre compte que ta condition1 je l’ai appelé ‘buyc’ alors que c’est la version short que l’on a codé.. bref tu auras fait le tri toi même 😉
Je reset la condition1 pour le prochain signal, vu que celle-ci on vient de l’utiliser pour lancer une vente, mais libre à toi de la conserver, je ne connais pas ta stratégie en détail.