Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 Valore Medio e Deviazione Standard
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

andrealucidi
Nuovo Utente

4 Posts

Posted - 07 September 2008 :  14:03:21  Show Profile  Reply with Quote
Buongiorno,
dovrei risolvere questo tipo di problema:
come calcolare il valore medio e la deviazione standard della differenza di due medie mobili, più in generale non riesco a comprendere la logica di indirizzamento di un array dati tipo Moveav, ad esempio come è possibile estrarre un singolo valore numerico facente riferiemento ad un determinato bin ?
In particolare mi interessa calcolare la media e Std della variabile Veloc
EMA0 = ((Moveav(High, Durata, "E", 0) + Moveav(Low, Durata, "E", 0)) / 2)
EMA3 = ((Moveav(High, Durata, "E", 0, 2) + Moveav(Low, Durata, "E", 0, 2)) / 2)
Veloc = (EMA3 - EMA0) / 3

Grazie !

SupportoTecnico
Forum Admin

1261 Posts

Posted - 07 September 2008 :  18:37:40  Show Profile  Reply with Quote
Le funzioni dati ed indicatori funzionano in questo modo:

- Se utilizzate in espressioni l'inteprete del linguaggio prende il valore del periodo in elaborazione (quindi un valore singolo)

- Se utilizzate come argomenti di una funzione, l'interprete passa alla funzione tutta la serie dati (quindi NON un singolo valore).

- Se desideri un determinato valore della serie dati allora devi utilizzare la funzione "Value". A questa funzione viene passato l'array dati e l'offset rispetto al periodo in elaborazione.
In pratica, se vuoi il valore della media mobile del periodo precedente devi scrivere:

Value(MoveAve(..parametri vari..), -1)

----------------

Per risolvere invece il tuo problema e calcolare la deviazione standard ti suggerisco di costruire un indicatore utente con il codice da te scritto in questo post. L'indicatore utente alla fine sarà ovviamente il valore di Veloc.

Una volta creato l'indicatore, puoi usare la funzione stdev per calcolarne la deviazione standard.



Go to Top of Page

andrealucidi
Nuovo Utente

4 Posts

Posted - 13 September 2008 :  17:42:12  Show Profile  Reply with Quote
Il calcolo della devizione standard e del valore medio lo vorrei calcolare come se Veloc fosse un variabile alatoria discrera ( campionata daily) e conseguentemente come risultato vorrei ottenere due valori numerici il valore medio e la deviazione standard della variabile Veloc. L'equivalente in excel viene fatto con le funzioni MEDIA e DEV.ST

Grazie per il supporto!
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 13 September 2008 :  20:44:17  Show Profile  Reply with Quote
Appunto e dove sta il problema?
Facendo come ti ho suggerito ottieni proprio quello che vuoi tu!
Go to Top of Page

andrealucidi
Nuovo Utente

4 Posts

Posted - 15 September 2008 :  23:24:45  Show Profile  Reply with Quote
Ok mi torna !

L'obiettivo del mio indicatore, del calcolo del valore medio e della devizione standard è quello di definire due soglie (due bande) e successivamente normalizzare la variabile Veloc quando supera la soglia inferiore e superiore al valore delle soglie stesse. Il codice di seguito riportato, però, ha problemi nel gestire l'indicatore Velocity3 (ex Veloc) dopo l'utilizzo della funzione Stdev, infatti, impiegando un' opportuna Return ho notato che il codice non restituisce tutti i valori di Velocity3 ma soltanto l'ultimo.
, conseguentemente gli if successivi non vengono eseguiti correttamente

Function Main()
Dim Media As Numeric
Dim St As Numeric
Dim SogliaL As Numeric
Dim SogliaH As Numeric
Media = sum(Velocity3, TotBar) / TotBar
St = Stdev(Velocity3, TotBar)
SogliaL = Media - St
SogliaH = Media + St

if (Velocity3 > SogliaH) then

if (Velocity3 < SogliaL)
Return Velocity3
else
if (Velocity3 >= SogliaH) then
Return SogliaH
else
if (Velocity3 <= SogliaL)
Return SogliaL
endif
endif
endif
endif

Endfunction

Cosa c'è di sbagliato e quale può essere la possibile alternativa?
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 16 September 2008 :  00:47:25  Show Profile  Reply with Quote
Il problema sta sicuramente su queste due righe:

Media = sum(Velocity3, TotBar) / TotBar
St = Stdev(Velocity3, TotBar)

Non so cosa tu voglia calcolare esattamente ma il modo in cui hai calcolato la Media per me non ha senso.

In pratica, in italiano hai scritto:
- calcolami la somma di tutti i valori di Velocity3 degli ultimi totbar periodi e poi dividili per totbar periodi.


Considerando che:

- TotBar è il numero totale di periodi della serie storica del titolo (tutti dal primo all'ultimo)

- che se i periodi precedenti al periodo in elaborazione sono meno di totbar (e cioè praticamente sempre), la somma verrà fatta con i periodi disponibili.

In pratica, supponendo di avere 1000 periodi e che il periodo in elaborazione sia ad esempio il decimo avrai la somma di velocity3 dei primi 9 periodi diviso 1000. Non ha senso!

Non è che volevi usare CurrentBar ?
Go to Top of Page

andrealucidi
Nuovo Utente

4 Posts

Posted - 16 September 2008 :  11:20:40  Show Profile  Reply with Quote
Il mio obiettivo e quello di calcolare il valore medio di un vettore inteso come la media dell' array costituito da tutti gli N elementi, il risultato che mi aspetto è un numero reale, e non un array campionato daily.
Se utilizzassii CurrentBar avrei come risultato un array delle medie calcolate di volta in volta sul vettore passato come argomento.

Con riferimento al linguaggio di programmazione C l'indicatore Velocity3 non è un numero ma un array di numeri reali campionato daily e la media calcolato su tutti gli elementi del vettore sarebbe la sommatoria di tutti gli elementi dell'array diviso la lunghezza dell'array stesso e il risultato è un tipo real


Spero di essere riuscito a spiegare il mio problema.
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 16 September 2008 :  13:11:08  Show Profile  Reply with Quote
Allora non puoi utilizzare la funzione SUM.

Devi utilizzare un paio di cicli for:

For i = 0 to CurrentBar - 1
Media = Media + value(Velocity3, -i)
Next i
For i = CurrentBar + 1 to TotBar
Media = Media + value(Velocity3, i - CurrentBar)
Next i
Media = Media / TotBar


Purtroppo al momento non c'è una funzione che ti restituisce il valore di un periodo preciso.. la funzione value ci permette di indicare un offset rispetto alla posizione attuale (currentbar).


Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07