Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 13.05.19
dundale dundale ist offline
Neues Mitglied
 
Registriert seit: Oct 2016
Beiträge: 25
dundale befindet sich auf einem aufstrebenden Ast
Standard Modifizierung von PendingOrdern

Hallo alle zusammen,

ich habe mal wieder ein Problem. Ich möchte eine gesetzte Buystop-PendingOorder modifizieren.
Dazu habe ich eine Test-Version geschrieben. Eine PO wird erstellt und wenn der Preis zu weit von der PO entfernt ist, soll der PO-Preis angepasst werden.

Ich bekomme aber die Modifizierung absolut nicht hin. Kann mir jemand helfen?


HTML-Code:
//+------------------------------------------------------------------+
//|                                     TEST_Modify_PendingOrder.mq4 |
//+------------------------------------------------------------------+
#property strict
#include <stderror.mqh>
#include <stdlib.mqh>

extern double TP                  = 10;
extern double SL                  = 20;
extern double LS                  = 0.05;
extern string MyComment           = "TEST";
extern double AbstandZumMarkt     = 20;
double pips;
//+------------------------------------------------------------------+
int OnInit()
  {
// Determine what a pip is.
   pips=Point; //.00001 or .0001. .001 .01.
   if(Digits==3 || Digits==5 || Digits==1) pips*=10; //ist das gleiche wie: pips=points*10
   else if(Digits==2) pips*=100; //ist das gleiche wie: pips=points*100
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   CheckForSignal();
   Modify_PendingOrder();
  }
//+------------------------------------------------------------------+
void CheckForSignal()
{
   if(TotalOpenBuyStopPendingOrders() == 0) PlacePendingOrder(OP_BUYSTOP);
}
//+------------------------------------------------------------------+
void PlacePendingOrder(int dir)
{ 
   // Buystop-PendingOrder
   double LongEntryPrice = Ask + (AbstandZumMarkt*pips);
   double LongSL         = LongEntryPrice - SL*pips;
   double LongTP         = LongEntryPrice + TP*pips;

   if(dir == OP_BUYSTOP)
   {  int Long_ticket = OrderSend(Symbol(), dir, LS, LongEntryPrice, 30, LongSL, LongTP, MyComment, 0, 0, clrGreen); }
}
//+------------------------------------------------------------------+
void Modify_PendingOrder()
{
   double price = 0,
   new_price = 0;

   if(TotalOpenBuyStopPendingOrders() > 0)
           {
            for(int i=0;i<OrdersTotal()-1;i++)
              {
               if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  if(OrderSymbol() == Symbol())
                     if(OrderType()==OP_BUYSTOP)
                        {
                        int orderticket = OrderTicket();
                        if(OrderTicket() == FindLastBuyStopPendingOrder())
                           {
                           if(Ask <= (OrderOpenPrice()-(AbstandZumMarkt*pips)))
                              {
                              new_price = Ask + (AbstandZumMarkt*pips);
                              int new_ticket = OrderModify(orderticket,new_price,(new_price-(SL*pips)),(new_price+(TP*pips)),0,clrBlue);
                              }
                           }   
                        }
              }
           }   
}
//+------------------------------------------------------------------+
int TotalOpenBuyStopPendingOrders()
  {
   int total=0;
   if(OrdersTotal()>0)for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol() == Symbol())
            if(OrderType()==OP_BUYSTOP)
               total++;
        }
      else Print(__FUNCTION__," Failed to select order ",i," ",GetLastError());
     }
   return (total);
  }
//+------------------------------------------------------------------+
int FindLastBuyStopPendingOrder()
{
   int      orderticket = 0;
   datetime last  = 0;
   for(int i = OrdersTotal()-1;i>=0;i--)
      {
      if(TotalOpenBuyStopPendingOrders() > 0)      
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
            if(OrderSymbol() == Symbol())
               if(OrderType() == OP_BUYSTOP)
                  {
                  if(last == 0 || OrderOpenTime() > last)
                     {
                     last  = OrderOpenTime();
                     orderticket = OrderTicket();
                     }
                  }
      }
   return (orderticket);
}
//+------------------------------------------------------------------+
Die Modify-Funktion möchte ich später in einen größeren Code einbauen, der neue Wert für den Preis kommt dann von einer anderen Funktion.

Ich wäre für eure hilfreichen Tipps sehr dankbar.