Esperto Excel Cercasi x Ts Ciclico

Magnetex

Sempre in Gain
Possiedo un Ts Ciclico sul Fib (Mensile, Settimanale, Giornaliero) abbastanza attendibile che in questi mesi mi ha dato entrate attendibili
Il problema è l'aggiornamento (servono solo le chiusure a 30 ; 15 ; 10 Minuti) che io eseguo purtroppo manualmente 1-2 volte al giorno, avendo la possibilità di usare il DDE Fineco volevo far si che l'aggiornamento avvenisse in automatico tramite il DDE Fineco .......ma nonostante l'impegno non sono ancora riuscito ha creare una tabella che si aggiorni dinamicamente.

In Pratica l'indicatore ciclico è pronto e funzionante, mi serve solo un'esperto di excel che mi imposti la formula (con Vb o altro..bhoo) per l'aggiornamento dinamico dal server DDE Fineco

In cambio posso cedere i diritti di utilizzo dell'indicatore ciclico:D
 

Allegati

  • Ciclo Internedio.JPG
    Ciclo Internedio.JPG
    115,7 KB · Visite: 471
Il problema sono le chiusure sembra (o forse sono io che non riesco) che il DDE Fineco non permetta di cambiare il time frame delle chiusure quindi deve catturare il valore del prezzo sulla cella Excel ad un determinato tempo nel nostro caso 10 ; 15 ; 30 minuti e salvarlo nel foglio di lavoro...
 

Allegati

  • Excel 2.JPG
    Excel 2.JPG
    171,4 KB · Visite: 493
Ciao, ho capito sommariamente quello che ti serve ed è necessario del codice vba, (ho già avuto a che fare con il DDE di fineco), se vuoi mandami via mail un contatto Skype o altro per poter scambiare qualche parola e definire esattamente ciò che ti serve.

adiche@email.it

:ciao:
 
Il problema sono le chiusure sembra (o forse sono io che non riesco) che il DDE Fineco non permetta di cambiare il time frame delle chiusure quindi deve catturare il valore del prezzo sulla cella Excel ad un determinato tempo nel nostro caso 10 ; 15 ; 30 minuti e salvarlo nel foglio di lavoro...

E' quello che sto facendo col mio TS. Se vuoi mandarmi il foglio te lo rimando con la funzione implementata.
La cosa non è complicata ma nemmeno banalissima perchè devi tenere attivo il canale DDE mentre fai i conti, per cui con l'on time si riischiano conflitti.
Il DDE non è proprio il massimo...
 
Ciao Reef anche io avrei necessità di prendere i dati a 15 min dal dde di fineco in particolare ftse mib e fib questo per aggiornare in tempo reale i miei grafici ciclici su excel
Se lo hai già fatto mi daresti una mano?
Grazie a presto
 
Ti passo le indicazioni per avere su un foglio ("DDE") i dati incrementali che arrivano ogni 5 sec e in un secondo foglio ("Storici") le chiusure ad un intervallo di tempo definito.
Con questa organizzazione puoi calcolarti banalmente anche i max e i min all'interno del time frame.

ISTRUZIONI

Devi creare un foglio che chiamerai DDE

Poi crei un pulsante "ATTIVA DDE" che colleghi a qusto codice:


==========================
Private Sub cmd_attivadde_Click()

Sheets("DDE").Range("b8").FormulaR1C1 = "=FDF|Q!'FIBZ0.NaE;Last"

Dim SorgentiDDE As Variant
SorgentiDDE = ActiveWorkbook.LinkSources(xlOLELinks)
Dim i As Integer
If Not IsEmpty(SorgentiDDE) Then
For i = 1 To UBound(SorgentiDDE)
ActiveWorkbook.SetLinkOnData SorgentiDDE(i), "SuArrivoDatiDDE"
Next i
Else
MsgBox "Nessuna Sorgente DDE Rilevata", vbExclamation, "Errore"
End If

End Sub
=================


Quando clicchi "ATTIVA DDE" nella cella B8 viene riportato il collegamento DDE, e vedi il dato che si aggiorna in tempo reale. Controlla il codice del dato "FDF|Q!'FIBZ0.NaE;Last" (FIB dicembre) che sia quello giusto, ora non posso testarlo.

Nella cella B9 metti la formula "=B8"

Per comodità fai anche un pulsante "DISATTIVA DDE" collegato a questo codice, serve a bloccare il flusso quando devi lavorarci su, altrimenti non capisci più nulla:

==================
Private Sub cmd_disattivadde_Click()
Sheets("DDE").Range("b8").FormulaR1C1 = ""
End Sub
==================


Fai un secondo foglio che chiamerai "Storici" che verrà automaticamente alimentato con i dati storici ogni 15 min, se vuoi altri TF devi cambiare la formula collegata al flag "fstor" e oldmin (al posto di 15 metti i minuti che vuoi). Puoi usare qualsiasi intervallo temporale.

Scrivi questa funzione nel modulo VBA del foglio:

========================
Public Sub SuArrivoDatiDDE()
Dim sTx As String
Static fstor, oldmin, oraold

'Ogni 5 sec salva il dato nella cella successiva
t = Time
riga = Second(t) \ 5
resto = Second(t) Mod 5
Sheets("DDE").Range("A11").FormulaR1C1 = oraold
ora5sec = TimeSerial(Hour(t), Minute(t), Second(t) - resto)

If (ora5sec > oraold) Then
Sheets("DDE").Range("A" & riga + 12).FormulaR1C1 = ora5sec
Sheets("DDE").Range("b" & riga + 12).FormulaR1C1 = Sheets("DDE").Range("b9").Value
oraold = ora5sec
End If

If (fstor = 1) And (Minute(t) \ 15 <> oldmin) Then fstor = 0
If fstor = 0 Then
riga = (Hour(t) - 8) * 60 + Minute(t)
If riga < 2 Then riga = 2
Sheets("Storici").Range("A" & riga).FormulaR1C1 = ora5sec
Sheets("Storici").Range("b" & riga).FormulaR1C1 = Sheets("DDE").Range("b9").Value
fstor = 1
oldmin = Minute(t) \ 15
End If

End Sub
===================

Già così dovresti avere tutto.

Se c'è altro chiedi pure. In bocca al lupo

1288251182ddefin.jpg
 
Ultima modifica:
Perfetto reef adesso ho capito devi leggere sempre l'ultimo valore e poi salvare quello che interessa, pensavo invece di poter chiedere al DDE una determinata quotazione ad un determinato orario....
Ora ci smanetto un po'
Grazie a presto!!!
 
Ti passo le indicazioni per avere su un foglio ("DDE") i dati incrementali che arrivano ogni 5 sec e in un secondo foglio ("Storici") le chiusure ad un intervallo di tempo definito.
Con questa organizzazione puoi calcolarti banalmente anche i max e i min all'interno del time frame.

ISTRUZIONI

Devi creare un foglio che chiamerai DDE

Poi crei un pulsante "ATTIVA DDE" che colleghi a qusto codice:


==========================
Private Sub cmd_attivadde_Click()

Sheets("DDE").Range("b8").FormulaR1C1 = "=FDF|Q!'FIBZ0.NaE;Last"

Dim SorgentiDDE As Variant
SorgentiDDE = ActiveWorkbook.LinkSources(xlOLELinks)
Dim i As Integer
If Not IsEmpty(SorgentiDDE) Then
For i = 1 To UBound(SorgentiDDE)
ActiveWorkbook.SetLinkOnData SorgentiDDE(i), "SuArrivoDatiDDE"
Next i
Else
MsgBox "Nessuna Sorgente DDE Rilevata", vbExclamation, "Errore"
End If

End Sub
=================


Quando clicchi "ATTIVA DDE" nella cella B8 viene riportato il collegamento DDE, e vedi il dato che si aggiorna in tempo reale. Controlla il codice del dato "FDF|Q!'FIBZ0.NaE;Last" (FIB dicembre) che sia quello giusto, ora non posso testarlo.

Nella cella B9 metti la formula "=B8"

Per comodità fai anche un pulsante "DISATTIVA DDE" collegato a questo codice, serve a bloccare il flusso quando devi lavorarci su, altrimenti non capisci più nulla:

==================
Private Sub cmd_disattivadde_Click()
Sheets("DDE").Range("b8").FormulaR1C1 = ""
End Sub
==================


Fai un secondo foglio che chiamerai "Storici" che verrà automaticamente alimentato con i dati storici ogni 15 min, se vuoi altri TF devi cambiare la formula collegata al flag "fstor" e oldmin (al posto di 15 metti i minuti che vuoi). Puoi usare qualsiasi intervallo temporale.

Scrivi questa funzione nel modulo VBA del foglio:

========================
Public Sub SuArrivoDatiDDE()
Dim sTx As String
Static fstor, oldmin, oraold

'Ogni 5 sec salva il dato nella cella successiva
t = Time
riga = Second(t) \ 5
resto = Second(t) Mod 5
Sheets("DDE").Range("A11").FormulaR1C1 = oraold
ora5sec = TimeSerial(Hour(t), Minute(t), Second(t) - resto)

If (ora5sec > oraold) Then
Sheets("DDE").Range("A" & riga + 12).FormulaR1C1 = ora5sec
Sheets("DDE").Range("b" & riga + 12).FormulaR1C1 = Sheets("DDE").Range("b9").Value
oraold = ora5sec
End If

If (fstor = 1) And (Minute(t) \ 15 <> oldmin) Then fstor = 0
If fstor = 0 Then
riga = (Hour(t) - 8) * 60 + Minute(t)
If riga < 2 Then riga = 2
Sheets("Storici").Range("A" & riga).FormulaR1C1 = ora5sec
Sheets("Storici").Range("b" & riga).FormulaR1C1 = Sheets("DDE").Range("b9").Value
fstor = 1
oldmin = Minute(t) \ 15
End If

End Sub
===================

Già così dovresti avere tutto.

Se c'è altro chiedi pure. In bocca al lupo

1288251182ddefin.jpg


eccellente !!
complimenti :up::up:
 

Users who are viewing this thread

Back
Alto