Советник перевода позиций в БУ...

 

Вырезал с советника, который сам давно писал, всё лишнее, но что-то не работает, посмотрите плиз..

#include <stdlib.mqh>

//extern double  Profit   = 1000;
extern int     BU       = 1;
extern double  BUenter  = 100;
extern double  BUstop   = 10;


int Type,Ticket;
double TP,OpenPrise,EnterBU,SLmax,StopLossBU,Stop,StopLevel,b1,s1,b0,s0,StopLoss,Enter;
bool CheckBU;
static bool mod;

int init(){
   //Profit*=Point; 
   BUenter*=Point;
   BUstop*=Point;
return(0);
}

int deinit() {
return(0);
}

int start() { 
      
   if(WorkOrders()){                                     //если есть ордера
      if ((BU==1)&&(Type<=1)&&(!CheckBU))             SetBU();
   }

return(0);
}

//-------Вычисление бу и установка
void SetBU(){
      if(Type==0){
         EnterBU=OpenPrise+BUenter;
         StopLossBU=OpenPrise+BUstop;
         RefreshRates();
         if(Bid>=EnterBU) OrderModify(Ticket,OpenPrise,StopLossBU,OrderTakeProfit(),0,Red);
      }
      if(Type==1){
         EnterBU=OpenPrise-BUenter;
         StopLossBU=OpenPrise-BUstop;
         RefreshRates();
         if(Ask<=EnterBU) OrderModify(Ticket,OpenPrise,StopLossBU,OrderTakeProfit(),0,Red);
      }
}
   
//-------Поиск ордера текущей пары
bool WorkOrders(){
      for (int i=OrdersTotal()-1;i>=0;i--){
      if (!OrderSelect(i,SELECT_BY_POS))  continue;
      if (OrderSymbol()!=Symbol())        continue;
      OpenPrise=OrderOpenPrice();
      Type     =OrderType();
      Ticket   =OrderTicket();
      Stop     =OrderStopLoss();
      CheckBU  =false;
      if(Type==0 && Stop>OpenPrise) CheckBU=true;
      if(Type==1 && Stop<OpenPrise) CheckBU=true;
      return(true);}
return(false);
}
 
ALex2008:

Вырезал с советника, который сам давно писал, всё лишнее, но что-то не работает, посмотрите плиз..

Если БУ не пашет, вот этот можешь взять.
//------------------------------------------------------------------+
void No_Loss(int NoLoss)
{
   double OOP,OSL;
   int tip;
   bool error;
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS)==true)
      {
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol())
         {
            if (OrderMagicNumber()!=magic) continue;
            if (tip==0) //Bay               
            {   
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               OSL = NormalizeDouble(OrderStopLoss(),Digits);      
               if ((Bid-OOP)/Point>=NoLoss && OOP > OSL)
                  {error=OrderModify(OrderTicket(),OOP,OOP,OrderTakeProfit(),0,White);Sleep(500);}
            }                                         
            if (tip==1) //Sell               
            { 
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               OSL = NormalizeDouble(OrderStopLoss(),Digits);                                                     
               if ((OOP-Ask)/Point>=NoLoss && (OOP < OSL || OSL ==0)) 
                  {error=OrderModify(OrderTicket(),OOP,OOP,OrderTakeProfit(),0,White);Sleep(500);}
            } 
         }
      }
   }
}
//------------------------------------------------------------------+
Причина обращения: