PATTERN CUP & HANDLE

Viewing 15 posts - 1 through 15 (of 22 total)
  • Author
    Posts
  • #230137 quote
    massimogp
    Participant
    Senior

    Buona sera Roberto, chiedevo uno screener su grafici weekly che riproponga il pattern cup & handle (letteralmente coppa con manico) con i seguenti parametri:

    prezzo sopra la sma 200 weekly;

    il prezzo dal punto (a) scende per un minimo di 7 settimane, ma può essere anche molto di più (10 20 30 settimane) e scende per una % che va dal 15% al 35%, formando una base a cui segue un rialzo fino al punto (a). Mi interessa che lo screeener estragga titoli

    che sono ritornati dopo la discesa al punto (a), per monitorare il break out o la formazione dell handle.

    Sperando di essermi spiegato, ti ringrazio.

    #230283 quote
    robertogozzi
    Moderator
    Master
    #230439 quote
    massimogp
    Participant
    Senior

    Hai ragione Roberto, volevo uno screener Cup with handle e sono partito da un ipotetico punto A per spiegare. Quello però che hai allegato è per operazioni intraday, io lo volevo se possibile, con grafici daily di fine giornata. Grazie.

    #230861 quote
    robertogozzi
    Moderator
    Master

    Qual’è il punto A?

    #230866 quote
    massimogp
    Participant
    Senior

    Buon giorno Roberto, possiamo fare screener con 2 punti A?

    1  dal minimo a 52 settimane aumento del 30% (punto A) e poi da qui costituzione della base come sopra descritto  (un minimo di 7 settimane, ma può essere anche molto di più (10 20 30 settimane) e scende per una % che va dal 15% al 35%, formando una base a cui segue un rialzo fino al punto (a). Mi interessa che lo screeener estragga titoli che sono ritornati dopo la discesa al punto (a), per monitorare il break out o la formazione dell handle.

    2  dalla media mobile a 200 giorni un aumento del 20% (punto A) e poi da  e poi da qui costituzione della base come sopra descritto  (un minimo di 7 settimane, ma può essere anche molto di più 10 20 30 settimane) e scende per una % che va dal 15% al 35%, formando una base a cui segue un rialzo fino al punto (a). Mi interessa che lo screeener estragga titoli che sono ritornati dopo la discesa al punto (a), per monitorare il break out o la formazione dell handle.

    Per parametri daily poi cambierò io i parametri eventualmente, grazie mille.

    #231167 quote
    robertogozzi
    Moderator
    Master

    Tu hai scritto di due diversi punti A (il minimo a 52 settimane aumento del 30% e la media mobile a 200 giorni un aumento del 20%), quindi ti servono due screener separati?

    Puoi postare due foto delle due diverse condizioni con i rispettivi punti A indicati e con indicato il momento che deve essere segnalato?

    #231180 quote
    massimogp
    Participant
    Senior

    Buon giorno, si Roberto 2 screener separati uno dove l aumento del 30% (punto A) è dal giorno minimo a 52 settimane  e il secondo screener dove il punto A è il giorno dove il titolo raggiunge il 30% di aumento dal superamento della media mobile a 200 giorni, per poi ritracciare con i parametri come sopra descritti (discesa dal 15 al 35% in un periodo che va da un minimo di 7 settimane (35gg)  a un massimo di 30 settimane (150 gg) ), formare la base e risalire al punto A formando il pattern cup and handle.

    #231620 quote
    Alessandro Furlani
    Participant
    Junior

    Sono interessato anch’io sul Daily /Azionario. Mi sembra di capire che gli esempi che ci hai mandato sono tarati per i Futures ??

    #231666 quote
    Alessandro Furlani
    Participant
    Junior

    Ho provato ad usare lo script fatto da Nicholas tempo fa che riporto in allegato ma, a me servirebbe che lo screener mi indicasse una Cup with Handle in formazione, mi và bene che sia senza “handle” in modo che possa tenere sotto controllo il titolo prima di individuare il punto d’ingresso, ma non mi va bene che trovi le CwH di settimane fà…..

    Come posso modificare lo script per fare questo ?

    Grazzzzie

    Allego il vecchio codice

    //PRC_CupFormations (beta) | screener
    //25.06.2018
    //Nicolas @ www.prorealcode.com
    //Sharing ProRealTime knowledge
    //adapted from MetaStock code version
     
    Parameter = 1.5//Param( "parameter", 1.5, 1, 10, 0.1 )
    C = close
     
    FilC = ( log( C ) )
     
    eps = 0.0000000001
    // basic Definitions
    for i = 1 to barindex do
    if c[i]>c*parameter then
    BarsSincex=barindex-barindex[i]
    break
    endif
    next
    semicupperiod = Max( BarsSincex, 1 ) + 1
     
    Ptop = highest[Semicupperiod](FilC)
    Pbot = lowest[Semicupperiod](FilC)
    boxheight = abs( Ptop - Pbot ) / 5
    boxlength = Max( round( semicupperiod / 5 ), 1 )
     
    // Grid Nodes
    bar = max(1,barindex)
    b0 = bar - semicupperiod + 1
    b5 = bar
    b1 = Min( b0 + boxlength, b5 )
    b2 = Min( b1 + boxlength, b5 )
    b3 = Min( b2 + boxlength, b5 )
    b4 = Min( b3 + boxlength, b5 )
    L2 = Pbot + 2 * boxheight
    L3 = Pbot + 3 * boxheight
     
    // Directional Strength
    Diff = FilC - FilC[1]
    UpSum2 = Summation[2*boxlength]( Max( Diff, 0 ) )
    DnSum2 = Summation[2*boxlength]( Max( -Diff, 0 ) )
    DSX1 = abs( UpSum2 - DnSum2 ) / ( eps + UpSum2 + DnSum2 ) * 100
    UpSum3 = Summation[3*boxlength]( Max( Diff, 0 ) )
    DnSum3 = Summation[3*boxlength]( Max( -Diff, 0 ) )
    DSX2 = abs( UpSum3 - DnSum3 ) / ( eps + UpSum3 + DnSum3 ) * 100
     
    // Coditions
    if(bar>b2) then
    test1=summation[bar-b2](FilC>L3)=0
    endif
    if(bar>b4) then
    test2=summation[bar-b4](FilC>L2)=0
    endif
    isSemicup = ( semicupperiod >= 20 ) AND ( DSX1[ b5 - b2] > 25 ) AND ( DSX2 < 25 ) AND test1 and test2
     
    LIS = isSemicup
     
    screener[LIS]
    #231740 quote
    Alessandro Furlani
    Participant
    Junior

    Nicolas e Roberto please potete rispondere ??

    Grazie

    #231780 quote
    robertogozzi
    Moderator
    Master

    Proverò, ma avrò bisogno di altri 2-3 giorni di tempo.

    #231805 quote
    Alessandro Furlani
    Participant
    Junior

    Perfetto, grazie Roberto.

    #231963 quote
    robertogozzi
    Moderator
    Master

    Mi servirà qualche giorno in più, farò prima i due screener iniziali e poi l’altro.

    #232536 quote
    robertogozzi
    Moderator
    Master

    C’è voluto molto tempo perché è complesso dovere entrare nella logica di chi l’ha scritto per un numero di ore sufficiente, perché se mi ci mettedsdi solo un paio d’ore e poi mi dedicassi ad altro, perderei di nuovo il filo logico al momento di riprendere in mano quel coduice.

    Ad ogni modo, questo è il codice dello screener richiesto nel primo post:

    Sma200 = average[200,0](close)
    
    //variable
    searchzone=23
    
    B5searchzone=searchzone//23 //nombre de bougies récentes où le plus haut est recherché
    P1Price = 0
    for i = 0 to B5searchzone
    if high[i] > P1Price then
    P1Price = high[i]
    B5=i //de droite à gauche
    B5index = BarIndex[i] //B5 index de bougie où le plus haut a été trouvé
    endif
    next
    // En partant de B5 (le plus haut trouvé à l'étape précédente), trouver la bougie avec un plus haut égal ou inférieur à P1 et pour laquelle la bougie précédente (plus ancienne) a un plus haut supérieur à P1 ; soit B0 l'indice temps de cette bougie
    B0price=0
    for j=B5 to B5+172 DO
    If high[j] <= P1Price and high[j+1] > P1Price then
    B0price=high[j]
    B0=j //de droite à gauche
    B0index=barindex[j]
    endif
    next
    // Soit P0 le plus bas entre B0 et B5
    P0price = 10000
    for k = B5 to B0
    if low[k] < P0price then
    //P0index=barindex[K]
    //P0=k
    P0price = low[k]
    endif
    next
    // Noeuds du quadrillage
    B0B5=abs(B0-B5)
    boxheight = abs( P1price - P0price ) / 5
    boxlength = round( (B0B5-0.5) / 5 )
    reste=B0B5 MOD 5
    B4= B5 + boxlength
    //B4index=B5index-boxlength
    B3=B4+boxlength
    //B3index= B4index-boxlength
    B2=B3+boxlength
    //B2index=B3index-boxlength
    B1=B2+boxlength+reste
    //B1index=B2index-boxlength-reste
    //P1= P1price
    //L0= P0price
    L1= P0price + boxheight
    L2 = P0price + 2 * boxheight
    L3 = P0price + 3 * boxheight
    //L4 = P0price + 4 * boxheight
    flag=0
    d=abs((b1-b4))+1
    e=b4
    deborde=highest[max(1,d)](close)[e]
    //if islastbarupdate then
    IF deborde<l3 THEN
    flag=1
    endif
    //endif
    flag1=0
    f=abs((b2-b3))+1
    deborde1=highest[max(1,f)](close)[b3]
    IF deborde1<l2 THEN
    flag1=1
    endif
    flagB0B1B4B5=0
    fl=abs((b0-b1))+1
    fm=abs((b4-b5))+1
    lowdebordea=lowest[max(1,fl)](low)[b1]
    lowdebordeb=lowest[max(1,fm)](low)[b5]
    IF (lowdebordea or lowdebordeb) <(L2-(boxheight/3)) then
    flagB0B1B4B5=1
    endif
    flagB1B2B3B4=0
    fn=abs((b1-b2))+1
    Fo=abs((b3-b4))+1
    lowdebordec=lowest[max(1,fn)](low)[b2]
    lowdeborded=lowest[max(1,fo)](low)[b4]
    IF (lowdebordec or lowdeborded) <(L1-(boxheight/3)) then
    flagB1B2B3B4=1
    endif
    lowdedans=0
    lowdedans=(flagB0B1B4B5 or flagB1B2B3B4)>0
    If barindex > B5index then
    plusgrandL2=summation[B5](low>L2)=0
    endif
    //trendhaussier=ExponentialAverage[4](close)[b0]>ExponentialAverage[4](close)[b0+5] or ExponentialAverage[4](close)[b0]>ExponentialAverage[4](close)[b0+10] or ExponentialAverage[4](close)[b0]>ExponentialAverage[4](close)[b0+15] or ExponentialAverage[4](close)[b0]>ExponentialAverage[4](close)[b0+20] or ExponentialAverage[4](close)[b0]>ExponentialAverage[4](close)[b0+25]
    //cote=high>low
    lowanse=lowest[max(1,b5)](low)
    
    condition=flag=1 and flag1=1 and lowdedans=1 and plusgrandL2=0 and b0index<b5index and B0price>L3 and lowanse>((p1price-p0price)*0.5+(p0price))
    /*
    t = 255
    if condition then
    //---DRAWRECTANGLE(B5INDEX,lowanse,Barindex,lowanse) coloured("Green",t)//FILLCOLOR("Green",t)
    DRAWSEGMENT(B5INDEX,lowanse,Barindex,lowanse) coloured("Green",t) style(line,3)
    //---DRAWRECTANGLE(barindex,lowanse,Barindex,P1price)coloured("Green",t)//FILLCOLOR("Green",t)
    DRAWSEGMENT(barindex,lowanse,Barindex,P1price)coloured("Green",t) style(line,3)
    //
    //---DRAWRECTANGLE(B0INDEX,P0price,B0INDEX,P1price)  coloured("Green",t)//FILLCOLOR("Green",t)
    DRAWSEGMENT(B0INDEX,P0price,B0INDEX,P1price)  coloured("Green",t) style(line,3)
    //---DRAWRECTANGLE(B0INDEX, L0, B5INDEX, L0)         coloured("Green",t)//FILLCOLOR("Green",t)
    DRAWSEGMENT(B0INDEX, L0, B5INDEX, L0)         coloured("Green",t) style(line,3)
    //---DRAWRECTANGLE(B5INDEX,P0price,B5INDEX,P1price)  coloured("Green",t)//FILLCOLOR("Green",t)
    DRAWSEGMENT(B5INDEX,P0price,B5INDEX,P1price)  coloured("Green",t) style(line,3)
    //
    if trendhaussier then
    DRAWPOINT(b0index,high[b0]+0.01*high[b0],2)coloured(0,200,0,t)
    endif
    endif
    */
    A1   = B0INDEX        //A sinistra
    A2   = B5INDEX        //A destra
    HH   = P1price        //top price of point A
    LL   = P0price        //low price of point A
    bars = (A2 - A1) + 1  //bars elapsed from leftmost and rigtmost point A
    Gap  = HH - LL        //price gap between the highest and the lowest
    //                      pruice in the CUP
    PC   = ceil(Gap * 100 / HH,1)  //% LOSS
    //
    AX   = 0
    FOR i = A1 + 6 TO A2
    j = Barindex - i
    IF LL[j] = lowest[Bars](low) then
    AX = i
    break
    endif
    NEXT
    //
    c1   = ((AX - A1) >= 7)
    c2   = ((PC >= 15) AND (PC <= 35))
    c3   = (close > Sma200)
    c4   = (low <> high)
    Cond = condition AND c1 AND c2 AND c3 AND c4
    Screener[summation[1](Cond)](PC as "%")

    come si vede dalla foto, trova pochi elementi (ho selezionato TUTTI gli elenchi possibili) con i parametri indicati.

    Le condizioni )vedi foto relativa) su cui agire per variare i parametri sono 4, anche se una è preferibile non cambiarla:

    • riga 131 (c1)  numero di barre minime che devono passare tra il punto A di sinistra ed il punto di discesa più basso, se viene cambiata questa va cambiata anche la riga 123 (dove va messo lo stesso valore dminuito di 1), come da foto relativa
    • riga 132 (c2) percentuali, Minima e Massima, di discesa
    • riga 133 (c3) prezzo sopra la Sma200
    • riga 134 (c4) verifica che ci sia stato anche un minimo movimento di prezzo – questa è preferibile lasciarla così, secondo me, magari facendo una prova a disabilitarla.

    oltre a cambiare i valori numerici, è possibile DISABILITARE ogni condizione aggiungendo, alla fine della riga della condizione da disabilitare, OR 1, in questo modo:

    c3   = (close > Sma200) OR 1

    Nei prossimi giorni, sempre con il dovuto tempo, tra un lavoro e l’altro e dando priorità a qualche risposta molto semplice, risponderò alle altre richieste nell’ordine sequenziale.

    #232544 quote
    massimogp
    Participant
    Senior

    Prima di tutto GRAZIE roberto, però mi da 2 errori alla riga 54 e 60, puoi controllare? di nuovo Grazie.

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

PATTERN CUP & HANDLE


Supporto ProScreener

New Reply
Author
author-avatar
massimogp @massimogp Participant
Summary

This topic contains 21 replies,
has 3 voices, and was last updated by robertogozzi
1 year, 7 months ago.

Topic Details
Forum: Supporto ProScreener
Language: Italian
Started: 03/20/2024
Status: Active
Attachments: 7 files
Logo Logo
Loading...