Programmazione Prorealtime Prorealtime:formule, indicatori, oscillatori, tsi ... (2 lettori)

Clic

Forumer storico
Su suggerimento di f4f posto qui la mia richiesta augurandomi che oltre a f4f possano di nuovo, nello spirito di collaborazione che ha contraddistinto questo 3d ,dare tutti il proprio contributo Meursault (al quale ho anche scritto congratulandomi e chiedendogli se fosse ancora attivo questo 3d e avanzandogli la richiesta che di seguito vado ad illustrare) e tutti gli altri che volessero.
L’indicatore di cui sto parlando l’ho preso da un link postato da venere qualche giorno fa sul 3d “William's %R come indicatore ciclico”.Il link è il seguente:
Multicharts: la discussione - Pagina 2 - Forum di Finanzaonline.com
Si tratta di un indicatore ciclico derivante dagli studi di Garrett che cerca di unire prezzi e volumi al fine di determinare il futuro andamento dei prezzi.La formula postata da venere è la seguente:
Input:avgvol(64),avgdiavg(56),DispDiv(4),Modo(1);
vars:upward(0),downward(0),upvol(0),downvol(0),totmovimento(0),totvolume(0),idcvol(0),closeward(0);
upward=(h-c[1])+(c-l);
VALUE4=AVERAGE(upward,avgdiavg);
downward=h-l;
VALUE5=AVERAGE(downward,avgdiavg);
closeward=c-c[1];
VALUE6=AVERAGE(closeward,avgdiavg);
totvolume=(v);
VALUE7=AVERAGE(V,avgvol);
value8=value4+value5;
totmovimento=upward+downward+closeward;
upvol=VALUE7/value8 *VALUE4;
downvol=VALUE7/value8 *VALUE5;
value1=average(upvol,avgvol);
value2=average(downvol,avgvol);
if value1>value2 then begin value3=1;end;
if value1<value2 then begin value3=-1;end;
idcvol=idcvol[1]+value3;
if modo=1 then begin
plot1[avgvol/DispDiv](idcvol,"Upvol");
plot2[avgvol/DispDiv](average(idcvol,avgdiavg/4),"DOWNvol");end;
if modo=2 then begin
plot1[avgvol/DispDiv](value1,"Upvol");
plot2[avgvol/DispDiv](value2,"DOWNvol");end;


Devi definire queste variabili:

avgvol=64
avgdiavg=56
DispDiv =4
Modo=1

Di default assegna il valore a destra del segno uguale.
Questo è il codice in PRT

upward=(High-Close[1])+(Close-Low)
VALUE4=AVERAGE[avgdiavg](upward)
downward=High-Low
VALUE5=AVERAGE[avgdiavg](downward)
//closeward=Close-Close[1]
//VALUE6=AVERAGE[avgdiavg](closeward)
//totvolume=(v)
VALUE7=AVERAGE(Volume)[avgvol]
value8=value4+value5
//totmovimento=upward+downward+closeward
upvol=VALUE7/value8 *VALUE4
downvol=VALUE7/value8 *VALUE5
value1=average[avgvol](upvol)
value2=average[avgvol](downvol)
if value1>value2 then
value3=1
ENDIF
if value1<value2 then
value3=-1
ENDIF
idcvol=idcvol[1]+value3

Graf1 = idcvol[avgvol/DispDiv]
Graf = Average(idcvol)[avgdiavg/4]
Graf2 = Graf[avgvol/DispDiv]
Graf4 = value1[avgvol/DispDiv]
Graf4 = value2[avgvol/DispDiv]

Return Graf1 as "UPVOL", Graf2 as "DOWNVOL", Graf3 as "UPVOL", Graf4 as "DOWNVOL"

Nel codice originale l’utente decide se disegnare le variabili Graf1 e Graf2 o Graf3 e Graf4 in base al valore assunto da Modo.
In particolare se Modo assume valore 1 si disegnano Graf1 e Graf2, invece se Modo assume valore 2 si disegnano Graf3 e Graf4. Con PRT credo non sia possibile, pertanto nel codice che ho scritto vengono disegnate tutte e quattro.

PRT riscontra dei problemi in quanto alcune variabili dichiarate non sono utilizzate nel codice. Pertanto ho eliminato le variabili: VALUE6, closeward, totvolume e totmovimento ma vengono disegnate solo 2 curve. Non riesco a fare di meglio.
 
Ultima modifica:
Indicatore di modalità di mercato

Mi è

Mi è stato consigliato voi lo conoscete. Riuscite a tradurlo in prt? io non ci riesco.
Grazie

//---- indicator options
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 0.5
//---- input parameters
extern int n = 5;
extern int nBars = 1000;
//---- indicator buffers
double ibuffer[];

#define LOG_2_0 0.69314718055994530941723212145818 //MathLog(2.0);

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- drawing settings
SetIndexBuffer(0,ibuffer);
SetIndexStyle(0,DRAW_LINE);
SetIndexDrawBegin(0,Bars-nBars);
SetIndexLabel(0,"iVAR");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("iVAR("+n+")");
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, j, k, kCount, nTotal, nCountedBars = IndicatorCounted();
int ihigh, ilow, nInterval, nIntervalStart;
double Delta, Xc, Yc, Sx, Sy, Sxx, Sxy;
//---- last counted bar will be recounted
if(nCountedBars==0) nTotal = nBars;
if(nCountedBars>0) nTotal = Bars-nCountedBars-1;
//---- main loop
for(j=nTotal; j>=0; j--)
{
Sx = 0; Sy = 0; Sxx = 0; Sxy = 0;
for(i=0; i<=n; i++)
{
nInterval = 1 << (n-i); //MathPow(2,n-i);
kCount = 1 << i; //MathPow(2,i);
//---- summarise differences of the maximum and minimum prices on an interval
for(Delta=0, k=0; k<kCount; k++)
{
nIntervalStart = nInterval*k+j;
ihigh = iHighest(Symbol(),0,MODE_HIGH,nInterval,nIntervalStart);
ilow = iLowest(Symbol(),0,MODE_LOW,nInterval,nIntervalStart);
Delta += High[ihigh]-Low[ilow];
}
//---- compute coordinate of variation [Xc,Yc] in double logarithmic scale
Xc = (n-i)*LOG_2_0; //MathLog(2.0);
Yc = MathLog(Delta);
//---- accumulate data for finding of factors of line of regress by means of LMS (least mean squares)
Sx += Xc;
Sy += Yc;
Sxx += Xc*Xc;
Sxy += Xc*Yc;
}
//---- compute variation index (slope of the line of regress)
ibuffer[j] = -(Sx*Sy-(n+1)*Sxy)/(Sx*Sx-(n+1)*Sxx);
}
return(0);
 

enzo_52

Nuovo forumer
questa che hai postato è leggermente differente dall'originale postata da wdgigi un po' di tempo fa, comunque ne ricalca in pratica le orme.

Il codice dell'indicatore si compone di due parti, la prima che serve per indicare il punto di partenza del ciclo, e la seconda serve per il calcolo dei cicli inferiori che sommati andranno a disegnare la classica M ciclica, ciclo di Hurst o battleplan di Migliorino che dir si voglia. Al tutto si aggiungono personalizzazioni a piacere.:)


Attualmente uso un codice leggermente diverso a quello postato precedentemente ma che permette di plottatare sul grafico del prezzo.

Codice:
if day=giorno and month=mese and year=anno and Hour=ora and Minute=minuto then
	flag=1
endif



if flag=0 then
	hurst=undefined
	
else
	
	a=a+1
	x=(360/wa)*a
	phase=-90
	w1=SIN(8*x+phase)
	w2=2*SIN(4*x+phase)
	w3=3*SIN(2*x+phase)
	w4=4*SIN(x+phase)
	ciclo=w1+w2+w3+w4
	grc=0.01029
	c=(grc*trend*1)
	b=b+c
	hurst=(ciclo+b+10)*((sup-inf)/15)+inf
endif




RETURN hurst

Si devono creare le seguenti variabili

Per definire la partenza del ciclo
-anno
-mese
-giorno
-ora
-minuto

per definire durata del ciclo e inclinazione

-wa
-trend

per definire la finestra di prezzo dove plottare, quindi il valore minimo e massimo che si vedono sul grafico

-sup
-inf

Quando si usa su grafici EOD basta mettere ora e minuti pari a 0





:up:

questo il risultato con abbinata la traslazione di prezzo di meurs, tutto scritto sulle pagine di questo 3d :D


T-1 su eurostoxx future 15 minuti

Vedi l'allegato 79881



Vedi l'allegato 79882



[ame]http://www.youtube.com/watch?v=h2HFzl23sEE&feature=related[/ame]
sono senza parole...sei bravissimo, complimenti...
 

enzo_52

Nuovo forumer
aiuto Meur

Come e' noto le medie mobili centrate sono medie che vengono plottate meta' periodo indietro. Avvicinandosi al "presente", la parte dei prezzi che rimane scoperta nel calcolo viene posta ad esempio, alla Migliorino, fittiziamente uguale all'ultimo prezzo (ecco perche' nella traslazione faccio esattamente la stessa cosa).

Ora, tramite la traslazione il codice per tracciare una mmc diventa immediato. Invece di fare una media e portarla indietro, facciamo una media del grafico traslato all'indietro

REM mmc

if n mod 2 = 0 then
t = n/2
else
t = (n -1)/2
endif

trasl = CALL traslazione[t,numbarre]

ind = Average[n](trasl)

return ind

variabili n e numbarre. N e' il periodo della media, numbarre ha lo stesso significato gia' esposto prima, e quindi al solito conviene aver sotto una finestra dell'indicatore barindex.

Nel grafico qua sotto ho plottato una mmc a 28 periodi

1261260752mmc.png


Come e' noto in realta' in prt si puo' plottare una mmc ... basta plottare una mm e nel pannello proprieta' inserire spostamento in periodo -meta' del periodo della media mobile. Il problema e' che cosi' facendo l'ultimo mezzo periodo rimane costante, la mm non viene proiettata. Con la mmc del codice precedente invece copriamo anche quest'ultima parte. Nel grafico sotto sono plottate la mmc periodo 28 del codice e la mm di prt traslata all'indietro di 14 barre. Come si vede corrispondo perfettamente e in piu' abbiamo i valori fino in fondo (rettangolo)

1261260922mmc2.png


Un'ultima osservazione sulle mmc: una volta che le abbiamo e' praticamente immediato scrivere il codice delle bande di Hurst, che tralascio.

Ora passo agli indicatori ciclici definiti con le mmc come descritti da Migliorino ad esempio. L'indicatore ciclo relativo al ciclo di lunghezza n e' definito come differenza tra la mmc di periodo n/2 e quella di periodo n. Il codice e' quindi semplicemente.

REM indicatore ciclo mmc

if n mod 2 = 0 then
m = n/2
else
m = round(n/2)
endif

mymmc1 = CALL mmc[m ,numbarre]
mymmc2 = CALL mmc[n ,numbarre]

ind = (mymmc1 - mymmc2)

return ind

Variabili: n che e' la lunghezza del ciclo espressa in numero di barre della compressione prescelta, numbarre il solito.

Ecco l'indicatore ciclo del 4gg. N in questo caso e' 224 = 56*4

1261261910indicatoreciclo.png


Non c'e' sicuramente bisogno di ricordarlo, ma per chi non avesse mai usato mmc e compagnia, ricordo che sono strumenti da prendere con le pinze perche' allo scorrere del tempo si modificano anche nel passato. Con questi codici lo scorrere del tempo si riflettera' nell'aumentare sempre di piu' il valore di numbarre.

dopo aver settato come hai detto di fare le mmc e l'indicatore ciclico appaiono vuoti uando li inserisco nella piattaforma PRT...perchè? cosa sbaglio? potresti aiutarmi gentilmente? Grazie
allego le foto di come appare la mia piattaforma
1323009221problemammcoscillatociclico.jpg
 
Enzo_52 Provo a risponderti, anche se non sono certo la persona più qualificata per farlo, ma sembra che gli autori non postino più.
La traslazione era fatta originariamente per il nostro indice. Ti rinvio ad alcuni post successivi a quelli da te citati e forse hai qualche indicazione anche in quelli che tu hai riportato. Penso che il problema sia legato all'arrotondamento.
 

enzo_52

Nuovo forumer
Enzo_52 Provo a risponderti, anche se non sono certo la persona più qualificata per farlo, ma sembra che gli autori non postino più.
La traslazione era fatta originariamente per il nostro indice. Ti rinvio ad alcuni post successivi a quelli da te citati e forse hai qualche indicazione anche in quelli che tu hai riportato. Penso che il problema sia legato all'arrotondamento.

grazie Nick per l interessamento, la traslazione la riesco a fare (come si vede dal grafico) ma ho provato a testare l oscillatore di ciclo e le mmc no,ho provato anche con gli indici ,come quello nella figura che ho postato, che hanno cifra tonda, ma non funzionano , credo che Meur forse non posti più, ma ogni tanto gira nel forum, forse non ha tempo di rispondermi, o non ha voglia, d'altra parte lui e Test da quanto ho visto hanno veramente dato tanto gratuitamente a tutti , non si sono mai risparmiati, sono dei grandi, come tutti gli altri che se potevano una mano l hanno sempre data...mi riferisco anche a te naturalmente che gentilmente ti sei interessato...:up:
 

enzo_52

Nuovo forumer
Ciao ragazzi , qualche anima pia,potrebbe aiutarmi? perchè non mi compare nulla sul grafico?non mi appare neanche nessun errore, si apre la finestra sul grafico dove dovrebbe apparire l indicatore traslato , ma all interno non c è nulla! :-(( l ho applicato sia agli indici che al forex , nisba............grazie di cuore
1323182098traslazioneciclo.png


1323182131indicatoreciclico.png
 

autotrader

Forumer attivo
Nel primo caso non mostri il codice delle funzioni utente chiamate e non ti so dire perchè mi pare tutto a posto per quello che hai postato.

Nel secondo caso invece ci sono problemi logici che si notato:
1) ind1 non la usi, cosa volevi farne? Forse volevi restituirla al posto di ind ?
Se così fosse non andrebbe bene perche ind1 è sempre undefined per come la valorizzi.
Però tu restituisci Ind ed il perchè non appaia nulla non saprei dire, anche qui credo sarebbe il caso di vedere il codice della funzione chiamata mmc.

Che ne pensano gli altri? Sbaglio?
 

enzo_52

Nuovo forumer
Cmq non usare spazi nei nomi delle funzioni che crei, può non dare problemi, ma è meglio non usarli.

grazie per l interessamento Autotrader, ma io non capisco nulla di programmazione, ho fatto un copia e incolla di quello che si diceva a pag n° 4 e 5 ...ecc, di questo 3d, a me serve sapere come traslare un qualsiasi indicatore di ciclo sia su indici che su forex...ma non ci riesco :sad::sad:

qualche anima mi aiuterà?... siamo sotto Natale forse qualcuno ...spero:up:
 

Users who are viewing this thread

Alto