Wie programmiert man? - Seite 199

 
V-Force:
Ich bin neu in mq4 und ich versuche, eine Anzeige auf dem Bildschirm zu erstellen, wenn es einen Crossover für MACD gibt. Unten ist mein Code, aber die Warnungen halten Pop-up alle paar Minuten.

Wie kann ich es so programmieren, dass die Warnmeldungen nur einmal pro Stunde angezeigt werden? Oder eine Warnung pro Balken?

int start()

{

string MACD1="";

Farbe colt9;

double MACDM_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 0);

double MACDS_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,0);

double MACDM_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 1);

double MACDS_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,1);

if ((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="IN UPTREND"; colt9=LimeGreen; }

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10)) { MACD1="IN DOWNTREND"; colt9=Rot; }

if ((MACDM_S11 > MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="NEUES AUFWÄRTSKREUZ"; colt9=Limettengrün; }

if ((MACDM_S11 MACDS_S10)) { MACD1="NEUES ABWÄRTSKREUZEN"; colt9=Rot; }

string MACD2="";

Farbe colt14;

double MACDM_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 0);

double MACDS_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,0);

double MACDM_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 1);

double MACDS_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,1);

if ((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="IN UPTREND"; colt14=LimeGreen; }

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 > MACDS_L10)) { MACD2="IN DOWNTREND"; colt14=Rot; }

if ((MACDM_L11 > MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="NEUES AUFWÄRTSKREUZ"; colt14=Limettengrün; }

if ((MACDM_L11 MACDS_L10)) { MACD2="NEUES ABWÄRTSKREUZEN"; colt14=Rot; }

if(MACD1=="NEW UP CROSSING"&&MACD2=="IN UPTREND")

Alert(Symbol()," - ", "H1:"," MACD MAIN UPTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD1=="NEW DOWN CROSSING"&&MACD2=="IN DOWNTREND")

Alert(Symbol()," - ", "H1:"," MACD MAIN DOWNTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD2=="NEW UP CROSSING"&&MACD1=="IN UPTREND")

Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO UPTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

if(MACD2=="NEW DOWN CROSSING"&&MACD1=="IN DOWNTREND")

Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO DOWNTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

return(0);

}

Versuchen Sie, Minute()==1; in der Bedingung zu verwenden.

 

Trend Alexcud zum Ändern

if (MaH11v < MaH1pr1v){H11v = " V "; co11v = Rot; u1x5v = 0; d1x5v = 1;}

if (MaH11v > MaH1pr1v){H11v = " /\\ "; co11v = Blau; u1x5v = 1; d1x5v = 0;}

if (MaH11v == MaH1pr1v){H11v = " 0 "; co11v = Grün; u1x5v = 0; d1x5v = 0;}

Hallo zusammen, ich versuche, den Trend alexcud (beigefügt) zu ändern.

ich möchte nur 2 Signale nach oben und unten anstelle von 3 mit "0"...

so dass die Berechnung genauer sein könnte...

Irgendwelche Ideen?

Dateien:
 

Kann mir jemand helfen, diese Programmzeilen zu verstehen? In einfachem Englisch

Es geht um einen EA, der etwas startet, nachdem ein Bar beendet wurde.

Der Code sieht folgendermaßen aus:

datetime timeprev=0;

// Wird nur einmal pro abgeschlossenem Balken ausgeführt

if(timeprev==Time[0]) return(0);

timeprev = Time[0];

Wenn ich mir das MQ4-Handbuch ansehe, ist Time[0] dazu da, die Eröffnungszeit von Bar [0] zu extrahieren. Sie wird als Sekunden ab dem 1. Januar 1970 angegeben.

Ich verstehe nicht, wie das funktioniert. Zuerst haben wir "timeprev=0".

Dann die nächste Zeile "if (timeprev==Time[0]) return(0).

Was ist der Wert von Time[0] zu diesem Zeitpunkt? Wie kommt es, dass er 0 werden kann (der Wert von "timeprev")?

Die nächste Zeile lautet "timeprev=Time[0]".

Wie kommt es, dass die ganze Zeile dazu führt, dass der EA nichts tut, bis ein Takt beendet ist?

 
crn:
Versuchen Sie, Minute()==1; in der Bedingung USE

Dadurch wird immer noch jeder Tick in der ersten Minute eines jeden Balkens ausgelöst. Das kann die Anzahl erheblich reduzieren, aber es wird immer noch mehrfach alarmiert.

Am besten legen Sie eine globale Variable (oder ein Objekt) fest und setzen sie auf die Time[] des letzten Balkens.

if (Time[0]!=lastTime) {

... alert, whatever...

lastTime=Time[0];

}

 
Jorged23:
Hallo,

Ich kann den OrderModify-Fehler 1 nicht vermeiden: er taucht immer auf, auch wenn ich versuche zu kontrollieren, dass die Daten vor der Änderung anders sind! Ich habe es auch mit doublenormalize versucht...funktioniert nicht...

Dies ist der Code:

if (Bid-OrderOpenPrice() >= VPoint*BreakEvenAtProfit)

{

if (OrderStopLoss() != OrderOpenPrice() + BreakEvenShift*VPoint)

{

Vresult = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ BreakEvenShift*VPoint,OrderTakeProfit(),0,Green);

Irgendwelche Vorschläge?

Danke.

Schneller Check... stellen Sie sicher, dass Sie den BreakEven-Abstand nicht zu kurz eingestellt haben. Überprüfen Sie ihn anhand von MarketInfo(Symbol(),MODE_STOPLEVEL), um sicherzustellen, dass er groß genug ist.

Was ist der Zweck von VPoint? Wenn diese Zahl falsch ist, bringt sie alles durcheinander. "Point" selbst wird immer korrekt sein. Wenn diese Zahl nicht stimmt, könnte das definitiv die Ursache des Problems sein. IE es ist versehentlich 0 oder weniger als was POINT tatsächlich ist.

 

SIMPLE Coding Frage

OrderSelect(5555, SELECT_BY_TICKET);

RefreshRates();

if (Ask >= (OrderOpenPrice()+ (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_BUY)) {

OrderClose(5555,1,Ask,10,Red); }

if (Bid <= (OrderOpenPrice()- (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_SELL)) {

OrderClose(5555,1,Bid,10,Blue); }

Ich versuche noch zu lernen...

Würde dies funktionieren, um grundsätzlich die Hälfte (2 Lots auf 1) einer Position zu schließen, wenn der Preis 5 Pips vom Eröffnungskurs entfernt ist?

DANKE!!!!!!

 

Sieht ungefähr richtig aus. Es ist allerdings ein bisschen unübersichtlich. Sie könnten auch OrderProfit verwenden, je nachdem, was Sie eigentlich erreichen wollen.

Lux

PS: Ich habe vergessen zu erwähnen, dass man bei Brokern mit 5 Nachkommastellen aufpassen muss. Alles muss mit 10 multipliziert werden, in Ihrem Beispiel wäre 5 also 50. Viel Erfolg!

 
luxinterior:
Sieht ungefähr richtig aus. Allerdings ist es ein bisschen unübersichtlich. Sie könnten auch OrderProfit verwenden, je nachdem, was Sie eigentlich erreichen wollen.

Lux

PS: Ich habe vergessen zu erwähnen, dass ich auf die 5 Dezimalstellen-Broker achten muss. Alles muss mit 10 multipliziert werden, in Ihrem Beispiel wäre 5 also 50. Viel Erfolg!

Danke LUX

Das Problem ist, dass ich es nur zum Debuggen auf einem 1-Minuten-GBP/USD-Chart mit Windsor direkt laufen lasse und es nicht 1 Lot schließt, wenn es die 5 Pips trifft, also weiß ich nicht, woran das liegt.

ALSO,

Ich versuche, einen Kauf zu schließen und sofort einen Verkauf zu eröffnen, und das klappt auch nicht so gut.

Es funktioniert und dann nicht mehr...

Ich wünschte, dies wäre viel einfacher zu programmieren

if (*******************) {

RefreshRates();

OrderSelect(5555,SELECT_BY_TICKET);

if (OrdersTotal() > 0 && OrderType()==OP_BUY) {OrderClose(5555, OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");}

Sleep(1500);

RefreshRates();

if (OrdersTotal() ==0) Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket<0)Print("OrderSend failed with error #",GetLastError());

}

 

Debugging von Indikatoren

Ich bin neu in dieser Sprache und versuche, einen Indikator zu schreiben. Ich habe Probleme, da es keinen Debugger gibt. Ich habe versucht, Print() zu verwenden, aber es wird nichts gedruckt. Mit Alert() erhalte ich NULL als Ausgabe für den buffer[1] . Kann mir das bitte jemand erklären. Wie kann ich Print() und Alert() zur Fehlersuche verwenden, ohne alle NULLen zu erhalten. Wenn jemand eine Idee hat, lassen Sie es mich bitte wissen. Vielen Dank!

tigger.longtail@gmail.com

ExtMapBuffer1 = iMA(NULL,0,ExtParam1,0,MODE_EMA,PRICE_CLOSE,i);

ExtMapBuffer2 = iMA(NULL,0,ExtParam2,0,MODE_EMA,PRICE_CLOSE,i);

CurrentBar = Zeit;

if( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == Time && Flag == 0)

{

Alert("ExtMapBuffer1 =", ExtMapBuffer1," Short ist über. ",Hour()," Minute ",Minute());

Alert("ExtMapBuffer2 =", ExtMapBuffer2," Short is Above. ",Stunde()," Minute ",Minute());

Print("ExtMapBuffer1 = ", ExtMapBuffer1);

Print("ExtMapBuffer2 = ", ExtMapBuffer2);

 

auf keinen Fall

Grund der Beschwerde: