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

 All Forums
 Community
 Scambio Indicatori, Trading System ecc..
 MFI
 New Topic  Reply to Topic
 Printer Friendly
Author Previous Topic Topic Next Topic  

fsprea
Nuovo Utente

4 Posts

Posted - 11 September 2007 :  09:03:09  Show Profile  Reply with Quote
Cari amici,

ho provato ad implementare l'MFI (Money Flux Index) secondo l'algoritmo spiegato ad es. in http://www.investopedia.com/terms/m/mfi.asp.
L'indice è giusto, stando ad un paio di comparazioni con titoli esaminati su prophet.net.
La procedura è riportata sotto: il problema è che è lentissima, probabilmente a causa dell'uso degli arrays. C'è qualcuno che ha un'idea migliore? C'è modo di snellire il tutto?

Grazie anticipate.


Function Main()
Dim typicalPrice As Numeric() = 10
Dim moneyFlow As Numeric() = 10
Dim moneyRatio As Numeric
Dim positiveMoneyFlow As Numeric = 0
Dim negativeMoneyFlow As Numeric = 0
Dim Index as Numeric = 0
Dim MFI As Numeric

'calculation of the typical price for each period
For Index = Period to 0 Step - 1
typicalPrice(Index) = ((Close( - Index) + High( - Index) + Low( - Index)) / 3)
Next

'calculation of the money Flow for each period
For Index = Period to 0 Step - 1
moneyFlow(Index) = typicalPrice(Index) * Volume( - Index)
Next

'calculation of Money Ratio
For Index = 0 to (Period - 1)
If typicalPrice(Index) > typicalPrice(Index + 1) then
positiveMoneyFlow = positiveMoneyFlow + moneyFlow(Index)
else
negativeMoneyFlow = negativeMoneyFlow + moneyFlow(Index)
endif
next
moneyRatio = positiveMoneyFlow / negativeMoneyFlow

'finally the MFI
MFI = 100 - (100 / (1 + moneyRatio))

'la parola chiave return in un indicatore deve sempre tornare un valore numerico..
Return MFI


EndFunction


SupportoTecnico
Forum Admin

1261 Posts

Posted - 12 September 2007 :  00:48:33  Show Profile  Reply with Quote
Il problema della lentezza è dovuto ai cicli "For" che si trovano all'interno della funzione Main. E ancora, più precisamente, al valore di "Period", che ovviamente, più è grande, più è il numero di cicli che devono essere eseguiti per ogni periodo in elaborazione.

Per esempio, io ho provato con Period = 10 su una serie storica di 1500 periodi (Pentium 4 - 3.2mhz) e ci impiega 2/3 secondi circa a disegnare l'indicatore.
Poi ho provato con Period = 50 e i secondi sono aumentati a una decina circa.

Purtroppo soluzioni alternative non me vengono in mente. Il tuo codice mi sembra già abbastanza ottimizzato. Potresti unire il primo ciclo con il secondo. Di fatto non serve tenerli separati. Anche se questo influisce poco sulla performance generale.
Go to Top of Page

fsprea
Nuovo Utente

4 Posts

Posted - 12 September 2007 :  06:59:13  Show Profile  Reply with Quote
Grazie mille della risposta. Ho corretto il codice togliendo il secondo ciclo for-next. Di sicuro la correzione fa guadagnare in eleganza. Non che abbia notato un miglioramento significativo della performance, come anticipavi.

A presto per nuove sfide! (Ad es l'ottimizzazione del Chandelier presentato in un altro post: quello sì che per la performance è un "pachiderma").

Go to Top of Page

scarlet
Nuovo Utente

17 Posts

Posted - 06 January 2008 :  17:56:29  Show Profile  Reply with Quote
ciao,
ho provato l'indicatore MFI ma non ottengo alcuna linea, voi dite che funziona, anche se è lento, a me purtroppo non funziona per niente.
come mai??
grazie 1000

Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 12 January 2008 :  11:54:22  Show Profile  Reply with Quote
Il codice riportato sopra è corretto.
Mancano però 2 cose che tu da veterano di Insider 3000 dovresti sapere! :

- devi aggiungere la proprieta' "Period".. visto che se non lo fai nemmeno te lo fa salvare l'indicatore.
E quindi devi aggiungere:

property Period as Numeric
Range (2, 1000)
default (0)
endproperty


- poi, quando alleghi l'indicatore al tuo grafico, devi settare giustamente la proprietà Period ad un valore maggiore di 1 (per esempio prova con 10).

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