Author |
Topic  |
|
luigi
Nuovo Utente
45 Posts |
Posted - 31 August 2008 : 22:03:59
|
Salve e buone ferie fatte, vorrei farVi due domande: 1) per costruire (o progettare) un indicatore che è composto da sei medie un pò particolari, si può riuscirci con un solo indicatore ? mi spiego meglio, una volta calcolate le sei medie in progettazione, come faccio a visualizzarle tutte insieme usando un solo indicatore visto che al return posso dare un solo valore? (attualmente utilizzo sei indicatori, da inserire ogni volta che apro un grafico nuovo...); 2) nel comporre un trading system volendo calcolare la deviazione standard di sei medie, ho dichiarato un array con le sei medie, però se provo a fare il test arrivato al punto esce fuori dal programma, allego la porzione di codice: 'inizializzo l'array delle Ema EMA(0) = Ema1 EMA(1) = Ema2 EMA(2) = Ema3 EMA(3) = Ema4 EMA(4) = Ema5 'Calcolo la deviazione standard delle Ema DevS = Stdev(EMA(), 150) grazie dei consigli. luigi |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 01 September 2008 : 11:37:15
|
1) come hai già intuito non è possibile disegnare diversi indicatori contemporaneamente a partire da uno stesso script. Return ritorna solo un valore. Quindi: - Se il problema è aggiungere nello stesso istante n. indicatori al grafico del titolo potresti salvarti un layout (aspetto) e aprire i grafici con quel layout. - Se il problema è evitare di scrivere n. script differenti allora potresti creare una property nell'indicatore con la funzione di definire quale valore lo script deve ritornare.
2) alla funzione Stdev hai passato il valore "150" al parametro che definisce i periodi su cui calcolare la deviazione standard, quando in realtà hai un array composto da soli 5 elementi. La deviazione non può essere calcolata. Scrivere: EMA(0) = Ema1 significa assegnare all'elemento zero di EMA, il valore che Ema1 assume nel periodo corrente (in elaborazione) e non di tutta la serie di valori dell'indicatore Ema1.
|
 |
|
luigi
Nuovo Utente
45 Posts |
Posted - 02 September 2008 : 00:39:28
|
Grazie dell'aiuto, ora ho capito, in effetti ho delle difficoltà a calcolare l'array EMA, la difficoltà consiste nel calcolare il valore delle Ema(1,2,3,4,5) per un periodo all'indietro a partire da -150 alla data odierna, così facendo otterrei i dati per il calcolo della deviazione std; Ema1 = Value((moveAv(close, 9, "E")), - 1) * (1 - 0.18522) + close * 0.18522 Ema2 = Value((moveAv(close, 6, "E")), - 1) * (1 - 0.252264) + close * 0.252264 Ema3 = Value((moveAv(close, 8, "E")), - 1) * (1 - 0.210853) + close * 0.210853 Ema4 = Value((moveAv(close, 11, "E")), - 1) * (1 - 0.163799) + close * 0.163799 Ema5 = Value((moveAv(close, 6, "E")), - 1) * (1 - 0.273598) + close * 0.273598 'Calcolo della media delle Ema MEma = (Ema1 + Ema2 + Ema3 + Ema4 + Ema5) / 5 'inizializzo l'array delle Ema EMA(0) = Ema1 EMA(1) = Ema2 EMA(2) = Ema3 EMA(3) = Ema4 EMA(4) = Ema5 'Calcolo la deviazione standard delle Ema DevS = Stdev(EMA(), 150) un aiuto grazie... |
 |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 02 September 2008 : 12:32:56
|
Purtroppo ho una "cattiva" notizia: - è stato verificato che ci sono dei problemi con la funzione stdev se come primo argomento viene passata una variabile array, e quindi proprio il tuo caso.
La soluzione (che tra l'altro è pure più semplice della precedente), è costruire un indicatore utente che rappresenti la serie dati da passare alla funzione stdev. |
 |
|
luigi
Nuovo Utente
45 Posts |
Posted - 16 September 2008 : 23:57:25
|
quote: Originally posted by luigi
Ema1 = Value((moveAv(close, 9, "E")), - 1) * (1 - 0.18522) + close * 0.18522 Ema2 = Value((moveAv(close, 6, "E")), - 1) * (1 - 0.252264) + close * 0.252264 Ema3 = Value((moveAv(close, 8, "E")), - 1) * (1 - 0.210853) + close * 0.210853 Ema4 = Value((moveAv(close, 11, "E")), - 1) * (1 - 0.163799) + close * 0.163799 Ema5 = Value((moveAv(close, 6, "E")), - 1) * (1 - 0.273598) + close * 0.273598
ho ancora qualche difficoltà..., le Ema calcolate dovrei vedere quale è la piu bassa/alta di valore(alla data attuale) e se incrocia il prezzo di chiusura, però non riesco a combinarle in un array ed utilizzare la funzione crossabove, potete aiutarmi ? grazie
|
 |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 17 September 2008 : 12:52:38
|
Per vedere quale è più alta/bassa nel periodo in elaborazione ti basterebbero le varie formule da te già scritte (visto che il confronto avverrebbe tra dati singoli).
Invece per il cross ti ci vuole l'intera serie dati. Quindi anche questa volta il modo più rapido e performante per risolvere il problema è creare n. indicatori diversi, ognuno dei quali rappresenta una ema differente. |
 |
|
luigi
Nuovo Utente
45 Posts |
Posted - 17 September 2008 : 15:17:00
|
l'indicatori li ho creati nella seguente maniera: Function Main() Dim Ema1 As Numeric Ema1 = Value((moveAv(close, 9.797959, "E")), - 1) * (1 - 0.18522) + close * 0.18522 Return Ema1 EndFunction sui grafici funzionano, ma sui trading system mi viene qualche dubbio... mentre il trading system seguente: .......... bresult = false
Ema1 = Value((moveAv(close, 9.797959, "E")), - 1) * (1 - 0.18522) + close * 0.18522 Ema2 = Value((moveAv(close, 6.928203, "E")), - 1) * (1 - 0.252264) + close * 0.252264 Ema3 = Value((moveAv(close, 8.485281, "E")), - 1) * (1 - 0.210853) + close * 0.210853 Ema4 = Value((moveAv(close, 11.21007, "E")), - 1) * (1 - 0.163799) + close * 0.163799 Ema5 = Value((moveAv(close, 6.310004, "E")), - 1) * (1 - 0.273598) + close * 0.273598 'Calcolo del massimo delle Ema if Ema1 > Ema2 then Max = Ema1 else Max = Ema2 endif if Ema3 > Max Max = Ema3 endif if Ema4 > Max Max = Ema4 endif if Ema5 > Max Max = Ema5 endif 'Calcolo del minimo delle Ema if Ema1 < Ema2 then Min = Ema1 else Min = Ema2 endif if Ema3 < Min Min = Ema3 endif if Ema4 < Min Min = Ema4 endif if Ema5 < Min Min = Ema5 endif if crossabove(close, Ema5) then bresult = true PrAcq = open( + 1) price PrAcq pdStopLossLong2 = open( + 1) - open( + 1) * 2 / 100 pp = false endif return bresult EndFunction non mi si verifica mai... poi in questo punto dovrei mettere il min delle 5 ema if crossabove(close, Ema5) then ma non sò come "dirglielo", mi potete "indirizzare" sulla buona strada ? grazie |
 |
|
SupportoTecnico
Forum Admin
1261 Posts |
Posted - 17 September 2008 : 17:27:29
|
Prima di tutto non devi chiamare le variabili che utilizzi nel trading system con lo stesso nome degli indicatori che hai creato!
Se fossi al posto dell'interprete del linguaggio e avessi una variabile che ha lo stesso nome di un indicatore quale dei due sceglieresti? L'interprete sceglie sempre la variabile.
Quindi anche nell'istruzione:
if crossabove(close, Ema5) then
non è passata la serie storica di Ema5 ma il valore della variabile!
Quindi in generale non utilizzare mai come nomi di variabili i nomi che hai già usato per gli indicatori o nomi di funzioni => come ad esempio "Min".
La soluzione è cambiare i nomi alle tue variabili Ema1, Ema2 ecc... Min ecc..
|
 |
|
luigi
Nuovo Utente
45 Posts |
Posted - 17 September 2008 : 18:49:09
|
innanzi tutto, grazie dell'aiuto, fatto quanto suggerito, ora però il messaggio è "valore non recuperabile"... a cosa è dovuto? PERO' SEMBRA FUNZIONARE LO STESSO
|
Edited by - luigi on 17 September 2008 23:04:47 |
 |
|
|
Topic  |
|
|
|