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
|