Aiuto per la codifica - pagina 321

 

Questo è quello che ho fatto nel tentativo di applicare un MA all'SSA direttamente, come l'esempio nella mia foto.

Naturalmente, sono un completo noob nella codifica ...

Quindi, se qualcuno potesse dirmi cosa devo cambiare, gliene sarei molto grato.

Mi piace risolvere le cose, anche se sono un noob in questa materia, ma se uno non prova a risolvere i suoi problemi, rimarrà un noob per sempre ...

//+------------------------------------------------------------------+

//| FullSSA.mq4 |

//| Copyright © 2007,klot |

//| klot@mail.ru ||

//+------------------------------------------------------------------+

#proprietà copyright "Copyright © 2007, klot"

#proprietà link "klot@mail.ru"

#importare "libSSA.dll"

void fastSingular(double& a[],int n,int lag ,int s,double&b[]);

#importare

#proprietà indicator_separate_window

#proprietà indicator_buffers 2

#proprietà indicator_color1 Bianco

#proprietà indicator_color2 DeepPink

#proprietà indicator_width1 3

#property indicator_level1 0.0

#property indicator_levelstyle STYLE_DASH

#proprietà indicator_levelcolor Magenta

extern string note_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";

extern string TimeFrame = "Current time frame";

extern int Lag = 10;

extern int NumComps = 2;

extern int PeriodNorm = 10;

extern int N = 1000;

extern int SSAMa_Mode = 3;

extern int MaPeriod = 5;

extern int Ma_Mode = 3;

extern bool Interpolate = true;

double SSA[];

double ssaWork[]

double SSAma[];

double arryTimeSeries[];

stringa indicatorFileName;

bool returnBars;

bool calculateValue;

int timeFrame;

int init()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma);SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N);

indicatorFileName = WindowExpertName();

calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);

returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);

timeFrame = stringToTimeFrame(TimeFrame);

IndicatorShortName(timeFrameToString(timeFrame)+ " FullSSA normalizza corretto");

return(0);

}

int deinit(){return(0);}

int start()

{

doppio dev,ma;

int nmax, nmin;

int size = N;

se (size>Bars) size = Bars;

if (ArraySize(arryTimeSeries) != size)

{

ArrayResize(arryTimeSeries,size);

ArrayResize(ssaWork,size);

}

int limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=MathMin(Bars-counted_bars,Bars-1);

if (returnBars) { SSA[0] = limite+1; return(0); }

if (calculateValue || timeFrame==Period())

{

for( i=size-1; i>=0; i--)

{

ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

se(dev==0) dev=0,1;

arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("Sell "+Time);

ObjectDelete("Compra "+Time);

}

fastSingular(arryTimeSeries,size,Lag,NumComps,ssaWork);

ArrayCopy(SSA,ssaWork);

nmax=ArrayMaximum(SSA,3,1);

nmin=ArrayMinimum(SSA,3,1);

if(nmax==2) {

ObjectCreate("Sell "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Sell "+Time[0],OBJPROP_ARROWCODE,226);

}

if(nmin==2) {

ObjectCreate("Compra "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Buy "+Time[0],OBJPROP_ARROWCODE,225);

}

//----

return(0);

}

limit =MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"", "returnBars",0,0)*timeFrame/Period());

for(i=limit; i>=0; i--)

for (i=limit; i>=0; i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);

{

int y = iBarShift(NULL,timeFrame,Time);

SSA =iCustom(NULL,timeFrame,indicatorFileName,"", "calculateValue",Lag,NumComps,PeriodNorm,N,0,y);

se (timeFrame <= Periodo() ||y==iBarShift(NULL,timeFrame,Time)) continua;

se (!Interpolate) continua;

datetime time = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =time; n++) continua;

doppio fattore = 1.0 / n;

for(int x = 1; x < n; x++)

{

SSA= x*fattore*SSA + (1,0-x*fattore)*SSA;

}

}

return(0);

}

//+------------------------------------------------------------------+

string sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//

//

//

//

//

int stringToTimeFrame(stringa tfs)

{

tfs = StringUpperCase(tfs);

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

se (tfs==sTfTable || tfs==""+iTfTable)return(MathMax(iTfTable,Period());

return(Periodo());

}

stringa timeFrameToString(int tf)

{

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

se (tf==iTfTable) return(sTfTable);

return("");

}

//

//

//

//

//

stringa StringUpperCase(stringa str)

{

stringa s = str;

for (int length=StringLen(str)-1; length>=0; length--)

{

int tchar = StringGetChar(s, lunghezza);

if((tchar > 96 && tchar 223 && tchar < 256))

s = StringSetChar(s, lunghezza, tchar - 32);

else if(tchar > -33 && tchar < 0)

s = StringSetChar(s, lunghezza, tchar + 224);

}

return(s);

}

 
mladen:
Per il cambio di pendenza prova qualcosa del genere:[PHP]double current = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,0);double previous1 = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,1);double previous2 = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,2);if (current>previous1 && previous1

Grazie Mladen, ora ho capito che ho dimenticato di aggiungere Extmapbuffer, numero 2 alle condizioni.

Come sarebbe la condizione per "mentre è Uptrend" comprare o "mentre è Dntrend" poi vendere, come ho già condizioni di esecuzione per gli ordini, non per i cambiamenti di pendenza?

Grazie ancora

Daniel

 

Caro Mladen,

ho bisogno che la condizione sia "mentre è in tendenza" non al cambio esatto di pendenza, così ho scritto questo ma ho problemi con la tendenza al ribasso, SONO queste condizioni corrette? Per l'uptrend sembra funzionare bene... lo stesso per il downtrend sto avendo problemi... Spero che tu possa aiutarmi, grazie.

se (corrente>precedente1)

{

// tendenza al rialzo

}

se(corrente<precedente1)

{

// tendenza al ribasso QUESTO NON FUNZIONA, NON INQUADRARE ALCUN ORDINE DI VENDITA...

}

 
Wulong10:
Questo è quello che ho fatto cercando di applicare un MA all'SSA direttamente, come l'esempio nella mia immagine.

Naturalmente, sono un noob completo nella codifica ...

Quindi, se qualcuno potesse dirmi cosa devo cambiare, gliene sarei molto grato.

Mi piace risolvere le cose, anche se sono un noob in questa materia, ma se uno non prova a risolvere i suoi problemi, rimarrà un noob per sempre ...

//+------------------------------------------------------------------+

//| FullSSA.mq4 |

//| Copyright © 2007,klot |

//| klot@mail.ru ||

//+------------------------------------------------------------------+

#proprietà copyright "Copyright © 2007, klot"

#proprietà link "klot@mail.ru"

#importare "libSSA.dll"

void fastSingular(double& a[],int n,int lag ,int s,double&b[]);

#importare

#proprietà indicator_separate_window

#proprietà indicator_buffers 2

#proprietà indicator_color1 Bianco

#proprietà indicator_color2 DeepPink

#proprietà indicator_width1 3

#property indicator_level1 0.0

#property indicator_levelstyle STYLE_DASH

#proprietà indicator_levelcolor Magenta

extern string note_TimeFrames ="M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";

extern string TimeFrame = "Current time frame";

extern int Lag = 10;

extern int NumComps = 2;

extern int PeriodNorm = 10;

extern int N = 1000;

extern int SSAMa_Mode = 3;

extern int MaPeriod = 5;

extern int Ma_Mode = 3;

extern bool Interpolate = true;

double SSA[];

double ssaWork[]

double SSAma[];

double arryTimeSeries[];

stringa indicatorFileName;

bool returnBars;

bool calculateValue;

int timeFrame;

int init()

{

SetIndexBuffer(0,SSA); SetIndexBuffer(1,SSAma);SetIndexStyle(0,DRAW_LINE); SetIndexDrawBegin(0,Bars-N);

indicatorFileName = WindowExpertName();

calculateValue = (TimeFrame=="calculateValue"); if(calculateValue) return(0);

returnBars = (TimeFrame=="returnBars"); if(returnBars) return(0);

timeFrame = stringToTimeFrame(TimeFrame);

IndicatorShortName(timeFrameToString(timeFrame)+ " FullSSA normalizza corretto");

return(0);

}

int deinit(){return(0);}

int start()

{

doppio dev,ma;

int nmax, nmin;

int size = N;

se (size>Bars) size = Bars;

if (ArraySize(arryTimeSeries) != size)

{

ArrayResize(arryTimeSeries,size);

ArrayResize(ssaWork,size);

}

int limit, i;

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

limit=MathMin(Bars-counted_bars,Bars-1);

if (returnBars) { SSA[0] = limite+1; return(0); }

if (calculateValue || timeFrame==Period())

{

for( i=size-1; i>=0; i--)

{

ma=iMA(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

dev=3*iStdDev(NULL,0,PeriodNorm,0,MODE_SMA,PRICE_CLOSE,i);

se(dev==0) dev=0,1;

arryTimeSeries=(Close-ma)/dev;//iDeMarker(NULL,0,PeriodNorm,i);

ObjectDelete("Sell "+Time);

ObjectDelete("Compra "+Time);

}

fastSingular(arryTimeSeries,size,Lag,NumComps,ssaWork);

ArrayCopy(SSA,ssaWork);

nmax=ArrayMaximum(SSA,3,1);

nmin=ArrayMinimum(SSA,3,1);

if(nmax==2) {

ObjectCreate("Sell "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Sell "+Time[0],OBJPROP_ARROWCODE,226);

}

if(nmin==2) {

ObjectCreate("Compra "+Time[0],OBJ_ARROW,0,Time[0],Open[0]);

ObjectSet("Buy "+Time[0],OBJPROP_ARROWCODE,225);

}

//----

return(0);

}

limit =MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName,"", "returnBars",0,0)*timeFrame/Period());

for(i=limit; i>=0; i--)

for (i=limit; i>=0; i--) SSAma = iMAOnArray(SSA,Bars,MaPeriod,0,Ma_Mode,i);

{

int y = iBarShift(NULL,timeFrame,Time);

SSA =iCustom(NULL,timeFrame,indicatorFileName,"", "calculateValue",Lag,NumComps,PeriodNorm,N,0,y);

se (timeFrame <= Periodo() ||y==iBarShift(NULL,timeFrame,Time)) continua;

se (!Interpolate) continua;

datetime time = iTime(NULL,timeFrame,y);

for(int n = 1; i+n =time; n++) continua;

doppio fattore = 1.0 / n;

for(int x = 1; x < n; x++)

{

SSA= x*fattore*SSA + (1,0-x*fattore)*SSA;

}

}

return(0);

}

//+------------------------------------------------------------------+

string sTfTable[] ={"M1","M5","M15","M30","H1","H4","D1","W1","MN"};

int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};

//

//

//

//

//

int stringToTimeFrame(stringa tfs)

{

tfs = StringUpperCase(tfs);

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

se (tfs==sTfTable || tfs==""+iTfTable)return(MathMax(iTfTable,Period());

return(Periodo());

}

stringa timeFrameToString(int tf)

{

for (int i=ArraySize(iTfTable)-1; i>=0; i--)

se (tf==iTfTable) return(sTfTable);

return("");

}

//

//

//

//

//

stringa StringUpperCase(stringa str)

{

stringa s = str;

for (int length=StringLen(str)-1; length>=0; length--)

{

int tchar = StringGetChar(s, lunghezza);

if((tchar > 96 && tchar 223 && tchar < 256))

s = StringSetChar(s, lunghezza, tchar - 32);

else if(tchar > -33 && tchar < 0)

s = StringSetChar(s, lunghezza, tchar + 224);

}

return(s);

}

Wulong10

Non vedo l'immagine

Potresti per favore allegarla?

 

Avevo già postato l'immagine, ma eccola di nuovo.

Allora, quando prendo una MA da MT4 e la applico all'SSA (applicazione ai primi dati ind.), la MA sembra a posto, quando apro MT4, ma quando gira in tempo reale, non segue più l'SSA.

Questo succede solo su M1, su M5 funziona senza problemi.

L'immagine dovrebbe spiegarlo visivamente.

Grazie.

File:
ssa.png  72 kb
 
Wulong10:
Avevo già postato l'immagine, ma eccola di nuovo.

Quindi, quando prendo una MA da MT4 e la applico all'SSA (applicazione ai primi dati ind.), la MA sembra a posto, quando apro MT4, ma quando gira in tempo reale, non segue più l'SSA.

Questo succede solo su M1, su M5 funziona senza problemi.

L'immagine dovrebbe spiegarlo visivamente.

Grazie.

Non dimenticare che l'SSA si ricalcola. Se non calcolate la MA di tutte le barre SSA che vengono ricalcolate, allora smetterà di seguire l'SSA

 

Ok, ora ho capito perché funziona sulla M5, è perché ho impostato il periodo della MA a 1 e sulla M1 l'ho impostato a 2 .... Questo dovrebbe risolvere il problema. L'ho provato sulla mia simulazione di trading, non è perfetto, ma molto meglio!

Con il periodo 1 la MA dovrebbe seguire l'SSA.

Ma come posso incorporare una MA direttamente nel codice dell'SSA? E dovrebbe anche ricalcolare tutte le barre dell'SSA.... o non è possibile?

 
Wulong10:
Ok, ora ho capito perché funziona sulla M5, è perché ho impostato il periodo della MA a 1 e sulla M1 l'ho impostato a 2 .... Questo dovrebbe risolvere il problema. L'ho testato sulla mia simulazione di trading, non è perfetto, ma molto meglio!

Con il periodo 1 il MA dovrebbe seguire l'SSA.

Ma come posso incorporare una MA direttamente nel codice dell'SSA? E dovrebbe anche ricalcolare tutte le barre dell'SSA.... o non è possibile?

Wulong10

Puoi per favore postare anche il tuo file mq4 (copiare il testo in mql causa quasi sempre dei problemi)?

 

Lascia perdere l'ultima richiesta

Ecco una versione con una media mobile aggiunta: ssa__ma.mq4

File:
ssa__ma.mq4  5 kb
ssa__ma.gif  75 kb
 

Ok, grazie Mladen, sei il migliore!

Non ho tempo di testarlo ora, è a piedi questa sera, vi farò sapere il risultato ...quando il tempo sarà maturo.

Ora posso anche vedere come avrei dovuto farlo, così sarò lo 0,5 % meno noobish dopo averlo studiato.

Motivazione: