Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   EA modifizieren, OrderSelect (http://www.expert-advisor.com/forum/showthread.php?t=5957)

fintrad0 29.12.17 15:17

EA modifizieren, OrderSelect
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

traderdoc 29.12.17 19:25

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

So sollte das funktionieren.

traderdoc

fintrad0 29.12.17 20:10

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:49 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum