Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Öffne neue Order gleich nachdem letzte Oder ausgestoppt wurde (http://www.expert-advisor.com/forum/showthread.php?t=4326)

saro2018 23.06.15 21:13

Zitat:

Zitat von traderdoc (Beitrag 30235)
int lastorder; solltest Du mal gegen int lastorder = -1; ersetzen.
Daran liegt es aber nicht.

Du mußt Dir überlegen, wo der EA lang laufen soll un dan den Stellen, wo Du das kontrollieren willst, schreibst Du halt Print("T"); Sollten mehrere Stellen gleichzeitig kontrolliert werden dann Print("T1");, Print("T2"); usw.Damit kannst Du dann genau unterscheiden wo, und v.a. an der Reihenfolge der Prints, wann er im Verlaufe der Abarbeitung wo langgelaufen war.

Experimentiere doch einfach mit dem Print etwas.

traderdoc

Danke erstmal, hat schonmal gut geholfen mit dem Print. Also der Fehler, den er mir rausgibt ist der folgende: "OrderSend error 130". Dieser erscheint sobald eine Order im Minus geschlossen wurde und er versucht in die Bedingung rein zu gehen, um eine Gegenposition aufzubauen. In diesem Fall habe ich das mit dem Print gemacht und er leitet mich zu deinem Code den du mir geschickt hast:
Code:

if (closedProfit < 0) {
    Print("T");
  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2,STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
       
      }
      if (lastorder == 1) {
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
      }
  }

Ich habe schon probiert, die Marketorder durch eine Pending zu verändern um den Markteinstieg zu verzögern, allerdings auch vergebens..

Gruß Aron

traderdoc 23.06.15 22:07

"OrderSend error 130"
bedeutet Invalid Stops, d.h. der Wert des StopLoss oder TakeProfit in der Funktion OrderSend() ist so falsch, dass der MT4 keine Order öffnen kann.

Also die Stops kontrollieren!

traderdoc

saro2018 24.06.15 00:20

Zitat:

Zitat von traderdoc (Beitrag 30239)
"OrderSend error 130"
bedeutet Invalid Stops, d.h. der Wert des StopLoss oder TakeProfit in der Funktion OrderSend() ist so falsch, dass der MT4 keine Order öffnen kann.

Also die Stops kontrollieren!

traderdoc

Ich habe mir gerade das noch einmal gründlich angeschaut, und den StopLoss und TakeProfit angepasst, allerdings gab er dann wieder den gleichen Fehler Code raus. Als ich daraufhin den gleichen Stop und Take Profit eingestellt habe, wie in meinen vorherigen Bedingungen hat er förmlich diese Bedingung ignoriert.

Er soll faktisch sofort eine Market Order eröffnen, sobald der vorherige Trade in den Stop gelaufen ist. Kann es vielleicht auch an der Verzögerung liegen, dass es dort Schwierigkeiten gibt? Also das eine sofortige Market Order nicht möglich ist zu dem gleichen Preis, wie der Stop der letzten Order war?
Kann der error 130 vielleicht noch etwas anderes bedeuten?

Gruß
Aron

traderdoc 24.06.15 09:02

if (closedProfit < 0) {
Print("T");
// if(total < 1) { //was soll total sein???
if (lastorder == 0) {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2,STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);

}
if (lastorder == 1) {
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
}
}

Laß Dir doch über Print() die Werte für StopLoss und TakeProfit ausdrucken, dann wirst Du sehen, dass die nicht stimmen.
Wenn ich das richtig überflogen habe, dann werden die beiden Werte oben aus den externen Variablen übernommen. Das geht natürlich nicht. In Deinen vorherigen OrderSend-Funktionen sind die SL und TP anscheinend ja richtig berechnet worden.

traderdoc

saro2018 24.06.15 13:38

Zitat:

Zitat von traderdoc (Beitrag 30242)
if (closedProfit < 0) {
Print("T");
// if(total < 1) { //was soll total sein???
if (lastorder == 0) {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2,STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);

}
if (lastorder == 1) {
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2, STOPLOSS, TAKEPROFIT, NULL, mymagicnumber);
}
}

Laß Dir doch über Print() die Werte für StopLoss und TakeProfit ausdrucken, dann wirst Du sehen, dass die nicht stimmen.
Wenn ich das richtig überflogen habe, dann werden die beiden Werte oben aus den externen Variablen übernommen. Das geht natürlich nicht. In Deinen vorherigen OrderSend-Funktionen sind die SL und TP anscheinend ja richtig berechnet worden.

traderdoc

Das könnte natürlich sein.. Wie kann ich über die Print() Funktion den StopLoss und TakeProfit ausdrucken?
Ich habe allerdings auch mal probiert einfach Werte einzusetzen eg. 20 für SL und 30 für TP, allerdings kommt dann immer noch der Fehler.
Ist das auch ein Fehler einfach Werte dafür einzusetzen?

Gruß
Aron

traderdoc 24.06.15 14:13

Zitat:

Zitat von saro2018 (Beitrag 30246)
Das könnte natürlich sein.. Wie kann ich über die Print() Funktion den StopLoss und TakeProfit ausdrucken?
Ich habe allerdings auch mal probiert einfach Werte einzusetzen eg. 20 für SL und 30 für TP, allerdings kommt dann immer noch der Fehler.
Ist das auch ein Fehler einfach Werte dafür einzusetzen?

Gruß
Aron

Das könnte nicht nur sein, sondern das ist es mit Sicherheit, weil Du setzt direkt die Pipwerte der Variablen StopLoss und TakeProfit ein!! Das geht natürlich nicht!
Print(StopLoss)!

Berechne doch einfach den zu setzenden StopLoss so, wie Du ihn auch weiter oben bei Dir im Programm schon berechnet hast!

traderdoc

pako 24.06.15 15:14

Zitat:

Zitat von saro2018 (Beitrag 30246)
Das könnte natürlich sein.. Wie kann ich über die Print() Funktion den StopLoss und TakeProfit ausdrucken?
Ich habe allerdings auch mal probiert einfach Werte einzusetzen eg. 20 für SL und 30 für TP, allerdings kommt dann immer noch der Fehler.
Ist das auch ein Fehler einfach Werte dafür einzusetzen?

Gruß
Aron

if (lastorder == 1)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,NormalizeDouble(Ask - STOPLOSS*Point(),Digits()), NormalizeDouble(Ask + TAKEPROFIT*Point(),Digits()), NULL, mymagicnumber);
}

traderdoc 24.06.15 15:36

Zitat:

Zitat von pako (Beitrag 30250)
if (lastorder == 1)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,NormalizeDouble(Ask - STOPLOSS*Point(),Digits()), NormalizeDouble(Ask + TAKEPROFIT*Point(),Digits()), NULL, mymagicnumber);
}

Nun lass ihn mal ein wenig mitmachen.

STOPLOSS*Point() und TAKEPROFIT*Point()
Außerdem wieder diese unsaubere Sache mit dem Ignorieren der 5-DigitBroker.
Das würde bei ihm nach Deiner Funktion und den Variablenwerten von StopLoss = 25 und TakeProfit = 20 zu realen Werten von 2,5 und 2,0 Pips führen. Da kann es schon wieder Probleme mit dem StopLevel geben.

traderdoc

pako 24.06.15 15:43

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von traderdoc (Beitrag 30252)
Nun lass ihn mal ein wenig mitmachen.

STOPLOSS*Point() und TAKEPROFIT*Point()
Außerdem wieder diese unsaubere Sache mit dem Ignorieren der 5-DigitBroker.
Das würde bei ihm nach Deiner Funktion und den Variablenwerten von StopLoss = 25 und TakeProfit = 20 zu realen Werten von 2,5 und 2,0 Pips führen. Da kann es schon wieder Probleme mit dem StopLevel geben.

traderdoc

das kann man noch in init() funktion berechnen

und logische fehler lieber im debugger suchen

aber erst syntax fehler korrigieren

traderdoc 24.06.15 15:53

Zitat:

Zitat von pako (Beitrag 30253)
das kann man noch in init() funktion berechnen

und fehler suchen lieber im debugger


Ja! Das sollte man da immer berechnen. Nur wenn er die Funktion so nimmt, wie Du sie vorgegeben hast, kann es falsch werden und dann wundert er sich beim nächsten mal, warum wieder der Fehler 130 kommt oder warum seine Stops so dicht am Entry sitzen.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:26 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum