Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Help
 Aiuti, consigli, dubbi ...
 Database
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

VpV
Utente Medio

155 Posts

Posted - 20 January 2011 :  10:33:08  Show Profile  Reply with Quote
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.

SupportoTecnico
Forum Admin

1261 Posts

Posted - 20 January 2011 :  15:28:28  Show Profile  Reply with Quote
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.
Go to Top of Page

VpV
Utente Medio

155 Posts

Posted - 26 January 2011 :  13:05:16  Show Profile  Reply with Quote
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
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 26 January 2011 :  15:21:09  Show Profile  Reply with Quote
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.
Go to Top of Page

VpV
Utente Medio

155 Posts

Posted - 26 January 2011 :  15:59:58  Show Profile  Reply with Quote
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. ;)
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 26 January 2011 :  16:53:41  Show Profile  Reply with Quote
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)

Go to Top of Page

VpV
Utente Medio

155 Posts

Posted - 26 January 2011 :  18:57:11  Show Profile  Reply with Quote
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.
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 26 January 2011 :  19:14:54  Show Profile  Reply with Quote
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à.
Go to Top of Page

VpV
Utente Medio

155 Posts

Posted - 27 January 2011 :  12:08:24  Show Profile  Reply with Quote
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.
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 27 January 2011 :  14:39:06  Show Profile  Reply with Quote
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



Go to Top of Page

VpV
Utente Medio

155 Posts

Posted - 27 January 2011 :  17:50:42  Show Profile  Reply with Quote
[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.


Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
 Printer Friendly
Jump To:
Insider 3000 - Forums © Copyright 2003-2016 Tradersoft s.r.l. Go To Top Of Page
Powered By: Snitz Forums 2000 Version 3.4.07