Gegenüberliegende Bestellung öffnen - Seite 3

 
RaptorUK:

Es kann sein, wenn es eine andere Magic Number alsMagicNumber hat, oder es ist für ein anderes Symbol als das Symbol, auf dem der EA läuft, oder wenn es ein OP_SELLLIMIT oder OP_BUYLIMIT ist. . außerdem müssen Sie die Rückgabewerte Ihrer OrderDelete()-Aufrufe überprüfen.

Warum müssen Sie RefreshRates() aufrufen? Ich meine nicht, dass Sie sie loswerden sollten, aber können Sie erklären, warum Sie RefreshRates() dort aufrufen, wo Sie es tun?


Was sind Funktionsrückgabewerte? Wie kann ich sie verwenden?


Hallo RaptorUK.

Soweit ich verstanden habe, ist die MagicNumber die gleiche und sind OP_SELLSTOP und OP_BUYSTOP.

OrderDelete() ruft, ich fürchte, ich verstehe nicht, was Sie meinen....

RefreshRates() habe ich erst nach dem Problem mit der Schließung dort eingefügt.

Jetzt bin ich in Lissabon (Portugal).

Luis

 
luisneves:


Hallo RaptorUK.

Soweit ich verstehe, ist die MagicNumber die gleiche und sind OP_SELLSTOP und OP_BUYSTOP.

OrderDelete()-Aufrufe, ich fürchte, ich verstehe nicht, was Sie meinen....

Wenn Sie OrderDelete() aufrufen (indem Sie die Funktion OrderDelete() verwenden), gibt sie einen Wert zurück, einen boolschen Wert, wenn der Wert true ist, hat OrderDelete() funktioniert, wenn er false ist, ist OrderDelete() fehlgeschlagen. Prüfen Sie also den Rückgabewert, und wenn er falsch ist, melden Sie den Fehler im Protokoll mit Print() oder verwenden Sie Comment() oder Alert(), damit Sie wissen, dass Sie ein Problem haben und es untersuchen können.

Basierend auf Ihrem Code würde ich diese Änderungen vornehmen... wenn es mein Code wäre, würde ich zusätzliche Änderungen vornehmen, um mehr Informationen im Falle eines Fehlers zu drucken, Bid, Ask, FreezeLevel, StopLevel, etc.

void CloseAll()
   {
   int OrdType, GLError;
   
   RefreshRates();
                    
   for(int OrderPos = OrdersTotal()-1; OrderPos >= 0; OrderPos--)
      if( OrderSelect(OrderPos, SELECT_BY_POS, MODE_TRADES)
         && OrderMagicNumber() == MagicNumber 
         && OrderSymbol() == Symbol())
         {
         OrdType = OrderType();
         if(OrdType == OP_BUY || OrdType==OP_SELL)
            {
            if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), UseSlippage, Yellow))
               GLError = GetLastError();
            }

         if(OrdType == OP_SELLSTOP || OrdType == OP_BUYSTOP || OrdType == OP_BUYLIMIT || OrdType == OP_SELLLIMIT)
            {
            if(!OrderDelete(OrderTicket())
               GLError = GetLastError();
            }

         if(GLError > 0) Print("Error Closing/Deleting Order, error # ", GLError, " for ticket: ", OrderTicket());         
         }
   } 
 
RaptorUK:

Wenn Sie OrderDelete() aufrufen (indem Sie die Funktion OrderDelete() verwenden), gibt sie einen Wert zurück, einen boolschen Wert, wenn der Wert true ist, hat OrderDelete() funktioniert, wenn er false ist, ist OrderDelete() fehlgeschlagen. Prüfen Sie also den Rückgabewert, und wenn er falsch ist, melden Sie den Fehler im Protokoll mit Print() oder verwenden Sie Comment() oder Alert(), damit Sie wissen, dass Sie ein Problem haben und es untersuchen können.

Auf der Grundlage Ihres Codes würde ich diese Änderungen vornehmen ... wenn es mein Code wäre, würde ich zusätzliche Änderungen vornehmen, um im Falle eines Fehlers mehr Informationen zu drucken, Bid, Ask, FreezeLevel, StopLevel, etc.


Hallo RaptorUK,

Der Grund, warum die Pending Order nicht gelöscht wurde, hat mit der Gewinnmitnahme zu tun, die in diesem Fall 5 Pips zu niedrig war. Meine Verwirrung kommt von der Tatsache, wenn ich eine Routine hatte, um den Stoploss, den Eröffnungskurs und die Gewinnmitnahme aus der Freeze-Zone zu setzen, warum dies nicht funktioniert hat. Ok, aber jetzt funktioniert es.

By the way, ich möchte die entgegengesetzte Bestellung zu schließen, sobald die anderen getriggert wurden.für das habe ich diese zusätzlichen Code aber (Sie können anfangen zu lachen...) aber nichts....

Kann mir hier jemand helfen?

 while(IsTradeContextBusy()) Sleep(10);
                   RefreshRates();
         Ticket=OrderSend(Symbol(),OP_BUYSTOP,LotSize,BuyLevel,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Stop Order",MagicNumber,0,Green);
         if(Ticket>0)
         
          int o=OrderType();
          if (o==OP_BUY)
          OrderDelete(OrderTicket());        
           {
            if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY Stop Order Opened : ",OrderOpenPrice());
           }
         //else Print("Error opening BUY Stop Order : ",GetLastError());
 
luisneves:


Hallo RaptorUK,

1. der Grund, warum die schwebende Bestellung nicht gelöscht wurden, haben mit der Gewinnmitnahme zu tun, die in diesem Fall 5 Pips zu niedrig war. Wenn ich es auf 10 pips die Reihenfolge delete.my Verwirrung kommen aus der Tatsache, wenn ich eine Routine, um die stoploss, offener Preis und Take Profit aus der Freeze-Zone, warum dies nicht funktioniert haben, setzen hatte. Ok, aber jetzt funktioniert es.

2) Übr igens, ich möchte die entgegengesetzte Bestellung schließen, sobald die andere ausgelöst wurde, dafür habe ich diesen zusätzlichen Code eingegeben, aber (Sie können anfangen zu lachen...) aber nichts ....

Kann mir hier jemand helfen?


1. deshalb müssen Sie die Rückgabewerte überprüfen und Fehlercodes ausdrucken usw. Sie müssen sicherstellen, dass alle Handelsaktionen für eine beliebige Order den Informationen hier entsprechen:Requirements and Limitations in Making Trades

2. Sie müssen warten, bis die Order von OP_BUYSTOP in OP_BUY umgewandelt wurde, das kann einige Zeit dauern, daher müssen Sie immer wieder kontrollieren. Sobald sie sich in einen OP_BUY verwandelt hat, können Sie die entgegengesetzte Order schließen, und dazu müssen Sie die richtige Order zum Schließen finden. Sie sollten meine jüngste Unterhaltung mitWhooDoo22 lesen, die ein ähnliches Thema behandelt.

 

Hallo RaptorUk,

ich bin dem von dir angegebenen Link gefolgt, aber das Thema ist zwar interessant, aber zu lang und mit so vielen unterschiedlichen Meinungen, dass ich mich darin verirrt habe.

Also habe ich einen Code eingeführt, um die gegenüberliegenden Pendenzen zu schließen und wieder nichts und kann nichts in der Zeitschrift sehen, die eine Hilfe soever..... gibt, was ich hier vermisse ......

Danke für jede Hilfe.....

Luis

//Sell Pending Stop Loss & Take Profit Calculation     
     
   if(StopLoss>0)SellStopLoss=PendingSellPrice+(StopLoss*pt);
   if(TakeProfit>0)SellTakeProfit=PendingSellPrice-(TakeProfit*pt);
   
//Place Sell Pending Order
        
         while(IsTradeContextBusy()) Sleep(10);
                   RefreshRates();       
         Ticket=OrderSend(Symbol(),OP_SELLSTOP,LotSize,SellLevel,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Stop Order",MagicNumber,0,Red);
         if(Ticket>0)OppositePendindDel();          
           {
            if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL Stop Order Opened : ",OrderOpenPrice());
           }
        //else Print("Error opening SELL Stop Order : ",GetLastError());
         } 
//+---------------------------------------------------------------------------+
int OppositePendindDel()
{
 int c,d,GLError;
 int e=OrdersTotal();
 
 for(c=e-1;c>=0;c--)
 {  
   OrderSelect(c,SELECT_BY_POS,MODE_TRADES);
   if(OrderType()==OP_BUY||OrderType()==OP_SELL)
   {
    for(d=e-1;d>=0;d--)
    {
     OrderSelect(d,SELECT_BY_POS,MODE_TRADES);
     
      if(OrderType()==OP_SELLSTOP)
     {
      if(!OrderDelete(OrderTicket()))
            GLError = GetLastError();
      
      return(1);
      }
      if(OrderType()==OP_BUYSTOP)
      {
       if(!OrderDelete(OrderTicket()))
             GLError = GetLastError();
       }
       if(GLError > 0) Print("Error Closing/Deleting Order, error # ", GLError, " for ticket: ", OrderTicket());
       return(1);
       }
      }
     }
    }
 
luisneves:

Hallo RaptorUk,

ich bin dem von dir angegebenen Link gefolgt, aber das Thema ist zwar interessant, aber zu lang und mit so vielen unterschiedlichen Meinungen, dass ich mich darin verirrt habe.

Also habe ich einen Code eingeführt, um die gegenüberliegenden Pendenzen zu schließen und wieder nichts und kann nichts in der Zeitschrift sehen, die eine Hilfe soever..... gibt, was ich hier verpasse ......

RaptorUK:

2. man muss warten, bis die Order den Typ von OP_BUYSTOP zu OP_BUY ändert, das kann einige Zeit dauern,also muss man immer wieder nach sehen ... sobald sie sich in eine OP_BUY verwandelt hat, kann man die gegenüberliegende Order schließen, und dazu muss man die richtige Order zum Schließen finden.

 
RaptorUK:



Hallo RaptorUK ,

Ok, jetzt scheint, dass ist das Löschen der gegenüberliegendenschwebenden Ordnung nach einem schwebenden kommt ausgelöst., aber jetzt einige Aufträge kommen in Doppel, was bedeutet, die ea setzen einen Verkauf und Kauf zur gleichen Zeit und Losgröße ist das gleiche für die beiden Aufträge, wenn es muss eine Reihenfolge eine Zeit. I started get crazy.....

Jede Hilfe hier, bitte!!!!

Dateien:
 
luisneves:


Hallo RaptorUK ,

Ok, jetzt scheint, dass ist das Löschen der gegenüberliegenden schwebenden Ordnung nach einem schwebenden kommt ausgelöst., aber jetzt einige Aufträge kommen in Doppel, was bedeutet, die ea setzen einen Verkauf und Kauf zur gleichen Zeit und Losgröße ist das gleiche für die beiden Aufträge, wenn es muss eine Reihenfolge eine Zeit. I started get crazy.....

Jede Hilfe hier, bitte!!!!

Wenn ich mir Ihren Code ansehe, finde ich es sehr schwer zu verstehen, was Sie zu tun versuchen. Ich sehe nur sehr wenige Kommentare, die mir helfen, Ihre start()-Funktion zeigt mir nicht, was Sie bei jedem Tick zu tun versuchen, und Sie haben kein konsistentes Layout der Einrückung.

Was soll die Funktion GoToClose() tun? Wenn Sie einige Kommentare am Anfang der Funktion machen würden, die beschreiben, was sie tun soll, dann könnte ich sehen, ob sie tatsächlich das tut, was sie tun soll, derzeit ist es der Aufruf einerFunktion, CloseAll(); auf, wenn ein einzelner Handel, der Ihrem Symbol und Ihrer Magischen Zahl entspricht, um einen beliebigen Betrag im Gewinn ist, oder wenn Sie mehr als 7 Handelstransaktionen für ein beliebiges Symbol und eine beliebige Magische Zahl haben. CloseAll() schließt nur Trades fürIhr Symbol und Ihre Magic Number. Hätten Sie also 7 Trades für ein anderes Symbol oder eine andere Magic Number, würde GoToClose() immer wieder CloseAll() aufrufen und es würde nichts weiter passieren.


Wenn Sie einen manuellen Handel auf Ihrem Demo-Konto platzieren und dann Ihren EA starten würden, würde er nichts tun ... er würde den Handel sehen, aber nicht ignorieren, er würde ihn zählen und folglich keinen eigenen Handel platzieren, noch würde er diesen offenen Handel schließen. Was sollte Ihr EA in dieser Situation tun? Was wäre, wenn ein Handel von einem anderen EA mit einer anderen Magic Number platziert würde?

Sie müssen sich ein klares Bild davon machen, was Sie zu tun versuchen, kommentieren Sie Ihre start()-Funktion, damit der Ablauf und der Prozess klar sind, kommentieren Sie jede Funktion, damit klar ist, was jede tun soll. Wenn Sie das getan haben, werden Sie vielleicht verstehen, wo Ihr Problem liegt....

 
RaptorUK:

Wenn ich mir Ihren Code ansehe, finde ich es sehr schwer zu verstehen, was Sie zu tun versuchen. Ich sehe nur sehr wenige Kommentare, die mir helfen, Ihre start()-Funktion zeigt mir nicht, was Sie bei jedem Tick zu tun versuchen, Sie haben kein konsistentes Layout der Einrückung.

Was soll die Funktion GoToClose() tun? Wenn Sie einige Kommentare am Anfang der Funktion machen würden, die beschreiben, was sie tun soll, dann könnte ich sehen, ob sie tatsächlich das tut, was sie tun soll, derzeit ruft sie eineFunktion, CloseAll(); auf, wenn ein einzelner Handel, der Ihrem Symbol und Ihrer Magischen Zahl entspricht, um einen beliebigen Betrag im Gewinn ist, oder wenn Sie mehr als 7 Handelsgeschäfte für ein beliebiges Symbol und eine beliebige Magische Zahl haben. CloseAll() schließt nur Trades fürIhr Symbol und Ihre Magic Number. Hätten Sie also 7 Trades für ein anderes Symbol oder eine andere Magic Number, würde GoToClose() immer wieder CloseAll() aufrufen und es würde nichts weiter passieren.


Wenn Sie einen manuellen Handel auf Ihrem Demo-Konto platzieren und dann Ihren EA starten würden, würde er nichts tun ... er würde den Handel sehen, aber nicht ignorieren, er würde ihn zählen und folglich keinen eigenen Handel platzieren, noch würde er diesen offenen Handel schließen. Was sollte Ihr EA in dieser Situation tun? Was wäre, wenn es einen Handel gäbe, der von einem anderen EA mit einer anderen Magic Number platziert wurde?

Sie müssen sich ein klares Bild davon machen, was Sie zu tun versuchen, kommentieren Sie Ihre start()-Funktion, damit der Ablauf und der Prozess klar sind, kommentieren Sie jede Funktion, damit klar ist, was jede Funktion tun soll. Wenn Sie das getan haben, verstehen Sie vielleicht, wo Ihr Problem liegt....


Hallo RaptorUK,

Entschuldigung für das Durcheinander. Im Moment scheint der EA das zu tun, was man von ihm erwartet, außer diesem Problem;

Der EA sollte eine entgegengesetzte Bestellung jedes Mal, dass die frühere Bestellung nicht nehmen die TakeProfit mit einer Lot-Größe increment und mit dem gleichen TakeProfit amount und es tut it.The Problem ist, dass es muss nur eine Bestellung eine Zeit und es setzen mehr als eine. Wenn Sie einen Blick auf den Bericht werfen, können Sie sehen, dass die Aufträge 6 und 7 beide ein Verkauf sind und der Auftrag 7 ein Kauf sein sollte.

Jetzt habe ich den Code nach Funktionen geordnet. Der Grund, warum ich all diese ungültigen Aufrufe habe, ist, dass ich einen voll funktionsfähigen, unabhängigen Block haben möchte, und hier weiß ich, dass ich Probleme habe, dies zu arrangieren. Das "Go to Open" und "Go to Close" ist nur ein Weg, um zu sagen, dass, wenn wir keine offenen Aufträge haben, die ersten auf "Open" gehen, wenn nicht, dann auf "Close"...) Ich benutze Symbol und magische Zahl, um zu garantieren, dass das Ea nur mit seinen eigenen Aufträgen zu tun hat.

Die wichtigste Strategie ist (und die Blöcke sind durch diese Reihenfolge);

1- Zwei schwebende Aufträge sind über und unter dem Preis. Sobald der Preis eine von ihnen auslöst, wird die andere Pending Order gelöscht. Dies funktioniert.

2- Wenn der Preis den TakeProfit auslöst, wird die Order geschlossen und der EA setzt wieder zwei Pending-Orders und der Prozess beginnt von neuem. Dies funktioniert.

2- Wenn der Preis den TakeProfit nicht auswählt und zurückspringt, sobald er den TakeProfit-Betrag erreicht hat (für Kaufaufträge), dann sollte ein entgegengesetzter Verkaufsauftrag mit demselben TakeProfit-Betrag und mit einer größeren Losgröße als der vorherige eröffnet werden. Dies funktioniert, außer dass mehr als eine Order platziert wird, und aus dem Bericht kann man sehen, dass die Orders 6 und 7 beide Verkaufsorders sind und nur eine sein sollte, die 7 sollte eine Kauforder sein.

3- Sobald der letzte Auftrag einen Gewinn erzielt, sollten alle offenen Aufträge geschlossen werden. Und der Prozess beginnt zu gewinnen. das funktioniert.

4- In diesem Pingpong sollte man erwarten, dass höchstens 7 Mal ein Auftrag den TakeProfit nimmt, wenn nicht, dann werden diese Aufträge geschlossen.

5 - Um die Möglichkeit zu eröffnen, den Gewinn zu erhöhen, sollte ein Break-Even- oder Minimum-Profit-Trailing-Stop verwendet werden. Wenn wir zum Beispiel einen TakeProfit von 2 Pips wollen, warten wir, bis der Preis 3 Pips erreicht hat, und setzen dann mit einer dieser Funktionen (Break-Even- oder Minimum-Profit-Trailing-Stop) eine Stop-Linie auf dem Niveau von 2 Pips. Wenn der Preis steigt (für Buy), dann wird die Stop-Linie mit ihm gehen und sobald der Preis 1 Pip zurückprallt, wird der Auftrag geschlossen und da er einen Gewinn hat, werden alle offenen Aufträge geschlossen. Hier bin ich nicht sicher, ob dies richtig funktionieren kann.

Danke

Luis

Dateien:
 
luisneves:


Hallo RaptorUK,

Entschuldigung für das Durcheinander. Zu diesem Zeitpunkt scheint, dass der EA tut, was man von ihm erwarten, außer dieses Problem;

Der EA sollte eine entgegengesetzte Bestellung jedes Mal, dass die frühere Bestellung nicht nehmen die TakeProfit mit einer Lot-Größe increment und mit dem gleichen TakeProfit amount und es tut it.The Problem ist, dass es muss nur eine Bestellung eine Zeit, und es setzen mehr als eine. Wenn Sie einen Blick auf den Bericht werfen, können Sie sehen, dass die Aufträge 6 und 7 beide ein Verkauf sind und der Auftrag 7 ein Kauf sein sollte.

Jetzt habe ich den Code nach Funktionen geordnet. Der Grund, warum ich all diese ungültigen Aufrufe habe, ist, dass ich einen voll funktionsfähigen, unabhängigen Block haben möchte, und hier weiß ich, dass ich Probleme habe, dies zu arrangieren. Das "Go to Open" und "Go to Close" ist nur ein Weg, um zu sagen, dass, wenn wir keine offenen Aufträge haben, die ersten auf "Open" gehen, wenn nicht, dann auf "Close"...) Ich benutze Symbol und magische Zahl, um zu garantieren, dass das Ea nur mit seinen eigenen Aufträgen zu tun hat.

Die wichtigste Strategie ist (und die Blöcke sind durch diese Reihenfolge);

1- Zwei schwebende Aufträge sind über und unter dem Preis. Sobald der Preis eine von ihnen auslöst, wird die andere Pending Order gelöscht. Dies funktioniert.

2- Wenn der Preis den TakeProfit auslöst, wird die Order geschlossen und der EA setzt wieder zwei Pending-Orders und der Prozess beginnt von neuem. Dies funktioniert.

2- Wenn der Preis den TakeProfit nicht auswählt und zurückspringt, sobald er den TakeProfit-Betrag erreicht hat (für Kaufaufträge), dann sollte ein entgegengesetzter Verkaufsauftrag mit demselben TakeProfit-Betrag und mit einer größeren Losgröße als der vorherige eröffnet werden. Dies funktioniert, außer dass mehr als eine Order platziert wird, und aus dem Bericht kann man ersehen, dass die Orders 6 und 7 beide Verkaufsorders sind und nur eine sein sollte, die 7 sollte eine Kauforder sein.

3- Sobald der letzte Auftrag einen Gewinn erzielt, sollten alle offenen Aufträge geschlossen werden. Und der Prozess beginnt zu gewinnen. das funktioniert.

4- In diesem Pingpong sollte man erwarten, dass höchstens 7 Mal ein Auftrag den TakeProfit nimmt, wenn nicht, dann werden diese Aufträge geschlossen.

5 - Um die Möglichkeit zu eröffnen, den Gewinn zu erhöhen, sollte ein Break-Even- oder Minimum-Profit-Trailing-Stop verwendet werden. Wenn wir zum Beispiel einen TakeProfit von 2 Pips wollen, warten wir, bis der Preis 3 Pips erreicht hat, und setzen dann mit einer dieser Funktionen (Break-Even- oder Minimum-Profit-Trailing-Stop) eine Stop-Linie auf dem Niveau von 2 Pips. Wenn der Preis steigt (für Buy), dann wird die Stop-Linie mit ihm gehen und sobald der Preis 1 Pip zurückprallt, wird der Auftrag geschlossen und weil er einen Gewinn hat, werden alle offenen Aufträge geschlossen. Hier bin ich nicht sicher, ob dies richtig funktionieren kann.

Danke

Luis

Ok, ich glaube, ich habe herausgefunden, was mit den mehreren offenen Aufträgen nicht stimmt. Ich musstediese in den Code einfügen (Negrito Italic);

Open Opposite Order
 
   double  MartingaleBuyPrice = Ask+StopLevel;
   if(MartingaleBuyPrice<UpperStopLevel)MartingaleBuyPrice=UpperStopLevel+MinStop*pt;
   
   double MartingaleSellPrice= Bid-StopLevel;
   if(MartingaleSellPrice>LowerStopLevel)MartingaleSellPrice=LowerStopLevel-MinStop*pt;
   
   int Op;  
   
   for(int Counter = OrdersTotal()-1; Counter >= 0; Counter--)
      {
      if(OrderSelect(Counter,SELECT_BY_POS,MODE_TRADES))  
         {
         if(OrderSymbol() == Symbol()&& OrderMagicNumber() == MagicNumber)
            {
            Op = OrderType();

            if(Op == OP_BUY && ((OrderOpenPrice()-OrderClosePrice())/pt)> ReturnDist && SellTicket==0)
               {                
               Sell Ticket = OrderSend(Symbol(), OP_SELL, mlots, MartingaleSellPrice, UseSlippage, 0, 0, "Sell Order", MagicNumber, 0, Red);
               if(Sell Ticket > 0) 
                  {
                  Print("Opposite Sell order placed # ", SellTicket);
                  AddLimitsSell();
                  }
               else
                  {
                  Print("Order Send failed, error # ", GetLastError() );
                  }
               }
               
            if(Op == OP_SELL && (OrderClosePrice()-OrderOpenPrice()/pt)> ReturnDist && BuyTicket==0)
               {               
               Buy Ticket = OrderSend(Symbol(), OP_BUY, mlots, MartingaleBuyPrice, UseSlippage, 0, 0, "Buy Order", MagicNumber, 0, Green);
               if(Buy Ticket > 0)
                  {
                  Print("Opposite Buy order placed # ", BuyTicket);
                  AddLimitsBuy();
                  }
               else
                  {  
                  Print("Order Send failed, error # ", GetLastError());
                  }   
               }
            }
         }
      }
   }
//+------------------------------------------------------------------+  
void AddLimitsBuy()
                  {
                  OrderSelect(Buy Ticket,SELECT_BY_TICKET);
                  OpenPrice = OrderOpenPrice();
                  StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
                                       RefreshRates();  
                                      UpperStopLevel = Ask + StopLevel;
                                      LowerStopLevel = Bid - StopLevel;
                                      
                                      
                                      if(StopLoss > 0) BuyStopLoss   = OpenPrice - (StopLoss * pt);
                  if(TakeProfit > 0)BuyTakeProfit = OpenPrice + (TakeProfit * pt);
                                      
                                      if(BuyStopLoss > 0 && BuyStopLoss > LowerStopLevel) 
                                              {                                 
                                                    BuyStopLoss = LowerStopLevel - MinStop*pt;
                                              }
                                      
                                      if(BuyTakeProfit > 0 && BuyTakeProfit < UpperStopLevel) 
                                              {
                                                     BuyTakeProfit = UpperStopLevel + MinStop*pt;
                                              }

                                      if(IsTradeContextBusy())Sleep(10);        

                  if(BuyStopLoss > 0 || BuyTakeProfit > 0) 
                     {          
                      OrderModify(Ticket,OP_BUY,BuyStopLoss,BuyTakeProfit,0);                            
                     }
                    } 
//+------------------------------------------------------------------+
void AddLimitsSell()
                  {
                  OrderSelect(Sell Ticket,SELECT_BY_TICKET);                 
                  OpenPrice = OrderOpenPrice();
                  StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
                                      RefreshRates();   
                                      UpperStopLevel = Ask + StopLevel;
                                      LowerStopLevel = Bid - StopLevel;
                                      
                                      
                                      if(StopLoss > 0) SellStopLoss = OpenPrice + (StopLoss*pt);
                                      if(TakeProfit > 0) SellTakeProfit = OpenPrice - (TakeProfit*pt);
                                    
                                      if(SellStopLoss > 0 && SellStopLoss < UpperStopLevel) 
                                              {                                 
                                                    SellStopLoss = UpperStopLevel + MinStop*pt;
                                              }
                                      if(SellTakeProfit> 0 && SellTakeProfit > LowerStopLevel) 
                                              {
                                                    SellTakeProfit = LowerStopLevel - MinStop*pt;
                                              }
                                            
                                      if(IsTradeContextBusy()) Sleep(10);       

                  if(SellStopLoss > 0 || SellTakeProfit > 0) 
                    {           
                      OrderModify(Ticket,OP_SELL,SellStopLoss,SellTakeProfit,0);
                    }                    
                   }  


Fehlende Berichtsdatei