Alertes séquentielles

Viewing 15 posts - 31 through 45 (of 47 total)
  • Author
    Posts
  • #102332 quote
    Nicolas
    Keymaster
    Master

    Plus on cherche seul, plus on apprend 🙂

    J’essai de répondre rapidement à tout le monde, mais j’ai beaucoup de travail en ce moment.

    Pour reprendre l’idée du BARINDEX, qui est pour moi la plus viable, car je ne sais pas si currentTime fonctionnerait dans le cas d’un changement de journée ? (je ne connais pas les UT que tu utilises, sans le code complet 🙂 )

    Par exemple :

    timeframe(5 minutes)
    if barindex > bars5 then 
     bars5 = barindex
    endif
    
    timeframe(15 minutes)
    if barindex > bars15 then 
     bars15 = barindex
    endif
    
    timeframe(default)
    minutes5 = bars5*5
    minutes15 = bars15*15
    sequence = minutes5<minutes15 //moins de temps écoulé en UT5 qu'en UT15

    On pourrait aussi faire une soustraction (minutes15 – minutes5 > 0)

    (non testé).

    #102337 quote
    PhilippeN
    Participant
    Average

    Merci Nicolas pour l’idée, et aussi pour la rapidité de tes réponses 🙂

    J’utilise les TF 4h, 1h, 15min, 5 min et 1min

    Je ne vois pas comment me servir de ton idée, peut être en commençant par un exemple le plus simple possible :

    TIMEFRAME(4 HOURS)
    SM14= average[14](close)
    EvenementA = HIGH[1]>SM14[1]
    // Je vérifie que l'évenement a eu lieu dans les 3 dernières périodes 4h
    EvenementASurvenu = Summation[3](HIGH[1]>SM14[1])>0
    //Je ne sais pas comment obtenir le barindex de la PREMIERE APPARITION de l'événementA dans les 3 dernières périodes avec le bon format pour comparaison avec le barindex de B:
    BARINDEX1erEvenementA = .....EvenementA .....
    
    TIMEFRAME(1 HOUR)
    SM5 = average[5](close)
    SM20 = average[20](close)
    // Je vérifie que l’événement a eu lieu en clôture:
    EvenementB = SM5[1] CROSSES UNDER SM20[1]
    // Je ne sais pas comment faire comment obtenir le barindex de l’événement B en clôture et dans le bon format pour comparaison avec le barindex de A :
    BARINDEX1erEvenementB = ..... EvenementB ...
    
    // J'obtiens un signal non suffisant car ne comportant pas la séquence temporelle : BARINDEX1erEvenementA < BARINDEX1erEvenementB
    Signal = EvenementA AND EvenementB AND BARINDEX1erEvenementA < BARINDEX1erEvenementB
    
    If NOT SHORTONMARKET and Signal then
    Sellshort 1 contract at market
    Endif
    
    
    #102343 quote
    PhilippeN
    Participant
    Average

    En fait dans ton code je comprends la notion de transformer les BARINDEX d’une UT en BARINDEX de l’UT Default

    Mais pas les boucles IF ?

    #102430 quote
    Nicolas
    Keymaster
    Master

    /Je ne sais pas comment obtenir le barindex de la PREMIERE APPARITION de l’événementA dans les 3 dernières périodes

    Tu ne pourras pas avec un SUMMATION, il faut faire une boucle FOR/NEXT

    // J’obtiens un signal non suffisant car ne comportant pas la séquence temporelle : BARINDEX1erEvenementA < BARINDEX1erEvenementB Signal = EvenementA AND EvenementB AND BARINDEX1erEvenementA < BARINDEX1erEvenementB

    EvenementA et B ne sont peut être plus présent puisque selon ta logique ils ont peut être eu lieu il y a 3 barres de cela, donc ces 2 variables peuvent retourner 0 ! et Signal restera à 0..

    Bref j’ai compris ce que tu veux faire, je vais essayer de reprendre ton exemple et le tester.

    #102432 quote
    PhilippeN
    Participant
    Average

    Merci Nicolas, j’essaie d’être clair mais ce n’est pas un problème évident.

    Je vais aussi essayer encore de mon côté avec une boucle FOR (déjà tenté mais vraiment sans résultats).

    J’ai essayé de clarifier la problématique précise du setup sequentiel MTF pour proorder et j’ai alors créé ce post en anglais, pour ouvrir la discussion à un public plus large :

    MTF Sequential Setup

    Au plaisir de te lire

    #102433 quote
    Nicolas
    Keymaster
    Master

    J’ai fais un screener, mais je ne trouve aucun résultat, à tester:

    TIMEFRAME(4 HOURS)
    SM14= average[14](close)
    EvenementA = HIGH[1]>SM14[1]
    // Je vérifie que l'évenement a eu lieu dans les 3 dernières périodes 4h
    EvenementASurvenu = Summation[3](EvenementA)>0
    
    BARINDEX1erEvenementA = 0
    if EvenementASurvenu then 
    for i = 2 downto 0 do 
    if EvenementA[i] then 
    BARINDEX1erEvenementA = barindex[i]
    break
    endif
    next
    endif
    temps4h = BARINDEX1erEvenementA*4 //car 4h dans une bougie 
    
    TIMEFRAME(1 HOUR)
    SM5 = average[5](close)
    SM20 = average[20](close)
    // Je vérifie que l’événement a eu lieu en clôture:
    EvenementB = SM5[1] CROSSES UNDER SM20[1]
    if EvenementB then 
    temps1h = barindex*1 //car 1h dans une bougie 
    endif
    
    signal = BARINDEX1erEvenementA>0 and temps1h>temps4h
    
    screener[signal]
    #102435 quote
    PhilippeN
    Participant
    Average

    Merci beaucoup

    je crois que ta boucle FOR tape dans le 1000 ça me semble à lecture effectivement renvoyer le BARINDEX du 1er évenement

    Je code ça dans proorder dès que possible pour vérifier

    🙂

    #102438 quote
    PhilippeN
    Participant
    Average

    La méthode pour donner le barindex du premier evenement dans les n periodes est gagnante 🙂 je l’ai graphée

    Il est par contre clair lorsque l’on graph temps1h et temps4h que l’on n’aura pas de signal (image jointe)

    temps1h en rouge et temps4h en noir

    je ne suis pas certain de la conversion barindex en temps, je vais étudier les ressources sur le sujet

    graph-temps1h-et-temps4h.jpg graph-temps1h-et-temps4h.jpg
    #102489 quote
    PhilippeN
    Participant
    Average

    En utilisant currenttime j’ai réussi a obtenir la détection séquentielle grâce  a ta boucle if/ for/ if.

    J’en étais très content jusqu’à ce que je remarque qu’effectivement il y a un probleme en 4h :

    lors du passage horaire à 000000 à minuit, le currenttime de l’évenement reste elevé s’il a eu lieu avant minuit alors que les currenttime 1h 15min etc sont recalculé sur une nouvelle base 0 et donc sont plus petits et paraissent plus vieux que l’evenement 4h qui a eu lieu pourtant avant… Résultat la détection n’est pas faite. J’ai cherché une solution, mais travailler avec un barcode efficace serait certainement mieux

    #102490 quote
    Nicolas
    Keymaster
    Master

    Je me doutais de ce problème c’est pour cela que je t’ai orienté vers la quantité de bars.

    Sinon tu peux aussi tester une Date et un Time.

    #102491 quote
    PhilippeN
    Participant
    Average

    Oui peut être qu’une comparaison utilisant le date pourrait fonctionner ? Je cherche mais ne trouve pas

    Que penses-tu de la proposition de robertogozzi ?

    https://www.prorealcode.com/topic/mtf-sequential-setup/

    #102493 quote
    Nicolas
    Keymaster
    Master

    Enregistre la date et le time de la première condition et teste si la seconde est supérieure à ces valeurs.

    #102858 quote
    PhilippeN
    Participant
    Average

    Bonjour Nicolas, après avoir bien tâtonné, et utilisant jusqu’à 7 UT différentes parfois dans le même robot,  je peux dire qu’utiliser le date et le time est vraiment complexe et beaucoup trop fastidieux à cause des suites d’évenements traversant le 000000. Et qu’utiliser le BARINDEX serait bien plus propre dans l’idée.

    Malheureusement, après de nombreux graph, le BARINDEX de chaque UT ne semble pas aussi évident à comparer qu’un simple règle de 3

    Je ne comprend pas ce barindex, et j’ai même remarqué en UT 1 min que la fonction n’est pas linéaire, donc forcément cela crée aussi des décalages dans le temps.

    Bref je toujours bien paumé pour bien comparer ma séquence de conditions !

    Par quel bout prendre le problème ??

    Merci encore

    #102859 quote
    PhilippeN
    Participant
    Average

    Je viens de grapher le rapport BARINDEX5MIN/BARINDEX1MIN … résultat plutôt… sympa !

    Avec un zoom, encore plus intéressant !

    graph-rapport-barindex5min-barindex1min.png graph-rapport-barindex5min-barindex1min.png graph-rapport-barindex5min-barindex1min-2.png graph-rapport-barindex5min-barindex1min-2.png
    #102896 quote
    PhilippeN
    Participant
    Average

    J’essaie tout de même de contourner le problème en comparant les date et les time, du genre

    Signal = ((DateA=DateB AND TimeB>TimeA) OR DateB>DateA) and ((DateB=DateC AND TimeC>TimeB) OR DateC>DateB)
    

    Ce qui en théorie devrait marcher.

    Mais comme la détection temporelle est de la forme :

    A = close > close [1] // condition d'exemple 
    ASurvenu = Summation[3](A)>0 
    DateA=0
    TimeA = 0
    if ASurvenu then
    for ia = 2 downto 0 do
    if A[ia] then
    DateA = date[ia] 
    TimeA = CurrentTime[ia]
    break
    endif
    next
    endif

    Si B existait déjà juste avant A, la première heure de B se retrouve avant A, le temps que summation[3] soit fini

    Et la détection temporelle retombe à l’eau.

    Quel casse-tête cette détection temporelle !!!

    Je rapelle mon simple besoin :

    • A est détecté en UT1, alors seulement :
    • On lance la détection de B en UT2,
    • B est détecté (en UT2), alors seulement :
    • On lance la détection de C en UT3
    • Le signal est alors renvoyé

    C’est quand même bien possible de faire cela sur PRT, d’une manière ou d’une autre

    On va y arriver

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

Alertes séquentielles


ProScreener : Scanners de Marché & Détection

New Reply
Author
author-avatar
PhilippeN @philippen Participant
Summary

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

Topic Details
Forum: ProScreener : Scanners de Marché & Détection
Language: French
Started: 05/15/2019
Status: Active
Attachments: 3 files
Logo Logo
Loading...