double Lots_all=0;
double near_ord_price=999999;
int step_=0;
int lotsum_=0;
// calculate summe lots and last order open price
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_b)
{
if ( near_ord_price > OrderOpenPrice() )
{ near_ord_price = OrderOpenPrice(); }
if ( Lots_all < OrderLots() )
{ Lots_all = OrderLots(); }
lotsum_ +=1;
}}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}}
// *************************calculate and open buy order *****************************
step_=Step_Order_b;
if ( lotsum_ >= StartStepExp_b ) { step_ = NormalizeDouble(step_ * MathPow(StepExp_b ,((lotsum_+1) - StartStepExp_b)),0); }
if (near_ord_price - Ask > step_*PipValue*Point && near_ord_price != 999999 )
{ double new_lot = NormalizeDouble((Lots_all*Multipler_b) ,2);
if ( new_lot==Lots_all && Multipler_b!= 1 ) { new_lot=Lots_all+Lots_all; }
if (lotsum_ < StartExp_b ) { new_lot=Lot_b; }
int ticket = OrderSend(Symbol(), OP_BUY, new_lot, Ask, 2, 0, 0, "double force", Magic_b, 0, Blue);
{ if ( ticket == -1 ) { Print("OrderSend() error - ", ErrorDescription(GetLastError())); }
}
// *******************************calculate TP ******************
double Lots_al=0;
double Average_lp=0;
double Average_tp=0;
for ( i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_b)
{
Lots_al += OrderLots();
Average_lp +=(OrderLots()*OrderOpenPrice());
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}}
//************************************************
Average_tp= NormalizeDouble(Average_lp/Lots_al,Digits);
Average_tp=Average_tp+(TP_Average_b*PipValue*Point);
// ********************** modify order *************************
double modify_sl=0;
double modify_tp=0;
for ( i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_b)
{ if ( Average_tp < Ask ) {modify_sl=Average_tp; modify_tp=0; }
else
{ modify_sl=0; modify_tp=Average_tp; }
bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), modify_sl, modify_tp, 0, Yellow);
if (ret == false)
Print("OrderModify() error - ", ErrorDescription(GetLastError()));
}}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
}}}