Please use the SRC-button to post you code!
Please edit you post accordingly
I edited his post.
Tolga TANIS: i cant modify pending orders..
|
|
int ModifySellStop()
{
bool result;
int total;
//----
total=OrdersTotal();
double point=MarketInfo(Symbol(),MODE_POINT); This is not the Point for the OrderSymbol() ! But for the Chart Symbol()
double sellstopstoploss=sellstopprice+50*point;
for(int i=0; i<total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUYSTOP)
{
double point=MarketInfo(OrderSymbol(),MODE_POINT); <---it has to be here inside the orderloop
OrderPrint();
//---- modify first pending order
result=OrderModify(OrderTicket(),sellstopprice,sellstopstoploss,0,0,CLR_NONE);
if(result!=TRUE) Print("LastError = ", GetLastError());
//---- print modified order (it still selected after modify)
else if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)) OrderPrint();
break;
}
}
else { Print( "Error when order select ", GetLastError()); break; }
}
//----
return(0);
}

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Thank you already for helping!!
i cant modify pending orders..
//| Copyright 2017, MetaQuotes Software Corp. |//
//| https://www.mql5.com |//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXxXXXXXXXX//
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern int Tral_Stop=50;
int buys=0;
int sells=0;
int buystops=0;
int sellstops=0;
double buystopprice;
double sellstopprice;
int Ticket;
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX START XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
int start() {
double high=iHigh(Symbol(),PERIOD_CURRENT,iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,4,1));
double low =iLow(Symbol(),PERIOD_CURRENT,iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,4,1));
buystopprice=low+50*Point;
sellstopprice=high-50*Point;
if (OpenOrdersCount(Symbol())==0 && OpenPendingOrdersCount(Symbol())==0)
{
OpenBuySellStop(); //if there is no order open one BUYSTOP and one SELLSTOP on high and low level
}
else if ( OpenOrdersCount(Symbol())==-1 && OpenPendingOrdersCount(Symbol())==1 && OrderType()==OP_BUYSTOP)
{
ModifyBuyStop(); // if one of them became ORDER and if there is one SELL ORDER and one BUYSTOP, then modify BUYSTOP price to new buystopprice
}
else if ( OpenOrdersCount(Symbol())==1 && OpenPendingOrdersCount(Symbol())==1 && OrderType()==OP_SELLSTOP)
{
ModifySellStop();// if one of them became ORDER and if there is one BUY ORDER and one SELLSTOP, then modify SELLSTOP price to new sellstopprice
}
TrailingStop();
//Comment( "Open Orders = ",OpenOrders(Symbol())+" Open Pending = "+OpenPendingOrders(Symbol())+" new price = "+buystopprice);
return(0); }
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX OPEN FIRST ORDERS XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
void OpenBuySellStop()
{
double high=iHigh(Symbol(),PERIOD_CURRENT,iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,3,1));
double low =iLow(Symbol(),PERIOD_CURRENT,iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,3,1));
double BuyStopLoss=high;
double SellStopLoss=low;
int a=OrderSend(Symbol(),OP_BUYSTOP,0.1, high+50*Point,3,high-20*Point,0,NULL,0,0,clrBlue);
int b=OrderSend(Symbol(),OP_SELLSTOP,0.1, low-50*Point,3,low+20*Point,0,NULL,0,0, clrRed);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX CHECK ALL OPEN ORDERS XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
int OpenOrdersCount(string open)
{
buys=0;
sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//--- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX CHECK ALL PENDING ORDERS XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
int OpenPendingOrdersCount(string pending)
{
buystops=0;
sellstops=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
{
if(OrderType()==OP_BUYSTOP) buystops++;
if(OrderType()==OP_SELLSTOP) sellstops++;
}
}
//--- return orders volume
if (buystops==1 && sellstops==1) return(2);
else if(buystops>0) return(buystops);
else return(-sellstops);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX MODIFY PENDING BUYSTOP ORDER XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
int ModifyBuyStop()
{
bool result;
int total;
total=OrdersTotal();
double point=MarketInfo(Symbol(),MODE_POINT);
double buystopstoploss=buystopprice-50*point;
for(int i=0; i<total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUYSTOP)
{
OrderPrint();
//---- modify first pending order
result=OrderModify(OrderTicket(),buystopprice,buystopstoploss,0,0,CLR_NONE);
if(result!=TRUE) Print("LastError = ", GetLastError());
//---- print modified order (it still selected after modify)
else if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)) OrderPrint();
break;
}
}
else { Print( "Error when order select ", GetLastError()); break; }
}
//----
return(0);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX MODIFY PENDING SELLSTOP ORDER XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
int ModifySellStop()
{
bool result;
int total;
//----
total=OrdersTotal();
double point=MarketInfo(Symbol(),MODE_POINT);
double sellstopstoploss=sellstopprice+50*point;
for(int i=0; i<total; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUYSTOP)
{
OrderPrint();
//---- modify first pending order
result=OrderModify(OrderTicket(),sellstopprice,sellstopstoploss,0,0,CLR_NONE);
if(result!=TRUE) Print("LastError = ", GetLastError());
//---- print modified order (it still selected after modify)
else if(OrderSelect(OrderTicket(),SELECT_BY_TICKET)) OrderPrint();
break;
}
}
else { Print( "Error when order select ", GetLastError()); break; }
}
//----
return(0);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX TRAILING STOP XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
int TrailingStop() // Special function 'start'
{
string Symb=Symbol();
string Text; // Symbol
//------------------------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Cycle searching in orders
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
{ // Analysis of orders:
int Tip=OrderType(); // Order type
if(OrderSymbol()!=Symb||Tip>1)continue;// The order is not "ours"
double SL=OrderStopLoss(); // SL of the selected order
//---------------------------------------------------------------------- 3 --
while(true) // Modification cycle
{
double TS=Tral_Stop; // Initial value
double Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Min. distance
if (TS < Min_Dist) // If less than allowed
TS=Min_Dist; // New value of TS
//------------------------------------------------------------------- 4 --
bool Modify=false; // Not to be modified
switch(Tip) // By order type
{
case 0 : // Order Buy
if (NormalizeDouble(SL,Digits)< // If it is lower than we want
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Bid-TS*Point; // then modify it
Text="Buy "; // Text for Buy
Modify=true; // To be modified
}
break; // Exit 'switch'
case 1 : // Order Sell
if (NormalizeDouble(SL,Digits)> // If it is higher than we want
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//or equal to zero
{
SL=Ask+TS*Point; // then modify it
Text="Sell "; // Text for Sell
Modify=true; // To be modified
}
} // End of 'switch'
if (Modify==false) // If it is not modified
break; // Exit 'while'
//------------------------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP of the selected order
double Price =OrderOpenPrice(); // Price of the selected order
Ticket=OrderTicket(); // Ticket of the selected order
Alert ("Modification ",Text,Ticket,". Awaiting response..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Modify it!
//------------------------------------------------------------------- 6 --
if (Ans==true) // Got it! :)
{
Alert ("Order ",Text,Ticket," is modified:)");
break; // From modification cycle.
}
//------------------------------------------------------------------- 7 --
int Error=GetLastError(); // Failed :(
switch(Error) // Overcomable errors
{
case 130:Alert("Wrong stops. Retrying.");
RefreshRates(); // Update data
continue; // At the next iteration
case 136:Alert("No prices. Waiting for a new tick..");
while(RefreshRates()==false) // To the new tick
Sleep(1); // Cycle delay
continue; // At the next iteration
case 146:Alert("Trading subsystem is busy. Retrying ");
Sleep(500); // Simple solution
RefreshRates(); // Update data
continue; // At the next iteration
// Critical errors
case 2 : Alert("Common error.");
break; // Exit 'switch'
case 5 : Alert("Old version of the client terminal.");
break; // Exit 'switch'
case 64: Alert("Account is blocked.");
break; // Exit 'switch'
case 133:Alert("Trading is prohibited");
break; // Exit 'switch'
default: Alert("Occurred error ",Error);//Other errors
}
break; // From modification cycle
} // End of modification cycle
//---------------------------------------------------------------------- 8 --
} // End of order analysis
} // End of order search
//------------------------------------------------------------------------------- 9 --
return(0); }
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXX END XXXXXXXXXXXXXXXX//
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX//