Insider 3000 - Forums
Insider 3000 - Forums
Home | Profile | Active Topics | Members | Search | FAQ
 All Forums
 Community
 Scambio Indicatori, Trading System ecc..
 MFI

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
fsprea Posted - 11 September 2007 : 09:03:09
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


4   L A T E S T    R E P L I E S    (Newest First)
SupportoTecnico Posted - 12 January 2008 : 11:54:22
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).

scarlet Posted - 06 January 2008 : 17:56:29
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

fsprea Posted - 12 September 2007 : 06:59:13
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").

SupportoTecnico Posted - 12 September 2007 : 00:48:33
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.

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