Ordrs short jamais déclenchés VS achats déclenchés, malgré code équivalent

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #150033 quote
    Axel98
    Participant
    Average

    Bonjour Nicolas,

    Pourriez-vous jeter un oeil à ce bout de code et essayer de trouver ce qui cloche SVP ?

    Ca fait deux jours que je m’arrache les cheveux à essayer de trouver d’où vient le problème sans y parvenir… Le code est pour ainsi dire identique pour les ventes comme pour les achats, il n’y a que les noms de variables qui changent et le sens “<” et “>” dans les conditions IF…THEN.

    (Testé du Dow en M15)

    ONCE signalAchat=0
    ONCE signalVente=0
    
    RepereHaut = 0    // aura pour valeur le +haut de la bougie de repère haussière
    RepereBas  = 0    // aura pour valeur le +bas  de la bougie de repère baissière
    
    monOpen  = open
    monClose = close
    monHigh  = high
    monLow   = low
    
    //=================================================================
    // MACD Zero Lag (code pris dans PRC) :
    p = 12
    q = 26
    r = 9
     
    z1=DEMA[p](Close)
    z2=DEMA[q](Close)
    e = z1 - z2
    z3=DEMA[r](e)
    f = z3
    g = e-f
     
    //return e AS "MACD ZEROLAG",f AS "signal",g as "macd-signal",0 as "zero"
    //=================================================================
    
    
    maEMMacdZL = ExponentialAverage[9](e)    //  Moyenne mobile Exponentielle du MACD Zero Lag  
    maMMC = Average[7](close)              //  Moyenne mobile Simple courte 
    
    //******************************************************         VENTES
    
    IF NOT SHORTONMARKET THEN
    
    CV1 = maMMC < maMMC[1] AND maEMMacdZL < maEMMacdZL[1]     //  la MM7 et la EM9(macdZL) sont baissières
    CV2 = monClose < maMMC                                    // cloture au-dessous de la MM7
    
    IF CV1 AND CV2 AND signalVente=0 THEN
    RepereBas = monLow
    signalVente=1
    ENDIF
    
    IF CV1 AND CV2 AND signalVente=1 AND monLow < RepereBas THEN  
    // Bougie courante a cassé le plus bas de la "bougie repère"
    SELLSHORT 1 CONTRACT AT MARKET
    signalVente=0
    SET STOP pLOSS 60
    SET TARGET pPROFIT 120
    ENDIF
    
    ENDIF
    
    // exit SHORT
    IF ShortOnMarket THEN
    IF monHigh > maMMC THEN     //OR NOT TimeOK THEN
    // on clôture la position si le haut du cours passe au-dessus de la moyenne mobile courte 7
    EXITSHORT AT MARKET
    RepereBas=0
    ENDIF
    ENDIF
    
    
    
    // ************************************************************   ACHATS
    
    IF NOT LONGONMARKET THEN
    
    CA1 = maMMC > maMMC[1] AND maEMMacdZL > maEMMacdZL[1]     //  la MM7 et la EM9(macdZL) sont haussières
    CA2 = monClose > maMMC                                    //  cloture au-dessus de la MM7
    
    IF CA1 AND CA2 AND signalAchat=0 THEN
    RepereHaut = monHigh
    signalAchat= 1
    ENDIF
    
    IF CA1 AND CA2 AND signalAchat=1 AND monHigh > RepereHaut THEN  
    // Bougie courante a cassé le plus haut de la "bougie repère"
    signalAchat=0
    BUY 1 CONTRACT AT MARKET
    SET STOP pLOSS 60
    SET TARGET pPROFIT 120
    ENDIF
    
    ENDIF
    
    // exit Long
    IF LongOnMArket THEN
    IF monLow < maMMC  THEN      // OR NOT TimeOK THEN
    // on clôture la position si le bas du cours passe SOUS la moyenne mobile courte 7
    SELL AT MARKET
    Reperehaut=0
    ENDIF 
    ENDIF
    
    
    
    graph repereBas coloured(255,0,0) AS "signal Achat"     // rouge
    graph repereHaut coloured(0,0, 255) AS "Signal Vente"    // bleu

    Logiquement je devrais donc avoir des achats et des shorts sur mon graph, et pourtant je n’ai QUE des achats.

    La variable “RepereHaut” contient bien les bonnes valeurs et ça se vérifie avec “graph”, alors que “RepereBas” est toujours à “0”.

    —————————-

    IF CV1 AND CV2 AND signalVente=0 THEN

    RepereBas = monLow

    signalVente=1

    ENDIF

    —————————–

    “Grapher” la variable “monLow” donne un résultat correct alors que “Grapher” la variable “RepereBas” renvoie “0”, alors que le même code pour les achats ne pose aucun problème…  Je ne comprends pas d’où vient le problème, d’où ma requête…

    En espérant que vous pourrez m’aider… merci d’avance

    Capture-decran-2020-11-11-004020.png Capture-decran-2020-11-11-004020.png
    #150038 quote
    Nicolas
    Keymaster
    Master

    Il y a effectivement un problème, mais non lié à ton code, sauf erreur de ma part.

    Dans les images suivantes on peut voir que lorsqu’on teste si “signalvente=0”, alors les autres tests sont buggés (ne retourne rien), donc ta condition située à la ligne 39 ne peut jamais être vérifiée, et donc pas de niveau bas et pas d’ordres de vente.

    Par ailleurs le graph signalvente=0 ne retourne pas non plus la bonne valeur du booléen, elle devrait être inversé dans la seconde image.

    Je vais faire une demande de support en référant ce topic, merci de faire de même. Merci.

    bugs-signalsvente.png bugs-signalsvente.png
    #150040 quote
    Axel98
    Participant
    Average

    Merci pour ton retour Nicolas.

    Dans les tests de “graph” que j’ai fait,  j’avais “signalvente” toujours = à 1, j’en ai déduit que le test IF THEN mettant signalvente=1 fonctionnait, mais qu’il ne repassait ensuite jamais à 0 car l’ordre de vente n’est jamais exécuté.

    J’ai fait des tests graph et j’ai une différence avec la ligne 44 entre :

    -> IF CV1 AND CV2 AND signalVente=1 AND monLow < RepereBas

    et

    ->IF CV1 AND CV2 AND signalVente=1

    ce qui m’a fait penser que “RepereBas” ne conserve pas la valeur donnée par “monLow” d’une bougie précédente, car cette condition là n’est jamais remplir, alors que côté ACHATS pas de problème… incompréhensible…

    Comment dois-je faire pour faire une demande officielle au support ?

    Merci encore

    #150041 quote
    Axel98
    Participant
    Average

    Je me rends compte qu’en fait ton explication donne la réponse à mon dernier commentaire !…  j’ai fait tellement de tests pour essayer de trouver que je ne sais plus ce que j’ai fait et ce qui a marché ou pas LOL !!

    #150240 quote
    Nicolas
    Keymaster
    Master

    Ce matin, ça fonctionne correctement, en ajoutant ONCE devant ces lignes, ou en les supprimant directement :

    once RepereHaut = 0    // aura pour valeur le +haut de la bougie de repère haussière
    once RepereBas  = 0    // aura pour valeur le +bas  de la bougie de repère baissière

    il me semblait pourtant avoir tenté cette approche la semaine dernière, bref 🙄

    #150345 quote
    Axel98
    Participant
    Average

    Effectivement il y a des signaux dans les deux sens…  mais les conditions ne sont pas respectées systématiquement car il devrait y avoir beaucoup plus d’ordres que ce qui est affiché 🙁 …  les mystères de l’informatique.

    #150348 quote
    Nicolas
    Keymaster
    Master

    Il faut que tu vérifies RepereHaut et RepereBas, à quel moment ils changent, en les graphant sur le graphique du prix, ce sera plus clair selon moi.

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

Ordrs short jamais déclenchés VS achats déclenchés, malgré code équivalent


ProOrder : Trading Automatique & Backtests

New Reply
Author
author-avatar
Axel98 @axel98 Participant
Summary

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

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 11/10/2020
Status: Active
Attachments: 2 files
Logo Logo
Loading...