Indicatore Pidi_Trend

Collapse
X
 
  • Ora
  • Show
Clear All
new posts
  • CIVT
    Senior Member
    • Dec 2009
    • 813

    #1

    Indicatore Pidi_Trend

    Ciao a tutti, come da titolo vorrei il vostro supporto nella costruzione dell\'indicatore di trend basato sulle regole che Pidi ha illustrato nel suo bellissimo post Il sottostante e le sue opzioni

    Riporto qui sotto le regole che lui utilizza per individuare il trend

    Originariamente Scritto da pidi10
    Il mio codice è complicato da molti parametri che servono al programma, ma non a stabilire il trend e poi è in un linguaggio che qui non si usa quindi ti dico il metodo che ho adottato.

    Tieni presente che è un mio personalissimo metodo, non copiato da nessuna parte e studiato per le mie esigenze.

    Faccio una media dei prezzi a 20 periodi ed una a 3 periodi.
    Ogni minuto detraggo dalla più corta la più lunga, ottenendo una differenza positiva o negativa.
    Calcolo la deviazione standard dei prezzi da inizio giornata.
    Divido la differenza per la deviazione standard ottenendo una percentuale.

    Se la percentuale è < 1 e > -1 c\'é lateralità
    Se >1 e <2 Trend rialzista leggero
    Se >2 Trend rialzista forte
    Se <-1 e >-2 Trend ribassista leggero
    Se <-2 Trend ribassista forte

    Poi i parametri possono essere aggiustati.
    Con beetrader sono arrivato a questo punto

    Click image for larger version

Name:	Pidi_Trend.jpg
Views:	1
Size:	116.3 KB
ID:	164760

    Questo il codice

    Codice:
    #Media dei prezzi a 20 periodi 
    SET SMA20 = SMA(CLOSE, 20)
    
    #Media dei prezzi a 3 periodi 
    SET SMA3 = SMA(CLOSE, 3)
    
    #Detraggo dalla più veloce la più lenta
    SET Differenza = SMA3 - SMA20
    
    #Calcolo la deviazione standard dei prezzi da inizio giornata
    SET DevStd = StandardDeviations(CLOSE, 20, 1, SIMPLE)
    
    #Divido la differenza per la deviazione standard ottenendo una percentuale
    SET Percentuale = Differenza / DevStd
     
     
    SET PLOT1 = Percentuale
    SET PLOT2 = 1
    SET PLOT3 = 2
    SET PLOT4 = -1
    SET PLOT5 = -2
    Spero di aver interpretato correttamente le indicazioni di Pidi soprattutto in merito alla Deviazione Standard perchè vedo che questo parametro influenza molto la reattività dell\'indicatore...

    p.s. ovviamente dopo di questo lavoreremo sulle fascie Pidi che sono un attimo piu\' complicate da tradurre!!!(Almeno per le mie ridotte capacità programmatorie!)
    Last edited by CIVT; 03-12-13, 14:01.
  • maxmax68
    Senior Member

    • Sep 2013
    • 186

    #2
    Originariamente Scritto da CIVT
    Ciao a tutti, come da titolo vorrei il vostro supporto nella costruzione dell\'indicatore di trend basato sulle regole che Pidi ha illustrato nel suo bellissimo post Il sottostante e le sue opzioni

    Riporto qui sotto le regole che lui utilizza per individuare il trend



    Con beetrader sono arrivato a questo punto

    [ATTACH=CONFIG]12981[/ATTACH]

    Questo il codice

    Codice:
    #Media dei prezzi a 20 periodi 
    SET SMA20 = SMA(CLOSE, 20)
    
    #Media dei prezzi a 3 periodi 
    SET SMA3 = SMA(CLOSE, 3)
    
    #Detraggo dalla più veloce la più lenta
    SET Differenza = SMA3 - SMA20
    
    #Calcolo la deviazione standard dei prezzi da inizio giornata
    SET DevStd = StandardDeviations(CLOSE, 20, 1, SIMPLE)
    
    #Divido la differenza per la deviazione standard ottenendo una percentuale
    SET Percentuale = Differenza / DevStd
     
     
    SET PLOT1 = Percentuale
    SET PLOT2 = 1
    SET PLOT3 = 2
    SET PLOT4 = -1
    SET PLOT5 = -2
    Spero di aver interpretato correttamente le indicazioni di Pidi soprattutto in merito alla Deviazione Standard perchè vedo che questo parametro influenza molto la reattività dell\'indicatore...

    p.s. ovviamente dopo di questo lavoreremo sulle fascie Pidi che sono un attimo piu\' complicate da tradurre!!!(Almeno per le mie ridotte capacità programmatorie!)

    Ciao CIVT,
    nel tuo codice hai usato una deviazione standard a 20 periodi, non calcolata da inizio giornata.
    Saluti
    Massimo

    Comment

    • CIVT
      Senior Member
      • Dec 2009
      • 813

      #3
      Originariamente Scritto da maxmax68
      Ciao CIVT,
      nel tuo codice hai usato una deviazione standard a 20 periodi, non calcolata da inizio giornata.
      Saluti
      Massimo
      Ciao Max e grazie del contributo! Mi pareva strano che fosse così semplice, se modifico il codice contando il numero di barre da inizio giornata otterrei il risultato desiderato? Effettuerei questa modifica però non capisco se così conta le barre giornaliere oppure quelle relative al time frame utilizzato cosa che dovrei invece fare da quanto ho capito!

      Codice:
      # Individuazione del cambiamento di data
      SET ConditionDateChange = DATE > REF(DATE, 1)
      SET DateChange = IF(ConditionDateChange, 1, 0)
       
      # Individuazione numerica delle barre intraday giornaliere
      SET BarsOfDay = LASTIF(ConditionDateChange)
      SET Bars = BarsOfDay + 1
      
      #Calcolo la deviazione standard dei prezzi da inizio giornata
      SET DevStd = StandardDeviations(CLOSE, Bars, 2, SIMPLE)
      Last edited by CIVT; 29-11-13, 11:26.

      Comment

      • Smash
        Senior Member

        • Feb 2012
        • 351

        #4
        Originariamente Scritto da CIVT
        Ciao Max e grazie del contributo! Mi pareva strano che fosse così semplice, se modifico il codice contando il numero di barre da inizio giornata otterrei il risultato desiderato? Effettuerei questa modifica però non capisco se così conta le barre giornaliere oppure quelle relative al time frame utilizzato cosa che dovrei invece fare da quanto ho capito!

        Codice:
        # Individuazione del cambiamento di data
        SET ConditionDateChange = DATE > REF(DATE, 1)
        SET DateChange = IF(ConditionDateChange, 1, 0)
         
        # Individuazione numerica delle barre intraday giornaliere
        SET BarsOfDay = LASTIF(ConditionDateChange)
        SET Bars = BarsOfDay + 1
        
        #Calcolo la deviazione standard dei prezzi da inizio giornata
        SET DevStd = StandardDeviations(CLOSE, Bars, 2, SIMPLE)

        Ciao CIVT,

        così calcola le barre intraday indipendentemente dal time frame utilizzato: se ad esempio metti il time frame giornaliero conta sempre 1.


        Io per il momento ho partorito questo:

        Codice:
        #Media dei prezzi a 20 periodi 
        SET SMA20 = SMA(CLOSE, 20)
        
        #Media dei prezzi a 3 periodi 
        SET SMA3 = SMA(CLOSE, 3)
        
        #Detraggo dalla più veloce la più lenta
        SET Differenza = SMA3 - SMA20
        
        #Calcolo la deviazione standard dei prezzi da inizio giornata (a periodo variabile)
        SET ConditionDateChange = DATE > REF(DATE, 1)
        SET BarsOfDay = LASTIF(ConditionDateChange)
        SET Periods = BarsOfDay + 1
        #Inibisco il calcolo della deviazione standard dei prezzi per le prime 4 barre di giornata
        SET DevStd = IF(Periods < 5, 0, StandardDeviations(CLOSE, Periods, 1, SIMPLE) )
        #Modifica per evitare la divisione per zero
        SET DevStdModif = IF(DevStd = 0, 0.000001, DevStd)
         
        #Divido la differenza per la deviazione standard ottenendo una percentuale
        #imponendo valore zero per le prime 4 barre di giornata (E\' UNA SCELTA ARBITRARIA !!!)
        SET Percentuale = IF(Periods < 5, 0, Differenza / DevStdModif )
        
        SET PLOT1 = Percentuale
        SET PLOT2 = 2
        SET PLOT3 = 1
        SET PLOT4 = -1
        SET PLOT5 = -2
        
        SET PLOTCOLOR1 = COLOR_YELLOW
        SET PLOTCOLOR2 = COLOR_LIGHT_GREEN
        SET PLOTCOLOR3 = COLOR_LIGHT_GREEN
        SET PLOTCOLOR4 = COLOR_LIGHT_RED
        SET PLOTCOLOR5 = COLOR_LIGHT_RED

        Click image for larger version

Name:	1.jpg
Views:	1
Size:	134.3 KB
ID:	149440


        Ci sono dentro un paio di artifizi mirati semplicemente ad evitare la generazione di errori nel calcolo (inibizione delle prime 4 barre di giornata e modifica artificiosa della deviazione standard quando vale zero).

        Inoltre ho l\'impressione che questo indicatore appesantisca un tantino beeTrader!
        Last edited by Smash; 29-11-13, 12:23.

        Comment

        • Smash
          Senior Member

          • Feb 2012
          • 351

          #5
          A quanto ho intuito, credo che Pidi utilizzi il grafico con time frame a 1 minuto.

          Comment

          • Smash
            Senior Member

            • Feb 2012
            • 351

            #6
            Originariamente Scritto da CIVT
            ...

            p.s. ovviamente dopo di questo lavoreremo sulle fascie Pidi che sono un attimo piu\' complicate da tradurre!!!(Almeno per le mie ridotte capacità programmatorie!)
            Ecco anche un primo contributo per la realizzazione delle fasce Pidi.

            Codice:
            # Calcolo dei Pivot Points
            SET AP = (YESTERDAYHIGH() + YESTERDAYLOW() +  YESTERDAYCLOSE()) / 3
            SET Sup1 = 2 * AP - YESTERDAYHIGH()
            SET Res1 = 2 * AP - YESTERDAYLOW()
            SET Sup2 = AP - (Res1 - Sup1)
            SET Res2 = (AP - Sup1) + Res1
            SET Res3 = Res2 + (YESTERDAYHIGH() - YESTERDAYLOW())
            SET Sup3 = Sup2 - (YESTERDAYHIGH() - YESTERDAYLOW())
            
            # Calcolo dei 2 livelli di Strike Up
            SET StrikeUp1 = DIV(TODAYOPEN() * 100, 50) / 2 + 0.5
            SET StrikeUp2 = StrikeUp1 + 0.5
            
            # Calcolo dei 2 livelli di Strike Down
            SET CondDown = MOD(TODAYOPEN() * 100, 50) = 0
            SET StrikeDown1 = IF(CondDown, DIV(TODAYOPEN() * 100, 50) / 2 - 0.5, DIV(TODAYOPEN() * 100, 50) / 2)
            SET StrikeDown2 = StrikeDown1 - 0.5
            
            SET PLOT1 = TODAYOPEN()
            SET PLOT2 = StrikeUp1
            SET PLOT3 = StrikeDown1
            SET PLOT4 = StrikeUp2
            SET PLOT5 = StrikeDown2
            
            SET PLOTCOLOR1 = COLOR_SILVER
            SET PLOTCOLOR2 = COLOR_GREEN
            SET PLOTCOLOR3 = COLOR_RED
            SET PLOTCOLOR4 = COLOR_GREEN
            SET PLOTCOLOR5 = COLOR_RED

            Questo indicatore calcola i 2 livelli di Strike Price del Bund al di sopra e al di sotto dell\'apertura di giornata, e li disegna insieme al livello dell\'apertura di giornata; calcola inoltre anche i Pivot Points (anche se non li disegna).


            A questo punto per determinare le fasce rimarrebbero da fare i controlli incrociati dei vari livelli (apertura, Strike Price e Pivot Points) per poi aggiungere e togliere il numero di tick fissi determinati da Pidi.
            Last edited by Smash; 29-11-13, 15:46.

            Comment

            • CIVT
              Senior Member
              • Dec 2009
              • 813

              #7
              Originariamente Scritto da Smash
              Ecco anche un primo contributo per la realizzazione delle fasce Pidi.

              ....

              Questo indicatore calcola i 2 livelli di Strike Price del Bund al di sopra e al di sotto dell\'apertura di giornata, e li disegna insieme al livello dell\'apertura di giornata; calcola inoltre anche i Pivot Points (anche se non li disegna).


              A questo punto per determinare le fasce rimarrebbero da fare i controlli incrociati dei vari livelli (apertura, Strike Price e Pivot Points) per poi aggiungere e togliere il numero di tick fissi determinati da Pidi.
              Grazie per il contributo Smash, rilleggendo la discussione ho trovato altri spunti/chiarimenti che dovrebbero essere integrati, questo è il primo:

              Calcolo Frontiera della Direzione


              Originariamente Scritto da pidi10
              Io sono giunto alla conclusione che sul Bund una “Frontiera della Direzione” pari a 22 Tick assicura un’affidabilità della previsione pari al 67%. Cioè la previsione che il colore della candela sarà coerente con l’andamento che in quel momento sta prendendo il prezzo è giusta 2 volte su 3.

              L’ho chiamata “Frontiera della Direzione” proprio perché individua in termini probabilistici il momento in cui il mercato decide la direzione giornaliera.

              Quindi ora possiamo tornare sul campo di battaglia e disegnare 2 linee parallele alla linea dell’Open, Una 22 tick al di sopra (“Frontiera della Direzione Rialzista”) e l’altra 22 tick al di sotto (“Frontiera della Direzione Ribassista”).

              Quando il prezzo supererà una di queste linee, ad esempio quella sottostante all’Open sapremo che con probabilità pari al 67% la candela di fine giornata sarà ribassista.

              Quindi oltre alla prima deduzione circa il colore finale della candela, sappiamo anche un’altra cosa, che se entro un tempo accettabile uno dei due livelli non viene violato, siamo in presenza di un andamento laterale.

              Infine c’è anche da dire che quando uno di questi due livelli viene violato, la probabilità che il prezzo raggiunga la Fascia PIDI è altissima.

              E quindi indipendentemente da quanto rialzista o ribassista sarà la candela, se al superamento di uno dei livelli si lancia un operazione dello stesso segno sul sottostante con Target Price all’interno della Fascia PIDI (ad esempio sul Punto di non ritorno corto, quella da 12 tick) e con un’uscita in Traling Profit, si potrà avere una buona probabilità di prendere un guadagno , talvolta sostanzioso.
              Questo è stato facile calcolarlo anche perchè perchè ho aggiun 22 tick dall\'open in questo modo

              Codice:
              #Calcolo la frontierza di direzione +/- 22 tick dall\'OPEN
              SET FrontieraUP = TODAYOPEN() + 0.22
              SET FrontieraDOWN = TODAYOPEN() - 0.22
              Questa è la spiegazione per il calcolo delle Fasce PIDI

              Originariamente Scritto da pidi10
              La regola delle Fasce di PIDI per il BUND è la seguente

              Prendi l\'OPEN e individua la seconda resistenza contando sia Strike che Pivot sia in alto che in basso.
              I prezzi trovati sono i punti di inizio delle due fasce.
              Al prezzo trovato in alto aggiungi 12 tick per avere il Punto di non ritorno corto e 22 tick per avere quello lungo.
              A quello in basso sottrai 12 tick per il corto e 22 per il lungo.

              A dirlo è semplice a programmarlo un po\' più difficile
              Qui sono un pò in difficoltà perchè l\'indivduazione della R2 deve essere il prezzo più vicino tra lo strike e il pivot, quindi bisogna inserire una condizione di verifica tra i due ed aggiungere 12 e 22 tick su R2

              Allego lo snapshort di Pidi per chiarire meglio il concetto

              Click image for larger version

Name:	Mappatura del campo di battaglia.png
Views:	2
Size:	23.0 KB
ID:	149467


              Questo invece è il codice che ha programmato BMM con un altro software, lo riprongo qui perchè credo possa essere utile

              Originariamente Scritto da BMM
              è in altro linguaggio quindi usalo come se fosse uno pseudocodice per capirne la logica e tradurlo

              Codice:
              AmpStrike = Param( "Ampiezza Strike", 0.5, 0.01, 1000, 0.0001 );
              
              AmpPidi = Param( "Ampiezza Fascia Pidi", 0.22, 0.01, 1000, 0.0001 );
              
              AmpFdD = Param( "Ampiezza Frontiera della Direzione", 0.22, 0.01, 1000, 0.0001 );
              
              PlotTerzoPivot = ParamToggle("Plotta terzo Pivot","Off|On");
              
              
              TimeFrameSet( inDaily );
              
              P = ( H + L + C ) / 3;
              R1 = ( P * 2 ) - L;
              S1 = ( P * 2 ) - H;
              R2 = P + ( R1 - S1 );
              S2 = P - ( R1 - S1 );
              R3 = R2 + ( H - L );
              S3 = S2 - ( H - L ) ;
              
              FdDUp = O + AmpFdD ;
              FdDDown = O - AmpFdD ;
              
              StrikeUP = ceil( O / AmpStrike   ) * AmpStrike  ;
              StrikeDown = floor( O / AmpStrike   ) * AmpStrike  ;
              
              SogliaPidiUp = IIf( O > Ref( P, -1 ) ,
                                  IIf( StrikeUP < Ref( R1, -1 ) , Ref( R1, -1 ) , IIf( StrikeUP < Ref( R2, -1 ), StrikeUP , Ref( R2, -1 ) ) ),
                                  IIf( StrikeUP < Ref( P, -1 ) , Ref( P, -1 ), IIf( StrikeUP < Ref( R1, -1 ), StrikeUP , Ref( R1, -1 ) ) ) );
              
              SogliaPidiDown = IIf( O < Ref( P, -1 ) ,
                                  IIf( StrikeDown > Ref( S1, -1 ) , Ref( S1, -1 ) , IIf( StrikeDown > Ref( S2, -1 ), StrikeDown , Ref( S2, -1 ) ) ),
                                  IIf( StrikeDown > Ref( P, -1 ) , Ref( P, -1 ), IIf( StrikeDown > Ref( S1, -1 ), StrikeDown , Ref( S1, -1 ) ) ) );
              
              TimeFrameRestore();
              
              
              
              
              P = TimeFrameExpand( P, inDaily );
              R1 = TimeFrameExpand( R1, inDaily );
              S1 = TimeFrameExpand( S1, inDaily );
              R2 = TimeFrameExpand( R2, inDaily );
              S2 = TimeFrameExpand( S2, inDaily );
              R3 = TimeFrameExpand( R3, inDaily );
              S3 = TimeFrameExpand( S3, inDaily );
              
              FdDUp = TimeFrameExpand( FdDUp , inDaily, expandFirst  );
              FdDDown = TimeFrameExpand( FdDDown , inDaily, expandFirst  );
              SogliaPidiUp = TimeFrameExpand( SogliaPidiUp, inDaily, expandFirst  );
              SogliaPidiDown = TimeFrameExpand( SogliaPidiDown , inDaily, expandFirst  );
              
              PNRUp = SogliaPidiUp + AmpPidi ;
              PNRDown = SogliaPidiDown - AmpPidi ;
              
              P = IIf( DateNum() == Ref( DateNum(), 1 ), P , Null );
              R1 = IIf( DateNum() == Ref( DateNum(), 1 ), R1 , Null );
              S1 = IIf( DateNum() == Ref( DateNum(), 1 ), S1 , Null );
              R2 = IIf( DateNum() == Ref( DateNum(), 1 ), R2 , Null );
              S2 = IIf( DateNum() == Ref( DateNum(), 1 ), S2 , Null );
              R3 = IIf( DateNum() == Ref( DateNum(), 1 ), R3 , Null );
              S3 = IIf( DateNum() == Ref( DateNum(), 1 ), S3 , Null );
              
              FdDUp = IIf( DateNum() == Ref( DateNum(), -1 ), FdDUp , Null );
              FdDDown = IIf( DateNum() == Ref( DateNum(), -1 ), FdDDown , Null );
              SogliaPidiUp = IIf( DateNum() == Ref( DateNum(), -1 ), SogliaPidiUp , Null );
              SogliaPidiDown = IIf( DateNum() == Ref( DateNum(), -1 ), SogliaPidiDown , Null );
              PNRUp = IIf( DateNum() == Ref( DateNum(), -1 ), PNRUp , Null );
              PNRDown = IIf( DateNum() == Ref( DateNum(), -1 ), PNRDown , Null );
              
              Plot( FdDUp , "FdDUp", colorRed, styleDashed );
              Plot( FdDDown , "FdDDown ", colorRed, styleDashed );
              Plot( SogliaPidiUp , "SogliaPidiUp", colorDarkGreen, styleLine );
              Plot( SogliaPidiDown , "SogliaPidiDown ", colorDarkGreen, styleLine );
              Plot( PNRUp , "PNRUp", colorDarkGreen, styleLine );
              Plot( PNRDown , "PNRDown", colorDarkGreen, styleLine );
              
              Plot( P, "P", colorBlack, styleDashed );
              Plot( R1, "R1", colorGrey50, styleDashed );
              Plot( R2, "R2", colorGrey50, styleDashed );
              Plot( S1, "S1", colorGrey50, styleDashed );
              Plot( S2, "S2", colorGrey50, styleDashed );
              
              
              if ( PlotTerzoPivot )
              {
                  Plot( R3, "R3", colorGrey50, styleDashed | styleNoRescale );
                  Plot( S3, "S3", colorGrey50, styleDashed | styleNoRescale);
              }
              
              PlotOHLC( PNRUp , PNRUp , SogliaPidiUp , SogliaPidiUp , "", colorPink, styleCloud, Null, Null, Null, -1 );
              PlotOHLC( SogliaPidiDown , SogliaPidiDown , PNRDown , PNRDown , "", colorPink, styleCloud, Null, Null, Null, -1 );
              Al momento il Pidi-workspace si presenta così!

              Click image for larger version

Name:	Pidi_Workspace.jpg
Views:	1
Size:	112.9 KB
ID:	149468
              Last edited by CIVT; 01-12-13, 15:21.

              Comment

              • maxmax68
                Senior Member

                • Sep 2013
                • 186

                #8
                Ciao a tutti,
                più tardi proverò a cimentarmi nella traduzione del codice di BMM.
                Volevo però prima capire un paio di cosette.
                Innanzitutto come si calcola lo strike price ad esempio su Unicredit,
                tanto per fare un esempio su un titolo che conosco meglio dei future.
                Come si arriva a calcolare la Fascia Pidi.
                Saluti
                Massimo

                Comment

                • maxmax68
                  Senior Member

                  • Sep 2013
                  • 186

                  #9
                  Ecco una prima conversione approssimativa del codice fornito da BMM.
                  Per quanto riguarda il calcolo degli strike, non funzionando le funzioni CEIL e FLOOR, ho utilizzato il metodo di
                  calcolo fornito da Smash nel suo codice.
                  Per quanto riguarda il calcolo di SogliaPidiUp e SogliaPidiDown ho tradotto pari pari le condizioni di BMM,
                  e non avendoci capito molto, lascio a voi verificare la loro correttezza.
                  Fate sapere se è necessario correggere qualcosa.

                  Saluti
                  Massimo

                  Codice:
                  # Ampiezza Strike
                  INPUTS: @AmpStrike(0.5)
                  # Ampiezza Fascia Pidi
                  INPUTS: @AmpPidi(0.22) 
                  # Ampiezza Frontiera della direzione
                  INPUTS: @AmpFdD(0.22)
                  
                  # Calcolo dei Pivot Points
                  SET AP = (YESTERDAYHIGH() + YESTERDAYLOW() +  YESTERDAYCLOSE()) / 3
                  SET Sup1 = (AP * 2) - YESTERDAYHIGH()
                  SET Res1 = (AP * 2) - YESTERDAYLOW()
                  SET Sup2 = AP - (Res1 - Sup1)
                  SET Res2 = (AP - Sup1) + Res1
                  #SET Res3 = Res2 + (YESTERDAYHIGH() - YESTERDAYLOW())
                  #SET Sup3 = Sup2 - (YESTERDAYHIGH() - YESTERDAYLOW())
                  # Calcolo Frontiere della direzione
                  SET FdDUp = TODAYOPEN() + @AmpFdD
                  SET FdDDown = TODAYOPEN() - @AmpFdD
                   
                  # Calcolo dei 2 livelli di Strike Up
                  SET StrikeUp1 = DIV(TODAYOPEN() * 100, 50) / 2 + @AmpStrike
                  SET StrikeUp2 = StrikeUp1 + @AmpStrike
                   
                  # Calcolo dei 2 livelli di Strike Down
                  SET CondDown = MOD(TODAYOPEN() * 100, 50) = 0
                  SET StrikeDown1 = IF(CondDown, DIV(TODAYOPEN() * 100, 50) / 2 - @AmpStrike, DIV(TODAYOPEN() * 100, 50) / 2)
                  SET StrikeDown2 = StrikeDown1 - @AmpStrike
                  # Calcola SogliaPidiUp
                  SET c1 = IF(StrikeUp1 < Res2, StrikeUp1, Res2 )
                  SET c2 = IF(StrikeUp1 < Res1, Res1, c1)
                  SET c3 = IF(StrikeUp1 < Res1, StrikeUp1, Res1 )
                  SET c4 = IF(StrikeUp1 < AP, AP, c3)
                  SET SogliaPidiUp = IF(TODAYOPEN() > AP, c2 , c4)
                  # Calcola SogliaPidiDown
                  SET c5 = IF(StrikeDown1 > Sup2, StrikeDown1, Sup2 )
                  SET c6 = IF(StrikeDown1 > Sup1, Sup1, c5)
                  SET c7 = IF(StrikeDown1 > Sup1, StrikeDown1, Sup1 )
                  SET c8 = IF(StrikeDown1 > AP, AP, c7)
                  SET SogliaPidiDown = IF(TODAYOPEN() < AP, c6 , c8)
                  # Calcola Punti di non ritorno
                  SET PNRUp = SogliaPidiUp + @AmpPidi
                  SET PNRDown = SogliaPidiDown - @AmpPidi
                   
                  SET PLOT1 = TODAYOPEN()
                  SET PLOT2 = FdDUp
                  SET PLOT3 = FdDDown
                  SET PLOT4 = PNRUp
                  SET PLOT5 = PNRDown
                  SET PLOT6 = SogliaPidiUp
                  SET PLOT7 = SogliaPidiDown
                  
                  SET PLOTCOLOR1 = COLOR_SILVER
                  SET PLOTCOLOR2 = COLOR_GREEN
                  SET PLOTCOLOR3 = COLOR_RED
                  SET PLOTCOLOR4 = COLOR_GREEN
                  SET PLOTCOLOR5 = COLOR_RED
                  SET PLOTCOLOR6 = COLOR_YELLOW
                  SET PLOTCOLOR7 = COLOR_YELLOW

                  Comment

                  • CIVT
                    Senior Member
                    • Dec 2009
                    • 813

                    #10
                    Originariamente Scritto da maxmax68
                    Ciao a tutti,
                    più tardi proverò a cimentarmi nella traduzione del codice di BMM.
                    Volevo però prima capire un paio di cosette.
                    Innanzitutto come si calcola lo strike price ad esempio su Unicredit,
                    tanto per fare un esempio su un titolo che conosco meglio dei future.
                    Come si arriva a calcolare la Fascia Pidi.
                    Saluti
                    Massimo
                    Ciao Max, come avrai letto all\'inizio del 3d tutto è nato dalla visione del mercato che PIDI (Pietro) ha maturato in anni di trading sul BUND e che ha deciso di trasmetterci nel post Il sottostante e le sue opzioni venendo alle tue domande, gli strike Smash è riuscito a calcolarli (io non ci sarei mai arrivato da solo) utilizzando la divisione di numeri interi aggiungendo poi la distanza strike che sul bund è 0,5 mentre per unicredit ad esempio è 0,1

                    La formula è questa
                    Codice:
                    DIV(TODAYOPEN() * 100, 50) / 2 + 0.5
                    ipotizzando un open a 141,68 lo strike piu\' vicino sarà 141+0,5 ovvero 141,5 lo stesso discorso puoi farlo con Unicredito ovviamente cambiando il passo strike.

                    Per quanto riguarda invece il calcolo delle fascie PIDI riporto qui sotto quello che intende PIDI per le fascie PIDI

                    Le Fasce PIDI

                    .......

                    Come si individuano queste fasce.
                    Si parte dall’OPEN che è il primo prezzo battuto nella giornata, il punto di partenza della prima candela.
                    Poi si individua la seconda resistenza, intesa per Strike o Pivot Point, al di sopra di essa.

                    Quello è il livello di prezzo in cui inizia la fascia di attenzione superiore. Poi si individua un numero di tick proporzionali alla volatilità del titolo, che costituiscono la “profondità” della fascia e si contano procedendo oltre.
                    Il livello trovato è il termine della fascia e si chiama Punto di Non ritorno superiore.

                    La difficoltà sta nell’individuare per ogni singolo sottostante il valore della profondità della fascia. Io in questi mesi sul Bund ho fissato la profondità in 22 tick per i trend followers ed in 12 tick per i contrarian.
                    La differenza tra le due valutazioni sta nel fatto che questa area è un’altra delle aree in cui il sottostante procede in lateralità e quindi ai Trend followers occorre un dato con alta probabilità che il prezzo non torni indietro, mentre per i contrarian che lavorano entrando contrari sui massimi e sui minimi relativi occorre un punto di allert da cui essere pronti ad entrare al minimo accenno di inversione.

                    Per ricavare queste profondità su altri sottostanti è sufficiente fissare il livello di inizio di ogni fascia e poi con l’osservazione in più giorni posizionare quello di fine fascia nel punto più opportuno in base al comportamento del sottostante stesso e alle proprie esigenze.

                    ESEMPIO: L\'open è stato a 139.70
                    Prima resistenza è un pivot a 139.88
                    Seconda resistenza è uno strike a 140
                    140 + 0.22 = Punto di non ritorno 140.22

                    Fino a che sta nella fascia la probabilità maggiore è che ritracci.
                    Passata la fascia ogni tick aumenta la probabilità che vada in un trend temporaneo
                    Qui trovi il testo completo Le sfasce PIDI

                    Comment

                    • CIVT
                      Senior Member
                      • Dec 2009
                      • 813

                      #11
                      Originariamente Scritto da maxmax68
                      Ecco una prima conversione approssimativa del codice fornito da BMM.

                      Bravo Max! Ora direi che lavora bene, l\'unico problema è che su TF inferiori al 15 minuti va fuoriscala!

                      Workspace TF 15 minuti

                      Click image for larger version

Name:	MAXMAX_FASCEPIDI.jpg
Views:	2
Size:	123.9 KB
ID:	149496



                      Workspace fuoriscala su TF 5 minuti

                      Click image for larger version

Name:	MAXMAX_FASCEPIDI._ERROREJPG.jpg
Views:	1
Size:	96.4 KB
ID:	149497

                      Comment

                      • lucaweb76
                        Senior Member
                        • Nov 2010
                        • 105

                        #12
                        Originariamente Scritto da maxmax68
                        Ecco una prima conversione approssimativa del codice fornito da BMM.
                        Per quanto riguarda il calcolo degli strike, non funzionando le funzioni CEIL e FLOOR, ho utilizzato il metodo di
                        calcolo fornito da Smash nel suo codice.
                        Per quanto riguarda il calcolo di SogliaPidiUp e SogliaPidiDown ho tradotto pari pari le condizioni di BMM,
                        e non avendoci capito molto, lascio a voi verificare la loro correttezza.
                        Fate sapere se è necessario correggere qualcosa.

                        Saluti
                        Massimo

                        Codice:
                        # Ampiezza Strike
                        INPUTS: @AmpStrike(0.5)
                        # Ampiezza Fascia Pidi
                        INPUTS: @AmpPidi(0.22) 
                        # Ampiezza Frontiera della direzione
                        INPUTS: @AmpFdD(0.22)
                        
                        # Calcolo dei Pivot Points
                        SET AP = (YESTERDAYHIGH() + YESTERDAYLOW() +  YESTERDAYCLOSE()) / 3
                        SET Sup1 = (AP * 2) - YESTERDAYHIGH()
                        SET Res1 = (AP * 2) - YESTERDAYLOW()
                        SET Sup2 = AP - (Res1 - Sup1)
                        SET Res2 = (AP - Sup1) + Res1
                        #SET Res3 = Res2 + (YESTERDAYHIGH() - YESTERDAYLOW())
                        #SET Sup3 = Sup2 - (YESTERDAYHIGH() - YESTERDAYLOW())
                        # Calcolo Frontiere della direzione
                        SET FdDUp = TODAYOPEN() + @AmpFdD
                        SET FdDDown = TODAYOPEN() - @AmpFdD
                         
                        # Calcolo dei 2 livelli di Strike Up
                        SET StrikeUp1 = DIV(TODAYOPEN() * 100, 50) / 2 + @AmpStrike
                        SET StrikeUp2 = StrikeUp1 + @AmpStrike
                         
                        # Calcolo dei 2 livelli di Strike Down
                        SET CondDown = MOD(TODAYOPEN() * 100, 50) = 0
                        SET StrikeDown1 = IF(CondDown, DIV(TODAYOPEN() * 100, 50) / 2 - @AmpStrike, DIV(TODAYOPEN() * 100, 50) / 2)
                        SET StrikeDown2 = StrikeDown1 - @AmpStrike
                        # Calcola SogliaPidiUp
                        SET c1 = IF(StrikeUp1 < Res2, StrikeUp1, Res2 )
                        SET c2 = IF(StrikeUp1 < Res1, Res1, c1)
                        SET c3 = IF(StrikeUp1 < Res1, StrikeUp1, Res1 )
                        SET c4 = IF(StrikeUp1 < AP, AP, c3)
                        SET SogliaPidiUp = IF(TODAYOPEN() > AP, c2 , c4)
                        # Calcola SogliaPidiDown
                        SET c5 = IF(StrikeDown1 > Sup2, StrikeDown1, Sup2 )
                        SET c6 = IF(StrikeDown1 > Sup1, Sup1, c5)
                        SET c7 = IF(StrikeDown1 > Sup1, StrikeDown1, Sup1 )
                        SET c8 = IF(StrikeDown1 > AP, AP, c7)
                        SET SogliaPidiDown = IF(TODAYOPEN() < AP, c6 , c8)
                        # Calcola Punti di non ritorno
                        SET PNRUp = SogliaPidiUp + @AmpPidi
                        SET PNRDown = SogliaPidiDown - @AmpPidi
                         
                        SET PLOT1 = TODAYOPEN()
                        SET PLOT2 = FdDUp
                        SET PLOT3 = FdDDown
                        SET PLOT4 = PNRUp
                        SET PLOT5 = PNRDown
                        SET PLOT6 = SogliaPidiUp
                        SET PLOT7 = SogliaPidiDown
                        
                        SET PLOTCOLOR1 = COLOR_SILVER
                        SET PLOTCOLOR2 = COLOR_GREEN
                        SET PLOTCOLOR3 = COLOR_RED
                        SET PLOTCOLOR4 = COLOR_GREEN
                        SET PLOTCOLOR5 = COLOR_RED
                        SET PLOTCOLOR6 = COLOR_YELLOW
                        SET PLOTCOLOR7 = COLOR_YELLOW
                        Ciao Massimo scusa se ti disturbo ,ma sono alle prime armi con brrtrader.
                        ho preso questo codice e l\'ho incollato all\'interno dello script di nuovo indicatore .
                        possibile che quando lo verifico restituisca errore?
                        scusami ancora
                        Luca

                        Comment

                        • maxmax68
                          Senior Member

                          • Sep 2013
                          • 186

                          #13
                          Originariamente Scritto da lucaweb76
                          Ciao Massimo scusa se ti disturbo ,ma sono alle prime armi con brrtrader.
                          ho preso questo codice e l\'ho incollato all\'interno dello script di nuovo indicatore .
                          possibile che quando lo verifico restituisca errore?
                          scusami ancora
                          Luca
                          Ciao Luca,
                          scusa il ritardo con cui ti rispondo, assolutamente nessun disturbo !
                          Probabilmente a quest\'ora avrai già individuato il problema.
                          L\'unica spiegazione logica che mi viene in mente è che tu nel copia-incolla
                          abbia importato qualche carattere strano nell\'editor. E quel carattere è la causa dell\'errore.
                          Prova a controllare all\'inizio e alla fine del codice che non ci siano errori.
                          Saluti
                          Massimo

                          Comment

                          • maxmax68
                            Senior Member

                            • Sep 2013
                            • 186

                            #14
                            Originariamente Scritto da CIVT
                            Bravo Max! Ora direi che lavora bene, l\'unico problema è che su TF inferiori al 15 minuti va fuoriscala!
                            Ciao CIVT,
                            ancora poblemi sul TF5 minuti ?
                            La butto li, forse non avevi caricato abbastanza barre per permettere il calcolo dei Pivots.
                            Per quanto riguarda i livelli ti sembra che funzioni correttamente ?
                            Saluti
                            Massimo

                            Comment

                            • Smash
                              Senior Member

                              • Feb 2012
                              • 351

                              #15
                              Originariamente Scritto da maxmax68
                              Ecco una prima conversione approssimativa del codice fornito da BMM.
                              Per quanto riguarda il calcolo degli strike, non funzionando le funzioni CEIL e FLOOR, ho utilizzato il metodo di
                              calcolo fornito da Smash nel suo codice.
                              Per quanto riguarda il calcolo di SogliaPidiUp e SogliaPidiDown ho tradotto pari pari le condizioni di BMM,
                              e non avendoci capito molto, lascio a voi verificare la loro correttezza.
                              Fate sapere se è necessario correggere qualcosa.

                              Saluti
                              Massimo

                              Codice:
                              # Ampiezza Strike
                              INPUTS: @AmpStrike(0.5)
                              # Ampiezza Fascia Pidi
                              INPUTS: @AmpPidi(0.22) 
                              # Ampiezza Frontiera della direzione
                              INPUTS: @AmpFdD(0.22)
                              
                              # Calcolo dei Pivot Points
                              SET AP = (YESTERDAYHIGH() + YESTERDAYLOW() +  YESTERDAYCLOSE()) / 3
                              SET Sup1 = (AP * 2) - YESTERDAYHIGH()
                              SET Res1 = (AP * 2) - YESTERDAYLOW()
                              SET Sup2 = AP - (Res1 - Sup1)
                              SET Res2 = (AP - Sup1) + Res1
                              #SET Res3 = Res2 + (YESTERDAYHIGH() - YESTERDAYLOW())
                              #SET Sup3 = Sup2 - (YESTERDAYHIGH() - YESTERDAYLOW())
                              # Calcolo Frontiere della direzione
                              SET FdDUp = TODAYOPEN() + @AmpFdD
                              SET FdDDown = TODAYOPEN() - @AmpFdD
                               
                              # Calcolo dei 2 livelli di Strike Up
                              SET StrikeUp1 = DIV(TODAYOPEN() * 100, 50) / 2 + @AmpStrike
                              SET StrikeUp2 = StrikeUp1 + @AmpStrike
                               
                              # Calcolo dei 2 livelli di Strike Down
                              SET CondDown = MOD(TODAYOPEN() * 100, 50) = 0
                              SET StrikeDown1 = IF(CondDown, DIV(TODAYOPEN() * 100, 50) / 2 - @AmpStrike, DIV(TODAYOPEN() * 100, 50) / 2)
                              SET StrikeDown2 = StrikeDown1 - @AmpStrike
                              # Calcola SogliaPidiUp
                              SET c1 = IF(StrikeUp1 < Res2, StrikeUp1, Res2 )
                              SET c2 = IF(StrikeUp1 < Res1, Res1, c1)
                              SET c3 = IF(StrikeUp1 < Res1, StrikeUp1, Res1 )
                              SET c4 = IF(StrikeUp1 < AP, AP, c3)
                              SET SogliaPidiUp = IF(TODAYOPEN() > AP, c2 , c4)
                              # Calcola SogliaPidiDown
                              SET c5 = IF(StrikeDown1 > Sup2, StrikeDown1, Sup2 )
                              SET c6 = IF(StrikeDown1 > Sup1, Sup1, c5)
                              SET c7 = IF(StrikeDown1 > Sup1, StrikeDown1, Sup1 )
                              SET c8 = IF(StrikeDown1 > AP, AP, c7)
                              SET SogliaPidiDown = IF(TODAYOPEN() < AP, c6 , c8)
                              # Calcola Punti di non ritorno
                              SET PNRUp = SogliaPidiUp + @AmpPidi
                              SET PNRDown = SogliaPidiDown - @AmpPidi
                               
                              SET PLOT1 = TODAYOPEN()
                              SET PLOT2 = FdDUp
                              SET PLOT3 = FdDDown
                              SET PLOT4 = PNRUp
                              SET PLOT5 = PNRDown
                              SET PLOT6 = SogliaPidiUp
                              SET PLOT7 = SogliaPidiDown
                              
                              SET PLOTCOLOR1 = COLOR_SILVER
                              SET PLOTCOLOR2 = COLOR_GREEN
                              SET PLOTCOLOR3 = COLOR_RED
                              SET PLOTCOLOR4 = COLOR_GREEN
                              SET PLOTCOLOR5 = COLOR_RED
                              SET PLOTCOLOR6 = COLOR_YELLOW
                              SET PLOTCOLOR7 = COLOR_YELLOW

                              Ciao Massimo,
                              scusa ma leggo soltanto adesso.

                              Per il calcolo degli strike

                              Codice:
                              # Calcolo dei 2 livelli di Strike Up
                              SET StrikeUp1 = DIV(TODAYOPEN() * 100, 50) / 2 + @AmpStrike
                              SET StrikeUp2 = StrikeUp1 + @AmpStrike
                                
                              # Calcolo dei 2 livelli di Strike Down
                              SET CondDown = MOD(TODAYOPEN() * 100, 50) = 0
                              SET StrikeDown1 = IF(CondDown, DIV(TODAYOPEN() * 100, 50) / 2 - @AmpStrike, DIV(TODAYOPEN() * 100, 50) / 2)
                              SET StrikeDown2 = StrikeDown1 - @AmpStrike
                              per il Bund si è dovuto moltiplicare il TODAYOPEN per 100 in modo tale da togliere tutti i decimali (il Bund ne ha 2, ma se un altro future o azione ad esempio ne avesse 4 allora andava moltiplicato per 10000), altrimenti beeTrader approssima all\'unità e sballa il risultato della divisione.

                              In seguito quel 50 che si divide a TODAYOPEN() * 100 è un multiplo della distanza @AmpStrike :
                              è @AmpStrike * 100 in questo caso sul Bund; sarebbe stato @AmpStrike * 10000 per un altro sottostante a 4 cifre decimali.

                              Ed infine quel 2 che si è usato per dividere il DIV(TODAYOPEN() * 100, 50)
                              in realtà sarebbe pari a 1 / @AmpStrike

                              Quindi per avere un codice corretto per un future diverso dal Bund andrebbero fatte alcune piccole modifiche.
                              Ma siccome per il momento si era detto che le Fasce di Pidi si usavano solo sul Bund, io l\'avevo scritto così!
                              Last edited by Smash; 04-12-13, 15:26.

                              Comment

                              Working...