Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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);
}
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...
}
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!
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 ?
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
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.