1. #1

    Data Registrazione
    Dec 2009
    Messaggi
    811

    Question 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

    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)

    ZS SIGNAL.jpg
    Ultima modifica di CIVT; 27-09-14 alle 16:06

  2. #2

    Data Registrazione
    Jan 2008
    Messaggi
    897
    Citazione Originariamente Scritto da CIVT Visualizza Messaggio
    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

    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)

    ZS SIGNAL.jpg
    Stai usano i settaggi qui?
    Immagini Allegate Immagini Allegate

  3. #3

    Data Registrazione
    Dec 2009
    Messaggi
    811
    Citazione Originariamente Scritto da bergamin Visualizza Messaggio
    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?
    Ultima modifica di CIVT; 27-09-14 alle 21:26

  4. #4

    Data Registrazione
    Feb 2012
    Località
    Pisa
    Messaggi
    351
    Citazione Originariamente Scritto da CIVT Visualizza Messaggio
    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 ...

  5. #5

    Data Registrazione
    Dec 2009
    Messaggi
    811
    Citazione Originariamente Scritto da Smash Visualizza Messaggio
    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....

    Screenshot 2014-09-28 00.06.03.jpg

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

    SELL1 AND ZScore(CLOSE, @periods) > 2 OR SELL2
    Vedi screen
    Screenshot 2014-09-28 00.11.34.jpg

    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....
    Ultima modifica di CIVT; 28-09-14 alle 08:55

  6. #6
    L'avatar di Francario Massimiliano
    Data Registrazione
    Jul 2008
    Messaggi
    730
    Salve,

    Citazione Originariamente Scritto da CIVT Visualizza Messaggio
    .....
    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:


    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

  7. #7

    Data Registrazione
    Dec 2009
    Messaggi
    811
    Citazione Originariamente Scritto da Francario Massimiliano Visualizza Messaggio
    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:


    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
    Screenshot 2014-09-29 06.05.06.jpg

  8. #8

    Data Registrazione
    Dec 2009
    Messaggi
    811

    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....!!!
    lento.PNG

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

    BUY SCRIPT
    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
    SET ZsTotal =  ZScore(GetGlobalVar(@IDA) - GetGlobalVar(@IDB), @periods)
    ZsTotal > 0
    Idem x sell

  9. #9
    L'avatar di Francario Massimiliano
    Data Registrazione
    Jul 2008
    Messaggi
    730
    Salve,

    Citazione Originariamente Scritto da CIVT Visualizza Messaggio
    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....!!!
    lento.PNG

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

    BUY SCRIPT
    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
    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

  10. #10

    Data Registrazione
    Dec 2009
    Messaggi
    811
    Citazione Originariamente Scritto da Francario Massimiliano Visualizza Messaggio
    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...

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
Contattaci

Chiama gli esperti
+39 0425 792923

Chiamaci
Email

Richiedi informazioni via E-MAIL
info@playoptions.it

Scrivici
Nostri Uffici

Vieni a trovarci
45100 Rovigo

Contattaci

Serve Aiuto?

Contattaci per maggiori informazioni.

Denis MorettoSpecialista Finanziario
Contattaci