Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
 All Forums
 Help
 Aiuti, consigli, dubbi ...
 indicatore

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
mrcstefy Posted - 28 October 2004 : 07:46:44
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

3   L A T E S T    R E P L I E S    (Newest First)
SupportoTecnico Posted - 01 November 2004 : 17:13:30

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







mrcstefy Posted - 01 November 2004 : 16:17:35
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






SupportoTecnico Posted - 28 October 2004 : 14:07:45

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





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