Funzione Pyramiding!?!?

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

    #1

    Funzione Pyramiding!?!?

    Ciao ragazzi, sto provando a lavorare con gli ordini piramidali però vorrei che le posizioni successive entrassero solo quando determinate condizioni vengono soddisfatte! Ho utilizzato le funzioni DrawDown() - OpenPosition() - LastEntry e CurrentContract ma non sortiscono l\'effetto desiderato....suggerimenti??? Vi posto lo script

    Codice:
    INPUTS: @price(CLOSE), @periods(250)
    
    
    SET Zs = ZScore(CLOSE, @periods)
    
    
    # Primo Buy
    SET CrossUP1 =  CROSSOVER(Zs,-2)
    SET ContCrossUP1 = LASTIF(CrossUP1)
    SET BUY1 = ContCrossUP1 = 1
    
    
    
    
    # Secondo Buy
    SET CrossUP2 =  CROSSOVER(Zs,-3)
    SET ContCrossUP2 = LASTIF(CrossUP2)
    SET BUY2 = ContCrossUP2 = 1
    
    
    
    
    BUY1 OR BUY2
    Come potete vedere dallo screen vorrei entrare in martingala solo se Z-Score crossa dal basso verso l\'alto soglia -3 e rimane in posizione per almeno una barra (ContCrossUP2)

    Click image for larger version

Name:	ZS SIGNAL.jpg
Views:	1
Size:	108.8 KB
ID:	165118
    Last edited by CIVT; 27-09-14, 16:06.
  • bergamin
    Senior Member
    • Jan 2008
    • 1011

    #2
    Originariamente Scritto da CIVT
    Ciao ragazzi, sto provando a lavorare con gli ordini piramidali però vorrei che le posizioni successive entrassero solo quando determinate condizioni vengono soddisfatte! Ho utilizzato le funzioni DrawDown() - OpenPosition() - LastEntry e CurrentContract ma non sortiscono l\'effetto desiderato....suggerimenti??? Vi posto lo script

    Codice:
    INPUTS: @price(CLOSE), @periods(250)
    
    
    SET Zs = ZScore(CLOSE, @periods)
    
    
    # Primo Buy
    SET CrossUP1 =  CROSSOVER(Zs,-2)
    SET ContCrossUP1 = LASTIF(CrossUP1)
    SET BUY1 = ContCrossUP1 = 1
    
    
    
    
    # Secondo Buy
    SET CrossUP2 =  CROSSOVER(Zs,-3)
    SET ContCrossUP2 = LASTIF(CrossUP2)
    SET BUY2 = ContCrossUP2 = 1
    
    
    
    
    BUY1 OR BUY2
    Come potete vedere dallo screen vorrei entrare in martingala solo se Z-Score crossa dal basso verso l\'alto soglia -3 e rimane in posizione per almeno una barra (ContCrossUP2)

    [ATTACH=CONFIG]16415[/ATTACH]
    Stai usano i settaggi qui?
    File Allegati

    Comment

    • CIVT
      Senior Member
      • Dec 2009
      • 813

      #3
      Originariamente Scritto da bergamin
      Stai usano i settaggi qui?
      Si ma il problema è che non c\'è modo di condizionare l\'ingresso del secondo ordine. Pensavo che la funzione CurrentContract risolvesse il problema contando gli ingressi effettuati ma a quanto pare lavora solo in strategy e non in back test?
      Last edited by CIVT; 27-09-14, 21:26.

      Comment

      • Smash
        Senior Member

        • Feb 2012
        • 351

        #4
        Originariamente Scritto da CIVT
        Si ma il problema è che non c\'è modo di condizionare l\'ingresso del secondo ordine. Pensavo che la funzione CurrentContract risolvesse il problema contando gli ingressi effettuati ma a quanto pare lavora solo in strategy e non in back test?
        Ciao CIVT,
        non riesco a capire che cosa sono quei "NO" cerchiati nella figura che hai postato ...

        Comment

        • CIVT
          Senior Member
          • Dec 2009
          • 813

          #5
          Originariamente Scritto da Smash
          Ciao CIVT,
          non riesco a capire che cosa sono quei "NO" cerchiati nella figura che hai postato ...
          Ciao Marco! Quella è una indicazione che ho aggiunto per evidenziare quali ingressi potevo scartare verificando la preesistenza di un contratto già posizionato sulla soglia Z-Score -2

          Per chiarire meglio il discorso ti posto l\'esempio SELL che a quanto pare funziona meglio....

          Qui vengono effettuati tre SELL consecutivi rispettivamente con Z-Score 2.1395 il primo 1.9066 il secondo e 1.4976 il terzo....

          Click image for larger version

Name:	Screenshot 2014-09-28 00.06.03.jpg
Views:	1
Size:	128.2 KB
ID:	156285

          Potrei evitare di piramidare il secondo ed il terzo SELL aggiungendo un filtro sulle soglie dello Z-score tipo

          Codice:
          SELL1 AND ZScore(CLOSE, @periods) > 2 OR SELL2
          Vedi screen
          Click image for larger version

Name:	Screenshot 2014-09-28 00.11.34.jpg
Views:	1
Size:	127.1 KB
ID:	156286

          Il problema però rimane perchè A) lo script BUY non riconosce la soglia >-2 e B) funziona solo con Z-Score decrescente difatti superata la soglia 2 si riattiva il primo SELL e sono punto a capo....
          Last edited by CIVT; 28-09-14, 08:55.

          Comment

          • Francario Massimiliano
            Administrator
            • Jul 2008
            • 1033

            #6
            Salve,

            Originariamente Scritto da CIVT
            .....
            Il problema però rimane perchè A) lo script BUY non riconosce la soglia >-2 e B) funziona solo con Z-Score decrescente difatti superata la soglia 2 si riattiva il primo SELL e sono punto a capo....
            Se la parte Entry Short funziona correttamente, allora significa che per la parte Entry Long ci sono soltato segni o operatori invertiti. Ad esempio, se nello Short si usa soglia > 2, significa che nel Long bisognerà usare soglia < -2, perchè il segno dello Z-Score è negativo.
            Comunque, per limitare gli ingressi, si può usare la funzione CurrentContracts(), ad esempio in questo modo:


            Codice:
            BUY1 = <Condizione per la prima entrata long>
            BUY2 = <Condizione per le successive entrate long>
            
            (CurrentContracts() <= 0 AND BUY1) OR (CurrentContract() > 0 AND BUY2)
            
            ....
            
            SELL1 = <Condizione per la prima entrata short>
            SELL2 = <Condizione per le successive entrate short>
            
            (CurrentContracts() >= 0 AND SELL1) OR (CurrentContract() < 0 AND SELL2)
            Un suggerimento che posso dare è quello di utilizzare le parentesi per raggruppare le condizioni in AND ed OR, che altrimenti vengono valutate in sequenza così come si trovano nello script.

            Max Francario
            Manuale di beeTrader
            Manuale di Fiuto Beta

            Comment

            • CIVT
              Senior Member
              • Dec 2009
              • 813

              #7
              Originariamente Scritto da Francario Massimiliano
              Salve,



              Se la parte Entry Short funziona correttamente, allora significa che per la parte Entry Long ci sono soltato segni o operatori invertiti. Ad esempio, se nello Short si usa soglia > 2, significa che nel Long bisognerà usare soglia < -2, perchè il segno dello Z-Score è negativo.
              Comunque, per limitare gli ingressi, si può usare la funzione CurrentContracts(), ad esempio in questo modo:


              Codice:
              BUY1 = <Condizione per la prima entrata long>
              BUY2 = <Condizione per le successive entrate long>
              
              (CurrentContracts() <= 0 AND BUY1) OR (CurrentContract() > 0 AND BUY2)
              
              ....
              
              SELL1 = <Condizione per la prima entrata short>
              SELL2 = <Condizione per le successive entrate short>
              
              (CurrentContracts() >= 0 AND SELL1) OR (CurrentContract() < 0 AND SELL2)
              Un suggerimento che posso dare è quello di utilizzare le parentesi per raggruppare le condizioni in AND ed OR, che altrimenti vengono valutate in sequenza così come si trovano nello script.

              Max Francario
              Grande MAX IL RISOLUTORE!!! Hai risolto brillantemente il problema e lo hai fatto pure scrivendo di domenica!!! E pensare che avevo anche provato questa stringa con il CurrentContract ma senza l\'utilizzo delle parentesi ovviamente la funzione non lavorava correttamente!

              Ecco lo screen con le giuste entrate
              Click image for larger version

Name:	Screenshot 2014-09-29 06.05.06.jpg
Views:	1
Size:	126.5 KB
ID:	156290

              Comment

              • CIVT
                Senior Member
                • Dec 2009
                • 813

                #8
                Problema ottimizzazione variabili esterne

                Ciao Max, approfitto della tua disponibilità e pazienza x chiederti se ed eventualmente come migliorare la velocità delle ottimizzazioni perchè impiega tantissimo tempo per portare a termine anche le piu\' semplici, in questo screen per sole 25 ottimizzazioni ho atteso quasi 10 minuti....!!!
                Click image for larger version

Name:	lento.PNG
Views:	1
Size:	132.7 KB
ID:	156297

                Questo è il codice che stò utilizzando, forse ho creato qualche loop o cose strane?

                BUY SCRIPT
                Codice:
                INPUTS: @price(CLOSE), @periods(250), @IDA(2), @IDB(1), @ZsLow(2), @ZsHigh(3)
                
                
                SET ZsTotal =  ZScore(GetGlobalVar(@IDA) - GetGlobalVar(@IDB), @periods)
                
                
                # Primo Buy
                SET CrossUP1 =  CROSSOVER(ZsTotal,-@ZsLow)
                SET ContCrossUP1 = LASTIF(CrossUP1)
                SET BUY1 = ContCrossUP1 = 1
                
                
                
                
                # Secondo Buy
                SET CrossUP2 =  CROSSOVER(ZsTotal,-@ZsHigh)
                SET ContCrossUP2 = LASTIF(CrossUP2)
                SET BUY2 = ContCrossUP2 = 1
                
                
                
                
                (CurrentContracts() <= 0 AND BUY1) OR (CurrentContracts() > 0 AND BUY2)
                EXIT BUY
                Codice:
                SET ZsTotal =  ZScore(GetGlobalVar(@IDA) - GetGlobalVar(@IDB), @periods)
                ZsTotal > 0
                Idem x sell

                Comment

                • Francario Massimiliano
                  Administrator
                  • Jul 2008
                  • 1033

                  #9
                  Salve,

                  Originariamente Scritto da CIVT
                  Ciao Max, approfitto della tua disponibilità e pazienza x chiederti se ed eventualmente come migliorare la velocità delle ottimizzazioni perchè impiega tantissimo tempo per portare a termine anche le piu\' semplici, in questo screen per sole 25 ottimizzazioni ho atteso quasi 10 minuti....!!!
                  [ATTACH=CONFIG]16429[/ATTACH]

                  Questo è il codice che stò utilizzando, forse ho creato qualche loop o cose strane?

                  BUY SCRIPT
                  Codice:
                  INPUTS: @price(CLOSE), @periods(250), @IDA(2), @IDB(1), @ZsLow(2), @ZsHigh(3)
                  
                  
                  SET ZsTotal =  ZScore(GetGlobalVar(@IDA) - GetGlobalVar(@IDB), @periods)
                  
                  
                  # Primo Buy
                  SET CrossUP1 =  CROSSOVER(ZsTotal,-@ZsLow)
                  SET ContCrossUP1 = LASTIF(CrossUP1)
                  SET BUY1 = ContCrossUP1 = 1
                  
                  
                  
                  
                  # Secondo Buy
                  SET CrossUP2 =  CROSSOVER(ZsTotal,-@ZsHigh)
                  SET ContCrossUP2 = LASTIF(CrossUP2)
                  SET BUY2 = ContCrossUP2 = 1
                  
                  
                  
                  
                  (CurrentContracts() <= 0 AND BUY1) OR (CurrentContracts() > 0 AND BUY2)
                  EXIT BUY
                  Codice:
                  SET ZsTotal =  ZScore(GetGlobalVar(@IDA) - GetGlobalVar(@IDB), @periods)
                  ZsTotal > 0
                  Idem x sell
                  l\'ottimizzazione impiega molto tempo perchè nello script sono presenti funzioni di stato della strategia, in questo caso CurrentContracts().
                  Quando sono presenti queste funzioni, il backtest viene eseguito barra per barra al posto che in un unico passaggio, in pratica lo script al posto di lavorare in modo vettoriale lavora in modo ibrido vettoriale/sequenziale.
                  Ad esempio, se il grafico storico ha 1500 barre, fare 35 ottimizzazioni equivale ad eseguire lo script 1500 * 35 = 52500 volte.
                  Se lo scopo dell\'ottimizzazione è quello di individuare i migliori livelli possibili di Z-Score, nell\'OverSpread sono già presenti i valori ottimali.

                  Max Francario
                  Last edited by Francario Massimiliano; 01-10-14, 12:28.
                  Manuale di beeTrader
                  Manuale di Fiuto Beta

                  Comment

                  • CIVT
                    Senior Member
                    • Dec 2009
                    • 813

                    #10
                    Originariamente Scritto da Francario Massimiliano
                    Salve,



                    l\'ottimizzazione impiega molto tempo perchè nello script sono presenti funzioni di stato della strategia, in questo caso CurrentContracts().
                    Quando sono presenti queste funzioni, il backtest viene eseguito barra per barra al posto che in un unico passaggio, in pratica lo script al posto di lavorare in modo vettoriale lavora in modo ibrido vettoriale/sequenziale.
                    Ad esempio, se il grafico storico ha 1500 barre, fare 35 ottimizzazioni equivale ad eseguire lo script 1500 * 35 = 52500 volte.
                    Se lo scopo dell\'ottimizzazione è quello di individuare i migliori livelli possibili di Z-Score, nell\'OverSpread sono già presenti i valori ottimali.

                    Max Francario
                    Grazie per la conferma, ho verificato ed effettivamente senza currentcontract torna la ferrari di prima a questo punto ottimizzerò solo il primo ingresso che è anche il piu\' importante! Purtroppo non posso utilizzare i valori ottimizzati dall\'overspread perchè sui grafici non riesco ancora a calcolare precisamente lo Z-Score totale...

                    Comment

                    Working...