Volumi Progressivi Excel

  • ANNUNCIO: Segui le NewsLetter di Borse.it.

    Al via la Newsletter di Borse, con tutte le notizie quotidiane sui mercati finanziari. Iscriviti per rimanere aggiornato con le ultime News di settore, quotazioni e titoli del momento.
    Per iscriverti visita questo link.

seo

Nuovo Utente
Registrato
7/11/01
Messaggi
208
Punti reazioni
2
Ciao a tutti, spero di trovare un aiuto.

Sul mio excel collegato via DDE ho in una cella i volumi del fib che passano singolarmente ad ogni transazione ma non posso avere dalla mia piattaforma di trading i volumi progressivi. Mi spiego: passano i seguenti volumi per transazione:

3
4
1
5
10

che naturalmente compaiono sulla stessa cella collegata col DDE. Io vorrei che excel prelevasse i singoli volumi che vengono elencati e li sommasse progressivamente ( tutto sempre in un'unica cella) come nel seguente esempio

3 ---> 3
4 ---> 7
1 ---> 8
5 ---> 13
10 ---> 23
ecc...

ripeto in modo il totale dei volumi sia progressivamente indicato sempre in una cella. Dalla poca esperienza che ho con Visual Basic credo che siano necessarie delle macro.

Grazie dell'aiuto.

seo
 
Ciao, Seo.

impostato così il problema onestamente l'unico metodo di risoluzione consiste in una macro che somma il valore al totale giornaliero, attivata OGNI volta che cambia il valore della cella collegata via DDE. e qui nascono i primi problemi. durante la esecuzione di una macro NON si controaggiornano i valori via DDE, per cui dovresti allocare via DDEInitiate e DDEExecute una ulteriore copia di Excel, allocandovi i dati collegati via DDE al server, e da lì leggere con l'oggetto Application i dati dell'altro foglio di lavoro.

Penso che molto più semplice sia invece modificare la richiesta dei dati, perchè il CV ( Cumulative Volume ) è standard in ogni server di dati, basta aggiustare la stringa di richiesta dati via DDE. Se hai problemi, chiedi al tuo provider.

Ti saluto.
 
IB non fornisce i volumi cumulativi per fib, dax e eurostck :mad:

ma solo quelli inc

Grazie


Quindi è davvero cos' difficile? Io cmq devo trovare il modo altrimenti son costretto a cambiare tol

seo
 
Non è "difficilissimo", solo devi saperti muovere senza problemi in VBA.

Una domanda: per il CV hai chiesto al provider oppure usi una stringa DDE già "preconfezionata" ? in quest'ultimo caso potresti provare a modificarla per cercare di "agganciare" il CV.
 
...

Devi creare una macro che si attivi all'evento "calculate" del foglio dove vengono scaricati i dati via DDE.
Con il foglio aperto, devi aprire l'editor di VBA, in alto a dx. dovresti leggere "(dichiarazioni)", fai uscire le altre voci del menù a tendina; vedrai tutti gli eventi che sono gestibili. Clikka su "calculate" e poi vai con la creazione della macro. Se hai bisogno di aiuto mandami un MP.

S.
 
...

Private Sub Worksheet_Calculate()
'
Dim bid1Prc As Range
Dim bid1PrcBuff As Range
Dim ask1Prc As Range
Dim asK1PrcBuff As Range
Dim bid1Vol As Range
Dim bid1VolBuff As Range
Dim ask1Vol As Range
Dim ask1VolBuff As Range
Dim volOrig As Range
Dim volDest As Range
Dim prcDest As Range
Dim volBuffer As Range
Dim numTrade As Range
Dim volAcq As Range
Dim volVend As Range
Dim tradePrc As Range
Dim tradePrcBuff As Range
Dim tradeTypeDest As Range
Dim bestBidPrc As Double
Dim bestAskPrc As Double
Dim bestBidVol As Long
Dim bestAskVol As Long
Dim dayVol As Long
Dim tradeVol As Long 'Volume del trade
Dim oldVol As Long
Dim r As Long 'Numero riga del foglio
Dim c As Long 'Numero colonna del foglio
Dim i As Byte
Dim tradeType As Byte
Dim volAcqVal As Long
Dim volVendVal As Long
'
Dim myObject As Object
'
' Carica i dati
'
Set bid1Prc = Range("N4") 'Il miglior prezzo denaro è nella cella "N4"
Set bid1PrcBuff = Range("N1") 'Deposito il valore del miglior denaro nella cella "N1"
Set ask1Prc = Range("O4") 'Il miglior prezzo lettera è nella cella "O4"
Set asK1PrcBuff = Range("O1")
Set bid1Vol = Range("M4") 'Il volume del miglior denaro è nella cella "M4"
Set bid1VolBuff = Range("M1")
Set ask1Vol = Range("P4") 'Il volume della miglior lettera è nella cella "P4"
Set ask1VolBuff = Range("P1")
Set volOrig = Range("I3") 'Il volume della giornata è nella cella "I3"
'
On Error Resume Next
volOrig.Select
dayVol = volOrig.Value
Do While dayVol = 0
volOrig.Select
dayVol = volOrig.Value 'Carico il volume della giornata al momento del ricalcolo
Loop
bid1Prc.Select '-Seleziona la cella del miglior denaro
bid1PrcBuff.Value = bid1Prc.Value '-Copia il valore del miglior denaro nella cella di buffer
bestBidPrc = bid1PrcBuff.Value '-Carica il valore del miglior denaro nella variabile <bestBidPrc>
Do While bestBidPrc = 0 '-Se il valore del miglior denaro è 0, ripete il ciclo. Quando
bid1Prc.Select 'verrà caricato un valore diverso da 0 il ciclo si interromperà
bid1PrcBuff.Value = bid1Prc.Value
bestBidPrc = bid1PrcBuff.Value 'Carico il miglior prezzo in denaro
Loop
ask1Prc.Select
asK1PrcBuff.Value = ask1Prc.Value
bestAskPrc = asK1PrcBuff.Value
Do While bestAskPrc = 0
ask1Prc.Select
asK1PrcBuff.Value = ask1Prc.Value
bestAskPrc = asK1PrcBuff.Value 'Carico il miglior prezzo in lettera
Loop
bid1Vol.Select
bid1VolBuff.Value = bid1Vol.Value
bestBidVol = bid1VolBuff.Value 'Carico il volume del miglior denaro
ask1Vol.Select
ask1VolBuff.Value = ask1Vol.Value
bestAskVol = ask1VolBuff.Value 'Carico il volume della miglior lettera
'
' verifica ed elabora i dati
'
Set myObject = ThisWorkbook.Worksheets("TS_AEM") 'Il foglio di lavoro è: TS_AEM
Set volBuffer = myObject.Range("B2") 'Il buffer del volume (volume precedente) è nella cella "B2"
Set numTrade = myObject.Range("B1") 'Il numero dei trades è nella cella "B1"
Set volAcq = myObject.Range("F1") 'Il volume cumulativo degli acquisti è nella cella "F1"
Set volVend = myObject.Range("F2") 'Il volume cumulativo delle vendite è nella cella "F2"
Set tradePrc = Range("B3") 'Il prezzo del trade è nella cella "B3"
Set tradePrcBuff = Range("B5")

r = 0
volBuffer.Select
oldVol = volBuffer.Value
'
If dayVol <> oldVol Then
tradeVol = dayVol - oldVol
If tradeVol > 0 Then
tradePrc.Select '-Seleziona cella B3 del foglio AEM
tradePrcBuff.Value = tradePrc.Value '-Copia il contenuto della cella B3 nella cella B5
tradePrice = tradePrcBuff.Value '-------------Creare routine per verificare prezzo del trade
numTrade.Select '-Seleziona cella B1 del foglio TS_AEM
r = numTrade.Value + 1 '-Calcola il numero della riga in cui scrivere i dati
If tradePrice = bestBidPrc Then '-Se il prezzo dello scambio,dalla cella di buffer, è uguale al
tradeType = 1 'miglior denaro l'iniziativa è stata di un Venditore
volVend.Select
volVend.Value = volVend.Value + tradeVol
Else
tradeType = 2 'Acquirente
volAcq.Select
volAcqVal = volAcq.Value
volAcq.Value = volAcqVal + tradeVol
End If
Set volDest = myObject.Cells(2 + r, 3)
Set prcDest = myObject.Cells(2 + r, 4)
Set tradeTypeDest = myObject.Cells(2 + r, 5)
volDest.Select
volDest.Value = tradeVol
prcDest.Select
prcDest.Value = tradePrice
tradeTypeDest.Select
tradeTypeDest.Value = tradeType
volBuffer.Select
volBuffer.Value = dayVol
numTrade.Select
numTrade.Value = r
End If
End If
End Sub

Questa macro fa quasi lo stesso lavoro. Non guardare la sintassi perchè ci sono molti passaggi superflui che servono a me per vedere meglio lo svolgersi delle operazioni.

Sergio
 
Scritto da seo
Ciao a tutti, spero di trovare un aiuto.

Sul mio excel collegato via DDE ho in una cella
seo

dimme che cella e' e il nome del foglio
 
Re: Re: Volumi Progressivi Excel

Scritto da scarlet
dimme che cella e' e il nome del foglio


Ciao Scarlet,
ma il tuo sito dove ci sono gli oscillatori è ancora attivo?

S.
 
Re: Re: Re: Volumi Progressivi Excel

Scritto da brianzatrade
Ciao Scarlet,
ma il tuo sito dove ci sono gli oscillatori è ancora attivo?

S.
no, lycos me l'ha chiuso perche' lo spazio web gratuito che mette a disposizione non si puo' utilizzare come magazzino file
 
Re: Re: Re: Re: Volumi Progressivi Excel

Scritto da scarlet
no, lycos me l'ha chiuso perche' lo spazio web gratuito che mette a disposizione non si puo' utilizzare come magazzino file

Non riesci ad aprire un'altro spazio web dove sia permesso?Erano molto utili; io li avevo già scaricati tutti ma sarebbero interessati a molti, penso.

S.
 
Re: Re: Re: Re: Re: Volumi Progressivi Excel

Scritto da brianzatrade
Non riesci ad aprire un'altro spazio web dove sia permesso?Erano molto utili; io li avevo già scaricati tutti ma sarebbero interessati a molti, penso.

S.

ho provato a cercare un'alternativa ma mi sembra che tutti abbiano questa clausola, quindi appena se ne accorgono te lo chiudono.
Lycos era ottima perche' ti dava 50 mb, me ne servirebbero almeno la meta', altrimenti dovrei comprimere i file.
se qualcuno sa qualcosa.........
 
Re: Re: Re: Re: Re: Re: Volumi Progressivi Excel

Scritto da scarlet
ho provato a cercare un'alternativa ma mi sembra che tutti abbiano questa clausola, quindi appena se ne accorgono te lo chiudono.
Lycos era ottima perche' ti dava 50 mb, me ne servirebbero almeno la meta', altrimenti dovrei comprimere i file.
se qualcuno sa qualcosa.........

Se trovo qualcosa te lo dico...non puoi distribuirli su più provider?
Quattro o cinque a testa, non lo possono sicuramente definire magazzino.

S.
 
Re: Re: Re: Re: Re: Re: Re: Volumi Progressivi Excel

Scritto da brianzatrade
Se trovo qualcosa te lo dico...non puoi distribuirli su più provider?
Quattro o cinque a testa, non lo possono sicuramente definire magazzino.

S.

mi sembra alquanto laborioso gestire 50 file su 5 provider, sinceramente ho altro da fare di piu' interessante
:-))
e comunque per chi usa il P2P li ho in messi in condivisione su Winmx, e siccome sono leggeri quindi si scaricano in pochi minuti, se vedo qualcuno in coda su quei file lo faccio partire subito.
 
Re: Re: Volumi Progressivi Excel

Scritto da scarlet
dimme che cella e' e il nome del foglio

x seo....

non ho avuto risposta quindi te la mando come sta'.....
questa macro, che non e' farina del mio sacco, incolonna nel foglio 2 i dati che arrivano in DDE nel foglio 1 cella A1
potrai ora adattarla al tuo foglio

byebye


Private Sub Worksheet_Calculate()
' Variabile usata solo per accellerare il codice
Dim lngCounter As Long

With Foglio2

' Incrementa contatore ed aggiorna relativa cella (Z1)
lngCounter = .Cells(1, 26).Value + 1
.Cells(1, 26).Value = lngCounter

' Aggiorna Target
.Cells(lngCounter, 1).Value = Foglio1.Cells(1, 1).Value
End With

End Sub
 
Re: Re: Re: Volumi Progressivi Excel

Scritto da scarlet
x seo....

non ho avuto risposta quindi te la mando come sta'.....
questa macro, che non e' farina del mio sacco, incolonna nel foglio 2 i dati che arrivano in DDE nel foglio 1 cella A1
potrai ora adattarla al tuo foglio

byebye


Private Sub Worksheet_Calculate()
' Variabile usata solo per accellerare il codice
Dim lngCounter As Long

With Foglio2

' Incrementa contatore ed aggiorna relativa cella (Z1)
lngCounter = .Cells(1, 26).Value + 1
.Cells(1, 26).Value = lngCounter

' Aggiorna Target
.Cells(lngCounter, 1).Value = Foglio1.Cells(1, 1).Value
End With

End Sub


Ma tutto sta roba dove devo inserirla? Il file è FIB.xls, foglio1, cella B1. Se vieni in chat fib30 sono li e mi spieghi meglio

tks

seo
 
Re: ...

Scritto da brianzatrade
Private Sub Worksheet_Calculate()
'
Dim bid1Prc As Range
Dim bid1PrcBuff As Range
Dim ask1Prc As Range
Dim asK1PrcBuff As Range
Dim bid1Vol As Range
Dim bid1VolBuff As Range
Dim ask1Vol As Range
Dim ask1VolBuff As Range
Dim volOrig As Range
Dim volDest As Range
Dim prcDest As Range
Dim volBuffer As Range
Dim numTrade As Range
Dim volAcq As Range
Dim volVend As Range
Dim tradePrc As Range
Dim tradePrcBuff As Range
Dim tradeTypeDest As Range
Dim bestBidPrc As Double
Dim bestAskPrc As Double
Dim bestBidVol As Long
Dim bestAskVol As Long
Dim dayVol As Long
Dim tradeVol As Long 'Volume del trade
Dim oldVol As Long
Dim r As Long 'Numero riga del foglio
Dim c As Long 'Numero colonna del foglio
Dim i As Byte
Dim tradeType As Byte
Dim volAcqVal As Long
Dim volVendVal As Long
'
Dim myObject As Object
'
' Carica i dati
'
Set bid1Prc = Range("N4") 'Il miglior prezzo denaro è nella cella "N4"
Set bid1PrcBuff = Range("N1") 'Deposito il valore del miglior denaro nella cella "N1"
Set ask1Prc = Range("O4") 'Il miglior prezzo lettera è nella cella "O4"
Set asK1PrcBuff = Range("O1")
Set bid1Vol = Range("M4") 'Il volume del miglior denaro è nella cella "M4"
Set bid1VolBuff = Range("M1")
Set ask1Vol = Range("P4") 'Il volume della miglior lettera è nella cella "P4"
Set ask1VolBuff = Range("P1")
Set volOrig = Range("I3") 'Il volume della giornata è nella cella "I3"
'
On Error Resume Next
volOrig.Select
dayVol = volOrig.Value
Do While dayVol = 0
volOrig.Select
dayVol = volOrig.Value 'Carico il volume della giornata al momento del ricalcolo
Loop
bid1Prc.Select '-Seleziona la cella del miglior denaro
bid1PrcBuff.Value = bid1Prc.Value '-Copia il valore del miglior denaro nella cella di buffer
bestBidPrc = bid1PrcBuff.Value '-Carica il valore del miglior denaro nella variabile <bestBidPrc>
Do While bestBidPrc = 0 '-Se il valore del miglior denaro è 0, ripete il ciclo. Quando
bid1Prc.Select 'verrà caricato un valore diverso da 0 il ciclo si interromperà
bid1PrcBuff.Value = bid1Prc.Value
bestBidPrc = bid1PrcBuff.Value 'Carico il miglior prezzo in denaro
Loop
ask1Prc.Select
asK1PrcBuff.Value = ask1Prc.Value
bestAskPrc = asK1PrcBuff.Value
Do While bestAskPrc = 0
ask1Prc.Select
asK1PrcBuff.Value = ask1Prc.Value
bestAskPrc = asK1PrcBuff.Value 'Carico il miglior prezzo in lettera
Loop
bid1Vol.Select
bid1VolBuff.Value = bid1Vol.Value
bestBidVol = bid1VolBuff.Value 'Carico il volume del miglior denaro
ask1Vol.Select
ask1VolBuff.Value = ask1Vol.Value
bestAskVol = ask1VolBuff.Value 'Carico il volume della miglior lettera
'
' verifica ed elabora i dati
'
Set myObject = ThisWorkbook.Worksheets("TS_AEM") 'Il foglio di lavoro è: TS_AEM
Set volBuffer = myObject.Range("B2") 'Il buffer del volume (volume precedente) è nella cella "B2"
Set numTrade = myObject.Range("B1") 'Il numero dei trades è nella cella "B1"
Set volAcq = myObject.Range("F1") 'Il volume cumulativo degli acquisti è nella cella "F1"
Set volVend = myObject.Range("F2") 'Il volume cumulativo delle vendite è nella cella "F2"
Set tradePrc = Range("B3") 'Il prezzo del trade è nella cella "B3"
Set tradePrcBuff = Range("B5")

r = 0
volBuffer.Select
oldVol = volBuffer.Value
'
If dayVol <> oldVol Then
tradeVol = dayVol - oldVol
If tradeVol > 0 Then
tradePrc.Select '-Seleziona cella B3 del foglio AEM
tradePrcBuff.Value = tradePrc.Value '-Copia il contenuto della cella B3 nella cella B5
tradePrice = tradePrcBuff.Value '-------------Creare routine per verificare prezzo del trade
numTrade.Select '-Seleziona cella B1 del foglio TS_AEM
r = numTrade.Value + 1 '-Calcola il numero della riga in cui scrivere i dati
If tradePrice = bestBidPrc Then '-Se il prezzo dello scambio,dalla cella di buffer, è uguale al
tradeType = 1 'miglior denaro l'iniziativa è stata di un Venditore
volVend.Select
volVend.Value = volVend.Value + tradeVol
Else
tradeType = 2 'Acquirente
volAcq.Select
volAcqVal = volAcq.Value
volAcq.Value = volAcqVal + tradeVol
End If
Set volDest = myObject.Cells(2 + r, 3)
Set prcDest = myObject.Cells(2 + r, 4)
Set tradeTypeDest = myObject.Cells(2 + r, 5)
volDest.Select
volDest.Value = tradeVol
prcDest.Select
prcDest.Value = tradePrice
tradeTypeDest.Select
tradeTypeDest.Value = tradeType
volBuffer.Select
volBuffer.Value = dayVol
numTrade.Select
numTrade.Value = r
End If
End If
End Sub

Questa macro fa quasi lo stesso lavoro. Non guardare la sintassi perchè ci sono molti passaggi superflui che servono a me per vedere meglio lo svolgersi delle operazioni.

Sergio

Stesso problema dove metto tutta sta roba? e non è un pò troppo pesante?

ciao e tks
 
Re: Re: Re: Re: Volumi Progressivi Excel

Scritto da seo
Ma tutto sta roba dove devo inserirla? Il file è FIB.xls, foglio1, cella B1. Se vieni in chat fib30 sono li e mi spieghi meglio

tks

seo

proviamo qui...
apri il tuo file
premi alt+F11
si aprirà il visual basic editor
fai doppio clik su foglio 1 che trovi nel menu' di sinistra
si aprira' una finestra nella quale incollerai questo:

Private Sub Worksheet_Calculate()
' Variabile usata solo per accellerare il codice
Dim lngCounter As Long

With Foglio2

' Incrementa contatore ed aggiorna relativa cella (Z1)
lngCounter = .Cells(1, 26).Value + 1
.Cells(1, 26).Value = lngCounter

' Aggiorna Target
.Cells(lngCounter, 1).Value = Foglio1.Cells(2, 1).Value
End With

End Sub

chiudi ora il visual basic editor
in questo modo i dati che ti arrivano in foglio 1 cella B1 verranno incolonnati nel foglio 2 colonna A.

da questo punto in poi puoi gestire i dati della colonna come meglio credi

ok?
 
Re: Re: ...

Scritto da seo
Stesso problema dove metto tutta sta roba? e non è un pò troppo pesante?

ciao e tks

Quello che ti ho postato è un esempio su come potevi lavorare per ottenere quello che volevi.
Io lo uso per creare un time&sales su foglio .xls del titolo che sto tradando; nel file di esempio, AEM.
Il risultato lo vedi nell'immagine allegata.
Comunque Scarlet te l'ha già confezionato.
In quanto alla pesantezza, excel non si accorge nemmeno di 40 righe di codice....:p :p
E' come non averlo.

S.
 

Allegati

  • aa.png
    aa.png
    5,8 KB · Visite: 366
Re: Re: Re: Re: Re: Volumi Progressivi Excel

Scritto da scarlet
proviamo qui...
apri il tuo file
premi alt+F11
si aprirà il visual basic editor
fai doppio clik su foglio 1 che trovi nel menu' di sinistra
si aprira' una finestra nella quale incollerai questo:

Private Sub Worksheet_Calculate()
' Variabile usata solo per accellerare il codice
Dim lngCounter As Long

With Foglio2

' Incrementa contatore ed aggiorna relativa cella (Z1)
lngCounter = .Cells(1, 26).Value + 1
.Cells(1, 26).Value = lngCounter

' Aggiorna Target
.Cells(lngCounter, 1).Value = Foglio1.Cells(2, 1).Value
End With

End Sub

chiudi ora il visual basic editor
in questo modo i dati che ti arrivano in foglio 1 cella B1 verranno incolonnati nel foglio 2 colonna A.

da questo punto in poi puoi gestire i dati della colonna come meglio credi

ok?

Ho seguito le tue istruzioni ma sulla colonna A del foglio 2 non compare nulla. Puoi controllare? Grazie mille

seo
 
ti allego il file se avessi voglia di modificarlo tu.....

grazie per la disponibilità

seo
 

Allegati

  • fib.xls
    22,5 KB · Visite: 144
Indietro