Hilfe bei der Codierung - Seite 321

 

Dies ist, was ich tat bei dem Versuch, eine MA auf die SSA direkt anwenden, wie das Beispiel in meinem Bild.

Natürlich bin ich ein kompletter Noob in der Codierung ...

Also, wenn mir jemand sagen könnte, was ich ändern muss, wäre ich sehr dankbar.

Ich mag es, Dinge zu lösen, auch wenn ich ein Noob in dieser Sache bin, aber wenn man nicht versucht, seine Probleme zu lösen, wird man für immer ein Noob bleiben ...

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

//| FullSSA.mq4 |

//| Copyright © 2007,klot |

//| klot@mail.ru |

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

#Eigenschaft Copyright "Copyright © 2007, klot"

#property link "klot@mail.ru"

#import "libSSA.dll"

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

#import

#property indicator_separate_window

#property indikator_puffer 2

#property indicator_color1 Weiß

#property indicator_color2 DeepPink

#Eigenschaft indicator_width1 3

#Eigenschaft indicator_level1 0.0

#property indicator_levelstyle STYLE_DASH

#property indicator_levelcolor Magenta

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

extern string TimeFrame = "Aktueller Zeitrahmen";

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[];

string 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 normalize correct");

return(0);

}

int deinit(){return(0);}

int start()

{

double dev,ma;

int nmax, nmin;

int size = N;

if (size>Bars) size = Bars;

if (ArraySize(arryTimeSeries) != size)

{

ArrayResize(arryTimeSeries,size);

ArrayResize(ssaWork,size);

}

int limit, i;

int gezählte_Balken=IndicatorCounted();

if(gezählte_Balken<0) return(-1);

if(gezählte_Balken>0) gezählte_Balken--;

limit=MathMin(Balken-gezählte_Balken,Balken-1);

if (returnBars) { SSA[0] = limit+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,PREIS_SCHLIESSEN,i);

if(dev==0) dev=0.1;

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

ObjectDelete("Sell "+Time);

ObjectDelete("Kaufen "+Zeit);

}

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("Verkaufen "+Zeit[0],OBJPROP_ARROWCODE,226);

}

if(nmin==2) {

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

ObjectSet("Kaufen "+Zeit[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);

if (timeFrame <= Period() ||y==iBarShift(NULL,timeFrame,Time)) continue;

if (!Interpolate) continue;

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

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

double Faktor = 1.0 / n;

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

{

SSA= x*Faktor*SSA + (1.0-x*Faktor)*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(string tfs)

{

tfs = StringUpperCase(tfs);

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

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

return(Zeitraum());

}

string timeFrameToString(int tf)

{

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

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

return("");

}

//

//

//

//

//

string StringUpperCase(string str)

{

string s = str;

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

{

int tchar = StringGetChar(s, length);

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

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

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

s = StringSetChar(s, Länge, tchar + 224);

}

return(s);

}

 
mladen:
Für die Slope-Änderung versuchen Sie etwas wie dieses:[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

Danke Mladen!!, jetzt finde ich heraus, vergaß das Hinzufügen Extmapbuffer, Nummer 2 zu Bedingungen.

Wie wäre die Bedingung für "while is Uptrend" kaufen oder "while is Dntrend" dann verkaufen, da ich bereits Ausführungsbedingungen für die Aufträge habe, nicht für Änderungen der Steigung?

Nochmals vielen Dank

Daniel

 

Lieber Mladen,

ich brauche die Bedingung "während des Trends", nicht bei der exakten Änderung der Steigung, also habe ich das geschrieben, habe aber Probleme mit dem Abwärtstrend, sind diese Bedingungen korrekt? Für den Aufwärtstrend scheint es gut zu funktionieren... für den Abwärtstrend habe ich Probleme... Ich hoffe du kannst mir helfen, danke.

if (current>previous1)

{

// Aufwärtstrend

}

if(current<previous1)

{

// Abwärtstrend DIES FUNKTIONIERT NICHT UND LÖST KEINEN VERKAUFSAUFTRITT AUS...

}

 
Wulong10:
Das habe ich gemacht, als ich versucht habe, eine MA direkt auf die SSA anzuwenden, wie das Beispiel in meinem Bild.

Natürlich bin ich ein kompletter Noob in der Codierung ...

Also, wenn mir jemand sagen könnte, was ich ändern muss, wäre ich sehr dankbar.

Ich mag es, Dinge zu lösen, auch wenn ich ein Noob in dieser Sache bin, aber wenn man nicht versucht, seine Probleme zu lösen, wird man für immer ein Noob bleiben ...

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

//| FullSSA.mq4 |

//| Copyright © 2007,klot |

//| klot@mail.ru |

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

#Eigenschaft Copyright "Copyright © 2007, klot"

#property link "klot@mail.ru"

#import "libSSA.dll"

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

#import

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Weiß

#property indicator_color2 DeepPink

#Eigenschaft indicator_width1 3

#Eigenschaft indicator_level1 0.0

#property indicator_levelstyle STYLE_DASH

#property indicator_levelcolor Magenta

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

extern string TimeFrame = "Aktueller Zeitrahmen";

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[];

string 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 normalize correct");

return(0);

}

int deinit(){return(0);}

int start()

{

double dev,ma;

int nmax, nmin;

int size = N;

if (size>Bars) size = Bars;

if (ArraySize(arryTimeSeries) != size)

{

ArrayResize(arryTimeSeries,size);

ArrayResize(ssaWork,size);

}

int limit, i;

int gezählte_Balken=IndicatorCounted();

if(gezählte_Balken<0) return(-1);

if(gezählte_Balken>0) gezählte_Balken--;

limit=MathMin(Balken-gezählte_Balken,Balken-1);

if (returnBars) { SSA[0] = limit+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,PREIS_SCHLIESSEN,i);

if(dev==0) dev=0.1;

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

ObjectDelete("Sell "+Time);

ObjectDelete("Kaufen "+Zeit);

}

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("Verkaufen "+Zeit[0],OBJPROP_ARROWCODE,226);

}

if(nmin==2) {

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

ObjectSet("Kaufen "+Zeit[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);

if (timeFrame <= Period() ||y==iBarShift(NULL,timeFrame,Time)) continue;

if (!Interpolate) continue;

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

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

double Faktor = 1.0 / n;

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

{

SSA= x*Faktor*SSA + (1.0-x*Faktor)*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(string tfs)

{

tfs = StringUpperCase(tfs);

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

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

return(Zeitraum());

}

string timeFrameToString(int tf)

{

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

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

return("");

}

//

//

//

//

//

string StringUpperCase(string str)

{

string s = str;

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

{

int tchar = StringGetChar(s, length);

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

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

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

s = StringSetChar(s, Länge, tchar + 224);

}

return(s);

}

Wulong10

Ich kann das Bild nicht sehen.

Würden Sie es bitte anhängen?

 

Ich hatte bereits das Bild gepostet, aber hier ist es wieder.

Also, wenn ich einen MA aus MT4 nehme und ihn auf die SSA anwende (auf die ersten ind. Daten anwenden), sieht der MA gut aus, wenn ich MT4 öffne, aber wenn er in Echtzeit läuft, folgt er nicht mehr der SSA.

Dies geschieht nur auf M1, auf dem M5 läuft es ohne Probleme.

Das Bild sollte es visuell erklären.

Vielen Dank!

Dateien:
ssa.png  72 kb
 
Wulong10:
Ich hatte das Bild bereits gepostet, aber hier ist es noch einmal.

Also, wenn ich einen MA aus MT4 nehme und ihn auf die SSA anwende (auf die ersten ind. Daten anwenden), sieht der MA in Ordnung aus, wenn ich MT4 öffne, aber wenn er in Echtzeit läuft, folgt er nicht mehr der SSA.

Dies geschieht nur auf M1, auf dem M5 läuft es ohne Probleme.

Das Bild sollte es visuell erklären.

Danke!

Vergessen Sie nicht, dass die SSA neu berechnet wird. Wenn Sie den MA aller SSA-Balken, die neu berechnet werden, nicht berechnen, folgt er nicht mehr dem SSA.

 

Ok, jetzt verstehe ich, warum es auf dem M5 funktioniert, es ist, weil ich die Periode des MA dort auf 1 gesetzt habe und auf dem M1 habe ich es auf 2 gesetzt ....Das sollte das Problem lösen. Ich habe es in meiner Handelssimulation getestet, es ist nicht perfekt, aber viel besser!

Mit Periode 1 sollte der MA dem SSA folgen.

Aber wie kann ich einen MA direkt in den Code des SSA einbauen ? Und es sollte auch alle SSA-Balken neu berechnen....oder ist das nicht möglich ?

 
Wulong10:
Ok, jetzt verstehe ich, warum es auf dem M5 funktioniert, es ist, weil ich die Periode des MA dort auf 1 gesetzt habe und auf dem M1 habe ich sie auf 2 gesetzt ....Das sollte das Problem lösen. Ich habe es in meiner Handelssimulation getestet, es ist nicht perfekt, aber viel besser!

Bei Periode 1 sollte die MA der SSA folgen.

Aber wie kann ich einen MA direkt in den Code der SSA einbauen? Und es sollte auch alle SSA-Balken neu berechnen....oder ist das nicht möglich ?

Wulong10

Können Sie bitte auch Ihre mq4-Datei posten (das Kopieren von Text in mql verursacht fast immer Probleme)?

 

Vergessen Sie die letzte Anfrage

Hier ist eine Version mit einem zusätzlichen gleitenden Durchschnitt: ssa__ma.mq4

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

Ok, danke Mladen, du bist der Größte!

Ich habe keine Zeit, es jetzt zu testen, es ist Fuß heute Abend, ich werde Sie das Ergebnis wissen lassen ... wenn die Zeit reif ist.

Jetzt kann ich auch sehen, wie ich es hätte machen sollen, also werde ich 0,5 % weniger doof sein, nachdem ich es studiert habe.

Grund der Beschwerde: