Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4621
Beiträge: 41671
Benutzer: 6.996
Aktive Benutzer: 183
Links: 82
Wir begrüßen unseren neuesten Benutzer: baalexeyfranesay3088
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- baalexeyfr...
vor 6 Tagen
- Tbened
vor einer Woche
- coinboy
vor einer Woche
- Kat34r
vor 2 Wochen
- Goldstream

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 81
Gesamt: 83
Team: 0
Team:  
Benutzer:  Indikator-Trading, noSkill06s
Freunde anzeigen

Empfehlungen

Like Tree2Likes
  • 1 Post By traderdoc
  • 1 Post By Indikator-Trading
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 01.12.20
Mitglied
 
Registriert seit: Nov 2020
Beiträge: 42
berlin befindet sich auf einem aufstrebenden Ast
Standard error 4108

moin zusammen,

ich habe einen TP in einen EA eingefügt:

double tp = 0;
if(TP > 0) tp = NormalizeDouble(Ask+TP*Point,Digits);

beim testen führt der startegie tester nach vier sauber geöffneten und geschlossenen trades keine weitere mehr durch und meldet error 4108.

woran kann das liegen und wie kann ich das problem lösen?

vielen dank und lieben gruss,
berlin
Mit Zitat antworten
  #2 (permalink)  
Alt 01.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.486
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

4108 bedeutet "invalid ticket", d.h. da wird eine Order per Ticketnummer aufgrufen, die nicht existiert.

traderdoc
berlin likes this.
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 01.12.20
Mitglied
 
Registriert seit: Nov 2020
Beiträge: 42
berlin befindet sich auf einem aufstrebenden Ast
Standard

er arbeitet am anfang mit OrderTicket.

dachte grad ich kann es so lösen:

double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);{
shortOrder = 0;}



bekomme beim kompilieren auch keine feheler meldung nur beim test beendet er weiterhin nach de 4. trade das traden
Mit Zitat antworten
  #4 (permalink)  
Alt 02.12.20
Mitglied
 
Registriert seit: Nov 2020
Beiträge: 42
berlin befindet sich auf einem aufstrebenden Ast
Standard

ich habe jetzt verschiedene dinge ausprobiert um mein OrderTicket problem zu lösen, z.b.:

1. > funktioniert nciht
double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);OrderTicket(shortOrder = 0);

2. > funktioniert nicht
double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);OrderTicket(0);

3. > funktioniert nicht
double tp = 0;
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);shortOrder = 0;

der Befehl das das Order ticket nach close mit TP zurückgesetzt wird muss ja aus meinem verständnis auch beim befehl des TP´s liegen.


aktuell wird ein trade nur mit eine gegensignal, folglich gegentrade geschlossen

das wird so geregelt, am beispiel für ein short signal:

if(longOrder > 0){
bool res = OrderClose(longOrder,Lots,Bid,1000);
if(res == true){
longOrder = 0;
}

}

rot markierter bereich ist aus meinem verständnis dafür zuständig das auch das orderticket zurückgesetzt wird.

als dachte ich mir kann ich den TP auch so regeln:
if(TP > 0) tp = NormalizeDouble(Bid-TP*Point,Digits);{
bool res = OrderClose(longOrder,Lots,Bid,1000);
(res == true){
longOrder = 0;
}
}

funktioniert auch nicht.

ich brauche einen klaren tip wie ich dem EA sagen kann das er nach dem TP das Orderticket auch zurücksetzt.

vielen dank dafür und lieben gruss,
berlin
Mit Zitat antworten
  #5 (permalink)  
Alt 02.12.20
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 175
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Hallo Berlin,

bezüglich deines Codes: Beim Öffnen des Trades, also bei OrderSend(...) ist die Rückgabe der Funktion die Ticketnummer. Diese speicherst du und überschreibst Sie erst wieder, sobald du die Order schließen solltest. Besser ist es aber die offenen Order in einer Schleife durchzugehen und abzufragen, ob es sich um eine Sell oder eine Buy Order handelt und ob diese zum EA und den Symbol passt.

Code:
   int res;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         break;
      if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol())
         continue;
      //--- check order type
      if(OrderType()==OP_BUY)
         res=OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
      if(OrderType()==OP_SELL)
         res=OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
     }
berlin likes this.
Mit Zitat antworten
  #6 (permalink)  
Alt 05.12.20
Mitglied
 
Registriert seit: Nov 2020
Beiträge: 42
berlin befindet sich auf einem aufstrebenden Ast
Standard

hey timo,

vielen dank für deine antwort. mir erschliesst es sich noch nicht, ich versuche mal meine gedanken zu erklären:

1. mich wundert warum die ticket nummer nicht überschrieben wird wenn der trade mit TP geschlossen wird. beim schliessen mit gegensignal passiert das doch auch.
vor allem ist der TP doch auch über die OrderSend funktion definiert.

2. warum bricht er denn erst nach der 4. order das trading ab?

3. zu deiner schleife. so eine ähnliche durchläuft er ja auch beim start einmal um zu checken ob offene positionen zum ea gehören um sie dann weiter zu manangen.
mir erschliesst sich noch nicht wie sich deine schleife auf eine mit TP geschlossene order bezieht.

4. kann das sein das rot markierte klammer eine zu viel ist?
beim kompilieren zeigt er mir folgenden fehler an: ")"unexpected token

int res;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false )
break;
if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol())
continue;
//--- check order type
if(OrderType()==OP_BUY)
res=OrderClose(OrderTicket(),OrderLots(),Bid,3,Whi te))
if(OrderType()==OP_SELL)
res=OrderClose(OrderTicket(),OrderLots(),Ask,3,Whi te))
}

5. ich hab die schleife hinter die erste geschweifte hauptklammer im void on tick bereich gesetzt und erhalte zusätzlich zu den fehlermeldungen aus 4. folgende warnungen:
"declaration of "res" hides local variable

vielen dank und lieben gruss,
berlin
Mit Zitat antworten
  #7 (permalink)  
Alt 06.12.20
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 175
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

zu 1: Wenn der TP in einem Trade erreicht wird, dann bekommt das deine lokale Variable, in der du die Ticketnummer gespeichert hast nicht mit.

zu 2: Du greifst auf eine Order zu, welche nicht mehr Existiert. Versuche also erstmal den Grund dafür zu finden, wieso du auf eine falsche Ticketnummer zugreifen möchtest

zu 3: Die Schleife umgeht dein Problem auf eine nicht aktive Ticketnummer zuzugreifen. Sie ist natürlich nicht das was du suchst, du könntest sie aber so umbauen, dass sie das macht was du willst, ohne den Fehler zu generieren, welchen du jetzt hast.

zu 4: Ja, die Klammern am Ende müssen weg, hatte ich auf die schnelle aus einem anderen EA rauskopiert, gekürzt und nicht selbst getestet.

zu 5: Du hast dann im globalen Bereich die Variable res bereits definiert. du könntest jetzt das "int res;" weglassen, sofern die globale Variable überschrieben werden darf, oder das "res" in diesem Teil umbenennen.

Gruß Timo
Mit Zitat antworten
  #8 (permalink)  
Alt 15.12.20
Mitglied
 
Registriert seit: Nov 2020
Beiträge: 42
berlin befindet sich auf einem aufstrebenden Ast
Standard

moin zusammen,

ich habe das problem jetzt gelöst indem ich die orderausführung mit executeLong/Short aus der on tick funktion ausgegliedert hab.

verstanden hab ich das problem aber immer noch nicht. vor allem wegen folgender auffälligkeit:

schliesse ich einen EA trade manuell vom handy arbeitet der ea weiter. wird er aber wie oben beschrieben vom EA mit TP geschlossen kommt die fehlermeldung und das orderticket wird nicht zurückgesetzt.

bin, auch wenn das problem behoben ist offen für aufklärung

lieben gruss,
berlin
Mit Zitat antworten
  #9 (permalink)  
Alt 15.12.20
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 175
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Ich habe dir den Grund für dieses Problem schon im in der letzten Antwort genannt.
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2021 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------