Einzelnen Beitrag anzeigen
  #4 (permalink)  
Alt 17.05.19
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Ich habe es mal laufen lassen, Änderungen
1. 3 Orders (um zu sehen, ob er auch wirklich nur die letzte ändert)
2. Modify_Pending Loop-Zeile geändert
3. FindLastPending Bedingungen geändert
Probiers aus, hier der Code von den geänderten:
Code:
//+------------------------------------------------------------------+
void CheckForSignal()
{
   //if(TotalOpenBuyStopPendingOrders() == 0) PlacePendingOrder(OP_BUYSTOP);
   if(TotalOpenBuyStopPendingOrders() <3) PlacePendingOrder(OP_BUYSTOP);
}
//+------------------------------------------------------------------+
void Modify_PendingOrder()
{
	Print("Function: ",__FUNCTION__," entered"); 
	
	double price      = 0, //AktuellerEinstieg
	       new_price  = 0; //NeuerEinstieg
	int    orderticket= 0; //LetzteBuyStopNummer
	double Grenzwert  = 0; //Log MaximalAbstand
	double new_SL     = 0; //Log NeuerSL
	double new_TP     = 0; //Log NeuerTP
	
	Print("Function: ",__FUNCTION__," TotalOpenBuyStopPendingOrders=",
	      IntegerToString(TotalOpenBuyStopPendingOrders())            );      
   if(TotalOpenBuyStopPendingOrders() > 0)                            //WartendeBuyStop
   {
   	Print("Function: ",__FUNCTION__," going into Loop"); 
   	for(int i=OrdersTotal(); i>=0; i--)                             //LoopAlleOrders
      {
      	Print("Function: ",__FUNCTION__," i=",IntegerToString(i));
      	if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))                 //SelectTrades
      	{
      	   orderticket=FindLastBuyStopPendingOrder();                //LetzteBuyStopNummer
				Print("Function: ",__FUNCTION__," i=",IntegerToString(i),
				      " orderticket i=",IntegerToString(orderticket)     );
      		
      		if(   OrderSymbol()==_Symbol                              //UnserMarkt
      		   && OrderType()==OP_BUYSTOP                             //BuyStopOrder
      		   && OrderTicket()==orderticket )                        //IstLetzteBuyStop
      		{
      			Grenzwert=(OrderOpenPrice()-(AbstandZumMarkt*pips));   //MaxAbstand
      			
      			if(Ask <= Grenzwert )                                  //AskUnterGrenzwert
      			{
      				new_price = Ask + (AbstandZumMarkt*pips);           //NeuerEinstieg
      				Print("Function: ",__FUNCTION__," Ask=",DoubleToStr(Ask,_Digits),
      				      " unter Grenzwert=",DoubleToStr(Grenzwert,_Digits),
      				      " new_price=",DoubleToStr(new_price,_Digits)				      );
      				
      				int new_ticket = OrderModify(OrderTicket(),
      				                             new_price,
      				                             (new_price-(SL*pips)),
      				                             (new_price+(TP*pips)),
      				                             0,clrNONE             );
      				if( !new_ticket ) 
                     Print("Function: ",__FUNCTION__," failed to modify pending buy stop");
                  else
                  {
                  	new_SL=OrderStopLoss();
                  	new_TP=OrderTakeProfit();
                  	Print("Function: ",__FUNCTION__," changed Ticket=",IntegerToString( OrderTicket() ),
      				         " new_price=",DoubleToStr(new_price,_Digits),
      				         " new SL=",DoubleToStr(new_SL,_Digits),
      				         " new TP=",DoubleToStr(new_TP,_Digits)		  );
						}
      			}//AskUnterGrenzwert
      			else
      				Print("Function: ",__FUNCTION__," Ask=",DoubleToStr(Ask,_Digits),
      				      " noch nicht unter Grenzwert=",DoubleToStr(Grenzwert,_Digits) );
      		
      		}//OurMarket und BuyStopOrder und IstLetzteBuyStop
      		else
      			Print("Function: ",__FUNCTION__," not OurSymbol, BuyStop or last BuyStopTicket");
      	}//SelectTrades
      	else
      		Print("Function: ",__FUNCTION__," no MODE_TRADES to select");
      }//LoopAlleOrders
	}//WartendeBuyStop
	else
		Print("Function: ",__FUNCTION__," no Open BuyStopPendingOrders");
}
//+------------------------------------------------------------------+
int FindLastBuyStopPendingOrder()
{
   int      orderticket = 0; //LastTicketNo
	Print("entered Function: ",__FUNCTION__,
	      " orderticket=",IntegerToString(orderticket));
   
   //Höchste (Letzte) bis Null (Erste), break nach Treffer
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
		Print("entered loop Function: ",__FUNCTION__," i=",IntegerToString(i),
		      " TotalOpenBuyStopPendingOrders=",
		      IntegerToString(TotalOpenBuyStopPendingOrders()) );
      if(TotalOpenBuyStopPendingOrders() > 0)
      {      
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            if(   OrderSymbol() == Symbol()     //OurMarket
               && OrderType() == OP_BUYSTOP  )  //BuyStopOrder
            {
                     orderticket = OrderTicket();
							Print("Function: ",__FUNCTION__," i=",IntegerToString(i),
							      " hat orderticket=",IntegerToString(orderticket)   );
                     break;
               
				}//OurMarket and BuyStopOrder
				else
					Print("Function: ",__FUNCTION__," not our Symbol or not a BuyStop");
			
			}//SELECT_BY_POS,MODE_TRADES
       }//TotalOpenBuyStopPendingOrders()>0
   }//i=OrdersTotal()-1

	Print("Function: ",__FUNCTION__," returns ticket=",IntegerToString(orderticket));
   return (orderticket);
}//+------------------------------------------------------------------+
Du kannst beim Testen die erzeugten Pendings manuell verschieben und dann sehen, welche er ändert. Hoffe das hilft Dir. AVT