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 24.06.15 15:54

Zitat:

Zitat von traderdoc (Beitrag 30249)
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

Habe es jetzt wie folgt gemacht:

Code:

if (closedProfit < 0) {
    Print("T");

  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
     
      RefreshRates();
      S=Bid + second_sl;
      T=Bid - second_tp;
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
       
      }
      if (lastorder == 1)
      {
     
      RefreshRates();
      S=Ask - second_sl;
      T=Ask + second_tp;
      ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
      }
  }

Allerdings jetzt ignoriert er komplett diese Bedinung und geht gleich wieder zurück zur Ursprünglichen. Im Journal wird nämlcih das T nicht angezeigt.
Woran kann das jetzt liegen?

Gruß
Aron

pako 24.06.15 16:11

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

Zitat von saro2018 (Beitrag 30255)
Habe es jetzt wie folgt gemacht:

Code:

if (closedProfit < 0) {
    Print("T");

  // if(total < 1) {          //was soll total sein???
      if (lastorder == 0) {
     
      RefreshRates();
      S=Bid + second_sl;
      T=Bid - second_tp;
        ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
       
      }
      if (lastorder == 1)
      {
     
      RefreshRates();
      S=Ask - second_sl;
      T=Ask + second_tp;
      ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
      }
  }

Allerdings jetzt ignoriert er komplett diese Bedinung und geht gleich wieder zurück zur Ursprünglichen. Im Journal wird nämlcih das T nicht angezeigt.
Woran kann das jetzt liegen?

Gruß
Aron

if (closedProfit < 0)
{
if (lastorder == 0)
{
RefreshRates();
S=Bid + second_sl;
T=Bid - second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
}
if (lastorder == 1)
{
RefreshRates();
S=Ask - second_sl;
T=Ask + second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
}
}


erst syntax fehler korrigieren

traderdoc 24.06.15 16:19

Diese! Änderungen haben aber nichts damit zu tun, ob das Programm unter
if (closedProfit < 0) einspringt oder nicht.
Wichtig wäre v.a., dass vorher auch S und T deklariert werden und wie hast Du nun das second_sl und second_tp berechnet?

traderdoc

saro2018 24.06.15 16:27

Zitat:

Zitat von traderdoc (Beitrag 30257)
Diese! Änderungen haben aber nichts damit zu tun, ob das Programm unter
if (closedProfit < 0) einspringt oder nicht.
Wichtig wäre v.a., dass vorher auch S und T deklariert werden und wie hast Du nun das second_sl und second_tp berechnet?

traderdoc

Wie folgt habe ich die Sachen delariert und berechnet:

Code:

extern double TAKE      = 10;
extern double STOP      = 10;


double S, T;          //oben bei den blobal variables
double second_tp;
double second_sl;

int init()
{ [...]

second_sl = NormalizeDouble(my_point * STOP, digits);

second_tp = NormalizeDouble(my_point * TAKE, digits);

Stimmt bei den Deklarationen und Berechnungen alles? Habe es praktisch genauso umgesetzt, wie auch bei der oberen Bedingung, falls eine Order im Profit schließt.
Ist damit alles richtig?

Gruß
Aron

saro2018 24.06.15 16:37

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

Zitat von pako (Beitrag 30256)
if (closedProfit < 0)
{
if (lastorder == 0)
{
RefreshRates();
S=Bid + second_sl;
T=Bid - second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 2, S, T, NULL, mymagicnumber);
}
if (lastorder == 1)
{
RefreshRates();
S=Ask - second_sl;
T=Ask + second_tp;
Print("T =", T, " S =", S);
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 2,S, T, NULL, mymagicnumber);
}
}


erst syntax fehler korrigieren

Syntax Fehler sind keine mehr drin. Die Berechnungen im Mittelteil sind da noch nicht drin gewesen deswegen bei dir die Syntax Fehler.

Das Problem ist, er erkennt diesen Befehl gar nicht. Im Journal zeigt er nur an, dass er bei der ersten Bedingung ist (falls Profit), die andere wird ignoriert..

Hier nochmal das Journal (T-1 heißt die erste Bedingun falls Gewinn).

Gruß
Aron

pako 24.06.15 16:42

Zitat:

Zitat von saro2018 (Beitrag 30259)
Syntax Fehler sind keine mehr drin. Die Berechnungen im Mittelteil sind da noch nicht drin gewesen deswegen bei dir die Syntax Fehler.

Das Problem ist, er erkennt diesen Befehl gar nicht. Im Journal zeigt er nur an, dass er bei der ersten Bedingung ist (falls Profit), die andere wird ignoriert..

Hier nochmal das Journal (T-1 heißt die erste Bedingun falls Gewinn).

Gruß
Aron

wo ist code?

saro2018 24.06.15 16:59

Zitat:

Zitat von pako (Beitrag 30260)
wo ist code?

Den habe ich schonmal gepostet bis auf die Berechnungen in der Mitte. Diese funktionieren acuh, nur dieser untere Teil macht Schwierigkeiten mit der Orderöffnung fall der letzte Trade ein Verlust war. Es geht um die Gegenposition, sprich der Ordereröffnung bei einem Verlust gleich eine Gegenposition.

Gruß
Aron

saro2018 25.06.15 09:47

Zitat:

Zitat von traderdoc (Beitrag 30257)
Diese! Änderungen haben aber nichts damit zu tun, ob das Programm unter
if (closedProfit < 0) einspringt oder nicht.
Wichtig wäre v.a., dass vorher auch S und T deklariert werden und wie hast Du nun das second_sl und second_tp berechnet?

traderdoc

Bei dem neuen Stop und Takeprofit, den ich berechnet habe, kommt der Error 130 zwar nicht mehr, allerdings auch nicht mehr das T. Das bedeutet ja, dass er diese Bedinung nun ignoriert bzw. sie nicht ausführt.
Woran könnte das liegen?

Gruß
Aron

traderdoc 25.06.15 10:08

Der Code ist zu lang, um mal so den Fehler aus der Hüfte geschossen zu erkennen.
Der Weg, den Fehler zu eruieren, geht darüber, dass Du Dir überlegst, wie die Abfolge im Code ist und an den markanten Stellen über Print() Dir die Ausgabe anzeigen läßt. Hatte ich aber alles schon geschrieben.

Nochmals die korrekten Stopangaben haben nix mit dem Einsprung an dieser Stelle zu tun. Da liegt der Hase woanders begraben.

traderdoc

saro2018 25.06.15 17:38

Zitat:

Zitat von traderdoc (Beitrag 30268)
Der Code ist zu lang, um mal so den Fehler aus der Hüfte geschossen zu erkennen.
Der Weg, den Fehler zu eruieren, geht darüber, dass Du Dir überlegst, wie die Abfolge im Code ist und an den markanten Stellen über Print() Dir die Ausgabe anzeigen läßt. Hatte ich aber alles schon geschrieben.

Nochmals die korrekten Stopangaben haben nix mit dem Einsprung an dieser Stelle zu tun. Da liegt der Hase woanders begraben.

traderdoc

Also ich habe jetzt an den markanten Stellen überall ein Print() versehen, um zu schauen wie die Abfolge ist. Wenn ich den Code jetzt verkleiner in dem ich den Wert gleich einsetze und den dann zu normalizeddouble umrechne, macht er wieder den gleichen fehler. er checkt zwar die bedinung wegen dem print sendet mir allerdings wieder den error 130.

Woran kann das liegen?

Gruß
Aron


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:35 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