Hilfe bei der Codierung - Seite 173

 

hallo coder,

ich habe einen sehr einfachen indikator erstellt, der einen alert anzeigt, wenn der letzte bar über oder unter dem sma10 liegt. mehr nicht. aber ich würde ihn gerne in 3 verschiedenen timeframes überprüfen. ich habe noch nie mit mtf-indikatoren gearbeitet und habe daher einige probleme damit. diese version überprüft den m1, m5 und m15 chart. es funktioniert gut, aber es gibt das problem, dass der alert bei jedem tick angezeigt wird und nicht nur einmal in dem timeframe, in dem die bedingungen erfüllt sind.

ich würde mich freuen, wenn mir jemand dabei helfen könnte. ich denke, es könnte nur ein syntax-problem sein.

vielen dank!

Dateien:
test.mq4  3 kb
 

Hallo,

ich muss noch mal nachfragen, weil ich keinen Fehler finden kann, sondern nur falsche Werte bekomme :-(

Vielleicht sieht jemand meinen Fehler?!

Dies ist der Code des Indikators

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}
 
sunshineh:
Hallo,

Ich muss noch einmal nachfragen, denn ich kann keinen Fehler finden, sondern bekomme nur die falschen Werte :-(

Vielleicht sieht jemand meinen Fehler?!

Das ist der Code vom Indikator

#property indicator_chart_window

#property indicator_buffers 5

double WidestChannel_high[];

double InsideChannel_high[];

double StandardDeviation[];

double InsideChannel_low[];

double WidestChannel_low[];

extern int STD.Rgres.period=0; /*default 0 means the channel will use the open

time from "x" bars back on which ever time period

the indicator is attached to. one can change to 1,5,

15,30,60...etc to "lock" the start time to a specific

period, and then view the "locked" channels on a different time period...*/

extern int STD.Rgres.length=56; // bars back regression begins

extern double STD.Rgres.width=1.618;// widest channel

extern double STD.width=0.618; // inside channel

int init()

{

SetIndexBuffer(0,WidestChannel_high);

SetIndexLabel(0,"WidestChannel_high");

SetIndexBuffer(1,InsideChannel_high);

SetIndexLabel(1,"InsideChannel_high");

SetIndexBuffer(2,StandardDeviation);

SetIndexLabel(2,"StandardDeviation");

SetIndexBuffer(3,InsideChannel_low);

SetIndexLabel(3,"InsideChannel_low");

SetIndexBuffer(4,WidestChannel_low);

SetIndexLabel(4,"WidestChannel_low");

return(0);

}

int deinit() {

ObjectDelete("regression channel");ObjectDelete("std channel");return(0);

}

int start() {

int counted_bars=IndicatorCounted(),limit, iTF;

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//to refresh properly delete old objects...

ObjectDelete("regression channel");ObjectDelete("std channel");

//widest channel

ObjectCreate("regression channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("regression channel",OBJPROP_DEVIATION,STD.Rgres.width);

ObjectSet("regression channel",OBJPROP_COLOR,Orange);

ObjectSet("regression channel",OBJPROP_RAY,true);

//inside channel

ObjectCreate("std channel",OBJ_STDDEVCHANNEL,0,iTime(Symbol(),STD.Rgres.period,STD.Rgres.length),

Close[STD.Rgres.length],Time[0],Close[0]);

ObjectSet("std channel",OBJPROP_DEVIATION,STD.width);

ObjectSet("std channel",OBJPROP_COLOR,Olive);

ObjectSet("std channel",OBJPROP_RAY,true);

for(int i=0; i<limit; i++)

{

double dev = iStdDev(NULL,STD.Rgres.period,STD.Rgres.length,0,MODE_SMA,PRICE_CLOSE,i);

double innerWidth = STD.width*dev;

double outerWidth = STD.Rgres.width*dev;

double price = ObjectGetValueByShift("std channel", i);

WidestChannel_high= price + outerWidth/2;

InsideChannel_high= price + innerWidth/2;

StandardDeviation= price;

InsideChannel_low= price - innerWidth/2;

WidestChannel_low= price - outerWidth/2;

}

return(0);}

Sonnenschein,

Sie müssen die Abweichung nicht durch 2 teilen, um das Hoch und das Tief zu erhalten - entfernen Sie den "/2"-Teil und es sollte OK sein, vorausgesetzt, dass der mittlere Preis OK ist. Die Breite des Kanals ist immer konstant: die aktuelle Standardabweichung sollte für die mit verwendet werden, nicht irgendein anderer Wert. Und das letzte, soweit ich sehe, ObjectGetValueByShift("std channel", i); funktioniert nicht auf Standardabweichungskanal, wie es auf Trendlinien funktioniert. Welcher Wert wird zurückgegeben, ich weiß nicht (siehe den beigefügten Indikator und Sie werden sehen, warum ich sage, dass ich nicht weiß, was dieser Preis ist)

Dateien:
_test_4.mq4  3 kb
 

HI mladen,

ich hänge einen Beispielindikator an, der interne voreingestellte Symbole verwendet, die für mich ziemlich schwer zu verstehen sind. Ist es möglich, einige Hinweise von diesem Indikator zu erhalten, um meine Indikatoren oder/und Ihre Indikatoren anzupassen, um das Problem der Wiederholung oder Aktualisierung der Shift-Linie/Tick-Probleme zu vermeiden oder eine Art von Sy nergie zu schaffen? Vielen Dank für Ihr Interesse.

 
kenwa:
HI mladen, ich hänge einen Beispielindikator an, der interne voreingestellte Symbole verwendet, die für mich ziemlich schwer zu verstehen sind. Ist es möglich, einige Hinweise von diesem Indikator zu erhalten, um meine Indikatoren oder/und Ihre Indikatoren anzupassen, um das Problem der Wiederholung oder Aktualisierung der Shift-Linie/Tick-Probleme zu vermeiden oder eine Art von Sy nergie zu schaffen? Vielen Dank für Ihr Interesse.

kenwa

Ich arbeite nicht an dekompiliertem Material. Sorry

 
mladen:
kenwa Ich arbeite nicht an dekompiliertem Material. Entschuldigung

ok, dann entferne ich es, aber interessant ist, warum niemand es anschaut, aber man kann wissen, dass es dekompiliertes Zeug ist

 
kenwa:
ok, dann entferne ich es, aber interessant ist, warum niemand es sieht, aber man kann wissen, dass es dekompiliertes Zeug ist

Jeder, der sich ein bisschen mit Kodierung auskennt, weiß, dass es sich um einen dekompilierten Code handelt.

Und selbst wenn Sie überhaupt keine Ahnung von Programmierung haben, wenn Sie so ein Ding haben :

/*

Erzeugt von EX4-TO-MQ4 decompiler FREEWARE V4.0.451.1 [-]

Website: MetaTrader 5 Handelsplattform / MetaQuotes Software Corp.

E-Mail: support@metaquotes.net

*/

in den ersten Zeilen des Indikators, den Sie gepostet haben, scheint es ziemlich offensichtlich zu sein, dass jeder sehen kann, dass es sich um einen dekompilierten Code handelt, also, bitte ...

Alles Gute

 

mladen, mein Code ist nicht dekompiliert. Vielleicht möchten Sie ihn sich kurz ansehen?

 
Marbo:
mladen, mein Code ist nicht dekompiliert. Vielleicht möchten Sie ihn sich kurz ansehen?

Marbo

Sie können etwas wie in der beigefügten tun. Es wird Sie einmal pro Zielzeitrahmenbalken alarmieren oder wenn sich der Status (Typ des Alarms) ändert. Wenn Sie den Typ ignorieren möchten, überspringen Sie die Typprüfung in der doAlert-Prozedur. Wenn Sie die Zeitprüfung überspringen möchten (in diesem Fall würde nur der Typ geprüft), dann überspringen Sie die Zeitprüfung in der doAlert-Prozedur

Dateien:
test_4.mq4  3 kb
 

Hallo mladen,

Du wirst Dich wahrscheinlich daran erinnern, dass ich letzte Woche um Hilfe bei einem MA cross EA gebeten habe und natürlich fälschlicherweise auf den Elite-Bereich verwiesen habe. Was kannst Du mir empfehlen, wo ich bitte nachfragen sollte? Ich habe gesucht und keine eindeutige Antwort gefunden. Um Ihr Gedächtnis aufzufrischen, dies war die Spezifikation:

1.SMA EMA kreuzen

2.bei Kerzenschluss

3.OCO mit Platzierung einer neuen Order in eine neue Richtung

4. die Möglichkeit, Slippage einzustellen

5. hörbares Signal für Cross

6. ein Cross ist kein echtes Cross ohne ein einstellbares Pip-Gap

7. möglichst In-Candle-Monitoring, d.h. wenn eine Kerze mehr als das X-fache der ATR (einstellbare Anzahl) beträgt, wird eine Order mit einem Alarm in Richtung dieser Kerze platziert, und ebenso, um eine Order zu schließen, aber dann keine neue zu starten

8. vorzugsweise wenn eine Order wie in 7 platziert wird, um einen Alarm auszulösen

9. die Zuverlässigkeit des Kreuzes ist von größter Bedeutung. In meinen Charts - FXCM, Vantage, FX Choice - nehmen einige EAs, einschließlich Universal Cross, keine Trades an oder sind zu spät

10. Einstellbarer SL, kann aber weggelassen werden, wenn er nicht benötigt wird

11.nachlaufender Stop

12.SL geht nach X Pips Gewinn automatisch auf Break-Even

13. Max. Anzahl offener Trades

14. magische Zahl

Mit freundlichen Grüßen

Jeff