Programmazione Prorealtime Prorealtime:formule, indicatori, oscillatori, tsi ... (1 Viewer)

notedimercato

Nuovo forumer
Salve a tutti ho una domanda forse banale, ma non sono un programmatore, anche se qualcosa so programmare di Prorealtime, questa cosa qui non sono capace.

La funzione STD in prorealtime fornisce la deviazione standard per così dire "distorta", quella che su Excel si ricava attraverso la funzione =DEV.ST.POP

A me servirebbe che Prorealtime calcolasse invece la funzione =DEV.ST (o per le versioni nuove di Excel =DEV.ST.C)

In pratica come traduco in Prorealtime i seguenti passaggi?

{[(Somma dei quadrati degli scarti / N) - Media di N al quadrato] * N} / N-1

e poi del risultato la radice quadrata


Grazie di tutto :up:
 
Ultima modifica:

stevesteve

Nuovo forumer
barindex date day days.....?????

salve,

sto provando un TS con un TP del 10 %, e volevo inserire la condizione "esci se dopo n giorni non si è raggiunto il target".

Non ci sono finora riuscito.

Ho allora cercato di fare un codice semplice semplice per cercare di capire come funzionassero le diverse variabili che PRT rende disponibili, ed eccolo qui:

*************************************
DEFPARAM CumulateOrders=False

// variabili per chiudere se non taggiunge +10% entro tot giorni

once dtLong = 0 // questa sarà valorizzata con la data di ingresso long

ggattesa = 10 // indica dopo quanti giorni uscire ne se non si è già raggiunto iltarget di +10%.

// variabili per medie mobili
mm20 = ExponentialAverage[20](close)
mm5 = ExponentialAverage[5](close)

///////CONDIZIONI INGRESSO LONG///////////////
// entrata long alla semplice condizione dell'incrocio delle due medie mobili

ae1 = mm5 CROSSES OVER mm20
if ae1 then
buy 10000/open share at market
//memorizza data ingresso
dtLong = date
endif

/////CONDIZIONI USCITA LONG////////
//esce, anche prima di aver raggiunto il target del +10%, se i giorni trascorsi fra la data di oggi (Date( e la data di ingresso (memorizzata in dtLong) sono più di 10 (valore inserito nella variabile ggattesa.
au1 = (date - dtLong) > ggattesa

if au1 then
// il problema è che l'uscita con numero di barre inferiore a 9 dovrebbe avvenire soltanto se raggiunto il target +10%. Invece ci sono uscite anche negative con 6 o 7 barre
SELL at market
// reinizializzo la variabile del giorno di ingresso, fino al nuovo ingresso.
dtLong = 0
endif
////FINE LONG////////

TP = 10
SET TARGET %PROFIT TP
*************************************

il punto critico credo sia quello evidenziato in blu. Ho provato a mettere, al posto di "Date", anche "barindex", ma in realtà non ho capito come si fa a memorizzare il giorno in cui l'operazione comincia.

Qualcuno sa aiutarmi?

Grazie,

Stefano
 

autotrader

Forumer attivo
Per capire se sei dentro puoi usare la variabile OnMarket, che vale true o false, incrementi un contatore da quando diventa true e sai da quante barre sei dentro.
 

stevesteve

Nuovo forumer
Per capire se sei dentro puoi usare la variabile OnMarket, che vale true o false, incrementi un contatore da quando diventa true e sai da quante barre sei dentro.


grazie. Ok, questo può essere un modo intelligente di "aggirare" l'ostacolo, e se non trovo il modo diretto proverò questo.

Tuttavia mi piacerebbe sapere se esiste un modo per memorizzare in una mia variabile la data del giorno di ingresso, tipo:

miavariabile = giornoingresso

al posto di giornoingresso va bene DATE? o Barindex? Oppure?

Grazie

Stefano
 

stevesteve

Nuovo forumer
ho provato con il contatore e OnMarket, e le uscite dopo 10 barre sembrano funzionare, solo che adesso non rispetta (non sempre) la condizione di ingresso dell'incrocio fra le medie.

******************************
DEFPARAM CumulateOrders=False

// variabili per chiudere se non taggiunge +10% entro tot giorni

once contLong = 0 // questa sarà valorizzata a 1 al momnto dell'ingresso long, e aumentata d iuna unità ogni barra successiva

ggattesa = 10 // indica dopo quanti giorni uscire ne se non si è già raggiunto iltarget di +10%. Mi pare che il sistema conti anche la barra di partenza, quindi se si voogliono far passare 10 gg qui bisognerà valorizzare con 11.

// variabili per medie mobili
mm20 = ExponentialAverage[20](close)
mm5 = ExponentialAverage[5](close)

///////CONDIZIONI INGRESSO LONG///////////////
// entrata long alla semplice condizione dell'incrocio delle due medie mobili

if OnMarket then
contLong = contLong + 1
endif

ae1 = mm5 CROSSES OVER mm20
if ae1 then
buy 10000/open share at market
contLong = 1
endif

/////CONDIZIONI USCITA LONG////////
//esce, anche prima di aver raggiunto il target del +10%, se i giorni trascorsi fra la data di oggi (Date( e la data di ingresso (memorizzata in contLong) sono più di 10 (valore inserito nella variabile ggattesa.
au1 = contLong > ggattesa

if au1 then
SELL at market
// reinizializzo la variabile del giorno di ingresso, fino al nuovo ingresso.
contLong = 0
endif
////FINE LONG////////

TP = 10
SET TARGET %PROFIT TP
 
Ultima modifica:

autotrader

Forumer attivo
steve ho provato a dare un occhiata ma non saprei dirti se c'è un errore, invece posso dirti che in passato ho usato prorealtime, ma poi mi son stufato perchè spesso trovavo bachi, cioè malfunzionamenti non dovuti a miei errori ma ad errori proprietari per cosi dire di prorealtime.
Non so nel tuo caso se la colpa sia tua o di prorealtime.
 

romanitrading

Forumer attivo
io vorrei creare con prorealtime una classifica con i titoli che hanno la variazione percentuale più alta negli ultimi 60 giorni. come si fa?

Grazie per l'aiuto

Andrea
 
Io farei cosi

Io farei cosi come sotto in rosso



ho provato con il contatore e OnMarket, e le uscite dopo 10 barre sembrano funzionare, solo che adesso non rispetta (non sempre) la condizione di ingresso dell'incrocio fra le medie.

******************************
DEFPARAM CumulateOrders=False

// variabili per chiudere se non taggiunge +10% entro tot giorni

once contLong = 0 // questa sarà valorizzata a 1 al momnto dell'ingresso long, e aumentata d iuna unità ogni barra successiva

ggattesa = 10 // indica dopo quanti giorni uscire ne se non si è già raggiunto iltarget di +10%. Mi pare che il sistema conti anche la barra di partenza, quindi se si voogliono far passare 10 gg qui bisognerà valorizzare con 11.

// variabili per medie mobili
mm20 = ExponentialAverage[20](close)
mm5 = ExponentialAverage[5](close)

///////CONDIZIONI INGRESSO LONG///////////////
// entrata long alla semplice condizione dell'incrocio delle due medie mobili

if OnMarket then
contLong = contLong + 1
endif

ae1 = mm5 CROSSES OVER mm20
if ae1 then
buy 10000/open share at market
contLong = 1 (IO Metterei contLong= contLong + 1)
endif

/////CONDIZIONI USCITA LONG////////
//esce, anche prima di aver raggiunto il target del +10%, se i giorni trascorsi fra la data di oggi (Date( e la data di ingresso (memorizzata in contLong) sono più di 10 (valore inserito nella variabile ggattesa.
au1 = contLong > ggattesa

if au1 then
SELL at market
// reinizializzo la variabile del giorno di ingresso, fino al nuovo ingresso.
contLong = 0
endif
////FINE LONG////////

TP = 10
SET TARGET %PROFIT TP
 
Regressione Lineare

salve a tutti ...

c'è qualcuno che si è "picchiato" con la regressione lineare creando un script in PRT ?

magari cimentandosi anche con il canale di Raff


tancheiuuuu
 
Indicatore di correlazione

Ciao a tutti, il mio nome è Patricia sto iniziando a commercio Forex fx, vale a dire () correlazioni con forex. Ho un codice in MT4 ProRealTime, ma io lavoro con, una volta o l'altra ho visto il forum e haceis si chiede il motivo per cui chiedo il vostro aiuto per vedere se si può passare il codice a prorealtime.
Mil ringraziare tutti e saluti dalla Spagna .Perdon è la traduzione di google, io non parlo italiano.Saludo tutti.

codice mt4

/---- input parameters
extern int CorPeriod = 20;
extern string HedgeSymbol = "EURUSD";

double CorBuffer[];

//+------------------------------------------------------------------+
int init()
{
string short_name;
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,CorBuffer);
short_name="Cor("+CorPeriod+","+Symbol()+","+HedgeSymbol+")";
IndicatorShortName(short_name);
SetIndexLabel(0,"Cor("+CorPeriod+")");
return(0);
}

//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
double rel,negative,positive;
if(Bars<=CorPeriod) return(0);

i=Bars-CorPeriod-1;
if(counted_bars>=CorPeriod) i=Bars-counted_bars-1;
while(i>=0)
{
CorBuffer = Cor(Symbol(),HedgeSymbol,i);
i--;
}

return(0);
}

//+------------------------------------------------------------------+
double sDif(string symbol, int shift)
{
return(iClose(symbol, 0, shift) - iMA(symbol, 0, CorPeriod, 0,MODE_SMA,PRICE_CLOSE, shift));
}

double pDif(double val)
{
return(MathPow(val, 2));
}

double Cor(string base, string hedge,int shift)
{
double u1 = 0, l1 = 0, s1 = 0;
for(int i = (CorPeriod+shift) - 1; i >= shift; i--)
{
u1 += sDif(base, i)* sDif(hedge, i);
l1 += pDif(sDif(base, i));
s1 += pDif(sDif(hedge, i));
}
double dMathSqrt = MathSqrt(l1*s1);
if(dMathSqrt > 0)
return(u1 / dMathSqrt);
}
 

Users who are viewing this thread

Alto