Qualcuno conosce il linguaggio di METATRADER? (1 Viewer)

Frenk

Nuovo forumer
Salve a tutti, questo listato è relativo dell' indicatore dei canali di regressione lineare, una specie di Bollinger Band, ma che si utilizzano per la maggiore sull' analisi ciclica,,,,, io sul linguaggio di Metatrader non ci capisco un bel niente, se qualcuno conosce questo linguaggio e riesce a tradurlo (nel linguaggio Metastock sarebbe la meglio) ma anche in quello di Prorealtime, o in un linguaggio matematico mi farebbe un favore......., questo è l' editor:
A quanto mi sembra non credo sia un gioco da ragazzi e io ci o perso diverse ore ma tanto fumo e niente arrosto non voglio trasferire il lavoro a qualcunaltro che lo fa per me cerco solo un aiuto, so che qui c'è gente veramente in gamba, spero che qualcuno mi aiuti, l' indicatore secondo me è molto interessante per inversioni di tendenza relative alle ciclicità.

//+------------------------------------------------------------------+
//| My Canale di Regressione Lineare.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp. |
//| MetaTrader 5 Trading Platform / MetaQuotes Software Corp. |
//+------------------------------------------------------------------+

//----
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Gray
#property indicator_color2 Crimson
#property indicator_color3 Crimson


extern int degree = 3;
extern double kstd = 2.0;
extern int bars = 96;
extern int shift = 0;


//-----
double fx[],sqh[],sql[];

double ai[10,10],b[10],x[10],sx[20];
double sum;
int ip,p,n,f;
double qq,mm,tt;
int ii,jj,kk,ll,nn;
double sq;

int i0 = 0;

/*
void clear()
{
int total = ObjectsTotal();
for (int i=total-1; i >= 0; i--)
{
string name = ObjectName(i);
if (StringFind(name, prefix) == 0) ObjectDelete(name);
}
}
*/

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0, fx); // Áóôåðû ìàññèâîâ èíäèêàòîðà
SetIndexBuffer(1, sqh);
SetIndexBuffer(2, sql);

SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);

SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);

SetIndexShift(0, shift);
SetIndexShift(1, shift);
SetIndexShift(2, shift);

return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//clear();
return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
if (Bars < bars) return;

//----

int mi; // ïåðåìåííàÿ èñïîëüçóþùàÿñÿ òîëüêî â start
ip = bars;
p=ip; // òèïà ïðèñâàèâàíèå
sx[1]=p+1; // ïðèìå÷àíèå - [] - îçíà÷àåò ìàññèâ
nn = degree+1;

SetIndexDrawBegin(0, Bars-p-1);
SetIndexDrawBegin(1, Bars-p-1);
SetIndexDrawBegin(2, Bars-p-1);

//----------------------sx-------------------------------------------------------------------
for(mi=1;mi<=nn*2-2;mi++) // ìàòåìàòè÷åñêîå âûðàæåíèå - äëÿ âñåõ mi îò 1 äî nn*2-2
{
sum=0;
for(n=i0;n<=i0+p;n++)
{
sum+=MathPow(n,mi);
}
sx[mi+1]=sum;
}
//----------------------syx-----------
for(mi=1;mi<=nn;mi++)
{
sum=0.00000;
for(n=i0;n<=i0+p;n++)
{
if(mi==1) sum+=Close[n];
else sum+=Close[n]*MathPow(n,mi-1);
}
b[mi]=sum;
}
//===============Matrix=================== ======================================== ======================================== ====
for(jj=1;jj<=nn;jj++)
{
for(ii=1; ii<=nn; ii++)
{
kk=ii+jj-1;
ai[ii,jj]=sx[kk];
}
}
//===============Gauss==================== ======================================== ======================================== ====
for(kk=1; kk<=nn-1; kk++)
{
ll=0;
mm=0;
for(ii=kk; ii<=nn; ii++)
{
if(MathAbs(ai[ii,kk])>mm)
{
mm=MathAbs(ai[ii,kk]);
ll=ii;
}
}
if(ll==0) return(0);
if (ll!=kk)
{
for(jj=1; jj<=nn; jj++)
{
tt=ai[kk,jj];
ai[kk,jj]=ai[ll,jj];
ai[ll,jj]=tt;
}
tt=b[kk];
b[kk]=b[ll];
b[ll]=tt;
}
for(ii=kk+1;ii<=nn;ii++)
{
qq=ai[ii,kk]/ai[kk,kk];
for(jj=1;jj<=nn;jj++)
{
if(jj==kk) ai[ii,jj]=0;
else ai[ii,jj]=ai[ii,jj]-qq*ai[kk,jj];
}
b[ii]=b[ii]-qq*b[kk];
}
}
x[nn]=b[nn]/ai[nn,nn];
for(ii=nn-1;ii>=1;ii--)
{
tt=0;
for(jj=1;jj<=nn-ii;jj++)
{
tt=tt+ai[ii,ii+jj]*x[ii+jj];
x[ii]=(1/ai[ii,ii])*(b[ii]-tt);
}
}
//======================================== ======================================== ======================================== ===
for(n=i0;n<=i0+p;n++)
{
sum=0;
for(kk=1;kk<=degree;kk++)
{
sum+=x[kk+1]*MathPow(n,kk);
}
fx[n]=x[1]+sum;
}
//-----------------------------------Std-----------------------------------------------------------------------------------
sq=0.0;
for(n=i0;n<=i0+p;n++)
{
sq+=MathPow(Close[n]-fx[n],2);
}
sq=MathSqrt(sq/(p+1))*kstd;

for(n=i0;n<=i0+p;n++)
{
sqh[n]=fx[n]+sq;
sql[n]=fx[n]-sq;
}

return(0);
}
//+------------------------------------------------------------------+
 

Frenk

Nuovo forumer
L' indicatore si chiama Center Of Gravity Channel o anche Polynomial Regression Channel (PRC) Bands, ho fatto diverse ricerche ma per il Meta niente, qualcuno ce la? o sa dove posso trovarlo?
 

gransasso

Forumer attivo
L' indicatore si chiama Center Of Gravity Channel o anche Polynomial Regression Channel (PRC) Bands, ho fatto diverse ricerche ma per il Meta niente, qualcuno ce la? o sa dove posso trovarlo?

Questo è per PRT non so se corrisponde a quello che cercavi
HTML:
REM The gravity center from Mustafa Belkhayate
p3=65

k=p3

de48=DPO[k*2](close)
if de48=de48[1] and de48[1]=de48[2] and de48[2]<>de48[3] then
flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
if flag[1]=1 and flag[2]=0 then
hh=co[1]
endif
if flag[1]=1 then
co=hh
endif
n=p3 mod 2
p=(p3-n)/2
p3=(2*p)+1
once x=0
w=abs((p-x)/p)
w=w*w*w
w=(1-w)
w=w*w*w
x=x+1
if barindex=p3 then
a=0
b=0
e=0
for i=1 to p3
z=barindex-i+1
a=a+w[z]
b=b+w[z]*(i)
e=e+(i)*(i)*w[z]
next
endif
if barindex>p3 then
c=0
d=0
for i=1 to p3
z=barindex-i+1
c=c+co[p3+p-i]*w[z]
d=d+co[p3+p-i]*w[z]*(i)
next
endif
alpha=(a*d-b*c)/(a*e-b*b)
beta=(c*e-b*d)/(a*e-b*b)
lowess=alpha*(p+1)+beta
if barindex < p3*2 then
lowess=undefined
endif

zz = close - lowess
zzsigma = STD[p3](zz)
bb1 = lowess + zzsigma
bb2 = lowess +1.618* zzsigma
bb3 = lowess +2* zzsigma
bl1 = lowess - zzsigma
bl2 = lowess - 1.618* zzsigma
bl3 = lowess - 2* zzsigma

return lowess, bb1, bb2, bb3, bl1, bl2, bl3
 

Frenk

Nuovo forumer
sono gli stessi indicatori ma quello con le bande rosse ha un numero di periodi superiore, ne ho mesi due per chiarire meglio quello che cerco, ma le mie speranze si stanno esaurendo...........

Capture-04-16-00002.jpg
 
Ultima modifica:

Frenk

Nuovo forumer
Questo è per PRT non so se corrisponde a quello che cercavi
HTML:
REM The gravity center from Mustafa Belkhayate
p3=65
 
k=p3
 
de48=DPO[k*2](close)
if de48=de48[1] and de48[1]=de48[2] and de48[2]<>de48[3] then
flag=1
endif
n=(k*2)-4
p=(n/2)-1
d100=DPO[n](close)
moy100=close-d100
co=(moy100-moy100[1]+(close[p])/n)*n
if flag[1]=1 and flag[2]=0 then
hh=co[1]
endif
if flag[1]=1 then
co=hh
endif
n=p3 mod 2
p=(p3-n)/2
p3=(2*p)+1
once x=0
w=abs((p-x)/p)
w=w*w*w
w=(1-w)
w=w*w*w
x=x+1
if barindex=p3 then
a=0
b=0
e=0
for i=1 to p3
z=barindex-i+1
a=a+w[z]
b=b+w[z]*(i)
e=e+(i)*(i)*w[z]
next
endif
if barindex>p3 then
c=0
d=0
for i=1 to p3
z=barindex-i+1
c=c+co[p3+p-i]*w[z]
d=d+co[p3+p-i]*w[z]*(i)
next
endif
alpha=(a*d-b*c)/(a*e-b*b)
beta=(c*e-b*d)/(a*e-b*b)
lowess=alpha*(p+1)+beta
if barindex < p3*2 then
lowess=undefined
endif
 
zz = close - lowess
zzsigma = STD[p3](zz)
bb1 = lowess + zzsigma
bb2 = lowess +1.618* zzsigma
bb3 = lowess +2* zzsigma
bl1 = lowess - zzsigma
bl2 = lowess - 1.618* zzsigma
bl3 = lowess - 2* zzsigma
 
return lowess, bb1, bb2, bb3, bl1, bl2, bl3

Ciao Gransasso ti ringrazio per avermi messo a disposizione il tuo indicatore, ma non è proprio quello che cercavo, io intendevo una cosa del genere,,,,,,,mi è venuto sopra
 
Ultima modifica:

autotrader

Forumer attivo
a dare un occhiata in prorealtime non si fa di certo, nel codice si fa uso di vettori e matrici e prorealtime non sa neppure cosa siano.

Cmq per essere certi che non si possa riformulare l'algoritmo per evitare di farne uso, sicuramente a costo di una elevata complessita, bisognerebbe capire cosa fa l'algoritmo.
 
Ultima modifica:

Frenk

Nuovo forumer
a dare un occhiata in prorealtime non si fa di certo, nel codice si fa uso di vettori e matrici e prorealtime non sa neppure cosa siano.

Cmq per essere certi che non si possa riformulare l'algoritmo per evitare di farne uso, sicuramente a costo di una elevata complessita, bisognerebbe capire cosa fa l'algoritmo.

Ciao Autotrader, effettivamente la cosa più importante è capire l' algoritmo e questo lo si può fare se qualcuno conosce il linguaggio di Metatrader. Probabilmente hai ragione te che su Prorealtime ci sono poche speranze,,,, a me serviva per il Metastock, anche se svilupparla probabilmente richiede tempo e una buona conoscenza del linguaggio di programmazione, posso solo dire che provando l' indicatore su Metatrader e settando i periodi in relazione ai cicli che si vuole seguire da delle buone indicazioni su eventuali svolte o cambiamenti di direzione del mercato....... sto ancora cercando sul web ma per ora de nada a dire la verita mi sembra strano che sia stata fatta solo per metatrader....
 
Ultima modifica:

Users who are viewing this thread

Alto