'nabend und ein herzliches Willkommen!
Du verwendest ein unglückliches 'wording'.
Da ein 130 meistens daher kommt, dass man bei Kauf, Verkauf oder Schließen Ask und Bid verwechselst, sie zu eng oder zu weit setzt, oder Points statt Preise verwendet:
- Verwende Kauf für ein buy und Verkauf für ein Sell - nicht für beides dasselbe - führt nur zu Fehlern.
- Bei OrderClose(..) verwende OrderClose() statt Bid oder Ask, dann ist es auf jeden Fall der richtige, aktuelle Preis!
- Hier: kursziel = kauf + kurszielPips; mischt Du Kurse (1.98765) mit Points 40! Du musst die 40 umrechnen: 40*_Point, beim Stopploss das Gleich
Viel Erfolg,
Calli
PS ich Deinen Ea nur kurz überflogen!
Danke sehr Carl Schreiber führ deine hilfe. Ich habe schon mal versucht die Tipps von dir umzusetzen ich hoffe ich habe es richtig gemacht hoffe du könntest es dir nochmal anschauen. Punkt 1 habe ich gewechselt aber Punkt zwei und drei versteh ich nicht ganz wie du das meinst.
2. Meinst du hier OrderClose() einsetzen?
von zu
for(zaehler = 0; zaehler < OrdersTotal(); zaehler++){ if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) == false) break; if(OrderType() == OP_SELL && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] > ma2) result=OrderClose(OrderTicket(),OrderLots(),Bid,10,White); break; } if(OrderType() == OP_BUY && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] < ma1) result=OrderClose(OrderTicket(),OrderLots(),Ask,10,White); break; } }
for(zaehler = 0; zaehler < OrdersTotal(); zaehler++){ if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) == false) break; if(OrderType() == OP_SELL && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] > ma2) result=OrderClose(OrderTicket(),OrderLots(),OrderClose(),10,White); break; } if(OrderType() == OP_BUY && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] < ma1) result=OrderClose(OrderTicket(),OrderLots(),OrderClose(),10,White); break; } }
3. Und hier meinst du so
if(signal2 == "Startkauf_ma1"){ verkauf = Bid; kursziel = verkauf - kurszielPips * Point; stoppkurs = verkauf + Stopplos_inPips * Point; } if(signal2 == "Startkauf_ma2"){ kauf = Ask; kursziel = kauf + kurszielPips * Point; stoppkurs = kauf - Stopplos_inPips * Point; }
//+------------------------------------------------------------------+ //| TobiasGspandlersteseigenesEa.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, Tobias Gspandl" #property link "https://www.mql5.com" string signal1; string signal2; extern int kurszielPips = 40; extern int Stopplos_inPips = 40; extern double Lots = 0.01; extern int MagieNummer = 5555; int zaehler; int ticket; int res; int kauf; int verkauf; int kursziel; int stoppkurs; bool result=false; bool result2=false; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- /* double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL); //Print("Minimum Stop Level=",minstoplevel," points"); double price=Ask; //--- calculated SL and TP prices must be normalized double stoploss1=NormalizeDouble(Bid+minstoplevel*Point,Digits); double takeprofit1=NormalizeDouble(Bid-minstoplevel*Point,Digits); double stoploss2=NormalizeDouble(Bid-minstoplevel*Point,Digits); double takeprofit2=NormalizeDouble(Bid+minstoplevel*Point,Digits);*/ //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Signale ermitteln | //+------------------------------------------------------------------+ double ma1 = iMA(NULL,0,20,0,MODE_EMA,PRICE_HIGH,0); double ma2 = iMA(NULL,0,20,0,MODE_EMA,PRICE_LOW,0); if(Open[1]>ma1){ signal1 = "Readykauf_ma1"; } if(Close[1]<ma1){ signal2 = "Startkauf_ma1"; } if(Open[1]<ma2){ signal1 = "Readykauf_ma2"; } if(Close[1]>ma2){ signal2 = "Startkauf_ma2"; } Comment ("Aktuelles Signal " + signal2); if(signal2 == "Startkauf_ma1"){ verkauf = Bid; kursziel = verkauf - kurszielPips; stoppkurs = verkauf + Stopplos_inPips; } if(signal2 == "Startkauf_ma2"){ kauf = Ask; kursziel = kauf + kurszielPips; stoppkurs = kauf - Stopplos_inPips; } //+------------------------------------------------------------------+ //| Prüfen ob Order geöffnet ist | //+------------------------------------------------------------------+ int offeneorders = 0; int anzahlOrders = OrdersTotal(); for(zaehler = 0; zaehler < anzahlOrders; zaehler++){ result2=OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol()){ if(OrderMagicNumber() == MagieNummer){ offeneorders++; } } } //+------------------------------------------------------------------+ //| Order aufgeben | //+------------------------------------------------------------------+ if(verkauf > 0 && offeneorders == 0){ if(signal1 == "Readykauf_ma1" && signal2 == "Startkauf_ma1"){ ticket = OrderSend(Symbol(),OP_SELL,Lots,verkauf,10,0,0,"TrendShortorder",MagieNummer,0,Black); if(ticket > 0){ res=OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); if(OrderModify( ticket, OrderOpenPrice(), stoppkurs, kursziel, 0, Black) == FALSE){ Print("OrderModify failed with error #",GetLastError()); } }else{ Print("Error Opening Sell Order : ", GetLastError(), verkauf); return; } } } if(kauf > 0 && offeneorders == 0){ if(signal2 == "Readykauf_ma2" && signal2 == "Startkauf_ma2"){ ticket = OrderSend(Symbol(),OP_BUY,Lots,kauf,10,0,0,"TrendLongorder",MagieNummer,0,Black); if(ticket > 0){ res=OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); if(OrderModify( ticket, OrderOpenPrice(), stoppkurs, kursziel, 0, Black) == FALSE){ Print("OrderModify failed with error #",GetLastError()); } }else{ Print("Error Opening Sell Order : ", GetLastError(), kauf); return; } } } for(zaehler = 0; zaehler < OrdersTotal(); zaehler++){ if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) == false) break; if(OrderType() == OP_SELL && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] > ma2) result=OrderClose(OrderTicket(),OrderLots(),Bid,10,White); break; } if(OrderType() == OP_BUY && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] < ma1) result=OrderClose(OrderTicket(),OrderLots(),Ask,10,White); break; } } return; } //+------------------------------------------------------------------+Punkt 1
Da du sowieso am Anfang bist, nimm den MT5 nicht den MT4.
Kauf dir das Buch "Expert Advisor Programming for MT5" https://www.amazon.de/gp/product/0982645929/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1
Kostet €26,70 (prime) und (fast) alle deine Probleme sind gelöst.
Schließe mich Otto an .
MT5 und die Standart Bibliothek -> https://www.mql5.com/de/docs/standardlibrary
Das moderner und die bessere Wahl .

- www.mql5.com
OrderClosePrice(); |
für zB.:
result=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10,White);
Und das ist immer noch falsch:
kursziel = kauf + kurszielPips; stoppkurs = kauf - Stopplos_inPips;
sollte lauten:
kursziel = kauf + kurszielPips*_Point; stoppkurs = kauf - Stopplos_inPips*_Points;
Außerdem würde ich nicht mit Pips rechnen. Für Pips gibt's keine verbindliche Definition. Was Du vom Broker bekommst sind Points.
Sie mal hier.
Habe ich doch bereits geschrieben: Punkte*_Points (s.o.).
Das musst Du entscheiden! Lies dazu (s.o.) das hier und die anderen Beiträge!
Entschuldigung falls ich mit der letzten Nachricht genervt habe habe es erst im nachhinein erkannt das die Frage schon beantwortet wurde. Habe jetzt den Expert Advisor geändert doch funktionieren tut er immer noch nicht ganz allerdings bekomme ich diesmal die Fehler Meldung: "OrderSend Error 138" hoffe jemand hat zeit mir zu helfen. Hier ist der Code:
//+------------------------------------------------------------------+ //| TobiasGspandlersteseigenesEa.mq4 | //| Copyright 2017, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017, Tobias Gspandl" #property link "https://www.mql5.com" string signal1; string signal2; extern int kurszielPips = 40; extern int Stopplos_inPips = 40; extern double Lots = 0.01; extern int MagieNummer = 5555; int zaehler; int ticket; int res; int kauf; int verkauf; int kursziel; int stoppkurs; bool result=false; bool result2=false; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- /* double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL); //Print("Minimum Stop Level=",minstoplevel," points"); double price=Ask; //--- calculated SL and TP prices must be normalized double stoploss1=NormalizeDouble(Bid+minstoplevel*Point,Digits); double takeprofit1=NormalizeDouble(Bid-minstoplevel*Point,Digits); double stoploss2=NormalizeDouble(Bid-minstoplevel*Point,Digits); double takeprofit2=NormalizeDouble(Bid+minstoplevel*Point,Digits);*/ //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Signale ermitteln | //+------------------------------------------------------------------+ double ma1 = iMA(NULL,0,20,0,MODE_EMA,PRICE_HIGH,0); double ma2 = iMA(NULL,0,20,0,MODE_EMA,PRICE_LOW,0); if(Open[1]>ma1){ signal1 = "Readykauf_ma1"; } if(Close[1]<ma1){ signal2 = "Startkauf_ma1"; } if(Open[1]<ma2){ signal1 = "Readykauf_ma2"; } if(Close[1]>ma2){ signal2 = "Startkauf_ma2"; } Comment ("Aktuelles Signal " + signal2); if(signal2 == "Startkauf_ma1"){ verkauf = Bid; kursziel = verkauf - kurszielPips*_Point; stoppkurs = verkauf + Stopplos_inPips*_Point; } if(signal2 == "Startkauf_ma2"){ kauf = Ask; kursziel = kauf + kurszielPips*_Point; stoppkurs = kauf - Stopplos_inPips*_Point; } //+------------------------------------------------------------------+ //| Prüfen ob Order geöffnet ist | //+------------------------------------------------------------------+ int offeneorders = 0; int anzahlOrders = OrdersTotal(); for(zaehler = 0; zaehler < anzahlOrders; zaehler++){ result2=OrderSelect(zaehler, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol() == Symbol()){ if(OrderMagicNumber() == MagieNummer){ offeneorders++; } } } //+------------------------------------------------------------------+ //| Order aufgeben | //+------------------------------------------------------------------+ if(verkauf > 0 && offeneorders == 0){ if(signal1 == "Readykauf_ma1" && signal2 == "Startkauf_ma1"){ ticket = OrderSend(Symbol(),OP_SELL,Lots,verkauf,10,0,0,"TrendShortorder",MagieNummer,0,Black); if(ticket > 0){ res=OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); if(OrderModify( ticket, OrderOpenPrice(), stoppkurs, kursziel, 0, Black) == FALSE){ Print("OrderModify failed with error #",GetLastError()); } }else{ Print("Error Opening Sell Order : ", GetLastError(), verkauf); return; } } } if(kauf > 0 && offeneorders == 0){ if(signal2 == "Readykauf_ma2" && signal2 == "Startkauf_ma2"){ ticket = OrderSend(Symbol(),OP_BUY,Lots,kauf,10,0,0,"TrendLongorder",MagieNummer,0,Black); if(ticket > 0){ res=OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); if(OrderModify( ticket, OrderOpenPrice(), stoppkurs, kursziel, 0, Black) == FALSE){ Print("OrderModify failed with error #",GetLastError()); } }else{ Print("Error Opening Sell Order : ", GetLastError(), kauf); return; } } } for(zaehler = 0; zaehler < OrdersTotal(); zaehler++){ if(OrderSelect(zaehler,SELECT_BY_POS,MODE_TRADES) == false) break; if(OrderType() == OP_SELL && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] > ma2) result=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10,White); break; } if(OrderType() == OP_BUY && OrderMagicNumber() == MagieNummer && OrderSymbol() == Symbol()){ if(Close[1] < ma1) result=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10,White); break; } } return; } //+------------------------------------------------------------------+

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Guten Tag miteinander
Intressiere mich schon länger für Mql Programmierung. Habe deshalb Versucht die Sprache zu lernen aber nur mit mässigem Erfolg beim ersten Mal, weshalb ich das interesse verloren habe.
Nun Habe ich einen zweiten versuch gestartet und habe nun meinen ersten Expert Advisor programmiert. Er ist jetzt fertig dennoch mit einem Fehler behaftet. Jedes mal wenn ich den Expert Advisor im Strategie Tester testen lassen will traded er nicht. Er macht keine Trades. Und ich bekomme immer die Fehler Meldung OrderSend error 130 oder OrderSend error 138. Ich hoffe wirklich jemand von euch kann mir helfen. Ich danke schon mal im vorraus für eure Mühe. Hier ist der Code:
Ich hoffe jemand kann mir helfen. Falls das noch eine Rolle spielt Ich verwende den EA beim Deltastock broker.