|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
EA modifizieren, OrderSelect
Hallo,
als Anfänger lade ich mir gerne EA's aus dem Netz um daraus lernen zu können. Bei diesem komme ich nicht weiter, eventuell kann hier jemand helfen: Er heißt Open Two Pending Order und ist von hier: [URL="https://www.mql5.com/en/code/19057"] Der EA platziert je eine Pending Order (StopBuy, StopSell) in einem bestimmten Abstand zum aktuellen Kurs. Wird eine der beiden Pending Order ausgelöst, wird die andere gelöscht. Läuft die geöffnete Order in den TP oder SL, werden wieder zwei neue Pending Order eröffnet. Das funktioniert, solange der EA in nur einem Symbol läuft aber nicht mehr, sobald ein zweites Symbol zur selben Zeit mit diesem EA läuft. Beispiel: EA läuft für EURUSD und GBPUSD. Bei EURUSD wird die StopBuy Order ausgelöst, die StopSell Order wird gelöscht. Dann wird auch die StopSell oder des GBPUSD mit gelöscht. Könnt Ihr mich etwas unterstützen um das Problem zu lösen? Vielen Dank! Gruß Werner |
|
|||
Code:
//+------------------------------------------------------------------+ //| Open Two Pending Orders.mq4 | //| Zay Min Htet | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Zay Min Htet" #property link "https://www.mql5.com" #property version "1.00" #include <stdlib.mqh> //--- input bool DynamicLotSize =true; //Use Money Management input double EquityPercent = 2; //Risk Percent input double FixedLotSize = 0.1; //Fixed LotSize input double StopLoss = 100; //StopLoss( in Point) input double TakeProfit = 300; //TakeProfit( in Point) input double TrailingStop = 50; //TrailingStop(in Point) input double PipsAway = 50; //points away from the current Bid & Ask input double Slippage = 30; //Slippage input double Magic = 1111; //Magic Number double LotSize; int ticket1; int ticket2; int t=0; //--- //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---Detect Open or Pending Orders int total=OrdersTotal(); t=0; for(int i=total-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { t = 1; } } } if(t<1) { //Lot Size Calculation if(DynamicLotSize==true) { double RiskAmount= AccountEquity() *(EquityPercent/100); double TickValue = MarketInfo(Symbol(),MODE_TICKVALUE); if(Point==0.001 || Point==0.00001) TickValue*=10; double CalcLots=(RiskAmount/StopLoss)/TickValue; LotSize=CalcLots; } else LotSize=FixedLotSize; // Lot size verification if(LotSize<MarketInfo(Symbol(),MODE_MINLOT)) { LotSize=MarketInfo(Symbol(),MODE_MINLOT); } else if(LotSize>MarketInfo(Symbol(),MODE_MAXLOT)) { LotSize=MarketInfo(Symbol(),MODE_MAXLOT); } if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1) { LotSize=NormalizeDouble(LotSize,1); } else LotSize=NormalizeDouble(LotSize,2); //Open two Pending Orders simultaneously double t1 = Ask + PipsAway * Point; //BuyStop Entry Point double t2 = Bid - PipsAway * Point; //SellStop Entry Point double sl1 = t1 - StopLoss * Point; //BuyStop Stoploss double sl2 = t2 + StopLoss * Point; //SellStop Stoploss double tp1 = t1 + TakeProfit * Point; //BuyStop TakeProfit double tp2 = t2 - TakeProfit * Point; //SellStop TakeProfit ticket1 = OrderSend( Symbol(),OP_BUYSTOP,LotSize,t1, Slippage,sl1,tp1,"ZAY",Magic,0,White); ticket2 = OrderSend( Symbol(),OP_SELLSTOP,LotSize,t2, Slippage, sl2,tp2,"ZAY",Magic,0,White); } //---if opened order is "Buy", close another pending order "Sellstop" and use trailing stop for opened "Buy" order if (OrderSelect(ticket1,SELECT_BY_TICKET)) { if(OrderType()==OP_BUY) { // delete pending order if (ticket2 > 0) OrderDelete(ticket2); ticket2 = 0; // use Trailling Stop if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); } } } } //---if opened order is "Sell", close another pending order "Buystop" and use trailing stop for opened "Sell" order if (OrderSelect(ticket2,SELECT_BY_TICKET)) { if(OrderType()==OP_SELL) { // delete pending order if (ticket1 > 0) OrderDelete(ticket1); ticket1 = 0; // use Trailling Stop if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if(OrderStopLoss()>(Ask+Point*TrailingStop)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); } } } } return(0); } //+------------------------------------------------------------------+ traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Bin gerade beim Testen. Vielen Dank!!!
Hallo traderdoc,
jetzt hab ich den EA noch schnell kompiliert und in den VPS geladen um zu sehen, ob es noch im Alten Jahr einen Trade gibt (Demokonto;-). Sonst muss ich bis nächste Woche warten. Bin zuversichtlich, dass es klappt. Dein Ruf eilt Dir nämlich voraus Mir ist klar, dass das keine Selbstverständlichkeit ist, deswegen schätze ich die schnelle Antwort umso mehr. Also, vielen, vielen Dank! Ich melde mich dann nochmal kurz, ob es funktioniert. Gruß Werner |
Lesezeichen |
Stichworte |
code modifizieren, ea modifizieren, mql4, orderselect, programmierung, programmierung metatrader, programmierung mql4 |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|