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 ...
 Ricezione dati DDE da Metatrader usando Metaserver
 New Topic  Reply to Topic
 Printer Friendly
Next Page
Author Previous Topic Topic Next Topic
Page: of 5

Frenk
Nuovo Utente

41 Posts

Posted - 29 November 2012 :  23:47:28  Show Profile  Reply with Quote
Salve ho scaricato la piattaforma utilizzando il periodo di prova.
Da una primo approccio mi sembra buona, ma devo valutare ancora molte cose, per questo vi chedo se avete un manuale completo in pdf più dettagliato di quello che si trova nella piattaforma " o altro formato", poi vorrei sapere se acquistando la piattaforma a € 149,00 si ha la licenza a titolo definitivo.
E poi come in oggetto, non riesco a configurare il DDE ricezione dati in real-time con il metaerver versione 3.2 usando il DDE di Metatrader 4.
Nella schermata DDE ricezione dati in Real Time per insider 3000 nella parte sinistra mi sembra tutto corretto:
Forex (simobolo "Forex") > EURUSD (simbolo "EURUSD").

Nella parte destra TIME FRAME E PROPRIETA':

EURUSD > DE04720051 (simbolo) > 5 (minuti per barra)

Sempre nella parte destra inferiore non so bene cosa mettere:

Unita: Decimal
Divisore: 1/1
Usa data del PC: No
Server: MT4 (però i dati dovrei prenderli dal metaserver quindi credo sia "MSRT")
Data: (non ho capito cosa mettere)
Ora: (non ho capito cosa mettere)
Prezzo: MT4|BID!EURUSD
Volume: MT4|VOLUME!EURUSD oppure MT4|BID!EURUSD
Formato data: mm/dd/yyyy
Formato Ora: hh:mm:ss
Separatore decimale: ,
Separatore migliaia: .

Ho provato in varie maniere a completare le caselle del Server, Data, Ora ma quando vado nella schermata ricezione dati e poi connetti mi da sempre errore.

spero di essere stato chiaro, un aiuto se possibile, grazie.

Edited by - Frenk on 29 November 2012 23:54:32

SupportoTecnico
Forum Admin

1261 Posts

Posted - 30 November 2012 :  02:10:35  Show Profile  Reply with Quote
Il prezzo della licenza di Insider 3000 è di 149 euro + iva 21%, ed è una tantum, quindi si, è a titolo definitivo.


Per la questione configurazione DDE:

Purtroppo non avendo la possibilità di testare direttamente su metatrader dobbiamo andare un po' a tentativi.

Prova questa configurazione:

Unita: Decimal
Divisore: 1/1
Usa data del PC: No
Server: MT4
Data: Time!EURUSD
Ora: Time!EURUSD
Prezzo: BID!EURUSD
Volume: (lascia vuoto)
Formato data: yyyy/mm/ddBXXXXX
Formato Ora: XXXX/XX/XXBhh:mm
Separatore decimale: .
Separatore migliaia:


In particolare:

1) controlla bene come la data/ora viene fornita da MT4. Cercando su Google ho visto che potrebbe essere una cosa del genere: 2012/11/30 12:45 => da qui la configurazione che ti ho suggerito.

Il formato è importante perchè devi descrivere perfettamente al programma dove cercare l'anno il mese il giorno, l'ora e i minuti altrimenti la data/ora non sarà riconoscibile.
Go to Top of Page

Frenk
Nuovo Utente

41 Posts

Posted - 30 November 2012 :  16:58:48  Show Profile  Reply with Quote
Perfetto il grafico è partito in real time,,,,non riesco a configurare bene il volume, lasciando vuota l' apposita casella il volume è pari a 0, mentre se uso il BID o l' ASK i valori diventano molto alti, c' e modo di utilizzare qualche altro parametro per configurare al meglio il volume?
Inoltre come si fa ad aggiungere almeno un decimale in più sull' asse delle Y ?
L' EURO/DOLLARO prevede 5 decimali dopo la virgola, mentre in questo momento il grafico ne fa vedere 4 e non riesco a capire come aggiungerne uno o due in più.

grazie




quote:
Originally posted by SupportoTecnico

Il prezzo della licenza di Insider 3000 è di 149 euro + iva 21%, ed è una tantum, quindi si, è a titolo definitivo.


Per la questione configurazione DDE:

Purtroppo non avendo la possibilità di testare direttamente su metatrader dobbiamo andare un po' a tentativi.

Prova questa configurazione:

Unita: Decimal
Divisore: 1/1
Usa data del PC: No
Server: MT4
Data: Time!EURUSD
Ora: Time!EURUSD
Prezzo: BID!EURUSD
Volume: (lascia vuoto)
Formato data: yyyy/mm/ddBXXXXX
Formato Ora: XXXX/XX/XXBhh:mm
Separatore decimale: .
Separatore migliaia:


In particolare:

1) controlla bene come la data/ora viene fornita da MT4. Cercando su Google ho visto che potrebbe essere una cosa del genere: 2012/11/30 12:45 => da qui la configurazione che ti ho suggerito.

Il formato è importante perchè devi descrivere perfettamente al programma dove cercare l'anno il mese il giorno, l'ora e i minuti altrimenti la data/ora non sarà riconoscibile.


Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 30 November 2012 :  18:21:23  Show Profile  Reply with Quote
Da quello che ho visto in giro (non vorrei sbagliarmi però), pare che MT4 non fornisca il volume via DDE. Tutti infatti suggeriscono di mettere il BID. Ma di fatto non ha senso. Per questo non l'ho incluso nella configurazione.

Per i decimali.. purtroppo ci fermiamo a 4.
Non c'è modo di mettere il quinto.
Nella prossima versione di Insider (in via di sviluppo) arriveremo a 6.
Go to Top of Page

Frenk
Nuovo Utente

41 Posts

Posted - 30 November 2012 :  19:55:10  Show Profile  Reply with Quote
Piu o meno quando uscirà la prossima versione?


quote:
Originally posted by SupportoTecnico

Da quello che ho visto in giro (non vorrei sbagliarmi però), pare che MT4 non fornisca il volume via DDE. Tutti infatti suggeriscono di mettere il BID. Ma di fatto non ha senso. Per questo non l'ho incluso nella configurazione.

Per i decimali.. purtroppo ci fermiamo a 4.
Non c'è modo di mettere il quinto.
Nella prossima versione di Insider (in via di sviluppo) arriveremo a 6.


Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 01 December 2012 :  00:49:40  Show Profile  Reply with Quote
La prossima versione sarà molto diversa da quella attuale.
Non si tratta di un semplice restyle dell'applicazione. Su questo forum c'è qualche thread in cui se ne parla.

Per l'uscita non vorrei sbilanciarmi troppo, ma a spanne dopo la prossima estate.
Go to Top of Page

Frenk
Nuovo Utente

41 Posts

Posted - 01 December 2012 :  12:54:51  Show Profile  Reply with Quote
Buono a sapersi che la piattaforma viene sviluppata molto di più di quella attuale.
Basandomi per lo più sull' analisi ciclica vorrei sapere se è possibile creare delle medie mobili centrate semplici, per poi arrivare alle velocità centrate, l' algoritmo finale delle medie centrate e velocità dovrebbe essere uguale a excel (nel senso che costruendo una media centrata su excel sulla piattaforma dovra venire lo stesso indentico indicatore), questo è il listato di una media centrata per il metastock a 64 periodi:

fwPds:=32;
proj:=2;
pds:=1;
CHIUSURA:=Mov(C,pds,S);
center:=LastValue(If(fwPds<0,Int(pds/2),fwPds));
fwd:=Ref(CHIUSURA,center);
valid:=Cum(IsDefined(fwd))
=LastValue(Cum(IsDefined(fwd)));
valid:=valid AND Alert(valid=0,2);
xtend:=LastValue(fwd+PREV-PREV);
movAvg:=Ref(Ref(xtend,pds-1),-pds+1);
init:=Cum(IsDefined(movAvg))=1;
direction:=movAvg+
If(IsUndefined(fwd),
ValueWhen(1,init OR valid,movAvg)-
ValueWhen(1,init OR valid,Ref(movAvg,-1)),0)
*BarsSince(init OR valid);
GRAFICO:=If(proj=1,direction,movAvg);
Mov(GRAFICO,64,S)

Questo tipo di media andrebbe bene, anche se io preferirei che la ripetizione dei dati finali non sia quella del' ultimo valore certo (non fittizio),,,,, in pratica dopo l' ultimo valore vorrei che a completare la serie ci siano tutti zeri per rendere la media stessa meno reattiva,,,, comunque come gia detto una media come il codice scritto sopra andrebbe bene....


quote:
Originally posted by SupportoTecnico

La prossima versione sarà molto diversa da quella attuale.
Non si tratta di un semplice restyle dell'applicazione. Su questo forum c'è qualche thread in cui se ne parla.

Per l'uscita non vorrei sbilanciarmi troppo, ma a spanne dopo la prossima estate.



Edited by - Frenk on 01 December 2012 12:56:10
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 01 December 2012 :  14:41:51  Show Profile  Reply with Quote
Certo che con il linguaggio di programmazione di Insider puoi ottenere la media mobile centrata!
Il linguaggio è simile a visual basic come sintassi, quindi abbastanza semplice, ed è molto versatile. Nella nuova versione tra l'altro è stato migliorato moltissimo.

Il codice dell'indicatore "Media mobile centrata" potrebbe essere questo:



Property Period as Numeric
    Default (0)
EndProperty

Property HalfPeriod as Numeric
    Default (0)
EndProperty


Function Main()

Dim mc As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
        
    If (TotBar - CurrentBar >= HalfPeriod) then
        mc = Moveav(Close, Period, "S", 0, - HalfPeriod)
    else
        iMyPos = TotBar - CurrentBar

        dTot = Sum(Close, HalfPeriod)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        dTot = dTot + Close(iMyPos) * (HalfPeriod - iMyPos)

        mc = dTot / Period
    endif
    
    Return mc
Endfunction



Dove "Period" è il periodo della media mobile (per esempio 64), e HalfPeriod è il periodo a metà (per esempio 32).

Con il codice qui sopra crei la media mobile centrata con alla fine i dati aggiuntivi uguali all'ultima chiusura.
Se vuoi che i dati mancanti siano zero allora è sufficiente togliere questa riga dal codice:


    dTot = dTot + Close(iMyPos) * (HalfPeriod - iMyPos)


che quindi diventa:


Property Period as Numeric
    Default (0)
EndProperty

Property HalfPeriod as Numeric
    Default (0)
EndProperty


Function Main()

Dim mc As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
        
    If (TotBar - CurrentBar >= HalfPeriod) then
        mc = Moveav(Close, Period, "S", 0, - HalfPeriod)
    else
        iMyPos = TotBar - CurrentBar

        dTot = Sum(Close, HalfPeriod)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        mc = dTot / Period
    endif
    
    Return mc
Endfunction



Ricordati, in fase di aggiunta della media al grafico dei prezzi di settare la sua proprietà "Usa Min-Max Grafico" uguale a "SI".
Go to Top of Page

Frenk
Nuovo Utente

41 Posts

Posted - 01 December 2012 :  16:16:20  Show Profile  Reply with Quote
Ottimo, veramente buono,,,, ti farei delle ultime richieste per poi iniziare a studiare il manuale in maniera più dettagliata, intanto con il tuo aiuto vorrei crearmi quei pochi indicatori che uso normalmente,,,, a questo punto ti chiederei di crearmi la velocità centrata sia con i dati aggiuntivi uguali all' ultima chiusura, sia con i dati mancanti = zero.

quote:
Originally posted by SupportoTecnico

Certo che con il linguaggio di programmazione di Insider puoi ottenere la media mobile centrata!
Il linguaggio è simile a visual basic come sintassi, quindi abbastanza semplice, ed è molto versatile. Nella nuova versione tra l'altro è stato migliorato moltissimo.

Il codice dell'indicatore "Media mobile centrata" potrebbe essere questo:



Property Period as Numeric
    Default (0)
EndProperty

Property HalfPeriod as Numeric
    Default (0)
EndProperty


Function Main()

Dim mc As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
        
    If (TotBar - CurrentBar >= HalfPeriod) then
        mc = Moveav(Close, Period, "S", 0, - HalfPeriod)
    else
        iMyPos = TotBar - CurrentBar

        dTot = Sum(Close, HalfPeriod)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        dTot = dTot + Close(iMyPos) * (HalfPeriod - iMyPos)

        mc = dTot / Period
    endif
    
    Return mc
Endfunction



Dove "Period" è il periodo della media mobile (per esempio 64), e HalfPeriod è il periodo a metà (per esempio 32).

Con il codice qui sopra crei la media mobile centrata con alla fine i dati aggiuntivi uguali all'ultima chiusura.
Se vuoi che i dati mancanti siano zero allora è sufficiente togliere questa riga dal codice:


    dTot = dTot + Close(iMyPos) * (HalfPeriod - iMyPos)


che quindi diventa:


Property Period as Numeric
    Default (0)
EndProperty

Property HalfPeriod as Numeric
    Default (0)
EndProperty


Function Main()

Dim mc As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
        
    If (TotBar - CurrentBar >= HalfPeriod) then
        mc = Moveav(Close, Period, "S", 0, - HalfPeriod)
    else
        iMyPos = TotBar - CurrentBar

        dTot = Sum(Close, HalfPeriod)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        mc = dTot / Period
    endif
    
    Return mc
Endfunction



Ricordati, in fase di aggiunta della media al grafico dei prezzi di settare la sua proprietà "Usa Min-Max Grafico" uguale a "SI".


Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 01 December 2012 :  16:40:26  Show Profile  Reply with Quote
Dovresti spiegare bene però come la vuoi calcolata la "Velocità Centrata".
Secondo me si calcola facendo la sottrazione tra due medie mobili centrate, corretto?
Per esempio, se ho una media mobile centrata a 60 periodi e una a 30 allora la velocità sarà:

VC = MMC_60 - MMC_30

Giusto?
Go to Top of Page

Frenk
Nuovo Utente

41 Posts

Posted - 01 December 2012 :  17:08:37  Show Profile  Reply with Quote
Si esato, ti metterei il listato di metastock:

ciclo128:=Fml("MY MEDIA CENTRATA 64")-Fml("MY MEDIA CENTRATA 128");

VEL:=CICLO128-Ref(CICLO128,-1);
fwPds:=32;
proj:=2;
pds:=1;

ma:=Mov(VEL,pds,S);

{ Automatic period-centering }
center:=LastValue(If(fwPds<0,Int(pds/2),fwPds));

{ Forward-referenced MovAvg }
fwd:=Ref(ma,center);

{ Last valid MovAvg plot point }
valid:=Cum(IsDefined(fwd))
=LastValue(Cum(IsDefined(fwd)));
valid:=valid AND Alert(valid=0,2);

{ Extend last MovAvg plot to future null zone }
xtend:=LastValue(fwd+PREV-PREV);

{ Restrict invalid initial MovAvg plot }
movAvg:=Ref(Ref(xtend,pds-1),-pds+1);

{ Last MA known direction & future projection }
init:=Cum(IsDefined(movAvg))=1;
direction:=movAvg+
If(IsUndefined(fwd),
ValueWhen(1,init OR valid,movAvg)-
ValueWhen(1,init OR valid,Ref(movAvg,-1)),0)
*BarsSince(init OR valid);
{ Choose Centered MovAvg type }
GRAFICO:=If(proj=1,direction,movAvg);
Mov(GRAFICO,64,S);

Ho notato un errore sulla MMSC dati finali uguali a zero (o meglio media nella parte finale dovrebbe esere cosi, ad es: MMC 6 periodi nella parte finale 2;4;5;(fine serie dati);0;0;0 in pratica la media nell' ultima parte viene fatta (2+4+5+0+0+0)/6) non mi sembra che vada bene in quanto la meta degli ultimi periodi mi fanno quasi un angolo a 45 gradi (nel titolo che sto analizzando l' angolo mi punta verso il basso) mentre la MMC dovrebbe essere simile a quella con la chiusura ripetuta.


quote:
Originally posted by SupportoTecnico

Dovresti spiegare bene però come la vuoi calcolata la "Velocità Centrata".
Secondo me si calcola facendo la sottrazione tra due medie mobili centrate, corretto?
Per esempio, se ho una media mobile centrata a 60 periodi e una a 30 allora la velocità sarà:

VC = MMC_60 - MMC_30

Giusto?

Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 01 December 2012 :  19:12:20  Show Profile  Reply with Quote
Allora in caso di valori finali a zero non puoi dividere per 6.. Altrimenti è ovvia una caduta veloce della media.
Go to Top of Page

Frenk
Nuovo Utente

41 Posts

Posted - 01 December 2012 :  19:52:21  Show Profile  Reply with Quote
Era un po' di tempo che non riguardavo l' algoritmo, hai perfettamente ragione, se si divide per 6 c' è per forza la caduta della media, l' ultima parte deve essere divisa in relazione alla rimanente parte numerica, nel senso che se ho una media centrata di 6 periodi nell' ultima parte dei dati questi devono esere divisi per 6 poi quando si va oltre l' ultimo valore finale si divide per cinque, poi quando si va oltre l' ultimo valore di due unita si divide per 4 e infine per 3,,,, cosi dovrebbe essere più chiaro..

Per quanto riguarda la velocità centrata è data da:

Media mobile centrata corta - Media mobile centrata lunga

il risultato di questa operazione da L' Indicatore Ciclo, a questo punto la velocità è data dalla diferenza fra il secondo valore dell' indicatore ciclo e il primo. ad es. se la serie dell' indicatore ciclo è 5,4,6,8,3,2,4,9,7 ecc, la sua velocita è data da il secondo valore-il primo 4-5 e poi a seguire.
La risultate velocità darebbe già delle buone indicazioni, ma migliori se la si ammorbidisce con un ulteriore Media mobile centrata pari alla Media mobile centrata piu corta dell' indicatore ciclo ad es.:

- Media mobile centrata corta 32 periodi - Media mobile centrata lunga 64 periodi = indicatore ciclo;

- secondo valore dell' indicatore ciclo - primo valore dell' indicatore ciclo (su tutta la serie fino all' ultimo valore)= Velocita Centrata;

- Velocita centrata che va smussata "smoothing" con la media mobile centrata più corta dell' indicatore ciclo, in questo caso la 32 periodi.

Intanto andrebbe benissimo il codice della velocità centrata con i dati ripetuti alla fine "che trallaltro sarebbe quella originale",,,,, anche se l' altra secondo me da segnali migliori, quando inizio a imparare un po' il linguaggio di programmazione me la costruisco da me, prendendo come spunto il codice dell' altra.

spero di essere stato chiaro e grazie per la disponibilità.

quote:
Originally posted by SupportoTecnico

Allora in caso di valori finali a zero non puoi dividere per 6.. Altrimenti è ovvia una caduta veloce della media.


Edited by - Frenk on 02 December 2012 12:56:44
Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 02 December 2012 :  13:26:10  Show Profile  Reply with Quote
Allora vediamo di postare un po' di codice.

[Media Mobile Centrata]:


Property Period as Numeric
    Default (0)
EndProperty

Property HalfPeriod as Numeric
    Default (0)
EndProperty


Property UsaZeroFinale as Numeric
    List (Si, 1)
    List (No, 2)
    Default (2)
EndProperty



Function Main()

Dim mc As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
dim dResult as Numeric
    
    iMyPos = TotBar - CurrentBar
    
    If (iMyPos >= HalfPeriod) then
        mc = Moveav(Close, Period, "S", 0, - HalfPeriod)
    else
        dTot = Sum(Close, HalfPeriod)
        
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        if (UsaZeroFinale = 1) then
            mc = dTot / (HalfPeriod + iMyPos)
        else
            dTot = dTot + Close(iMyPos) * (HalfPeriod - iMyPos)
            mc = dTot / Period
        Endif
    endif

    Return mc
Endfunction



Usando la proprietà UsaZeroFinale puoi decidere se riempire i dati con l'ultimo close o con zero.


[Velocità Centrata]:


Dim dMemCicloPrecedente as Numeric = 0


Property Periodo_MMC_CORTA as Numeric
    Default (0)
EndProperty

Property MezzoPeriodo_MMC_CORTA as Numeric
    Default (0)
EndProperty


Property Periodo_MMC_LUNGA as Numeric
    Default (0)
EndProperty

Property MezzoPeriodo_MMC_LUNGA as Numeric
    Default (0)
EndProperty


Property UsaZeroFinale as Numeric
    List (Si, 1)
    List (No, 2)
    Default (2)
EndProperty



Function Main()

Dim mmc_corta As Numeric
Dim mmc_lunga As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
dim dResult as Numeric
    
    iMyPos = TotBar - CurrentBar
    
    If (iMyPos >= MezzoPeriodo_MMC_CORTA) then
        mmc_corta = Moveav(Close, Periodo_MMC_CORTA, "S", 0, - MezzoPeriodo_MMC_CORTA)
    else
        dTot = Sum(Close, MezzoPeriodo_MMC_CORTA)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        if (UsaZeroFinale = 1) then
            mmc_corta = dTot / (MezzoPeriodo_MMC_CORTA + iMyPos)
        else
            dTot = dTot + Close(iMyPos) * (MezzoPeriodo_MMC_CORTA - iMyPos)
            mmc_corta = dTot / Periodo_MMC_CORTA
        Endif
    endif

    If (iMyPos >= MezzoPeriodo_MMC_LUNGA) then
        mmc_lunga = Moveav(Close, Periodo_MMC_LUNGA, "S", 0, - MezzoPeriodo_MMC_LUNGA)
    else
        dTot = Sum(Close, MezzoPeriodo_MMC_LUNGA)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        if (UsaZeroFinale = 1) then
            mmc_lunga = dTot / (MezzoPeriodo_MMC_LUNGA + iMyPos)
        else
            dTot = dTot + Close(iMyPos) * (MezzoPeriodo_MMC_LUNGA - iMyPos)
            mmc_lunga = dTot / Periodo_MMC_LUNGA
        Endif
    endif

    dResult = ((mmc_corta - mmc_lunga) - dMemCicloPrecedente)
    dMemCicloPrecedente = mmc_corta - mmc_lunga

    Return dResult
       
Endfunction



Go to Top of Page

Frenk
Nuovo Utente

41 Posts

Posted - 02 December 2012 :  23:18:19  Show Profile  Reply with Quote
Stai facendo un ottimo lavoro e ti ringrazio, integrare le due versione delle MMC è ottimale,,, la velocità va bene ma manca dello smussamento pari a un' altra MMC, in pratica in tutto sono tre:

Velocita= (MMC Corta 16-32 periodi) - (MMC Lunga 32-64);

Velocita smussata = MMC Corta ((MMC Corta 16-32 periodi) - (MMC Lunga 32-64),16-32)

La velocità smussata te lo scritta cosi "diciamo come codice fatto in casa", ma è solo per farti capire che manca della smussatura che deve essere relativa a una MMC corta, in questo caso della 16-32 "ma puoi mettere la possibilità di poter inserire i periodi come hai fatto con le altre due MMC".

fatto questo il codice è completo



quote:
Originally posted by SupportoTecnico

Allora vediamo di postare un po' di codice.

[Media Mobile Centrata]:


Property Period as Numeric
    Default (0)
EndProperty

Property HalfPeriod as Numeric
    Default (0)
EndProperty


Property UsaZeroFinale as Numeric
    List (Si, 1)
    List (No, 2)
    Default (2)
EndProperty



Function Main()

Dim mc As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
dim dResult as Numeric
    
    iMyPos = TotBar - CurrentBar
    
    If (iMyPos >= HalfPeriod) then
        mc = Moveav(Close, Period, "S", 0, - HalfPeriod)
    else
        dTot = Sum(Close, HalfPeriod)
        
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        if (UsaZeroFinale = 1) then
            mc = dTot / (HalfPeriod + iMyPos)
        else
            dTot = dTot + Close(iMyPos) * (HalfPeriod - iMyPos)
            mc = dTot / Period
        Endif
    endif

    Return mc
Endfunction



Usando la proprietà UsaZeroFinale puoi decidere se riempire i dati con l'ultimo close o con zero.


[Velocità Centrata]:


Dim dMemCicloPrecedente as Numeric = 0


Property Periodo_MMC_CORTA as Numeric
    Default (0)
EndProperty

Property MezzoPeriodo_MMC_CORTA as Numeric
    Default (0)
EndProperty


Property Periodo_MMC_LUNGA as Numeric
    Default (0)
EndProperty

Property MezzoPeriodo_MMC_LUNGA as Numeric
    Default (0)
EndProperty


Property UsaZeroFinale as Numeric
    List (Si, 1)
    List (No, 2)
    Default (2)
EndProperty



Function Main()

Dim mmc_corta As Numeric
Dim mmc_lunga As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
dim dResult as Numeric
    
    iMyPos = TotBar - CurrentBar
    
    If (iMyPos >= MezzoPeriodo_MMC_CORTA) then
        mmc_corta = Moveav(Close, Periodo_MMC_CORTA, "S", 0, - MezzoPeriodo_MMC_CORTA)
    else
        dTot = Sum(Close, MezzoPeriodo_MMC_CORTA)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        if (UsaZeroFinale = 1) then
            mmc_corta = dTot / (MezzoPeriodo_MMC_CORTA + iMyPos)
        else
            dTot = dTot + Close(iMyPos) * (MezzoPeriodo_MMC_CORTA - iMyPos)
            mmc_corta = dTot / Periodo_MMC_CORTA
        Endif
    endif

    If (iMyPos >= MezzoPeriodo_MMC_LUNGA) then
        mmc_lunga = Moveav(Close, Periodo_MMC_LUNGA, "S", 0, - MezzoPeriodo_MMC_LUNGA)
    else
        dTot = Sum(Close, MezzoPeriodo_MMC_LUNGA)
        For i = 1 to iMyPos
            dTot = dTot + Close(i)
        next i
        
        if (UsaZeroFinale = 1) then
            mmc_lunga = dTot / (MezzoPeriodo_MMC_LUNGA + iMyPos)
        else
            dTot = dTot + Close(iMyPos) * (MezzoPeriodo_MMC_LUNGA - iMyPos)
            mmc_lunga = dTot / Periodo_MMC_LUNGA
        Endif
    endif

    dResult = ((mmc_corta - mmc_lunga) - dMemCicloPrecedente)
    dMemCicloPrecedente = mmc_corta - mmc_lunga

    Return dResult
       
Endfunction





Go to Top of Page

SupportoTecnico
Forum Admin

1261 Posts

Posted - 03 December 2012 :  14:09:11  Show Profile  Reply with Quote
Per la velocità smussata bisogna creare un altro indicatore che utilizzi la velocità centrata come fonte dati.
Quindi, prima di tutto crea l'indicatore della velocità centrata e chiamalo "VelocitaCentrata".

Successivamente crea un altro indicatore con il codice qui sotto riportato.


[Velocita Smussata]:


Property Periodo_MMC_CORTA as Numeric
    Default (0)
EndProperty

Property MezzoPeriodo_MMC_CORTA as Numeric
    Default (0)
EndProperty


Property Periodo_MMC_LUNGA as Numeric
    Default (0)
EndProperty

Property MezzoPeriodo_MMC_LUNGA as Numeric
    Default (0)
EndProperty


Property Periodo_SMOOTING as Numeric
    Default (0)
EndProperty

Property MezzoPeriodo_SMOOTING as Numeric
    Default (0)
EndProperty


Property UsaZeroFinale as Numeric
    List (Si, 1)
    List (No, 2)
    Default (2)
EndProperty


Function Main()

Dim mc As Numeric
Dim iMyPos As Numeric
Dim i As Numeric
Dim dTot As Numeric
dim dResult as Numeric

    iMyPos = TotBar - CurrentBar
        
    if (UsaZeroFinale = 1) then
        If (iMyPos >= MezzoPeriodo_SMOOTING) then
            mc = Moveav(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 1), Periodo_SMOOTING, "S", 0, - MezzoPeriodo_SMOOTING)
        else
            dTot = Sum(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 1), MezzoPeriodo_SMOOTING)
            
            For i = 1 to iMyPos
                dTot = dTot + value(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 1), i)
            next i
        
            if (UsaZeroFinale = 1) then
                mc = dTot / (MezzoPeriodo_SMOOTING + iMyPos)
            else
                dTot = dTot + value(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 1), iMyPos) * (MezzoPeriodo_SMOOTING - iMyPos)
                mc = dTot / Periodo_SMOOTING
            Endif
        endif
    else
        If (iMyPos >= MezzoPeriodo_SMOOTING) then
            mc = Moveav(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 2), Periodo_SMOOTING, "S", 0, - MezzoPeriodo_SMOOTING)
        else
            dTot = Sum(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 2), MezzoPeriodo_SMOOTING)
            
            For i = 1 to iMyPos
                dTot = dTot + value(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 2), i)
            next i
        
            if (UsaZeroFinale = 1) then
                mc = dTot / (MezzoPeriodo_SMOOTING + iMyPos)
            else
                dTot = dTot + value(VelocitaCentrata(Periodo_MMC_CORTA, MezzoPeriodo_MMC_CORTA, Periodo_MMC_LUNGA, MezzoPeriodo_MMC_LUNGA, 2), iMyPos) * (MezzoPeriodo_SMOOTING - iMyPos)
                mc = dTot / Periodo_SMOOTING
            Endif
        endif
    endif

    Return mc
Endfunction



Go to Top of Page
Page: of 5 Previous Topic Topic Next Topic  
Next Page
 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