Zero su zero

Viewing 15 posts - 1 through 15 (of 27 total)
  • #102564

    Salve a tutti.

    Vorrei sapere quale valore PRT assegna ad una variabile, definita attraverso un rapporto, quando sia il numeratore che il denominatore assumono il valore zero.

    E’ possibile che il valore di tale variabile rimanga eguale a quello assunto un periodo prima?

    Mi capita qualcosa del genere e vorrei sapere se la cosa è successa anche a voi.

    Grazie.

     

    #102565

    Fai un esempio concreto, anche perché avere zero sia al numeratore che al denominatore genera solitamente un errore di “divisone per zero” (0 diviso 0 non è ammesso).

    #102571

    In realtà ho sbagliato: è solo il denominatore che si annulla. Però l’errore non viene generato ed il valore assunto dalla variabile rimane eguale a quello di un periodo precedente. Come se fosse “congelato”.

    La variabile il cui denominatore va a zero si chiama PiccoPercento ed è definita in questo modo:

    PiccoPercento = (Higher – close)/ Higher

    La variabile che va a zero, in determinate condizioni, è Higher.

     

    #102576

    Non è possibile replicare il problema con i dati di cui sopra, quindi non so dirti niente nel tuo caso specifico.

    In ogni caso una divisione per zero dovrebbe generare errori e, se non vengono segnalati, è comunque errato il calcolo. Ad esempio se il denominatore è 0, può darsi che l’espressione non venga risolta e la variabile a cui viene assegnato il risultato mantenga il valore della candela precedente.

     

    #102577

    La divisione per zero non viene sempre riportata in ProOrder.

    #102580

    Allora, vado per ordine.

    C’è un indicatore che mi segnala picchi e valli del prezzo di chiusura. Un picco, per essere confermato, necessita di un ritracciamento di una certa percentuale (variabile percent) di ritracciamento. Allo stesso modo accade per la valle.

    L’indicatore è applicato allo strumento FGBL, time frame 1 ora, 10.000 unità.

    Anche sull’indicatore ho un (piccolo) problema. Pertanto, prima di vedere il sistema, possiamo vedere l’indicatore per capire dov’è l’errore?

    Grazie.

     

     

    #102581

    Serve il codice che pensi possa essere fonte dell’errore.

    #102583

     

    #102585

    Come scrivevo sopra, l’indicatore è applicato allo strumento FGBL, time frame 1 ora, 10.000 unità.

    Il problema è il seguente: delle 43 occorrenze, picchi e valli, ne sbaglia una: quella del 24/10/2016 ore 8:00. La freccia è invece posizionata sulla candela delle 10:00, sempre del 24/10/2016.

    E’ un errore in quanto il prezzo di chiusura più elevato è quello della candela delle 8:00 e non quello della candela delle 10:00.

    Allego un’immagine.

     

     

    #102597

    >> Per chiarezza dei messaggi sul Forum di Prorealcode, separate le parti del vostro codice usando il pulsante per l’inserimento del testo del codice. <<
    Grazie.

    #102600

    Va bene,

    grazie.

     

    #102631

    Se commenti le righe 2, 7, 17, 25, 35 e 38 (quelle specifiche per ProBuilder) e aggiungi queste (specifiche per ProOrder):

    otterrai una strategia e, facendo il backtest, potrai vedere il valore delle singole variabili candela per candela nel riquadro apposito.

    Noterai (vedi anche la mia foto allegata) che alla chiusura della candela precedente la variabile DIREZIONE è > 0, quindi alla candela a cui ti riferisci le righe da 4 a 9 non vengono eseguite.

    Una cosa che non ho capito, perché per LOWER moltiplichi CLOSE * 100 ?

    Inoltre, perché alla riga 1 non scrivi semplicemente:

    evitando, alle successive righe 12 e 30, di fare la divisione?  Il risultato va bene comunque, però è più semplice. Non è comunque questo il problema.

    Se mi spieghi la logica dell’indicatore, cosa vuoi che faccia esattamente, forse posso esserti di maggiore aiuto.

     

     

     

     

    #102663

    Ho visto solo ora la tua risposta, Roberto.

    Non sono davanti al PC e, pertanto, non posso lanciare la piattaforma. Spero questa sera.

    Per il momento ti ringrazio, soprattutto per i suggerimenti indicati.

    Inoltre, come dicevo spero questa sera, risponderò anche alle tue richieste di chiarimento. Con piacere.

    Grazie ancora, Roberto.

    🙂

     

     

    #102810

    Ciao Roberto, eccomi qui. Questi giorni sono un po’ …

    … infernali per me! Spero di aver più tempo questa sera.

    Intanto provo a rispondere alle tue domande.

    In merito alla variabile percent hai perfettamente ragione: il tuo suggerimento sicuramente contribuisce a migliorare il codice.

    Ora provo a spiegarti la logica dell’indicatore (e nel contempo, rispondo anche alla domanda sulla variabile Lower).

    Lo scopo è quello di segnalare massimi (picchi) e minimi (valli) dei prezzi di chiusura di un’attività finanziaria su qualunque time frame. Che caratteristiche devono avere questi punti di estremo?

    Ad esempio, un picco, per essere tale, quali caratteristiche deve avere? Due:

    a. deve essere maggiore, rispetto al minimo (valle) precedente, almeno della percentuale percent;

    b. deve essere superiore, rispetto al minimo (valle) successivo, almeno della percentuale percent.

    Quando l’indicatore intercetta un tale massimo pone, sulla barra o candela corrispondente, una freccia orientata verso il basso di colore rosso, ad una distanza di rge/2 dal massimo di tale candela.

    Quando l’indicatore intercetta, invece, un minimo, pone, sotto la barra o candela corrispondente, una freccia orientata verso l’alto di colore verde, ad una distanza di rge/2 dal minimo di tale candela.

    Ora, analizziamo il codice.

    Le prime tre righe dovrebbero essere chiare.

    Alla riga 4 incontriamo la variabile direzione. All’inizio tale variabile è nulla e, quindi, sono simultaneamente soddisfatte le condizioni testate in riga 4 e in riga 22: ciò in quanto il programma, inizialmente, non sa se cercare un massimo o un minimo.

    In riga 5 pone, nella variabile Higher, il massimo tra il prezzo di chiusura e la variabile Higher stessa. Dal momento che, inizialmente, Higher è nulla, in Higher verrà copiato il valore della close della prima barra. Nelle barre successive, invece, ProBuilder andrà a porre, in Higher, il valore della close della barra corrente solo se questo è maggiore di quanto contenuto nella variabile Higher. In questo modo, ogni volta che troviamo una close più alta, la memorizziamo in Higher andando a “ricoprire” il valore precedente.

    In riga 6 confrontiamo il valore di Higher della barra corrente con quello della barra immediatamente precedente. Se sono diversi, memorizziamo (in riga 7) nella variabile PiccoBarra l’ordine della barra corrente. Se sono diversi vuol dire che il valore di Higher della barra in corso è sicuramente maggiore rispetto a quello della barra precedente; ciò in quanto l’aggiornamento di Higher viene fatto tutte le volte che si trova una close maggiore del valore di Higher della barra precedente. Abbiamo trovato un possibile “candidato” per il picco che stiamo cercando e ne memorizziamo il valore (close) in Higher e il tempo (barindex) in piccoBarra.

    Le righe 8 e 9 chiudono i due cicli.

    In riga 11 calcoliamo la variazione percentuale della close corrente rispetto al valore assunto dalla variabile Higher e poniamo tale variazione in PiccoPercento. Ed in riga 12 inizializziamo una variabile logica: NuovoPicco. Questa variabile sarà vera quando PiccoPercento avrà superato la percentuale impostata (nell’esempio del codice postato è l’1%).

    In riga 14 testiamo il valore della variabile logica NuovoPicco. Se questa è vera vuol dire che il nostro “candidato” picco è divenuto a tutti gli effetti un nuovo picco e lo confermiamo. Se la condizione è verificata, pertanto, eseguiamo tre azioni:

    1. azzeriamo la variabile Higher che dovrà essere pronta per contenere il valore del successivo picco;

    2. poniamo direzione eguale ad 1 in modo da testare, nel prosieguo delle barre successive, soltanto la presenza di una Valle;

    3. Disegniamo la freccia secondo le specifiche prima indicate.

    In riga 21 c’è una particolarità che però è importante ai fini del buon funzionamento del programma. La variabile Lower, deputata a contenere il valore della close di una Valle, viene inizializzata non a zero ma al valore della close corrente. Se invece la inizializzassimo a zero, il programma non riuscirebbe a trovare nessuna Valle: ciò in quanto non abbiamo close negative!

    In riga 22 eseguiamo il test della variabile direzione: se questo è non positivo vuol dire che dobbiamo cercare una Valle.

    In riga 23, nella variabile Lower, viene posto il minimo tra il prezzo di chiusura e la variabile Lower stessa. Dal momento che, inizialmente, Lower è pari alla close della prima barra, in Lower verrà copiato il valore della close della barra in esame solo se questa risulta inferiore. In questo modo, ogni volta che troviamo una close più bassa, la memorizziamo in Lower andando a sostituire il valore precedente.

    A questo punto il resto del programma dovrebbe essere chiaro. Una sola ed ultima specificazione in merito alla riga 33. Questa è la corrispondente della riga 15. Solo che in questo caso dobbiamo reinizializzare la variabile Lower, dopo aver trovato una Nuova Valle, ad un valore teoricamente infinito. Dal momento che questo non è possibile, l’ho inizializzata ad una valore comunque molto alto.

    Spero di non aver tralasciato nulla.

    Ora devo scappare perchè sono in gran ritardo.

    Grazie Roberto, per il tempo che mi vorrai dedicare.

    Una buona giornata.

    🙂

     

     

     

     

     

     

    #102839

    Se hai seguito le mie istruzioni avrai notato che il giorno ed ora cui ti riferisci come “errati” (perché non c’è la freccia, il 26/10/2016 alle 08:00), le righe da 5 ad 8 NON possono essere esguite in qanto DIREZIONE=1. Quindi la chiusura della candela delle 10 è più alta dell’HIGHER precedente e di quella delle 09:00, quindi NUOVOPICCO è vero e stampa la freccia.

    Vedo che NUOVOPICCO è vero anche sulla candela delle ore 10 del 27/10/2016, perché deve essere vero, se va in basso?

Viewing 15 posts - 1 through 15 (of 27 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login