T O P I C R E V I E W |
imf69 |
Posted - 02 November 2010 : 10:46:39 Buongiorno,
Avrei l'esigenza di utilizzare degli indicatori all'interno di un Ts (o allarme) calcolati però su base settimanale e non daily. Ad esempio mi servirebbe ottenere il valore del MACD in un TS come se stessi osservando il grafico con la compressione settimanale.
Grazie in anticipo per l'aiuto. Cordiali saluti |
4 L A T E S T R E P L I E S (Newest First) |
SupportoTecnico |
Posted - 03 November 2010 : 14:41:25 Al momento, non è possibile parametrizzare direttamente quale base dati esterna aprire.
Possiamo però risolvere la cosa in un modo meno elegante.
Se stai programmando un trading system e dalla base dati esterna ti serve solamente il valore di uno o più indicatori, allora il mio suggerimento è quello di spostare all'interno di un indicatore utente (cioè un indicatore programmato da te), l'accesso alla base dati esterna.
In pratica, costruire un indicatore di questo tipo:
Database A2A("Milano", "A2A.MI", "W")
Database ANSALDO("Milano", "STS.MI", "W")
Database ATLANTIA("Milano", "ATL.MI", "W")
Database AUTOGRILL("Milano", "AGL.MI", "W")
Database AZIMUT_HOLDING("Milano", "AZM.MI", "W")
Database BANCA_MPS("Milano", "BMPS.MI", "W")
Property Titolo as Numeric
default (0)
EndProperty
Function Main()
dim Valore as Numeric
select case Titolo
case 1 'A2A
Valore = dbexp(macd, "A2A")
case 2 'ANSALDO
Valore = dbexp(macd, "ANSALDO")
case 3 'ATLANTIA
Valore = dbexp(macd, "ATLANTIA")
case 4 'AUTOGRILL
Valore = dbexp(macd, "AUTOGRILL")
case 5 'AZIMUT_HOLDING
Valore = dbexp(macd, "AZIMUT_HOLDING")
case 6 'BANCA_MPS
Valore = dbexp(macd, "BANCA_MPS")
endselect
return Valore
Endfunction
In questo modo, crei un indicatore utente che ha lo scopo di ritornare il valore del MACD di un determinato titolo calcolato su base settimanale. Quindi, all'interno del tuo Trading system per avere il valore settimanale del MACD di AUTOGRILL scriverei una cosa del tipo:
Valore = MioIndicatore(4)
Dove "MioIndicatore" è il nome che hai dato all'indicatore appena creato sopra. Passerai il parametro 4 perchè 4 corrisponde ad AUTOGRILL nella lista all'interno dell'indicatore.
A questo punto però non abbiamo ancora reso dinamica la cosa. In pratica dobbiamo rendere dinamico il valore passato a MioIndicatore (e non passare fisso 4).
Questa cosa la possiamo risolvere utilizzando un OPTION.
Quindi nel modulo "Opzioni Comuni" del tuo tranding system devi dichiarare la tua opzione:
Option OptMACD(1, 10, 1)
Io ho messo 10, come limite superiore dei valori che può assumere l'option, ma ovviamente va settato con il numero massimo (o superiore) che hai nella lista dell'indicatore.
A questo punto puoi utilizzare la tua opzione all'interno dei vari moduli del tuo Trading system, come parametro dell'indicatore di prima:
Valore = MioIndicatore(OptMACD)
Infice, quando aggiungerai il trading system ai vari titoli, dovrai settare giustamente a seconda del titolo a cui stai allegando in trading system, il valore di OptMACD. E questo lo fai nelle proprietà del trading system all'interno del pannello di controllo.
|
imf69 |
Posted - 03 November 2010 : 09:15:11 Al supporto tecnico: Salve,
Mi permetta innanzitutto di ringraziare per la professionalità della risposta, sia come tempestività che completezza.
Ho implementato nel codice del mio TS l'indicatore (nell'esempio il macd) su base weekly in base alle vs. indicazioni, e riesco ad ottenere quanto mi serve.
Si pone però un'altro problema che descrivo brevemente:
Lo scopo finale è quello di programmare un allarme che all'apertura dei grafici (di un dato gruppo) mi notifichi automaticamente se un titolo a matchato determinati criteri sia daily che weekly.
Nella funzione "database" noi attualmente passiamo un'argomento costante corrispondente al simbolo di un determinato titolo, ma l'esigenza sarebbe quella di avere un argomento variabile per tutti i titoli del gruppo aperto sottoposti a scansione.(ovvero come si comporta un normale allarme che nel codice non referenzia nessun titolo specifico)
E' possibile effettuare un'assegnazione dinamica del simbolo o è necessario creare tanti allarmi diversi quanti sono i titoli contenuti in un dato gruppo ?
La ringrazio sempre in anticipo se mi può dare uno spunto per risolvere il problema.
Buona giornata. Cordialmente Imf69 |
SupportoTecnico |
Posted - 02 November 2010 : 14:54:55 Dimenticavo:
Se vuoi a questo punto ottenere il valore del MACD sui dati settimanali, utilizzerai sempre la funzione DbExp:
ValoreMACD = DbExp(Macd, "FTSEMIB") |
SupportoTecnico |
Posted - 02 November 2010 : 14:51:48 Una soluzione potrebbe essere quella di utilizzare la parola chiave DATABASE.
Riporto la prima frase della pagina in cui è descritta:
Utilizzando la parola chiave Database è possibile accedere, all'interno delle varie funzioni, ai dati di un titolo specifico contenuto in un determinato gruppo di lavoro. Questo trova la sua utilità, ad esempio, quando per validare un segnale di un trading system si vuole verificare che un determinato titolo abbia rispettato certe regole oppure quando si vuole costruire un trading system su time frame diversi.
Quindi pare proprio che faccia al caso tuo.
Per saperne di più sull'argomento questo è il link:
http://www.insider3000.com/insider/it/hol/default.asp?titleid=01100&argid=02255
In pratica, per accedere ad una base dati esterna devi:
- dichiarare un link alla base dati, specificando la compressione che desideri (Nel tuo caso settimanale quindi => W ). E questo lo fai esternamente alla funzione "Main".
- accedere alla base dati dichiarata utilizzando la funzione dbexp e il nome della base dati.
N.B. non unitilizzare la funzione "DbValue" per accedere ai dati ma sempre "DbExp", in quanto DbValue è obsoleta e lenta.
Facciamo un piccolo esempio:
Supponiamo di voler accedere alla base dati in compressione settimanale del FTSEMIB (uesta base dati si trova nel gruppo di lavoro "Milano"), e di voler poi utilizzare questi dati all'interno del trading system accedendo ai dati stessi tramite la funzione DbExp.
Scriverò quindi:
Database FTSEMIB("Milano", "FTSEMIB.MI", "W")
Function Main()
Dim Ftse_Close as Numeric
.................
.................
.................
Ftse_Close = DbExp(Close, "FTSEMIB")
.................
.................
.................
EndFunction
|
|
|