Expert Advisor Fehler 130,138

 

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:

//+------------------------------------------------------------------+
//|                                 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 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"){
      
      kauf = Bid;
      kursziel = kauf - kurszielPips;
      stoppkurs = kauf + 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(kauf > 0 && offeneorders == 0){
   
      if(signal1 == "Readykauf_ma1" && signal2 == "Startkauf_ma1"){
         
      
         ticket = OrderSend(Symbol(),OP_SELL,Lots,kauf,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(), kauf);
            return;
         }
      }
         
      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(),Bid,10,White);
         break;
      
      }
   }   
   return;
   
  }
//+------------------------------------------------------------------+
Ich hoffe jemand kann mir helfen. Falls das noch eine Rolle spielt Ich verwende den EA beim Deltastock broker.
 

'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:

  1. Verwende Kauf für ein buy und Verkauf für ein Sell - nicht für beides dasselbe - führt nur zu Fehlern.
  2. Bei OrderClose(..) verwende OrderClose() statt Bid oder Ask, dann ist es auf jeden Fall der richtige, aktuelle Preis!
  3. 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 .  

Dokumentation zu MQL5: Standardbibliothek
Dokumentation zu MQL5: Standardbibliothek
  • www.mql5.com
Standardbibliothek - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Hallo zusammen ich danke euch für die Tipps. Habe das Buch schon bestellt. Aber ich hoffe trotzdem jemand hier könnte mir mit dem Expert Advisor helfen. 

Weiss jemand was ich falsch gemacht habe und weiss wie ich es lösen kann ? 

Wäre wirklich dankbar wenn mir jemand helfen kann ?
 
Verzeih, ich meinte

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.

 
In Ordnung habe das mit OrderClosePrice übernommen. 

Wie würdest du denn mit Punkten rechnen? 

Also ich verwende den Deltastock Broker mit 5 digits. 

Wenn ich jetzt einen Stoploss und Takeprofit von 40 Punkten will wie würde da die Rechnung aussehen für Kursziel und Stopppunkte ? Danke für deine Hilfe 
 
Wenn ich jetzt einen Stoploss und Takeprofit von 40 Punkten will wie würde da die Rechnung aussehen für Kursziel und Stopppunkte ?

Habe ich doch bereits geschrieben: Punkte*_Points (s.o.).

Wie würdest du denn mit Punkten rechnen?

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;
   
  }
//+------------------------------------------------------------------+


Grund der Beschwerde: