Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 array

Note: You must be registered in order to post a reply.

Screensize:
UserName:
Password:
Format Mode:
Format: BoldItalicizedUnderlineStrikethrough Align LeftCenteredAlign Right Horizontal Rule Insert HyperlinkInsert Email Insert CodeInsert QuoteInsert List
   
Message:

* HTML is OFF
* Forum Code is ON
Smilies
Smile [:)] Big Smile [:D] Cool [8D] Blush [:I]
Tongue [:P] Evil [):] Wink [;)] Clown [:o)]
Black Eye [B)] Eight Ball [8] Frown [:(] Shy [8)]
Shocked [:0] Angry [:(!] Dead [xx(] Sleepy [|)]
Kisses [:X] Approve [^] Disapprove [V] Question [?]

   
   

T O P I C    R E V I E W
kairen Posted - 09 April 2004 : 01:04:55
Potete spiegarmi perche non funziona



Property Periodo as Numeric
Default (14)
Range (1, 400)
Endproperty

Dim SumD1 as Numeric = 0
Dim SumD12 as Numeric = 0
Dim SumD2 as Numeric = 0
Dim SumD22 as Numeric = 0
Dim SumD1D2 as Numeric = 0
Dim Cnt as Numeric = 0

Function Corr(Data1 as Numeric(), Data2 as Numeric()) as Numeric
Dim New as Numeric
Dim Old as Numeric
Dim Ix as Numeric
Dim Num as Numeric = 0
Dim Den as Numeric = 1
Dim Ret as Numeric
New = CurrentBar
Old = CurrentBar - Periodo

If Old <= 0 then
for Ix = 1 to Periodo step 1
SumD1 = SumD1 + Data1(Ix)
SumD2 = SumD2 + Data2(Ix)
SumD12 = SumD12 + Data1(Ix) * Data1(Ix)
SumD22 = SumD22 + Data2(Ix) * Data2(Ix)
SumD1D2 = SumD1D2 + Data1(Ix) * Data2(Ix)
next Ix
else
SumD1 = SumD1 - Data1(Old)
SumD1 = SumD1 + Data1(New)
SumD2 = SumD2 - Data2(Old)
SumD2 = SumD2 + Data2(New)
SumD12 = SumD12 - Data1(Old) * Data1(Old)
SumD12 = SumD12 + Data1(New) * Data1(New)
SumD22 = SumD22 - Data2(Old) * Data2(Old)
SumD22 = SumD22 + Data2(New) * Data2(New)
SumD1D2 = SumD1D2 - Data1(Old) * Data2(Old)
SumD1D2 = SumD1D2 + Data1(New) * Data2(New)
Endif

Num = Abs(SumD1D2 - 1 / Periodo * SumD1 * SumD2)
Den = Abs((SumD12 - SumD1 * SumD1 / Periodo) * (SumD22 - SumD2 * SumD2 / Periodo))
Den = Sqr(Den)
Ret = (Num * Num) / (Den * Den)
Return Ret

Endfunction

Function Main()
Dim X as Numeric()
Dim Y as Numeric()
Dim I1 as Numeric
Dim Rt as Numeric
Cnt = Cnt + 1
x(Cnt) = currentbar
y(Cnt) = close(0)
if CurrentBar < Periodo then
Return 0
Else
Return Corr(X, Y)
Endif
Endfunction

Quando tento di accedere all'array in posizione Old mi da sempre
risultato uguale a zero

Quello che voglio fare ? sottrai a SumD1,SumD2,... il valore degli array nella posizione che ? uscita dal calcolo.
Somma a SumD1,SumD2 la posizione che ? appena entrata nel calcolo
Questo per velocizzare l'elaborazione dell'indice di correlazione altrimenti ci mette tempi "biblici".

8   L A T E S T    R E P L I E S    (Newest First)
SupportoTecnico Posted - 12 April 2004 : 14:01:27
Il linguaggio ora come ora non permette di costruire matrici.

Non puoi scrivere una cosa del genere per individuare un elemento:

Data1(1,5)

Ma nel tuo caso perch? non passi all'indicatore MyRoc l'array giusto?

Comunque, l'unica soluzione ? avere n array per le varie attivit? che ti servono. Nel tuo caso uno per la chiusura e l'altro per l'High.

kairen Posted - 12 April 2004 : 07:51:04
Altra domanda riguardo agli array

E' possibile definire una matrice ?
Spiego quello che voglio fare:
Ho costruito un modulo Mio_modulo che utilizza a livello di modulo alcune variabili di cui due sono array e altre sono delle variabili intermedie numeriche.
Adesso ho bisogno di utilizzare Mio_modulo per due volte all'interno di un indicatore pi? complesso.
La soluzione 1 ? quella di prendere il Mio_modulo e duplicarlo per il numero di volte che serve
La soluzione 2 ? quella di utilizzare una matrice per gli array e n array per le variabili numeriche. e l'occorrenza viene passata alle funzioni per calcolare l'indicatore.
Mi spiego con un esempio.
Mi sono costruito una versione personalizzata della funzione Roc costruita nel seguente modo.
-----------
Data1(Ubound(Data1)+1)) = close

Function MyRoc(Periodo as Numeric) as Numeric
Dim New as Numeric
Dim Old as Numeric
New = Ubound(Data1)
Old = New - Periodo
if Old < 1 then
Return 0
else
if Data1(Old) <> 0 then
Return Data1(New)/Data1(Old)
else
Return 0
endif
endif
EndFunction
------------
Adesso ho bisogno di utilizzare l'indicatore Myroc 2 volte uno per il close e l'altro per high
con Data1(x,1) = Close e
con Data1(x,2) = Rsi(Close,14)
e passando l'occorrenza 1 se voglio calcolare il Roc sulle chiusure e 2 se voglio calcolare il Roc sull'Rsi


Ciao e grazie
Kairen

kairen Posted - 10 April 2004 : 16:26:16
grazie mille sempre solerte

ciao

Kairen
Luca Giuliato

SupportoTecnico Posted - 10 April 2004 : 14:59:14
Certo.

La funzione ? Ubound() dove come paramentro passi il nome dell'array:

Ubound(Data1())


kairen Posted - 10 April 2004 : 14:41:38
un'altra domanda riguardo gli array.
Esiste una funzione che ritorna il numero di elementi di un'array ?

Ciao e grazie
Luca G.

SupportoTecnico Posted - 09 April 2004 : 17:07:34
Per mantenere i valori precedenti gli array X, Y devono essere dichiarati a livello di modulo.

Il parametro passato alla funzione Close ? l'offset dalla barra corrente. In pratica Close(1) ritorna la chiusura della barra successiva a quella corrente.

Nel tuo caso non ti serve l'argomento di Close.
Scrivi semplicemente:

y(Cnt) = Close

Close senza argomento ritorna la chiusura della barra corrente, come del resto anche Close(0). Ma visto che lo zero non serve ? inutile metterlo.




kairen Posted - 09 April 2004 : 12:40:51
praticamente volevo gli array costruiti in questo modo
x ( 1, 2, 3, 4, 5, 6, 7)
y ( close(1) , close(2) , close(3) , close (4), ...)

e caricare un elemento ad ogni giro della funzione main senza perdere i precedenti, devo forse dichiarare x e y come variabili di modulo.

p.s. dove close(1) intendo il valore della chiusura nella 1 barra
close(2) intendo la chiusura nella seconda barra , ...

Lo scopo ?: se periodo ? 14
Non fare nulla per le prime 14 barre
Calcola il coefficiente di correlazione per le barre seguenti

p.p.s close(0) ritorna il valore di close nella barra corrente?

p.p.p.s: Iil coefficiente di correlazione riesco a calcolarlo comunque caricandomi nella funzione main gli array per X e Y per gli elementi che mi servono ma: Supponiamo il numero totale di barre sia 1000 e il periodo sia 50
Stima numero operazioni = 50*1000*2 + (50 * 5 * 1000 ) = 350000 per 1000 barre del titolo (ci mette grosso modo 30/40 secondi a elaborare l'indicatore)
Con il mio metodo grosso modo il tempo ? all'incirca 1000*10 + 1000
circa 11000 operazioni credo che 30 volte pi? veloce sia un buon risultato

Ciao e grazie
Kairen
Luca G.


SupportoTecnico Posted - 09 April 2004 : 11:13:42
E' sbagliata la costruzione degli array nella funzione Main:

x(Cnt) = currentbar
y(Cnt) = close(0)


prima di tutto cosa rappresenta x e cosa y?

Poi hai dichiarato le due variabili a livello di funzione e quindi essendo due array numerici tutti gli elementi verranno inizializzati ad ogni passaggio a zero tranne l'ultimo al quale fai l'assegnazione specifica.

In pratica supponi di avere currentbar = 20 avrai 19 elementi a zero e l'ultimo uguale a currentbar (per l'array x).

N.B. currentbar ? il numero della barra corrente, non il valore!



Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07