Condividi:        

EXCEL , Correlazione Max

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

EXCEL , Correlazione Max

Postdi Alessandro999 » 04/06/09 12:04

salve sono un nuovo iscritto al forum , ho un problema con una formula di excel , spero che qualcuno mi possa aiutare ?

( me la cavo ma niente di eccezionale )


devo confrontare tramite la formula " indice di correlazione " dei dati.

esempio :

mettiamo che nella colonna A dalla cella A2 fino ad A500 ci siano dei valori numerici .

poi nella colonna B dalla cella B2 alla cella 500 ci sono altri valori numerici.

avrei bisogno di decidere volta per volta quanti dati confrontare .

per esempio se volessi confrontare 20 dati , mettiamo da A60 ad A80 con i dati che vanno da B300 a B320 come devo fare ?

tenuto presente che il confronto varia di volta in volta nel senso della posizione e della quantità di celle .

un' altra cosa MOLTO IMPORTANTE sempre se è possibile , si può far fare ad excel questa operazione facendolo provare tutte le combinazioni possibili in modo da individuare l'indice di correlazione più alto ?

mi spiego , mettiamo che la serie in colonna A vada da A50 fino ad A90 , quindi quaranta elementi , è possibile far fare ad excel una ricerca sulla serie numerica presente in colonna B , ad esempio partendo da B2 , B42 e poi B3 , B43 ; B4 , B44 e cosi via fino a provare tutte le combinazioni e fargli restituire gli indici di correlazione migliori, o tutti .

Non ho la più pallida e più lontana idea di come fare .

devo precisare che in termini di macro sono alle prime armi.

Se c'è qualcuno che mi sa dare una risposta lo ringrazio infinitamente.

mentre attendo saluto tutti i presenti del forum : )
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Sponsor
 

Re: EXCEL , aiuto formula

Postdi Anthony47 » 04/06/09 15:56

Ciao alessandro e benvenuto nel forum.
Mi pare che il tuo problema verte sulla funzione [b]Correlazione(Range1;Range2)[/]; visto il desiderio di rendere flessibile la scelta dei dati di origine (origine e lunghezza) io suggerisco di usare Scarto per generare i Range1 e Range2; ad esempio qualcosa come:
Codice: Seleziona tutto
=CORRELAZIONE(SCARTO(A1;F1;0;G1;1);SCARTO(B1;F1;0;G1;1))

Questa usa due range la cui origine e' A1 e B1 spostato verso il basso di tante celle quante impostato in F1, per una altezza complessiva (numero di celle) specificato in G1.

Poi userai il "risolutore" (Menu /Strumenti /Risolutore) per far cercare il Max risultato possibile variando il valore di F1.
Se non trovi Risolutore tra Menu /Strumenti allora devi installare l' apposito componente aggiuntivo: Menu /Strumenti /Componenti aggiuntivi, scegli Risolutore, Ok; credo ti chiedera' il disco di installazione.

Ciao, fai sapere dove arrivi.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 05/06/09 17:27

[img][IMG]http://img37.imageshack.us/img37/149/55070042.jpg[/img]
[/img]

Prima di tutto Anthony47 vorrei ringraziarti per la tua disponibilità 1000 grazie!!!

ho creato un abbozzo con le indicazioni che mi hai fornito .

ho modificato la linea in questo modo =CORRELAZIONE(SCARTO(A1;F1;0;G1;1);SCARTO(B1;I1;G1;1))

la variabile I creata per la colonna B sta per la partenza da una cella non parallela ai dati da esaminare in A.

per quanto riguarda il risolutore se ho capito bene intendi che installandolo è possibile automatizzare la ricerca in modo che excel faccia tutto da solo, provando tutte le combinazioni possibili senza andare a variare il punto di partenza manualmente ogni volta in cella F1 ???

Ho visto dove sta , io uso office 2007 lo trovo in opzioni excel ,componenti aggiuntivi ,........ la prima voce e proprio componente aggiuntivo risolutore.

Devo però prima risolvere l'enigma di dove ho riposto il cd di office : (

comunque con il risolutore devo aggiungere altre formule ??? se si quali ?

Un' altra cosa Anthony47 in questo caso come si fà a far aggiornare in automatico il grafico in figura senza fare manualmente copia incolla dei dati.

intendo l'aggiornamento automatico del grafico con la sequenza che da' la correlazione più alta.

La sequenza con la correlazione più alta mi servirebbe che excel me la riportasse in una colonna apposita in modo da poterla vedere.


ti ringrazio in anticipo per la tua eventuale risposta.

( In caso ti domandassi a cosa mi serve , è per fare un' analisi frattale di due andamenti distanti nel tempo )

La saluto

:)
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 05/06/09 17:43

Immagine


ho ripostato l'immagine dato che la precedente aveva per mio errore parte delle celle con il colore bianco e quindi non si vedeva il contenuto.

spero mi perdonerai la bruttezza del fohlio , é per ora un emplice abbozzo.

ciao
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 05/06/09 22:31

Il lavoro del "Risolutore" e' quello di simulare le possibili combinazioni alla ricerca di un risultato, che puo' essere "il min", "il max" o "un risultato specifico" (per quest' ultimo andrebbe bene anche Strumenti /Ricerca obiettivo).
Non aggiungerai formule ma userai l' interfaccia di Risolutore per spiegare quali sono le variabili su cui agire (celle F1 e I1) e quale monitorare (quella con la formula Correlazione).

Ottenuto il risultato (cioe' i valori F1 e I1 che portano al migliore risultato), useremo la stessa tecnica (Scarto) per dire al grafico quali range plottare.
Per ora cerca quindi di fal funzionare Risolutore, sapendo che devi fare un po' di prove per vedere quali sono le opzioni disponbili.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 06/06/09 11:43

:) grazie per la risposta Anthony ho aggiunto il risolutore come hai detto , purtroppo ho riscontrato dei problemi , nello specifico nel suo rapporto non mi restituisce il risultato migliore della ricerca , ma mi fa vedere sempre quello di partenza.

Ho spuntato la voce mostra il risultato delle iterazioni ma niente da fare , ho consultato anche la guida di excel :?: ma non ho trovato la soluzione.

allego le immagini di dove sono arrivato seguendo i tuoi consigli così magari mi illumini su dove sbaglio , spero di non recarti troppo disturbo , e ovviamente ti ringrazio per le la tua eventuale risposta.

Immagine


Immagine


Immagine


Immagine



come puoi vedere dalle immagini in questa prova mi restituisce sempre il valore di partenza 0,53 che non è il più elevato è quello di partenza con le variabili i ed f settate con i valori 4 e 9 , come vedi in figura. :cry:


la formula in I24 è la seguente

=CORRELAZIONE(SCARTO(A1;F1;0;G1;1);SCARTO(B1;I1;0;G1;1))

ha dimenticavo anche gli altri rapporti proposti dal risolutore non propongono nient'altro che il valore di partenza ?!?!?!

CIAO ;)
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 06/06/09 19:23

In effetti ho provato anche io il Resolver con esito analogo con la formula in gioco, mentre funziona con formule di una certa semplicita'.
Non so se il problema e' legato dall' assoluta aleatorieta' dell' output, che non consente di elaborare nessuna tendenza (poco probabile) o alla natura della formula che include le funzioniScarto, volatili per definizione; magari e' un limite del "metodo branch-and-bound" usato da Resolver, come riccamente spiegato nell' help on line :D

Io abbandonerei Resolver per risolvere la ricerca del max con una macro come la seguente:
Codice: Seleziona tutto
Sub corremax()
Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A1")   'Prima origine dati
Set OrigB = Range("B1")   'Seconda origine dati
Set ScUno = Range("F1")   'Primo Offset
Set ScDue = Range("I1")   'Secondo Offset
Set Altz = Range("G1")    'Altezza dei range da correlare
Set CorCel = Range("AF8") 'La cella con la formula CORRELA
Set FreCells = Range("AF1") 'pointer a tre celle libere adiacenti

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row
For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastR - Altz - OrigA.Row + 1
ScDue.Value = J
'OrigB.Offset(ScDue, 0).Select
If CorCel.Value > CurCor Then
CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True
End Sub

Imposta le variabili iniziali ai tuoi valori e poi manda in esecuzione la macro; se i tuoi dati sono lunghi parecchie centinaia di righe impieghera' parecchi minuti per completarsi; se invece sono molto meno te la cavi con poco, e in questo caso puoi eliminare l' istruzione Application.ScreenUpdating = False.

Al completamento, troverai nelle "Frecells" che hai definito i valori dei 2 offset e il relativo valore di correlazione.

Ciao, fai sapere se ti risolve.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 07/06/09 11:17

Ciao ho inserito la macro che mi hai postato ,funziona ,però ho riscontrato dei problemi ,forse dipende dalla mia scarsa esperienza in merito ,ti elenco i problemi che ho incontrato con immagini al seguito :

spesso mi capita l'errore di runtime 13 , dovuto al valore zero che compare in cella I1 ,i primi dati in colonna a e b partono da a2 e b2 ,quindi i valori minimi per F1 e I1 devono essere pari a 2

questa è la macro che ho aggiunto indicando come mi hai detto la cella della formula di correlazione e le celle dove devono comparire i risultati .

Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A1") 'Prima origine dati
Set OrigB = Range("B1") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row
For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastR - Altz - OrigA.Row + 1
ScDue.Value = J
'OrigB.Offset(ScDue, 0).Select
If CorCel.Value > CurCor Then
CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True


End Sub

come vedi dalle immagini a volte la macro mi da dei risultati dove parte dalla posizione zero di colonna a e b , retsituendo così dei risultati falsati :(

Immagine

Immagine

Immagine

in definitiva a volte la macro funziona bene e altre volte da errore o propone risultati partendo da una posizione errata , penso che la soluzione sia quella di inserire i margini estremi da qui la macro deve rientrare prima di cominciare tutte le possibili combinazioni alla ricerca della migliore combinazione :?:

Ovviamente può anche essere ( anzi molto probabile ) che sono io ceco come una talpa è non ho inserito un banale settaggio :-? , in questo caso se me lo fai notare mi fai un piacere , visto che c'è sempre da imparare dai più esperti .

riguardo alla mole di dati , :mmmh: purtroppo sono parecchi diciamo che minimo 250-300 per volta , ma se excel fosse veloce allore ne aggingerei anche di più.

colgo l'occasione per ringraziarti per le tue numerose risposte e ti auguro una buona domenica :)

ciao
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 07/06/09 13:00

Aggiungo un dettaglio , durante la ricerca automatica della migliore correlazione tramite l' utilizzo della tua macro ,come si deve fare per indicare una serie numerica di riferimento fissa in colonna B.


mi spiego , in figura ho indicato gli ultimi 8 valori della colonna B , mi serve confrontarli con tutte le possibili combinazioni in colonna A in modo da individuare una serie di 8 elementi consecutivi che danno il più alto indice di correlazione.

per questo di volta in volta ho bisogno di specificare la lunghezza della serie e indicare i valori di riferimento statici nella colonna B .

la colonna A in termini di dati può essere anche molto più lunga della colonna B

Purtroppo con le macro non ho molta dimestichezza e l' aiuto di una persona esperta e disponibile come lei lo apprezzo moltissimo.


Immagine

CIAO :)
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 08/06/09 14:10

Mi sembra di capire che hai l' errore di runtime 13 quando il risultato di Correla e' un errore..
Ora, se i tuoi dati cominciano in Riga 2 sarebbe opportuno modificare le istruzioni che definiscono le origini, cioe' usare
Codice: Seleziona tutto
Set OrigA = Range("A2")   'Prima origine dati
Set OrigB = Range("B2")   'Seconda origine dati

Se continuassi ad avere run-time errorr 13 allora cambia Dim CurCor As Double in
Codice: Seleziona tutto
Dim CurCor
(che equivale a dimensionare CurCor come Variant)

Se vuoi mantenere fisso il secondo range di correlazione, allora compila manualmente I1 con il valore di offset che punti al tuo gruppo celle (fondamentalmente, il N° riga del target -1) e modifica il ciclo For / Next come segue:
Codice: Seleziona tutto
For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
'For J = 0 To LastR - Altz - OrigA.Row + 1
'ScDue.Value = J
'OrigB.Offset(ScDue, 0).Select
If CorCel.Value > CurCor Then
CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
'Next J
Next I
(ho "commentato", cioe' disinserito, le istruzioni che gestivano il For J /Next J)

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 08/06/09 18:46

ciao Anthony ho modificato la macro come mi hai indicato , purtroppo però continuo a ricevere l'errore di runtime 13




Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor
Set OrigA = Range("A2") 'Prima origine dati
Set OrigB = Range("B2") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row
For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastR - Altz - OrigA.Row + 1
ScDue.Value = J
'OrigB.Offset(ScDue, 0).Select
If CorCel.Value > CurCor Then
CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True


End Sub



Immagine

la prova con il cambiamento del range l'avevo già provata senza ottenere risultati , così lo riprovata di nuovo aggiungendo la modifica Dim Cur Cor , e poi lo provata anche da sola , nessuna delle combinazioni placa l'errore di runtime13

come vedi dall' immagine in i1 e in f1 v'e zero , quando il valore minimo dovrebbe essere 2 come dici tu le sequenza partono da a2 e b2 :(

per quanto riguarda l'ultima parte della tua risposta potresti farmi un esempio scritto con gli ultimi diciamo 8 dati del foglio da B23 a B30 ( :-? abbi pazienza se c'era un emoticon con le orecchie dell' asino me la mettevo )

Se vuoi mantenere fisso il secondo range di correlazione, allora compila manualmente I1 con il valore di offset che punti al tuo gruppo celle (fondamentalmente, il N° riga del target -1)

per ora ti saluto , e sono molto contento di essermi iscritto a questo forum dove ci sono persone qualificate ed esperte come te , daltronde non si deve mai smettere di imparare in qualsiasi campo :) .

ciao
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 09/06/09 02:37

Ho dimenticato di dire che se i dati cominciano da A2/B2 avremmo dovuto cambiare anche la formula; ma direi che e' meglio gestire da macro, inserendo queste istruzioni al posto delle precedenti:
Codice: Seleziona tutto
For I = range(OrigA).row -1 To LastR - Altz - OrigA.Row + 1
For J = range(OrigB).row -1 To LastR - Altz - OrigA.Row + 1


Se hai sempre run-time error 13 allora premi debug e dimmi quale istruzione e' evidenziata.

Per quanto riguarda mantenere fisso un gruppo di celle, ad esempio da B23 in avanti, commenti le istruzioni in macro (come da mio messaggio precedente) e inserisci 22 in I1 (non sara' toccato dalla macro).

Ciao.

!! :!: MODIFICATE ISTRUZIONI :!: !!
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 11/06/09 17:52

Rieccomi , scusa ma ho avuto dei problemi di altra natura .

Dunque ho tolto dalla macro le ultime istruzioni precedenti e ho inserito le nuove modificando le linee in rosso e provando anche con a2 e b2 nelle righe in neretto , e ripristinato dim curcor as double , spero di avere interpretato giustamente le tue direttive :?:

l'errore di runtime 13 continua :-? , quindi come dici tu ho proceduto con il debug che mi sottolinea questo riferimento

if CorCel.Value > CurCor Then

Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A1") 'Prima origine dati
Set OrigB = Range("B1") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row



For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastR - Altz - OrigA.Row + 1
ScDue.Value = J
'OrigB.Offset(ScDue, 0).Select
If CorCel.Value > CurCor Then
CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True

End Sub

Immagine




il valore in cella i continua a cambiare senza restare fisso :(

Sono sicuramente io che non interpreto come si deve le tue istruzioni :-?

ciao ;)

attendo la tue cortese risposta .....................
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 11/06/09 21:18

Mettiamo un punto fermo: OrigA e OrigB devono contenere l' inizio dei dati; se i dati cominciano da A1/B1 scriverai A1/B1, se cominciano da A2/B2 scriverai A2/B2 nelle relative istruzioni "Set".

Dopo aver premuto Debug, ho capito che e' evidenziata l' istruzione If CorCel.Value > CurCor Then.
In quel frangente, la formula Correlazione (cella H34) che valore ti restituisce? Cosa contengono le celle F1 e I1? quale e' la cella correntemente selezionata sul foglio excel?

DOPO che hai fatto queste rilevazioni, prova a sostituire If CorCel.Value > CurCor Then con
Codice: Seleziona tutto
If iserror(CorCel.value) Then PLM=0 else PLM=CorCel.value
If PLM > CurCor Then

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 12/06/09 14:30

Ho eseguito le tue direttive , questi i risultati :


l'errore in cella H34 è #DIV/0!

la cella evidenziata é a 16

come vedi F1 é pari a 14 e I1 a 0



Immagine


ho sostituito la linea con il nuovo frammento di codice e ho impostato la partenza da a2 e b2

la macro ora è

Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A2") 'Prima origine dati
Set OrigB = Range("B2") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row



For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastR - Altz - OrigA.Row + 1
ScDue.Value = J
'OrigB.Offset(ScDue, 0).Select

If IsError(CorCel.Value) Then PLM = 0 Else PLM = CorCel.Value
If PLM > CurCor Then


CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True


End Sub


Ora l'errore in cella h34 non compare di meno

Immagine


qui sopra come si vede è ricomparso di nuovo :cry: ,poi se noti come è possibile che la correlazione sia uguale a1 segnando come partenza della colonna b la cella 28 , i dati in totale sulla colonna b sono 30 , quindi se la partenza della serie è in b28 non ci sono abbastanza dati per soddisfare la condizione in g1 , che prevede una sequenza di 7 dati , invece i dati finiscono in b30 e non sono sufficienti.
come vedi in figura in basso a destra la macro ritorna una correlazione uguale a 1 :?:

riguado la cella G1 che indica la partenza della sequenza statica composta da n° elementi consecutivi individuati in colonna B , questa continua a cambiare mi spiego se nell' esempio della figura precedente imposto in cella i1 il valore 20 , la sequenza fissa che in questo caso e di sette elementi come specificato in G1 dovrebbe essere da B21 a B28 che dovrebbero essere confrontati con tutte le combinazioni possibili in colonna A , esempio A2:A8 , A3:A9 , A4:A10 , A5:A11 ..........eccetera fino ad A24:A30 ultimi sette elementi consecutivi.

ma come vedi in figura sul riquadro in basso a destra l'etichetta colonna b riporta la partenza in B 28 :?:


al limite per semplificare possiamo eliminare l'istruzione F1 .


tenendo dolo la cella G1 e la cella i1 che indica il range fisso di elementi consecutivi da confrontare con quelli in colonna A.

un ulteriore esempio meglio del precedente riguardo all' incongruenza precedentemente detta si può vedere anche nell' immagine seguente .

dove la partenza è in B24 , ma da li in poi non ci sono sufficienti dati per soddisfare la cella G1 che riporta 13 elementi , da B24 a B 30 sono meno , quindi come è possibile che excel riporti comunque il risultato 0,979 in figura :-?

vedi elisse in basso a destra.

e ovviamente non viene rispettato il vincolo fisso in i1 che cambia.





come vedi
Immagine


Ciao ( penso di averti disturbato e approfittato fin troppo della tua cortesia , se è così dillo pure non ci sono problemi , devo ringraziarti per il tuo tempo )


attendo una tua eventuale ulteriore risposta.
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 12/06/09 14:37

la cella H34


CORRELAZIONE(SCARTO(A1;F1;0;G1;1);SCARTO(B1;I1;0;G1;1))


attualmente è così.

ho provato amettere A2 e B2 ma il risultato non cambia.


ciao
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 12/06/09 14:55

Secondo me tu hai ulteriori dati oltre A30.
Fai queste prove:
-dall' editor delle macro, aggiungi questa istruzione dopo LastR= etc etc:
Codice: Seleziona tutto
AAAA=LastR - Altz - OrigA.Row + 1
-avvia la macro passo-passo: metti il cursore "dentro" le righe della macro, 1 click; premi F8; verra' eseguita una istruzione per ogni ulteriore F8 (la riga evidenziata).
-esegui fino a AAAA=LastR - Altz - OrigA.Row + 1 (For I ora e' evidenziata)
-metti il cursore sopra la scritta LastR, senza cliccare: che valore ti visualizza dopo qualche secondo?
-idem sopra AAAA

Poi esamina i dati dopo A30 fino alla riga LastR e dimmi ancora cosa c' e' dentro.

Ciao, ti aspetto.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 12/06/09 17:51

Ok sei un falco in a40 cera la formula correlazione classica colorata in bianco.

Ora secondo le tue direttive Last r = 30 in aaaa = 24 come in figura.


Adesso il foglio é interamente vuoto C'é solo quello che vedi :)

CORRELAZIONE(SCARTO(A1;F1;0;G1;1);SCARTO(B1;I1;0;G1;1))

la formula qui sopra in H34 é giusta ? oppure devo mettere A2 e B2 anche qui ?

Immagine



macro attuale

Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A2") 'Prima origine dati
Set OrigB = Range("B2") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row



For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastR - Altz - OrigA.Row + 1
ScDue.Value = J
'OrigB.Offset(ScDue, 0).Select

If IsError(CorCel.Value) Then PLM = 0 Else PLM = CorCel.Value
If PLM > CurCor Then


CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True


End Sub



A questo punto per mantenere statico il valore in I1 cosa devo fare ? se vedi l'immagine in basso a destra dove c'è l' etichetta : colonna B sotto c'è il valore 12

Ho bisogno che quel valore che gli indico io non cambi , cioè se gli dico che la sequenza da analizzare parte da B24 fino a B30 , excel deve andare in cerca sulla colonna A di una sequenza della stessa lunghezza che dia la migliore correlazione .

Meglio detto : La sequenza in B che viene indicata dall' utente deve rimanere ferma.

Excel deve trovare la migliore correlazione possibile in colonna A riguardante la sequenza in colonna B che gli viene indicata volta per volta.


Praticamente la faccenda è più o meno questa : prendiamo il titolo fiat nelle ultime sue 60 sedute di borsa , le chiusure sono in colonna B , la macro serve a confrontare questi dati con lo storico del passato presente in colonna A , quando la macro trova una correlazione molto alta con una sequenza di pari durata già avvenuta nel passato allora si può fare una buona proiezione utilizzando l'andamento successivo a quel periodo riportato al presente , come continuazione del grafico sul titolo , ovviamente si dovrà utilizzare tutta una serie di accorgimenti quali velocità ,medie mobili , indicatori di ciclo etc , ma per quelli non ho problemi ,si procede con le formule dal foglio di lavoro , mentre con la parte relativa alle macro sono in forte crisi , le pocge macro che uso le creo con il registratore di macro :) .

In poche parole dovrebbe essere una cosa tipo questa :

http://www.youtube.com/watch?v=1xv6R-WJ ... annel_page


ciao e grazie per la risposta ;)
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Re: EXCEL , aiuto formula

Postdi Anthony47 » 13/06/09 00:38

Col dovuto rispetto, i cicli economici si ripetono se la maggioranza degli attori che intervengono nel processo sono convinti che "i cicli economici si ripetono"; cioe' la ripetizione e' l' effetto dei comportamenti, non la causa dei comportamenti; per lo stesso motivo la rottura di un supporto innesca una ulteriore corsa alle vendite cioe' al ribasso e la caduta verso un nuovo supporto.

Detto cio':
-nella formula lascia A1 e B1
-devi ricordare che nelle FreCells (L34:N34) sono riportati gli "scarti" da A1 e B1 (L, M) che danno luogo al valore Correlazione Max (N); quindi se c' e' scritto diciamo 10 i dati sono da A(1+10)=A11 e celle sottostanti.
-se vuoi avere la facolta' di forzare un scarto fisso in colonna B, allora per semplificazione mia lo puoi fare cosi':
>>usiamo la cella J1 come flag: 0=usa sempre lo scarto indicato in I1; maggiore di 0 =varia l' intervallo anche in col B
>>vari la macro come segue; alcune righe sono aggiunte (<<ADD), altre sono modificate (<<MOD):
Codice: Seleziona tutto
JSi = Val(Range("J1").Value) > 0  '<<<<ADD; J1 e' la cella flag
Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row
If JSi then LastJ= LastR - Altz - OrigA.Row + 1 else LastJ=0   '<<<<ADD
For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastJ                             '<<<<MOD
If JSi then ScDue.Value = J             '<<<<MOD

Non cambia l' output sulle celle FreCells
Prova e fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL , aiuto formula

Postdi Alessandro999 » 13/06/09 10:32

CIAO ANTHONY :)

risposta preliminare :

Appunto ,io sono dello stesso parere , come al riguardo di altre tecniche utilizzate da chi fa analisi di borsa ( seppur le conosca anch'io ) tipo ritracciamenti di fibonacci o di Gann o altro, senza dilungarmi troppo , funzionano perchè la maggior parte dei partecipanti attribuiscono a queste tecniche il potere di predire i movimenti del mercato , con il risultato che essendo applicate da un sostenuto numero di sostenitori , che operano in funzione di queste resistenze e supporti , per non parlare di altro , il risultato finale è che il mercato stesso assimila queste " chiamiamole " supertizioni e le trasforma in realtà.

A mio modesto parere tutte queste teorie sono sfruttate dagli insider per manipolare i mercati e far credere al parco buoi , almeno quelli che si ritengono più esperti ,di avere l' illusorio controllo della situazione.

per esempio la maggior parte entra alla tenuta si un determinato supporto perchè l'analisi tecnica del momento lo ritiene un pavimento valido per un' imminente reazione rialzista che può essere di breve o medio periodo , questi che si ritengono svegli piazzano uno stop loss poco sotto per tutelarsi da eventuali errori e tagliare le perdite.

STOP che spesso vengono sistematicamente catturati.

In altri termini se chi ha il peso di manipolare il mercato riesce a far toccare gli stop , il mercato scende ancora un po' perchè tutti gli altri stop piazzati in quell' intorno detoneranno a catena , a questo punto per le mani forti in attesa alla finestra , si presenta l'opportunità di acquistare a prezzi più bassi .

Proprio sfruttando l'illusione dei restanti attori minori che pensano di avere la situazione sotto controllo con tecniche che secondo la maggior parte hanno il potere di predire il futuro e che in realtà sono sfruttate da altri che potremmo chiamare LORO per ripulire il gregge.

Quindi da parte mia sono d'accordo con il tuo punto di vista sui cicli economici.

Ma proprio per questo ed essendo consapovoli di questo , penso che taluni movimenti si possano sfruttare perchè possono generare movimenti simili ad altri già avvenuti , poichè in quei movimenti del passato sono compresi pure gli stati emotivi di chi partecipava a quella fase di mercato, dunque è probabile che con determinati movimenti a volte imposti , si possa sondare lo stato di euforia o di strees sul mercato , è replicando situazioni simili in termini di movimento grafico da parte di chi controlla il mercato , si possa presumere un comportamento altrettanto correlazionato di percezione del mercato da parte di chi ne fa parte ( gli attori minori ) che agiscono emotivamente sempre allo stesso modo ( euforia = euforia & paura = paura )


In altre parole la maggior parte della gente tende a fare sempre le stesse cose ed è per questo che sono prevedibili.

Sto cercando di capire qualcosa in più su chi utilizza questa metodologia ,per questo sto cercando di creare qualcosa su excel che mi possa permettere di valutare in maniera empirica i risultati di questo metodo , ovviamente usato come complemento di altre cose , perchè se preso da solo è ridicolo e pure da pazzi !!!.

In fine......... perchè sapendo questo non sfruttarlo se è possibile a proprio vantaggio ???

il tuo aiuto Anthony mi é di grande utilità , altrimenti non saprei come fare.




Ho modificato la macro come segue

penso però di avere commesso qualche errore con l'ultima istruzione : :undecided:

If JSi then ScDue.Value = J '<<<<MOD

Deve esserci qualcosa da togliere che mi è sfuggito puoi dare un' occhiata


Sub frattali()

Dim ScUno As Range, ScDue As Range, Altz As Range, CorCel As Range
Dim OrigA As Range, OrogB As Range, LastR As Single, FreCells As Range
Dim CurCor As Double
Set OrigA = Range("A2") 'Prima origine dati
Set OrigB = Range("B2") 'Seconda origine dati
Set ScUno = Range("F1") 'Primo Offset
Set ScDue = Range("I1") 'Secondo Offset
Set Altz = Range("G1") 'Altezza dei range da correlare
Set CorCel = Range("H34") 'La cella con la formula CORRELA
Set FreCells = Range("L34") 'pointer a tre celle libere adiacenti


JSi = Val(Range("J1").Value) > 0 '<<<<ADD; J1 e' la cella flag

Application.ScreenUpdating = False
LastR = Cells(Rows.Count, OrigA.Column).End(xlUp).Row

If JSi Then LastJ = LastR - Altz - OrigA.Row + 1 Else LastJ = 0 '<<<<ADD


For I = 0 To LastR - Altz - OrigA.Row + 1
ScUno.Value = I
OrigA.Offset(ScUno, 0).Select
For J = 0 To LastJ

If JSi Then ScDue.Value = J '<<<<MOD


'OrigB.Offset(ScDue, 0).Select

If IsError(CorCel.Value) Then PLM = 0 Else PLM = CorCel.Value
If PLM > CurCor Then


CurCor = CorCel.Value
FreCells.Value = I: FreCells.Offset(0, 1) = J
FreCells.Offset(0, 2) = CurCor
End If
Next J
Next I
FreCells.Select
Application.ScreenUpdating = True


End Sub



La sub funziona , con l'aggiunta di j1 è possibile bloccare la sequenza in colonna b partente dal punto indicato in cella i1.

il problema che ho riscontrato attualmente con la modifica della macro è che in basso a destra sui risultati in cella M34 compare sempre 0 :?: quando in J1 è impostao 0 per fissare la sequenza in i1.

mentre se in J1 è impostato 1 come in figura sopra a volte lo 0 compare in L34 oppure in M34 come figura sotto.

deve essere un errore mio di trascrizione :undecided: ,sono sicuro che in un baleno con un solo colpo d'occhio avrai già visto dov'è il problema.

Immagine


Immagine

Immagine


GRAZIE per il tuo prezioso aiuto :)
Windows 10 + office 2007
Windows 7 + Office 2007
Avatar utente
Alessandro999
Utente Senior
 
Post: 161
Iscritto il: 04/06/09 11:42
Località: Venezia

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "EXCEL , Correlazione Max":


Chi c’è in linea

Visitano il forum: Nessuno e 69 ospiti