Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
 All Forums
 Problemi con "Insider 3000 versione 3"
 Problemi col linguaggio di programmazione
 argomento funzione moveav

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
fabrivero Posted - 14 January 2003 : 15:15:34
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

7   L A T E S T    R E P L I E S    (Newest First)
fabrivero Posted - 15 January 2003 : 13:27:36
Io invece pensavo che anche i moduli fossero rieseguiti ....

Molto bene. Grazie ancora.

SupportoTecnico Posted - 15 January 2003 : 13:03:05
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


fabrivero Posted - 15 January 2003 : 12:45:12
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!



SupportoTecnico Posted - 15 January 2003 : 10:57:57
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?


fabrivero Posted - 15 January 2003 : 10:14:36
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

SupportoTecnico Posted - 14 January 2003 : 19:38:30
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


fabrivero Posted - 14 January 2003 : 15:18:17
volevo solo aggiungere che si tratta di una prova per un nuovo indicatore.




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