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 ...
 indicatore
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

mrcstefy
Nuovo Utente

9 Posts

Posted - 28 October 2004 :  07:46:44  Show Profile  Reply with Quote
Buon giorno,
non ? quello che avevo in mente.
Cio?, ho capito la sintassi del vostro codice ma:
centrando la media mobile di mezzo periodo (ovvero spostandola indietro di mezzo periodo) alla fine rimane mezzo periodo scoperto.

In altri termini se l'ultimo valore calcolabile della media mobile ? retrocesso, nel nostro caso di 30 giorni allora gli ultimi 30 giorni saranno scoperti e non ci sar? alcuna media mobile da tracciare sopra il titolo.
E allora suppongo che gli ultimi 30 giorni di indice siano uguali all'ultimo dato disponibile.
Sostanzialmente nello storico dei dati devo considerare di aggiungere 30 giorni in + uguali all'ultima chiusura.
E con Excel ? facile perch? copio per 30 volte in basso l'ultimo valore.
Ma come si fa con Insider?
Non riesco a capire.
Grazie

SupportoTecnico
Forum Admin

1261 Posts

Posted - 28 October 2004 :  14:07:45  Show Profile  Reply with Quote

Le prossima volta aggiungi la replica al messaggio precedente senza creare un nuovo Topic altrimenti si perde il filo del discorso (parlo a favore degli altri utenti che magari possono trovare interessante l'argomento).

Un esempio di codice che dovrebbe fare ci? che dici ? il seguente:


Function Main()
Dim mc30 As Numeric
Dim mc60 As Numeric
Dim dMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric

If (TotBar - CurrentBar >= 30) then
mc60 = Moveav(Close, 60, "S", 0, - 30)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 30)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (30 - dMyPos)

mc60 = dTot / 60
endif

If (TotBar - CurrentBar >= 15) then
mc30 = Moveav(Close, 30, "S", 0, - 15)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 15)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (15 - dMyPos)

mc30 = dTot / 30
endif

Return mc30 - mc60

EndFunction




Go to Top of Page

mrcstefy
Nuovo Utente

9 Posts

Posted - 01 November 2004 :  16:17:35  Show Profile  Reply with Quote
Come potete capire sono proprio nuovo, nuovo, di forum e cose del genere, scusate a mia discolpa posso dirvi che avevo pensato anche agli altri utenti utilizzando sempre lo stesso titolo per i miei post.
Visto la vostra disponibilit? continuo nelle mie delucidazioni.
Applicando il vostro codice mi accorgo che funziona abbastanza bene,
alcune cose non le ho capite anche se funzionano;
avete scritto:
If (TotBar - CurrentBar >= 30) then
mc60 = Moveav(Close, 60, "S", 0, - 30)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 30)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (30 - dMyPos)

mc60 = dTot / 60
endif

Non capisco che bisogno c?? della condizione :
If (TotBar - CurrentBar >= 30) then

Che cos? interpreto
Se (tutto il periodo ? il giorno attuale ? maggiore uguale a 30 allora
calcola la media centrata
mc60 = Moveav(Close, 60, "S", 0, - 30)
altrimenti dMypos = tutto il periodo ? il giorno attuale

e della parte successiva che suppongo serva per riempire i giorni mancanti, potrei avere la spiegazione

dTot = Sum(Close, 30)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (30 - dMyPos)

mc60 = dTot / 60

poi c?? l?altra parte che si ripete ed infine rimane:
Return mc30-mc60
A questo punto plottando su un grafico ho un andamento abbastanza attinente ad un ciclo.
Ora vorrei sottrarre ad ogni valore trovato di mc30-mc60 il suo precedente e cio? calcolare la velocit?.
Ho provato a procedere senza ottenere alcun risultato in questo modo:

(alla fine del codice che riporto completo per tutti ho inserito un'altra variabile)

Function Main()
Dim mc30 As Numeric
Dim mc60 As Numeric
Dim dMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric

If (TotBar - CurrentBar >= 30) then
mc60 = Moveav(Close, 60, "S", 0, - 30)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 30)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (30 - dMyPos)

mc60 = dTot / 60
endif

If (TotBar - CurrentBar >= 15) then
mc30 = Moveav(Close, 30, "S", 0, - 15)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 15)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (15 - dMyPos)

mc30 = dTot / 30
endif

in questo punto elimino (Return mc30 - mc60)
e lo sostituisco con

dim intermedio as Numeric
intermedio = mc30 - mc60
return intermedio - (1) ( in questo punto voglio dirgli sottrai ad ogni valore d?intermedio il suo precedente
EndFunction

Grazie a tutti






Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 01 November 2004 :  17:13:30  Show Profile  Reply with Quote

Il pezzo di codice:


If (TotBar - CurrentBar >= 30) then
mc60 = Moveav(Close, 60, "S", 0, - 30)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 30)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (30 - dMyPos)

mc60 = dTot / 60
endif


? tutto assieme.
L'If serve per calcolare la media mobile semplice nel modo tradizionale (usando cio? l'apposita funzione) fino a che ci sono periodi disponibili altrimenti la si calcola "a mano" aggiungendo i periodi mancanti.

Infatti:

dTot = Sum(Close, 30)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (30 - dMyPos)
mc60 = dTot / 60

non fa altro che calcolare la media mobile semplice a 60 giorni.



Il codice che hai scritto alla fine:

dim intermedio as Numeric
intermedio = mc30 - mc60
return intermedio - (1)

sottrae 1 al valore di "intermedio", quindi non fa quello che vuoi tu.

Per fare ci? che desideri ci sono diversi modi. Uno di questi potrebbe essere:



Dim dMemIntermedio As Numeric = 0

Function Main()
Dim mc30 As Numeric
Dim mc60 As Numeric
Dim dMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
Dim dResult As Numeric

If (TotBar - CurrentBar >= 30) then
mc60 = Moveav(Close, 60, "S", 0, - 30)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 30)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (30 - dMyPos)

mc60 = dTot / 60
endif

If (TotBar - CurrentBar >= 15) then
mc30 = Moveav(Close, 30, "S", 0, - 15)
else
dMyPos = TotBar - CurrentBar

dTot = Sum(Close, 15)
For i = 1 to dMyPos
dTot = dTot + Close(i)
next i
dTot = dTot + Close(dMyPos) * (15 - dMyPos)

mc30 = dTot / 30
endif

dResult = ((mc30 - mc60) - dMemIntermedio)
dMemIntermedio = mc30 - mc60

Return dResult

EndFunction







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