Création signal avec conditions qui peuvent ne pas se déclencher au même instant

Viewing 15 posts - 1 through 15 (of 23 total)
  • Author
    Posts
  • #38158 quote
    ghary
    Participant
    Veteran

    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

    #38167 quote
    Inertia
    Participant
    Master

    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
    #38170 quote
    ghary
    Participant
    Veteran

    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é.

    #38334 quote
    ghary
    Participant
    Veteran

    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 ?

    #38344 quote
    Nicolas
    Keymaster
    Master

    C’est l’un des sujets de la formation prorealtime sur la programmation avancée 🙂

    Je viens de tomber sur un exemple en cherchant dans le forum : https://www.prorealcode.com/topic/blocage-programmation-code-prt/

    #38354 quote
    ghary
    Participant
    Veteran

    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 ?

    #38355 quote
    ghary
    Participant
    Veteran

    // 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

    #38370 quote
    Nicolas
    Keymaster
    Master

    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 !

    #38403 quote
    ghary
    Participant
    Veteran

    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.

    #38440 quote
    Nicolas
    Keymaster
    Master

    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).

    #38447 quote
    ghary
    Participant
    Veteran

    D’accord mais je dois rajouter la condition 2 après le return buyc ?

     

    #38450 quote
    Nicolas
    Keymaster
    Master

    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.

    BluSama thanked this post
    #38451 quote
    Nicolas
    Keymaster
    Master

    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 😉

    #38453 quote
    ghary
    Participant
    Veteran

    Ce n’est pas grave je l’aurai vu je vais essayer de tester cela. Par contre je ne comprend pas pourquoi tu reset la condition 1 alors que  c’est la condition 2 qui déclenche justement le signal ?

    #38463 quote
    Nicolas
    Keymaster
    Master

    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.

Viewing 15 posts - 1 through 15 (of 23 total)
  • You must be logged in to reply to this topic.

Création signal avec conditions qui peuvent ne pas se déclencher au même instant


Support ProBuilder

New Reply
Author
author-avatar
ghary @ghary Participant
Summary

This topic contains 22 replies,
has 5 voices, and was last updated by Nicolas
6 years ago.

Topic Details
Forum: Support ProBuilder
Language: French
Started: 06/12/2017
Status: Active
Attachments: 7 files
Logo Logo
Loading...