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)
-   -   Error nach Anlauf des TP oder Sl (http://www.expert-advisor.com/forum/showthread.php?t=3939)

Striker 30.10.14 01:47

Error nach Anlauf des TP oder Sl
 
Hallo liebe Gemeinde,

ich habe vor etwa 4 Wochen mit dem Programmieren angefangen und bin nun auf ein Problem gestoßen bei dem ich einfach nicht weiter komme.

Mein EA arbeitet soweit wie erwartet nur nach Anlauf des TP oder SL bekomme ich die im Code programmierte Fehlermeldung. Habe sie als Kommentar ersichtlich gemacht.

------------------------------------------------------------------

offeneorders = 0;
anzahlorders = OrdersTotal();

for(zaehler=0;zaehler<anzahlorders;zaehler++)
{
OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol() == Symbol())
{
if(OrderMagicNumber()==MagicNumber)
{
offeneorders++;
}
}
}

if (Signal_R == "Long" && anzahlorders <= Buy_Orders_Max -1)

TicketOpen1 = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,StopLossLeve l, TakeProfitLevel,"MagicNumber " + string(MagicNumber),Green);

if (TicketOpen1<0)
{
// !!!!!!!!!!!!!!!!!!!! EA lief auf TP oder SL und gibt bei jedem neuem Tick folgenden Error !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Alert ("Error!" + Symbol());
}
if (TicketOpen1 >= anzahlorders && anzahlorders <= Buy_Orders_Max -1)
{
Alert ("Order set # " + (string)MagicNumber + " " + Symbol());
}

------------------------------------------------------------------
Muss der zaehler nach ausgeführtem TP/SL --1 gesetzt werden?

Eine weitere Frage am Rande: Wie man sehen kann habe ich Buy_Orders_Max definiert um zukünftig mehrere Strategien (z.B. Durchbruch, Bewegung und Trend) verfolgen zu können. Da mein EA nun so langsam gestalt annimmt und sich meine Gedanken weiter auf folgende Schritte vertiefen vermute ich dass die Bearbeitung mehrerer Orders kompliziert im Quadrat ist. Daher die Frage ob ein Aufbau mehrer EA´s für den Anfang sinvoller ist?

Vielen Dank für Eure Hilfe!

Beste Grüße aus Hamburg



p.s. Ich sehe gerade das der Fehler auch nach manuellem schließen der Order aufkommt.

Wenn ich das eben richtig beobachtet habe (ist ja schon recht spät) dann kam die Meldung eben mehrere Ticks auf und anschließend wurde eine neue Order eingegangen. Ist das möglich aufgrund des Codes? Das Signal ist sicher zu 100% dauerhaft Long.

Striker 30.10.14 21:38

Hier ein kleiner Beweis
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei ein Screenshot auf welchem das Problem ersichtlich ist.

Unüblich ist das tatsächlich nach jedem Error, abgesehen von dem Block unten, jedes Mal eine neue Order eingegangen wurde. Das ist mittlerweile wieder anders hehe

pako 30.10.14 22:02

Zitat:

Zitat von Striker (Beitrag 27906)
Anbei ein Screenshot auf welchem das Problem ersichtlich ist.

Unüblich ist das tatsächlich nach jedem Error, abgesehen von dem Block unten, jedes Mal eine neue Order eingegangen wurde. Das ist mittlerweile wieder anders hehe

Code:

offeneorders = 0;
anzahlorders = OrdersTotal();

for(zaehler=0;zaehler<anzahlorders;zaehler++)
{
    OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES);
    if(OrderSymbol() == Symbol())
      {
        if(OrderMagicNumber()==MagicNumber)
          {
            offeneorders++;
          }
      }
}

if (Signal_R == "Long" && anzahlorders <= Buy_Orders_Max -1)

TicketOpen1 = OrderSend(Symbol(),OP_BUY,Lots,Ask,30,StopLossLeve l, TakeProfitLevel,"MagicNumber " + string(MagicNumber),Green);

if (TicketOpen1<0)
{
// !!!!!!!!!!!!!!!!!!!! EA lief auf TP oder SL und gibt bei jedem neuem Tick folgenden Error !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Alert ("Error!" + Symbol(),"TicketOpen1 =",TicketOpen1);
}
if (TicketOpen1 >= anzahlorders && anzahlorders <= Buy_Orders_Max -1)
{
Alert ("Order set # " + (string)MagicNumber + " " + Symbol(),"TicketOpen1 =",TicketOpen1);
}

Ticket vergleichen
falsche Logik

Striker 30.10.14 22:06

Oh und Danke
 
stelle auch gerade fest dass der EA wohl nur in dem Währungspaar von gestern funktioniert hat. heute klappt fast nichts. bekomme z.B. die Meldung das eine Order geöffnet wurde aber ätsch abgesehen von der Meldung nichts..

bin auch gerade am tüfteln und werde deine Info gleich mal einbauen.

traderdoc 30.10.14 22:23

Mal ein Tip für die Zukunft: Wenn Du willst, dass Dir schnell geholfen wird,
dann sollte die Fehlerbeschreibung kurz und eineindeutig beschrieben werden.
Richtig, wenn es geht mit Code oder dem wichtigsten Auszug daraus und v.a. Fehlermeldungen jede Art.

traderdoc

Striker 30.10.14 22:26

Ticket im Alert vergleichen?
 
Danke für deinen Tipp aber welchen nutzen habe ich wenn ich das Ticket in den Alerts vergleiche?

traderdoc 30.10.14 23:15

Da wird nichts von der Logik her verglichen, sondern die Ticketnummer, die sich hinter der Variablen TicketOpen1 verbirgt in der Alertmeldung ausgegeben.

Ein Verleich müßte mit dem Operator == geschrieben werden.
D.h. @pako hat Dir das Codepuzzle an die Hand gegeben, eben diese Ticketnummer im Alert zu sehen.

Das ist eine wesentliche Methode der Fehlersuche, an bestimmten Stellen des Codes Alert(...) oder Print(...) einzubauen und damit dem Verlauf des Programms zu kontrollieren.

traderdoc


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