Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
 All Forums
 Help
 Aiuti, consigli, dubbi ...
 Database

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
VpV Posted - 20 January 2011 : 10:33:08
Buon dì,

Non ho trovato riferimenti del mio caso e quindi Vi devo chiedere aiuto;
ho la necessità di importare i dati di alcuni titoli per sviluppare degli indicatori.

Vi chiedo quindi se esiste un altro modo per sommare questi dati di fonti diverse ovvero se è per forza necessario avere i "sottostanti" caricati in un gruppo di lavoro.

Il problema quindi è quello di dover attivare un certo numero di titoli/sottostanti in un gruppo di lavoro e questo comporta una bella perdita di tempo, oltre che avere un gran numero di titoli caricati su quel gruppo di lavoro.

Quindi, non è per caso possibile utilizzare la funzione DB senza il "gruppo di lavoro" ovvero richiamando i dati direttamente dalla cartella Insider ?

Vi ringrazio per la risposta.
10   L A T E S T    R E P L I E S    (Newest First)
VpV Posted - 27 January 2011 : 17:50:42
[quote]Originally posted by SupportoTecnico

Facendo un po' le somme, se quello che dici è corretto, e cioè che singolarmente i due indicatori funzionano, potrei azzardare questa ipotesi:

- il calcolo dell'indicatore all'interno del ciclo "Do Until" supera i 10 secondi. In pratica, l'interprete del linguaggio, esce da ciclo "Do Until" se un certo tipo di calcolo impiega più di 10 secondi (per singolo passaggio all'interno del ciclo). Insomma trattasi di un timeout proprio perchè il ciclo "do until" per sua natura potrebbe essere un ciclo infinito.



-----------------------------------------------


Adesso funziona tutto, grazie. E' lento, molto lento ma non importa per adesso, vedrò se riesco a velocizzare.


SupportoTecnico Posted - 27 January 2011 : 14:39:06
Facendo un po' le somme, se quello che dici è corretto, e cioè che singolarmente i due indicatori funzionano, potrei azzardare questa ipotesi:

- il calcolo dell'indicatore all'interno del ciclo "Do Until" supera i 10 secondi. In pratica, l'interprete del linguaggio, esce da ciclo "Do Until" se un certo tipo di calcolo impiega più di 10 secondi (per singolo passaggio all'interno del ciclo). Insomma trattasi di un timeout proprio perchè il ciclo "do until" per sua natura potrebbe essere un ciclo infinito.

La soluzione è sostituire il "Do until" con un ciclo "for":



Property v1() As Numeric
Default (100)
EndProperty

Property v2() As Numeric
Default (40)
EndProperty

Function Main()
dim i as Numeric = 0
dim voltot1 as Numeric = 0
dim volup1 as Numeric = 0
dim voldown1 as Numeric = 0

dim MioVolume as numeric
dim MioVolume_Ciclo as numeric
dim a as Numeric

MioVolume = VOLMIB

'gestisce il primo passo di calcolo
voltot1 = MioVolume
if close > close( - 1) then
   volup1 = volup1 + MioVolume
else
   if close = close( - 1) then
      volup1 = volup1 + MioVolume
      voldown1 = voldown1 + MioVolume
   else
      voldown1 = voldown1 + MioVolume
   endif
endif

for a = 1 to 1000000
  if (voltot1 > v2 * moveav(volmib, v1)) then
    goto ExitFor
  endif

  i = i + 1

  MioVolume_Ciclo = value(volmib, - i)

  voltot1 = voltot1 + MioVolume_Ciclo
  if close( - i) > close( - i - 1) then
      volup1 = volup1 + MioVolume_Ciclo
  else
      if close( - i) = close( - i - 1) then
        volup1 = volup1 + MioVolume_Ciclo
        voldown1 = voldown1 + MioVolume_Ciclo
      else
        voldown1 = voldown1 + MioVolume_Ciclo
      endif
  endif
next a

ExitFor:

return 100 * (1 - voldown1 / (volup1 + voldown1))

Endfunction



VpV Posted - 27 January 2011 : 12:08:24
quote:
Originally posted by SupportoTecnico

Preso singolarmente il tuo indicatore "volmib" funziona? Cioè riesci a visualizzarne il grafico?

E preso come è in originale l'indicatore VOLFAB funziona? riesci a visualizzarne il grafico?

Se si allora il problema potrebbe stare nel fatto che VOLMIB è un po' pesante come calcolo e viene usato troppe volte nel codice.

Puoi ovviare a questo, assegnando il valore dell'indicatore solo una volta ad una variabile e poi utilizzare quella nei vari calcoli:


Property v1() As Numeric
Default (100)
EndProperty

Property v2() As Numeric
Default (40)
EndProperty

Function Main()
dim i as Numeric = 0
dim voltot1 as Numeric = 0
dim volup1 as Numeric = 0
dim voldown1 as Numeric = 0

dim MioVolume as numeric
dim MioVolume_Ciclo as numeric

MioVolume = VOLMIB

'gestisce il primo passo di calcolo
voltot1 = MioVolume
if close > close( - 1) then
   volup1 = volup1 + MioVolume
else
   if close = close( - 1) then
      volup1 = volup1 + MioVolume
      voldown1 = voldown1 + MioVolume
   else
      voldown1 = voldown1 + MioVolume
   endif
endif

do until voltot1 > v2 * moveav(volmib, v1)
  i = i + 1

  MioVolume_Ciclo = value(volmib, - i)

  voltot1 = voltot1 + MioVolume_Ciclo
  if close( - i) > close( - i - 1) then
      volup1 = volup1 + MioVolume_Ciclo
  else
      if close( - i) = close( - i - 1) then
        volup1 = volup1 + MioVolume_Ciclo
        voldown1 = voldown1 + MioVolume_Ciclo
      else
        voldown1 = voldown1 + MioVolume_Ciclo
      endif
  endif

loop

return 100 * (1 - voldown1 / (volup1 + voldown1))

Endfunction



Quusto serve per aumentare la velocità.



Allora, ho provato quanto da Voi esposto ma ancora nulla ergo ora Vi scrivo quali prove ho fatto, ulteriormente, per capire cosa non possa andare. Devo dire però che il codice sopra è certamente più veloce, adesso la schermata bianca arriva sotto al minuto...ma rimane bianca ovvero senza indicatore.

A) ovviamente il mio UI e VolFab funzionano correttamente, presi singolarmente.

B)Ho fatto un test per capire se poteva essere altro problema al di fuori del mio indicatore e tutto funziona...quindi il problema è mio.
Ho preso i volumi del Dax, attraverso DBEXP ovvero un database, è ho creato l'UI VOLDAX. Ho sostituito come da Vostra sorgente il nuovo UIVOLDAX e tutto funziona correttamente, il VolFab su volumi Dax e il VolFab sul VOLDAX sono identici, stessi valori ergo il problema deve risiedere necessariamente nel mio UIVOLMIB che adesso vi plotto, anche se rimane una semplice somma...lenta, ma pur sempre una semplice addizione.

Grazie.

Ecco il codice di VOLMIB:

Database A2A("Lavoro", "A2A.MI", "N")
Database ANSALDOSTS("Lavoro", "STS.MI", "N")
Database ATLANTIA("Lavoro", "ATL.MI", "N")
Database AUTOGRILL("Lavoro", "AGL.MI", "N")
Database AZIMUT("Lavoro", "AZM.MI", "N")
Database BANCAMPS("Lavoro", "BMPS.MI", "N")
Database BANCAPOPOLARE("Lavoro", "BP.MI", "N")
Database BCAPOPMILANO("Lavoro", "PMI.MI", "N")
Database BULGARI("Lavoro", "BUL.MI", "N")
Database BUZZIUNICEM("Lavoro", "BZU.MI", "N")
Database CAMPARI("Lavoro", "CPR.MI", "N")
Database DIASORIN("Lavoro", "DIA.MI", "N")
Database ENEL("Lavoro", "ENEL.MI", "N")
Database ENELGP("Lavoro", "EGPW.MI", "N")
Database ENI("Lavoro", "ENI.MI", "N")
Database EXOR("Lavoro", "EXO.MI", "N")
Database FIAT("Lavoro", "F.MI", "N")
Database FIATINDUST("Lavoro", "FI.MI", "N")
Database FINMECCANICA("Lavoro", "FNC.MI", "N")
Database FONDIARIASAI("Lavoro", "FSA.MI", "N")
Database GENERALI("Lavoro", "G.MI", "N")
Database IMPREGILO("Lavoro", "IPG.MI", "N")
Database INTESASAMP("Lavoro", "ISP.MI", "N")
Database LOTTOMATICA("Lavoro", "LTO.MI", "N")
Database LUXOTTICAGROUP("Lavoro", "LUX.MI", "N")
Database MEDIASET("Lavoro", "MS.MI", "N")
Database MEDIOBANCA("Lavoro", "MB.MI", "N")
Database MEDIOLANUM("Lavoro", "MED.MI", "N")
Database PARMALAT("Lavoro", "PLT.MI", "N")
Database PIRELLI("Lavoro", "PC.MI", "N")
Database PRYSMIAN("Lavoro", "PRY.MI", "N")
Database SAIPEM("Lavoro", "SPM.MI", "N")
Database SNAM("Lavoro", "SRG.MI", "N")
Database STM("Lavoro", "STM.MI", "N")
Database TELECOM("Lavoro", "TIT.MI", "N")
Database TENARIS("Lavoro", "TEN.MI", "N")
Database TERNA("Lavoro", "TRN.MI", "N")
Database TOD("Lavoro", "TOD.MI", "N")
Database UBI("Lavoro", "UBI.MI", "N")
Database UNICREDIT("Lavoro", "UCG.MI", "N")

Function Main()
DIM F1 AS Numeric
DIM F2 AS Numeric
DIM F3 AS Numeric
DIM F4 AS Numeric
DIM F5 AS Numeric
DIM F6 AS Numeric
DIM F7 AS Numeric
DIM F8 AS Numeric
DIM F9 AS Numeric
DIM F10 AS Numeric
DIM F11 AS Numeric
DIM F12 AS Numeric
DIM F13 AS Numeric
DIM F14 AS Numeric
DIM F15 AS Numeric
DIM F16 AS Numeric
DIM F17 AS Numeric
DIM F18 AS Numeric
DIM F19 AS Numeric
DIM F20 AS Numeric
DIM F21 AS Numeric
DIM F22 AS Numeric
DIM F23 AS Numeric
DIM F24 AS Numeric
DIM F25 AS Numeric
DIM F26 AS Numeric
DIM F27 AS Numeric
DIM F28 AS Numeric
DIM F29 AS Numeric
DIM F30 AS Numeric
DIM F31 AS Numeric
DIM F32 AS Numeric
DIM F33 AS Numeric
DIM F34 AS Numeric
DIM F35 AS Numeric
DIM F36 AS Numeric
DIM F37 AS Numeric
DIM F38 AS Numeric
DIM F39 AS Numeric
DIM F40 AS Numeric
DIM SOMMA AS Numeric

F1 = Dbexp(Volume, "A2A")
F2 = Dbexp(Volume, "ANSALDOSTS")
F3 = Dbexp(Volume, "ATLANTIA")
F4 = Dbexp(Volume, "AUTOGRILL")
F5 = Dbexp(Volume, "AZIMUT")
F6 = Dbexp(Volume, "BANCAMPS")
F7 = Dbexp(Volume, "BANCAPOPOLARE")
F8 = Dbexp(Volume, "BCAPOPMILANO")
F9 = Dbexp(Volume, "BULGARI")
F10 = Dbexp(Volume, "BUZZIUNICEM")
F11 = Dbexp(Volume, "CAMPARI")
F12 = Dbexp(Volume, "DIASORIN")
F13 = Dbexp(Volume, "ENEL")
F14 = Dbexp(Volume, "ENELGP")
F15 = Dbexp(Volume, "ENI")
F16 = Dbexp(Volume, "EXOR")
F17 = Dbexp(Volume, "FIAT")
F18 = Dbexp(Volume, "FIATINDUST")
F19 = Dbexp(Volume, "FINMECCANICA")
F20 = Dbexp(Volume, "FONDIARIASAI")
F21 = Dbexp(Volume, "GENERALI")
F22 = Dbexp(Volume, "IMPREGILO")
F23 = Dbexp(Volume, "INTESASAMP")
F24 = Dbexp(Volume, "LOTTOMATICA")
F25 = Dbexp(Volume, "LUXOTTICAGROUP")
F26 = Dbexp(Volume, "MEDIASET")
F27 = Dbexp(Volume, "MEDIOBANCA")
F28 = Dbexp(Volume, "MEDIOLANUM")
F29 = Dbexp(Volume, "PARMALAT")
F30 = Dbexp(Volume, "PIRELLI")
F31 = Dbexp(Volume, "PRYSMIAN")
F32 = Dbexp(Volume, "SAIPEM")
F33 = Dbexp(Volume, "SNAM")
F34 = Dbexp(Volume, "STM")
F35 = Dbexp(Volume, "TELECOM")
F36 = Dbexp(Volume, "TENARIS")
F37 = Dbexp(Volume, "TERNA")
F38 = Dbexp(Volume, "TOD")
F39 = Dbexp(Volume, "UBI")
F40 = Dbexp(Volume, "UNICREDIT")

SOMMA = F1 + F2 + F3 + F4 + F5 + F6 + F7 + F8 + F9 + F10 + F11 + F12 + F13 + F14 + F15 + F16 + F17 + F18 + F19 + F20 + F21 + F22 + F23 + F24 + F25 + F26 + F27 + F28 + F29 + F30 + F31 + F32 + F33 + F34 + F35 + F36 + F37 + F38 + F39 + F40

return SOMMA

Endfunction

Sicuramente può essere scritto meglio ma mi interessava avere il risultato finale poi mi sarei preoccupato di verificare l'ottimizzazione.

Grazie ancora.
SupportoTecnico Posted - 26 January 2011 : 19:14:54
Preso singolarmente il tuo indicatore "volmib" funziona? Cioè riesci a visualizzarne il grafico?

E preso come è in originale l'indicatore VOLFAB funziona? riesci a visualizzarne il grafico?

Se si allora il problema potrebbe stare nel fatto che VOLMIB è un po' pesante come calcolo e viene usato troppe volte nel codice.

Puoi ovviare a questo, assegnando il valore dell'indicatore solo una volta ad una variabile e poi utilizzare quella nei vari calcoli:


Property v1() As Numeric
Default (100)
EndProperty

Property v2() As Numeric
Default (40)
EndProperty

Function Main()
dim i as Numeric = 0
dim voltot1 as Numeric = 0
dim volup1 as Numeric = 0
dim voldown1 as Numeric = 0

dim MioVolume as numeric
dim MioVolume_Ciclo as numeric

MioVolume = VOLMIB

'gestisce il primo passo di calcolo
voltot1 = MioVolume
if close > close( - 1) then
   volup1 = volup1 + MioVolume
else
   if close = close( - 1) then
      volup1 = volup1 + MioVolume
      voldown1 = voldown1 + MioVolume
   else
      voldown1 = voldown1 + MioVolume
   endif
endif

do until voltot1 > v2 * moveav(volmib, v1)
  i = i + 1

  MioVolume_Ciclo = value(volmib, - i)

  voltot1 = voltot1 + MioVolume_Ciclo
  if close( - i) > close( - i - 1) then
      volup1 = volup1 + MioVolume_Ciclo
  else
      if close( - i) = close( - i - 1) then
        volup1 = volup1 + MioVolume_Ciclo
        voldown1 = voldown1 + MioVolume_Ciclo
      else
        voldown1 = voldown1 + MioVolume_Ciclo
      endif
  endif

loop

return 100 * (1 - voldown1 / (volup1 + voldown1))

Endfunction



Quusto serve per aumentare la velocità.
VpV Posted - 26 January 2011 : 18:57:11
quote:
Originally posted by SupportoTecnico

Non puoi fare una semplice sostituzione!

Proprio perch� "Volume" ha un suo paramentro (offset) che significa una certa cosa. In particolare quel "- i" significa prendi il valore del periodo precedente.

Il tuo indicatore non ha quel paramentro (propriet�), e non ne puoi creare una per simulare lo stesso funzionamento della funzione "Volume".

Esiste come quasi sempre la via alternativa.

La soluzione � usare la funzione "Value":

voltot1 = voltot1 + Value(volmib, - i)





Grazie, adesso salva senza problemi/errori ma non funziona nulla.

Il pc lavora per un minuto buono, si pianta, e poi compare una schermata bianca ovvero nessun indicatore.

E' lo stesso problema che si ha quando si omette un parametro o insider non riesce a trovare una corrispondenza nell'UI.

Ma sinceramente qui non so proprio cosa possa non funzionare anche perchè di segnali di errori non ne dà.

Ho sosituito come avete scritto Voi, prima solo nelle parti (-i) e poi, visto il risultato, anche su tutto il resto ma schermata bianca uguale.

Ho provato a chiamare il mio UI SOMMA attraverso altro UI, così per provare, e tutto funziona perfettamente.

Le apparenze mi dicono che VOLFAB non lavora il mio UISOMMA ma non capisco il perchè, probabilmente è un problema di indirizzo.

Grazie.
SupportoTecnico Posted - 26 January 2011 : 16:53:41
Non puoi fare una semplice sostituzione!

Proprio perchè "Volume" ha un suo paramentro (offset) che significa una certa cosa. In particolare quel "- i" significa prendi il valore del periodo precedente.

Il tuo indicatore non ha quel paramentro (proprietà), e non ne puoi creare una per simulare lo stesso funzionamento della funzione "Volume".

Esiste come quasi sempre la via alternativa.

La soluzione è usare la funzione "Value":

voltot1 = voltot1 + Value(volmib, - i)

VpV Posted - 26 January 2011 : 15:59:58
quote:
Originally posted by SupportoTecnico

In teoria non ci dovrebbero essere problemi nel fare quello che dici.

Per risponderti giustamente per�, abbiamo bisogno del codice sorgente in modo da capire esattamente quale sia il problema nel tuo caso.
Quindi, scrivici pure alla nostra email (se l'indicatore deve rimanere segreto), spedendoci il codice sorgente dell'indicatore e il codice dove andrebbe usato.



Grazie per la rapidità ma il problema non è mio(segreto) ma, probabilmente, dell'autore o Vostro poichè l'indicatore, che avete, è scaricabile solo per chi ha comprato il programma, ecco perchè non ho riportato tale indicatore, non mi sembrava corretto per Voi e per l'autore stesso.

Tuttavia il mio indicatore è solo una somma di volumi dei titoli presenti nel MIB40 ma, come dicevo, alla sostituzione con il mio (VOLMIB vs volume) ricevo il messaggio di errore "numero di argomenti errati riga 32" .

Se volete provvedo comunque all'invio via mail di tutto, ma se sostituite la voce volume presente nell'algoritmo con un vostro indicatore, magari un UI di volume di due indici o titoli(somma), dovreste avere lo stesso problema.

In estrema sintesi : voltot1 = voltot1 + volume( - i)

voltot1 = voltot1 + volmib( - i)

Ovviamente in tutti i campi di "volume".


Grazie ancora per il servizio. ;)
SupportoTecnico Posted - 26 January 2011 : 15:21:09
In teoria non ci dovrebbero essere problemi nel fare quello che dici.

Per risponderti giustamente però, abbiamo bisogno del codice sorgente in modo da capire esattamente quale sia il problema nel tuo caso.
Quindi, scrivici pure alla nostra email (se l'indicatore deve rimanere segreto), spedendoci il codice sorgente dell'indicatore e il codice dove andrebbe usato.
VpV Posted - 26 January 2011 : 13:05:16
quote:
Originally posted by SupportoTecnico

Parliamo della funzione "Database" del linguaggio di programmazione vero?
Purtroppo, il gruppo di lavoro � un paramentro obbligatorio per quella funzione e quindi non � possibile farne a meno accedendo direttamente al file dati.




Riprendo da quin per non aprire un nuovo post.

La domanda rimane attinente alla precedente poichè ho ovviato al problema facendo tutto il lavoro di carico su un Gruppo di lavoro e successiva creazione di indicatore.

Ora però necessito di un Vostro aiuto perchè i l'indicatore che ho creato deve, vorrei, essere utilizzato per un indicatore presente nelle dispense del sito ovvero VOLFAB.

Ho provveduto a sostituire la voce volume con quella dell'indicatore da me creato che alto non è che una somma di volumi ma, contrariamente in quello che avviene in altri casi, qui non riesco a farlo funzionare poichè l'editor mi dà errore di sintassi.

Ho provato vari passaggi, dalla creazione di una dim, ad un nome diverso e via dicendo ma l'errore rimane.

E' come se non mi prendesse l'indicatore come valore numero eppure il volume presente nella formula lo è.

Grazie
SupportoTecnico Posted - 20 January 2011 : 15:28:28
Parliamo della funzione "Database" del linguaggio di programmazione vero?
Purtroppo, il gruppo di lavoro è un paramentro obbligatorio per quella funzione e quindi non è possibile farne a meno accedendo direttamente al file dati.

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