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

 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 argomento funzione moveav
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

fabrivero
Nuovo Utente

38 Posts

Posted - 14 January 2003 :  15:15:34  Show Profile  Reply with Quote
Volevo fare un programmino tanto per vedere se avevo capito l'uso delle funzioni, ecc..... Evidentemente c'? qualcosa che mi sfugge. Non riesco a trovare la causa dell'errore ("moveav vuole un numero come secondo argomento") nel seguente listato:

Function Main()
return fmedia(10)
Endfunction

function fmedia(n as Numeric) as Numeric
return Moveav(Close, n)
endfunction

fabrivero
Nuovo Utente

38 Posts

Posted - 14 January 2003 :  15:18:17  Show Profile  Reply with Quote
volevo solo aggiungere che si tratta di una prova per un nuovo indicatore.



Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 14 January 2003 :  19:38:30  Show Profile  Reply with Quote
L'errore sta nel fatto che gli argomenti delle funzioni degli indicatori come appunto "MoveAv" come argomenti accettano solamente costanti, "array" di dati come Close, Open, high , low ecc ..., altre funzioni indicatore, Options (nei trading systems), e propriet? negli indicatori.

Nel tuo caso "n" ? vista come variabile. Devi pertanto mettere direttamente 10, oppure creare una propriet? e metterci il nome della propriet? come in questo esempio:

Property Period() As Numeric
Range (1, 50)
Default (10)
EndProperty

Function Main()
Return fMedia()
EndFunction

Function fMedia() As Numeric
Return MoveAv(Close, Period, "S")
EndFunction


Go to Top of Page

fabrivero
Nuovo Utente

38 Posts

Posted - 15 January 2003 :  10:14:36  Show Profile  Reply with Quote
Grazie!

A me aveva tratto in inganno il seguente esempio sull'Help:

Function Main ()

In pratica si riduce alla parola chiave Function e alla parola chiave Main che in questo caso fa le veci del nome della funzione. Non esistono argomenti (non avrebbe senso), come non esiste il tipo di dato che la funzione Main restituir?. Il motivo ? molto semplice: il tipo di dato della funzione "Main" dipende dal contesto del codice. Comunque generalmente sar? sempre un numero o un valore booleano.

Aggiorniamo quindi il nostro esempio:

Function Main ()
Dim MyNum As Numeric

'chiamiamo la funzione MC per calcolare la media delle chiusure
'che dividono che vanno da periodo 1 al 10

MyNum = MC (1, 10)

Return MyNum

EndFunction



Function MC (PP As Numeric, UP As Numeric) As Numeric

' questa funzione calcola la media delle chiusure che vanno da PP a UP

Dim I As Numeric = 0 ' qui il valore di default ? 0
Dim A As Numeric
Dim S As String = "M"

I = UP - PP + 1

Return MoveAv(Close, I)

EndFunction


Volevo fare un'altra domanda se possibile:
E' possibile utilizzare funzioni ricorsive?
Ci? mi serviva per fare la media adattativa: M(t) = A(t)*M(t-1) + B(t)

Grazie ancora

Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 15 January 2003 :  10:57:57  Show Profile  Reply with Quote
Si ? vero l'esempio non ? corretto.
Il motivo sta nel fatto che la limitazione ? stata introdotta successivamente senza ancora correggere il manuale. Comunque c'? un ripensamento per quanto riguarda questa cosa e stanno valutando se togliere o meno la limitazione


Non ? possibile per una funzione chiamare se stessa. Il motivo di questa limitazione ? che ovviamente si poteva incorrere nel classico loop infinito non tanto durante il debug ma durante l'esecuzione "in esterno" (per un indicatore ad esempio mentre viene disegnato nel grafico). Il problema comunque esiste tuttora con i cicli do until.

Quindi, dalla prossima versione si ? deciso di togliere la limitazione per le funzioni ricorsive, limitandoci eventualmente ad una segnalazione in fase di debug.

Comunque, per il momento, nel tuo caso penso che ti sia sufficiente l'uso di cicli "For" o "Do Until" o mi sbaglio?


Go to Top of Page

fabrivero
Nuovo Utente

38 Posts

Posted - 15 January 2003 :  12:45:12  Show Profile  Reply with Quote
in realt? lo potrei fare anche senza richiamare la stessa funzione. Il problema rimane perch? mi serve di sapere comunque il valore della funzione al passo di tempo precedente... Ossia devo capire come faccio a salvarlo su una variabile "esterna" al main che, se non sbaglio, viene eseguito per tutti i giorni.
Mi spigo meglio con un esempio.
Se non ho capito male se ho una funzione di questo tipo:

Function Main()
return moveav(close,10)
Endfunction

questa viene eseguita per OGNI giorno ossia se ho 100 giorni mi viene eseguita 100 volte. In questo caso qualsiasi valore salvo su una variabile, questo mi viene ri_inizializzato ad ogni chiamata.

Vorrei capire se c'? un modo per mantenere un dato valore (nell'esempio magari mi serve di salvare il valore della media per poi riutilizzarlo alla prossima chiamata) tra una chiamata ed un'altra esterno al main.

Mi basta sapere che esiste una funzione (tipo open nomefile for output as numfile) che mi fa scrivere su di un file di appoggio.

Grazie mille!



Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 15 January 2003 :  13:03:05  Show Profile  Reply with Quote
Si esiste ed ? molto semplice.

Basta dichiarare una variabile di modulo. Infatti solo le variabili dichiarate all'interno della funzione vengono reinizializzate. Quelle all'esterno della funzione (magari messe in cima al modulo) mantengono il valore assegnatogli nei precedenti passaggi.

Esempio:

Dim plMedia As Numeric = 0

Function Main()
Dim dMediaNow As Numeric
Dim dMedia As Numeric

dMediaNow = MoveAv(Close, 10, "S")
dMedia = dMediaNow - plMedia
plMedia = dMediaNow

Return dMedia

EndFunction


Go to Top of Page

fabrivero
Nuovo Utente

38 Posts

Posted - 15 January 2003 :  13:27:36  Show Profile  Reply with Quote
Io invece pensavo che anche i moduli fossero rieseguiti ....

Molto bene. Grazie ancora.

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