Programmazione Prorealtime Prorealtime:formule, indicatori, oscillatori, tsi ...

Meur sono pienamente d'accordo con te sulla "instabilità" dello zig zag e quindi dello Zup. Ma credo che, dopo avere letto i testi di cui ho scritto sopra (per vedere entry point, stop e profit levels) utilizzerò questi patterns solo su grafici weekly e daily - forse anche sul 4 ore ma come indicazioni "generali" per poi tradare su TF inferiori utilizzando a supporto altre metodologie. Vedremo !!! Dopo la lettura ve ne renderò partecipi.
Ad oggi l'unica metodologia che utilizzo le poche volte che riesco ad operare è quella di Joe Di Napoli il cui libro alla prima lettura sembra una sola e poi dalla terza lettura in poi è ... uno spettacolo: provare per credere. E' questa tecnica che mi ha poi portato a interessarmi all'harmonic trading e quindi a Fibonacci.
L'unica cosa che mi manca in ProRealTime e che ho in Metatrader è il Detrended Price Oscillator di Di Napoli (ne ho fatto uno io con Pro Builder e fa il suo lavoro ... ma graficamente è uno schifo).
Provo a postare la formula in mq4 e se tu o Tets avete tempo e voglia potete tradurla in PRT: ve ne sarei molto riconoscente, anche se per adesso non ho nessun modo per ricompensare la vs gentilezza e competenza. Metto sotto anche una immagine.
//+------------------------------------------------------------------+
//| Detrended Price Oscillator.mq4 |
//| Copyright © 2008, Nievinny |
//| Viix Trader Chronicles |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Nievinny"
#property link "Viix Trader Chronicles"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Black

//---- input parameters
extern string ____0____ = "Period of average";
extern int DPOPeriod = 7;
extern string ____1____ = "Type of average: SMA - 0, EMA - 1, SMMA - 2, LWMA - 3";
extern int MaType = 0;
extern string ____2____ = "Type of price: close - 0, open - 1, high - 2, low - 3";
extern int PriceType = 0;
extern string ____3____ = "Moving Average Shift";
extern int MaShift = 0;
extern string ____4____ = "Show oversold and overbought levels";
extern bool ShowLevels = true;
extern string ____5____ = "Lines color (60%)";
extern color LinesColor1 = Green;
extern string ____6____ = "Lines color (100%)";
extern color LinesColor2 = Green;
extern string ____7____ = "Lines style: solid - 0, dashed - 1, dotted - 2";
extern int LinesStyle = 2;
//---- buffers
double ExtMapBuffer1[];
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
string Short="DPO("+DPOPeriod+", "+MaType+", "+PriceType+", "+MaShift+")";
IndicatorShortName(Short);
SetIndexLabel(0,Short);

SetLevelValue(0, 0.0);
SetIndexDrawBegin(0,DPOPeriod);
return(0);
}
int deinit()
{
// cleaning the mess
if(ShowLevels == true)
{
ObjectDelete("dev1");
ObjectDelete("dev2");

ObjectDelete("dev3");
ObjectDelete("dev4");
}
return(0);
}
int start()
{
//main core
int i, counted_bars=IndicatorCounted();
if(Bars<=DPOPeriod) return(0);
if(counted_bars<1)
for(i=1;i<=DPOPeriod;i++) ExtMapBuffer1[Bars-i]=0.0;
i=Bars-DPOPeriod-1;
if(counted_bars>=DPOPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
ExtMapBuffer1 = priceSwitch(i) - iMA(NULL, NULL, DPOPeriod, MaShift, MaType, PriceType, i);
i--;
}

// Showing oversold/overbought levels
if(ShowLevels == true)
{
int window = WindowFind("DPO("+DPOPeriod+", "+MaType+", "+PriceType+", "+MaShift+")");
if(window == -1)
{
window = 1;
}
// counting stddev
ArraySetAsSeries(ExtMapBuffer1, true);
double dev = iStdDevOnArray(ExtMapBuffer1, Bars-counted_bars-1, 100,0,0,0);
// lines creation
ObjectCreate("dev1", OBJ_HLINE, window, TimeCurrent(), 1.2*dev);
ObjectSetText("dev1", "+60%");
ObjectSet("dev1", OBJPROP_COLOR, LinesColor1);
ObjectSet("dev1", OBJPROP_STYLE, LinesStyle);

ObjectCreate("dev2", OBJ_HLINE, window, TimeCurrent(), -1.8*dev);
ObjectSetText("dev2", "-60%");
ObjectSet("dev2", OBJPROP_COLOR, LinesColor1);
ObjectSet("dev2", OBJPROP_STYLE, LinesStyle);

ObjectCreate("dev3", OBJ_HLINE, window, TimeCurrent(), 2*dev);
ObjectSetText("dev3", "+100%");
ObjectSet("dev3", OBJPROP_COLOR, LinesColor2);
ObjectSet("dev3", OBJPROP_STYLE, LinesStyle);

ObjectCreate("dev4", OBJ_HLINE, window, TimeCurrent(), -3*dev);
ObjectSetText("dev4", "-100%");
ObjectSet("dev4", OBJPROP_COLOR, LinesColor2);
ObjectSet("dev4", OBJPROP_STYLE, LinesStyle);
}
return(0);
}
double priceSwitch(int i)
{
double price;
switch(PriceType)
{
case PRICE_CLOSE:
price = Close;
case PRICE_OPEN:
price = Open;
case PRICE_HIGH:
price = High;
case PRICE_LOW:
price = Low;
}
return(price);
}

1274822459spcondpo.gif
 
Stasera sono in vena di postare. Metto questo per coloro che fossero interessati alla tecnica di Walter Bressert (chi vuole può chiedermi la traduzione italiana del suo manuale inglese fatta da me). Vi dico subito che la formula che gira su PRT del DSS (doppio Stocastico di Bressert) non è proprio buona buona. Ma anche il DSS quello vero non è proprio ottimo: dà molti falsi segnali. Mentre la B-LINE di bressert (che altro non è che un DSS costruito sull'RSI - o almeno credo -) è ottima per segnali di ingresso, al superamto del max o min per long o short in aggiunta ad altre cosette ...
Vengo al dunque. Ho trovato la B-LINE perfetta e settabile a piacimento che gira su Metatrader: per la verità di default è settata con RSI 14 e media 21, mentre i settaggi di Bressert sono 10 e 3 (io uso 10 e 2 oppure 5 e 2 - dipende da cosa si vuole fare).
Quindi posto il codice e uno shot, se vi intriga la cosa posso poi illustrare il suo utilizzo. Se vi va poi di trdurla i PRT sarebbe ottimo (sempre per il dannato problema di Metatrader che non fa fare il multischermo e bisogna sempre passare da un TF all'altro come dei pirla per avere un quadro complto della situazione ...
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
//----
#property indicator_separate_window
#property indicator_minimum -20
#property indicator_maximum 120
#property indicator_buffers 7
//----
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Green
#property indicator_color4 Magenta
#property indicator_color5 DodgerBlue
#property indicator_color6 BlueViolet
#property indicator_color7 SlateBlue //RoyalBlue
//#property indicator_color8 MediumSlateBlue
#property indicator_width1 2
#property indicator_width4 2
#property indicator_width5 2
#property indicator_width7 2
#property indicator_level1 100
#property indicator_level2 80
//#property indicator_level3 70
#property indicator_level4 50
//#property indicator_level5 30
#property indicator_level6 20
#property indicator_level7 0
#property indicator_levelcolor SlateGray
//---- input parameters
extern int RSIOMA =14;
extern int RSIOMA_MODE =MODE_EMA;
extern int RSIOMA_PRICE =PRICE_CLOSE;
extern int Ma_RSIOMA =21,
Ma_RSIOMA_MODE =MODE_EMA;
extern double BuyTrigger =80.00;
extern double SellTrigger =20.00;
extern color BuyTriggerColor =DodgerBlue;
extern color SellTriggerColor=Magenta;
extern double MainTrendLong =70.00;
extern double MainTrendShort =30.00;
extern color MainTrendLongColor =Red;
extern color MainTrendShortColor =Green;
extern double MajorTrend =50;
extern color marsiomaXSigColor =SlateBlue;
//extern color marsiomaXdnSigColor = MediumSlateBlue;
//---- buffers
double RSIBuffer[];
double MABuffer1[];
double bdn[],bup[];
double sdn[],sup[];
double marsioma[];
double marsiomaXSig[];
//double marsiomaXdnSig[];
string short_name;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
short_name=StringConcatenate("RSIOMA(",RSIOMA,")");
IndicatorBuffers(8);
SetIndexBuffer(0,RSIBuffer);
SetIndexBuffer(2,bup);
SetIndexBuffer(1,bdn);
SetIndexBuffer(3,sdn);//Magnet
SetIndexBuffer(4,sup);//DodgerBlue
SetIndexBuffer(5,marsioma);
SetIndexBuffer(6,marsiomaXSig);
// SetIndexBuffer(7,marsiomaXdnSig);
SetIndexBuffer(7,MABuffer1);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexStyle(4,DRAW_HISTOGRAM);
SetIndexStyle(5,DRAW_LINE);
SetIndexStyle(6,DRAW_ARROW);
// SetIndexStyle(7,DRAW_ARROW);
SetIndexArrow(6,159);//85,88,251(x),252';108,158,159(dot);161,162(crcl);110,167(sq);176-179('scope');11-113,250(hlwSq)
// SetIndexArrow(7,159);
// SetIndexEmptyValue(6,EMPTY_VALUE);
// SetIndexEmptyValue(7,EMPTY_VALUE);
SetIndexLabel(0,"Rsioma");
SetIndexLabel(5,"MaRsioma");
SetIndexLabel(1,"TrendDn");
SetIndexLabel(2,"TrendUp");
SetIndexLabel(6,"Up/DnXsig");
IndicatorShortName(short_name);
SetIndexDrawBegin(0,RSIOMA);
SetIndexDrawBegin(1,RSIOMA);
SetIndexDrawBegin(2,RSIOMA);
SetIndexDrawBegin(3,RSIOMA);
SetIndexDrawBegin(4,RSIOMA);
SetIndexDrawBegin(5,RSIOMA);
SetIndexDrawBegin(6,RSIOMA);
SetIndexDrawBegin(7,RSIOMA);
//----
drawLine(BuyTrigger,"BuyTrigger", BuyTriggerColor);
drawLine(SellTrigger,"SellTrigger", SellTriggerColor );
drawLine(MainTrendLong,"MainTrendLong", MainTrendLongColor );
drawLine(MainTrendShort,"MainTrendShort",MainTrendShortColor );
return(0);
}
//+------------------------------------------------------------------+
//| Relative Strength Index |
//+------------------------------------------------------------------+
int start()
{
int i, ii;
int counted_bars=IndicatorCounted();
double rel,negative,positive;
//----
if(Bars<=RSIOMA) return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=RSIOMA;i++) {RSIBuffer[Bars-i]=0.0;}
//----
ii=Bars-RSIOMA-1;
if(counted_bars>=RSIOMA) ii=Bars-counted_bars-1;
i=ii;
while(i>=0)
{ MABuffer1=iMA(Symbol(),0,RSIOMA,0,RSIOMA_MODE,RSIOMA_PRICE,i);
i--; }
i=ii;
while(i>=0)
{ RSIBuffer=iRSIOnArray(MABuffer1,0,RSIOMA,i);
if(RSIBuffer>50) bup=6;
if(RSIBuffer<50) bdn=-6;
if(RSIBuffer > MainTrendLong) bup=12;
if(RSIBuffer < MainTrendShort) bdn=-12;
if(RSIBuffer<20 && RSIBuffer>RSIBuffer[i+1]) sup=-3;
if(RSIBuffer>80 && RSIBuffer<RSIBuffer[i+1]) sdn=4;
if(RSIBuffer>20 && RSIBuffer[i+1]<=20) sup=5;
if(RSIBuffer[i+1]>=80 && RSIBuffer<80) sdn=-5;
if(RSIBuffer[i+1]<=MainTrendShort && RSIBuffer>MainTrendShort) sup=12;
if(RSIBuffer<MainTrendLong && RSIBuffer[i+1]>=MainTrendLong) sdn=-12;
i--; }
i=ii;
while(i>=0)
{ marsioma=iMAOnArray(RSIBuffer,0,Ma_RSIOMA,0,Ma_RSIOMA_MODE,i);
marsiomaXSig=EMPTY_VALUE;
//marsiomaXdnSig = EMPTY_VALUE;
if(RSIBuffer[i+1]<=marsioma[i+1]&&RSIBuffer>marsioma) marsiomaXSig=-8;
if(RSIBuffer[i+1]>=marsioma[i+1]&&RSIBuffer<marsioma) marsiomaXSig=8;
i--;}
//----
return(0);
}
//+------------------------------------------------------------------+
void drawLine(double lvl,string name, color Col )
{
ObjectDelete(name);
ObjectCreate(name, OBJ_HLINE, WindowFind(short_name), Time[0], lvl,Time[0], lvl);
ObjectSet(name, OBJPROP_STYLE, STYLE_DOT);
ObjectSet(name, OBJPROP_COLOR, Col);
ObjectSet(name,OBJPROP_WIDTH,1);
}
//+----------------------------------------------

1274825030bline.gif


In qesta formula ci sono anche troppi "segnali": ritengo sarebbe sufficiente il segnale long (verde) e short (rosso) al cross over o al crss under della BLINE con il signal. Imortante poi è lòa possibilità di poter parametrizzare a proprio piacimento i periodi di RSI e Media.
saluti
 
Ad oggi l'unica metodologia che utilizzo le poche volte che riesco ad operare è quella di Joe Di Napoli il cui libro alla prima lettura sembra una sola e poi dalla terza lettura in poi è ... uno spettacolo: provare per credere. E' questa tecnica che mi ha poi portato a interessarmi all'harmonic trading e quindi a Fibonacci.
L'unica cosa che mi manca in ProRealTime e che ho in Metatrader è il Detrended Price Oscillator di Di Napoli (ne ho fatto uno io con Pro Builder e fa il suo lavoro ... ma graficamente è uno schifo).

Metto questo per coloro che fossero interessati alla tecnica di Walter Bressert (chi vuole può chiedermi la traduzione italiana del suo manuale inglese fatta da me). Vi dico subito che la formula che gira su PRT del DSS (doppio Stocastico di Bressert) non è proprio buona buona. Ma anche il DSS quello vero non è proprio ottimo: dà molti falsi segnali. Mentre la B-LINE di bressert (che altro non è che un DSS costruito sull'RSI - o almeno credo -) è ottima per segnali di ingresso, al superamto del max o min per long o short in aggiunta ad altre cosette ...

Ciao QH,
quando vedo un codice mq4 mi gira la testa :D quindi al massimo puoi fare affidamento a quell'anima pia di Tetsuo :violino:

Ma giusto per precisare le cose, ti volevo chiedere
1) a quale libro di Di Napoli fai riferimento?
2) il manuale di Bressert e' The Cycle Trading Pattern Manual?
Non ho mai usato i suoi indicatori e quindi non sono sicuro, ma forse i codici per PRT li puoi trovare qui
Les Cycles - Cycles : Le? - Cycles : Le Double? - Cycles : La Vision? - L'Indicateur Cycle? - Le blog de hk_lisse

Ciao ;)
 
ciao a tutti e complimenti per il bel thread. con riferimento al codice postato dall'ottimo tetsuo, ho una domanda: al primissimo ciclo i valori hlv[1], mediamassimi[1] e mediaminimi[1] credo siano indeterminati, giusto? e PRT non si arrabbia? grazie.



Ciao popov

PRT ha il pregio di non richiedere la dechiarazione e inizializzazione delle variabili ad inizio codice. Il programma a quanto pare gestisce bene i confronti e le operazioni con variabili non definite considerando le variabili non inizializzate nulle (non zero).


Nella stesura di un codice sarebbe comunque sempre corretto inserire delle funzioni di controllo per evitare possibili errori logici in particolar modo sulle prime barre dell'indicatore, ma se non si mostrano problemi non trovo molto utile appesantire il codice solo per rispettare dei formalismi.

Per esempio il codice dell' SSL dovrebbe essere trasformato così


/////////////////////////////////////////////////////////////
//////////////////SSL CHANNEL////////////////////////////
/////////////////////////////////////////////////////////////
//n=10

once hlv=0
If barindex>(n+1) then

mediamassimi=average[n](high)
mediaminimi=average[n](low)
hlv=hlv[1]
if close>mediamassimi[1] then
hlv=1
elsif close<mediaminimi[1] then
hlv=-1
endif
if hlv=-1 then
ssld=mediamassimi[1]
sslu=mediaminimi[1]
else
ssld=mediaminimi[1]
sslu=mediamassimi[1]
endif
endif
return ssld,sslu

//////////////////////FINE//////////////////////////


So' un po' caciarone io un povero scribacchino fai da te :)

Ciao
 
Ultima modifica di un moderatore:
Ciao Quarter

Certo che hai postato un bel po' di roba :up:


Se riesco nel week end provo a vedere se sono in grado di farci qualcosa di utile per PRT :)

Ma il DPO di DI Napoli in cosa differisce da quello di base di PRT??

Hai già fatto dei confronti diretti tra i due indicatori ??
 
Ciao popov

PRT ha il pregio di non richiedere la dechiarazione e inizializzazione delle variabili ad inizio codice. Il programma a quanto pare gestisce bene i confronti e le operazioni con variabili non definite considerando le variabili non inizializzate nulle (non zero).
grazie tetsuo, spero di poter contribuire al thread visto che il mio background è proprio quello del programmatore.
 
Per Meu:
Il libro di Di Napoli è "Il trading con i livelli di Di Napoli" (Trading Library)
Il link che mi hai postato per l'RSI lo avevo visto tempo fa, ma non è proprio quello che voglio, cioè non è la BLINE di Bressert.
Il manuale di Bressert è quello sulle sue tecniche e i suoi indicatori (sono 7 o 8 indicatori, ma quelli utili sono la BLINE e altri 2 che sono poi medie esponenziali riviste e facili da fare). Si intitola "Profit Trader".
Per Tets:
Si hai ragione ho postato troppo tutto insieme, comunque fai quel che puoi (se devi dare una preferenza dalla al DPO di Di Napoli.
Il DPO Di Napoli diffrisce parechio da quello di PRT, non so bene dirti in cosa, perchè la formula di PRT non la conosco, ma ti dico 2 cose semplici che te lo fanno capire:
DPO PRT = non ti dà il valoe aggiornato ma valori passati e per gli ultimi valori ti fa una bella riga orizzontale che non serve a niente.
DPO Di Napoli = ti posso mettere la formula artigianale che ho fatto io su PRT per darti un'idea della costruzione come da suo testo, ma sarebbe bello poterla plottare come hanno fatto in Metatrader perchè la mia fa pena (se non ti è chiaro qualcosa dimmelo). Eccolo:
detrended=close-average[n](close)

min1=lowest[40](detrended)
min2=lowest[80](detrended)
min3=lowest[120](detrended)
mediamin=(min1+min2+min3)/3
iperv70=mediamin*55/100
iperv80=mediamin*70/100
iperv90=mediamin*85/100

max1=highest[40](detrended)
max2=highest[80](detrended)
max3=highest[120](detrended)
mediamax=(max1+max2+max3)/3
iperc70=mediamax*55/100
iperc80=mediamax*70/100
iperc90=mediamax*85/100

Return Detrended,0,iperv70 coloured(0,255,255),iperv80 coloured(0,255,0), iperv90 coloured(0,0,255),mediamin coloured(255,0,0), iperc70 coloured(0,255,255),iperc80 coloured(0,255,0), iperc90 coloured(0,0,255),mediamax coloured(255,0,0)

Ed ecco la differenza tra il mio e quello di PRT:
1274878610eurusdspot.jpg
 
.... quante domande :D

Però qui non faccio una grande figura nessuna novità son tutte cose dette più volte .... questa dei volumi è passione diffusasi di recente. Tutta colpa di quel ragazzaccio di Gianluca S. ogni tanto si rimette a mandare mail e stuzzica la fantasia dei "giovini" trader :)

Comunque per il vWap basta fare una ricerca qui nel 3d e trovi diversi post a riguardo!

Per le barre a volume costante basta segliere dal menù a tendina del Time Frame, presente nella finestra del grafico, l'opzione "(x)Volumi" e segliere il numero di contratti per barra

Per il Market profile (non me lo hai chiesto lo so ma lo dico lo stesso) dalla finestra proprietà del prezzo nel menù a tendina scegliere "Tick Distribution"

Il CVD, il pression book, e l'accelerazione volumi non li conosco e quindi non so che dirti! Ti posso però dire che nel linguaggio di PRT mancano le chiamate specifiche per le funzioni del book (bid e ask) quindi non si possono per il momento costruire indicatori che hanno alla base lo studio di queste dinamiche!!!!


Ciao


Ho cercato su internet ma ho trovato solo un codice su un blog francese ma non ci ho capito molto..

Qualcuno può essere così gentile da postarmi il codice per il VWAP di Prorealtime o linkarmi il post?!


Grazie infinite!!
 
Ho cercato su internet ma ho trovato solo un codice su un blog francese ma non ci ho capito molto..

Qualcuno può essere così gentile da postarmi il codice per il VWAP di Prorealtime o linkarmi il post?!


Grazie infinite!!

Allora ... scusa la franchezza eh, ma prima di tutto avresti dovuto leggere con attenzione la risposta di Tetsuo

Comunque per il vWap basta fare una ricerca qui nel 3d e trovi diversi post a riguardo!

Qua nel 3d e' stato fatto un grosso lavoro per VWAP in risposta alle richieste di Casguzze e Fracicone arrivando ad un codice che va bene per ogni time frame aggirando dei problemi tecnici ... ti assicuro che un po' di tempo e fatica mi e' costata quel codice, e a me del VWAP non me ne puo' fregare di meno ... quindi perlomeno fai il favore di leggere indietro nel 3D per trovare quel codice ok? Questa e' la tua parte di lavoro, non mi sembra esagerato ;)

PS: scusate, stanotte ho dormito poco :D ronca, se poi proprio non ce la fai a trovarlo o hai bisogno di altre delucidazioni siamo qua ...
 

Users who are viewing this thread

Back
Alto