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.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3820
Beiträge: 36898
Benutzer: 6.067
Aktive Benutzer: 491
Links: 80
Wir begrüßen unseren neuesten Benutzer: POCJonah7
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 4 Stunden
- POCJonah7
vor 11 Stunden
- flowi88
vor 11 Stunden
- dealtycoon
vor 16 Stunden
- VicenteWuc
vor 19 Stunden
- sazaron

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 65
Gesamt: 67
Team: 0
Team:  
Benutzer:  ForexMax, Trader6969
Freunde anzeigen

Empfehlungen

Werbung

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 22.12.14
Neues Mitglied
 
Registriert seit: Nov 2014
Beiträge: 27
Bucardo befindet sich auf einem aufstrebenden Ast
Standard Probleme mit Orderaufgabe (Pending Order)

Hallo zusammen,

ich arbeite seit längerem an meinem eigenen News-Advisor. Nachdem ich vor kurzem das Konzept nochmal umgestellt und neu angefangen habe, stoße ich auf folgendes Problem:

Der EA soll kurz vor einer News zwei Pending-Orders aufgeben und diese bis zum zeitpunkt X an den jeweiligen Preis anpassen. Ab zeitpunkt X wird nicht mehr modifiziert und abgewartet welche Order getroffen wird.
Jetzt zum Problem: Sobald die Order ausgeführt werden soll, erhalte ich die Fehlermeldung "Invalid Trade Parameters". Ich habe den Verdacht, dass es an meiner Definition für den Preis der OrderSend-Funktion liegt, finde den Fehler aber nicht. Vielleicht könnt ihr mir weiterhelfen

int BuyStop_Preis = Ask + (PipDifferenz*Point);
int BuyStop_StopLoss = Ask + ((PipDifferenz - StopLoss)*Point);
int BuyStop_TakeProfit = Ask + ((PipDifferenz + TakeProfit)*Point);
int SellStop_Preis = Bid - (PipDifferenz*Point);
int SellStop_StopLoss = Bid - ((PipDifferenz + StopLoss)*Point);
int SellStop_TakeProfit = Bid - ((PipDifferenz - TakeProfit)*Point);


void OpenBuyStop()
{
int ticket,tries;
tries = 0;
if (!GlobalVariableCheck("InTrade"))
{
while (tries < 3)
{
GlobalVariableSet("InTrade", CurTime()); // set lock indicator
ticket = OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyStop_Preis,1 ,BuyStop_StopLoss,BuyStop_TakeProfit,"EA Order",NULL,0,Red);
Alert("BuyStop eröffnet, Ticket ="+ticket);
GlobalVariableDel("InTrade"); // clear lock indicator
if(ticket<=0)
{
Alert("Fehler bei der BuyStop-Aufgabe aufgetreten! (Fehlernummer: "+ErrorDescription(GetLastError())+" BuyStop @ "+BuyStop_Preis+" SL @ "+BuyStop_StopLoss+" TP @"+BuyStop_TakeProfit);
tries++;
}
else tries = 3;
}
}
}

void OpenSellStop()
{
int ticket,tries;
tries = 0;
if (!GlobalVariableCheck("InTrade")) {
while (tries < 3)
{
GlobalVariableSet("InTrade", CurTime()); // set lock indicator
ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,SellStop_Preis ,1,SellStop_StopLoss,SellStop_TakeProfit,"EA Order",NULL,0,Red);
Alert("SellStop eröffnet, Ticket ="+ticket);
GlobalVariableDel("InTrade"); // clear lock indicator
if(ticket<=0) {
Alert("Fehler bei der SellStop-Aufgabe aufgetreten! (Fehlernummer: "+ErrorDescription(GetLastError())+" BuyStop @ "+SellStop_Preis+" SL @ "+SellStop_StopLoss+" TP @"+SellStop_TakeProfit);
tries++;
} else tries = 3;
}
}
}


Danke & Gruß,
Bucardo
  #2 (permalink)  
Alt 22.12.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
int Slippage = 3;
double Pt;
int M;

M = 1;
if (MarketInfo(Symbol(), MODE_PROFITCALCMODE) == 0) {
   if (Digits == 3 || Digits == 5) M = 10;
   if (Digits == 6) M = 100;   
   if (Digits == 7) M = 1000;
   Pt = Point*M;
} else Pt = 1.0;

int BuyStop_Preis = Ask + (PipDifferenz*Pt);
int BuyStop_StopLoss = Ask + ((PipDifferenz - StopLoss)*Pt);
int BuyStop_TakeProfit = Ask + ((PipDifferenz + TakeProfit)*Pt);
int SellStop_Preis = Bid - (PipDifferenz*Pt);
int SellStop_StopLoss = Bid - ((PipDifferenz + StopLoss)*Pt);
int SellStop_TakeProfit = Bid - ((PipDifferenz - TakeProfit)*Pt);
  
Slippage *= M;

void OpenBuyStop() {
   int ticket, tries;
   tries = 0;
   if (!GlobalVariableCheck("InTrade")) {
      while (tries < 3) {
         GlobalVariableSet("InTrade", CurTime()); // set lock indicator
         ticket =OrderSend(Symbol(), OP_BUYSTOP, Lots, BuyStop_Preis, Slippage, BuyStop_StopLoss, BuyStop_TakeProfit, "EA Order", 0, 0, Red);
         if (ticket > 0) {
            Alert("BuyStop eröffnet, Ticket ="+ticket);
            GlobalVariableDel("InTrade"); // clear lock indicator
            break;
         } else {
            Alert("Fehler bei der BuyStop -Aufgabe aufgetreten! (Fehlernummer: "+ErrorDescription(GetLastError()) + " BuyStop @ "+BuyStop_Preis + " SL @ " + BuyStop_StopLoss + " TP @" + BuyStop_TakeProfit);
            tries++;
         }
      }
   }
}

void OpenSellStop() {
   int ticket, tries;
   tries = 0;
   if (!GlobalVariableCheck("InTrade")) {
      while (tries < 3) {
         GlobalVariableSet("InTrade", CurTime()); // set lock indicator
         ticket = OrderSend(Symbol(), OP_SELLSTOP, Lots, SellStop_Preis, Slippage, SellStop_StopLoss, SellStop_TakeProfit, "EA Order", 0, 0, Red);
         if (ticket > 0) {
            Alert("SellStop eröffnet, Ticket ="+ticket);
            GlobalVariableDel("InTrade"); // clear lock indicator
            break;
         } else {
            Alert("Fehler bei der SellStop-Aufgabe aufgetreten! (Fehlernummer: "+ErrorDescription(GetLastError()) + " BuyStop @ " + SellStop_Preis + " SL @ " + SellStop_StopLoss + " TP @" + SellStop_TakeProfit);
            tries++;
         }
      }
   }
}
Über M, Digit, Point und Pt wird automatisch festgestellt, ob mit einem 4- oder 5-Digitbroker gehandelt wird. Das ist für die Festlegung des SL, TP und der Slippage eminent wichtig!
Die Slippage war vorher fix mit 1 angegeben. Bei einem 5-Digitbroker hätte das bedeutet, dass nur eine Slippage von 0.1 Pip möglich gewesen wäre - viel zu wenig.
Die Magicnumber wurde als 0 eingesetzt.
Falls Order geöffnet wurde - kurze Alertmeldung und dann mit break Sprung aus der while-Schleife.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 22.12.14
Neues Mitglied
 
Registriert seit: Nov 2014
Beiträge: 27
Bucardo befindet sich auf einem aufstrebenden Ast
Standard

Danke traderdoc für die schnelle Hilfe! Ich habe den Code entsprechend verändert und es funktioniert einwandfrei

Leider hat sich beim Testen gleich ein neues Problem aufgetan. Meine OrderModify-Funktion läuft nicht mehr. Ich hatte eben kurz eine Version, die funktionierte, war kurz abgelenkt und finde jetzt nicht mehr den Fehler...

Letztendlich soll die Order mit Preis, SL und TP so modifiziert werden, dass sie über einen definierten Zeitraum mit den aktuellen Preisen mitläuft. Im Moment bleiben die Parameter aber unverändert so, wie sie bei der Orderaufgabe festgelegt wurden.

Hier der Code:

void DoModify()
{

for (int i = 0; i < OrdersTotal(); i++)
{
ph2=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol()==Symbol() &&(OrderType()==OP_BUYSTOP))
{
if ((OrderOpenPrice()>BuyStop_Preis) || (OrderOpenPrice()<BuyStop_Preis))
{
Alert("BuyStop OrderModifikation ausgeführt, BuyStop war @ "+DoubleToStr(OrderOpenPrice(),5)+"// Änderung in "+DoubleToStr(BuyStop_Preis,5));
ph3 = OrderModify(OrderTicket(),Ask + PipDifferenz*Point,(Ask + PipDifferenz*Point) - StopLoss*Point,(Ask + PipDifferenz*Point) - StopLoss*Point,0,Red);
}
}
if (OrderSymbol()==Symbol() && (OrderType()==OP_SELLSTOP))
{
if ((OrderOpenPrice() > SellStop_Preis) || (OrderOpenPrice() < SellStop_Preis))
{
/*Alert("SellStop OrderModifikation ausgeführt, SellStop war @ "+DoubleToStr(OrderOpenPrice(),5)+"// Änderung in "+DoubleToStr(SellStop_Preis,5));*/
ph4 = OrderModify(OrderTicket(),Bid - PipDifferenz*Point,(Bid - PipDifferenz*Point) + StopLoss*Point,(Bid - PipDifferenz*Point) - TakeProfit*Point,0,Red);
}
}

}
}


Gruß Bucardo
  #4 (permalink)  
Alt 22.12.14
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.873
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
void DoModify() {
   for (int i = 0; i < OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderType() == OP_BUYSTOP) {
            if (OrderOpenPrice() != BuyStop_Preis) {
               ph3 = OrderModify(OrderTicket(), Ask + PipDifferenz*Pt, Ask + (PipDifferenz - StopLoss)*Pt, Ask + (PipDifferenz + TakeProfit)*Pt, 0, Red);
            }
            if (ph3) {
               Alert("BuyStop OrderModifikation ausgeführt, BuyStop war @ "+DoubleToStr(OrderOpenPrice(),5)+"// Änderung in "+DoubleToStr(BuyStop_Preis,5));
               continue;
            }
            if (OrderSymbol() == Symbol() && OrderType() == OP_SELLSTOP) {
               if (OrderOpenPrice() != SellStop_Preis) {
                  ph4 = OrderModify(OrderTicket(), Bid - PipDifferenz*Pt, Bid - (PipDifferenz + StopLoss)*Pt, Bid - (PipDifferenz - TakeProfit)*Pt, 0, Red);
               }
               if (ph4) {
                  Alert("SellStop OrderModifikation ausgeführt, SellStop war @ "+DoubleToStr(OrderOpenPrice(),5)+"// Änderung in "+DoubleToStr(SellStop_Preis,5));
               }
            }
         }
      }
   }
}
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #5 (permalink)  
Alt 15.06.15
Rob Rob ist offline
Neues Mitglied
 
Registriert seit: May 2015
Beiträge: 8
Rob befindet sich auf einem aufstrebenden Ast
Standard

Hallo Bucardo,
seit einigen Wochen verfolge ich auch die Strategie zum Newstrading, bzw. habe ein EA dazu erstellt. Leider bin ich erst jetzt auf Dein Programm gestoßen

Mein EA ist auch so aufgebaut, dass ich 20-10 Sek vor der Nachricht 2 PendingOrder platziere und kurz danach manuell wieder aussteige.

Werden Deine Pending Order immer sofort platziert? Bei mir passiert es manchmal, dass eine Order nicht gesetzt wird und meine CPU-Leistung nach oben geht.

Mich würde wirklich brennend interessieren, ob Du damit schon positive Erfolge erzielen konntest?

Gruß Rob
Thema geschlossen

Lesezeichen

Stichworte
abgabe order, mql4, order, orderaufgabe, pending order, programmierung, programmierung metatrader


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 07:06 Uhr.



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