Как перевернуть советника?

 

Помогите пожалуйста, не могу перевернуть, За ранее  спасибо.

 

int start()
{
      if (DistMarketAndPos()>150)
{                                     
      OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Ask+150*Point);
   }     
      return(0);
   }
      int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1) 
{
      double d, p;
      int i, k=OrdersTotal(), r=1000000;

      if (sy=="" || sy=="0") sy=Symbol();
      p=MarketInfo(sy, MODE_POINT);
      if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;
      for (i=0; i<k; i++) 
{
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
{
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) 
{
      if (mn<0 || OrderMagicNumber()==mn) 
{
      if (OrderType()==OP_BUY) 
{
      d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
      if (r>d) r=NormalizeDouble(d, 0);
   }
      if (OrderType()==OP_SELL) 
{
      d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
      if (r>d) r=NormalizeDouble(d, 0);
   }
   }
   }
   }
   }
      return(r);

   }

  

//Все что выше, компилируется без ошибок и открывает сделку как надо, без нижней части.  Добавляю нижнюю часть

//в перевернутом виде и все, ошибка на ошибке. Корректирую, компилирую, выдает одну ошибку, ноль, ни как.

 

 

{
      if (DistMarketAndPos()>150)
{                                     
      OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,Bid+150*Point);
   }     
      return(0);
   }
      int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) 
{
      double d, p;
      int i, k=OrdersTotal(), r=1000000;

      if (sy=="" || sy=="0") sy=Symbol();
      p=MarketInfo(sy, MODE_POINT);
      if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;
      for (i=0; i<k; i++) 
{
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
{
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) 
{
      if (mn<0 || OrderMagicNumber()==mn) 
{
      if (OrderType()==OP_BUY) 
{
      d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
      if (r>d) r=NormalizeDouble(d, 0);
   }
      if (OrderType()==OP_SELL) 
{
      d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
      if (r>d) r=NormalizeDouble(d, 0);
   }
   }
   }
   }
   }
      return(r);
   }

//-------------------------------------------------------------------------------------------

 

 
int start()
{
      if (DistMarketAndPos()>150)
{                                     
      OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,Ask+150*Point);
 Если    DistMarketAndPos()>150 то установить бай-ордер. Сами подумайте как изменить это на открытие противоположной позиции
 
Не всегда смена бай на селл и селл на бай ведёт к правильному перевороту.
 
drknn:
 Если    DistMarketAndPos()>150 то установить бай-ордер. Сами подумайте как изменить это на открытие противоположной позиции

Перевернуть то я перевернул, а как сделать чтобы две половины работали вместе?
 

 одна строка не работает, к ней комментарий ниже

extern  int     TakeProfit = 150;

      extern  double  Lot        = 0.01;

      extern  int     MAGIC=1234;

      int    start()

{

      if (DistMarketAndPos()>150)

{                                     

      OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);

   }     

      return(0);

   }

      int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1) 

{

      double d, p;

      int i, k=OrdersTotal(), r=1000000;


      if (sy=="" || sy=="0") sy=Symbol();

      p=MarketInfo(sy, MODE_POINT);

      if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;

      for (i=0; i<k; i++) 

{

      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 

{

      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) 

{

      if (mn<0 || OrderMagicNumber()==mn) 

{

      if (OrderType()==OP_BUY) 

{

      d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

      if (OrderType()==OP_SELL) 

{

      d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

   }

   }

   }

   }

 

//----------------------------------------------------------------------------------------------------------------------------------------------


      if (DistMarketAndPos()>150)

{                                     

      OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);

   }     

      return(0);


{

         int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //эта строка даёт 1 ошибку,

                                                                                                    //если эту строку убрать, 

                                                                                                    //то компилируется, но тогда 

                                                                                                    //я не выставлю op=OP_SELL,

                                                                                                    //а без неё советник будет думать,

                                                                                                    //что ордер от которого нужно вычислить 

    //дистанцию OP_BUY 

      if (sy=="" || sy=="0") sy=Symbol();

      p=MarketInfo(sy, MODE_POINT);

      if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;

      for (i=0; i<k; i++) 

{

      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 

{

      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) 

{

      if (mn<0 || OrderMagicNumber()==mn) 

{

      if (OrderType()==OP_BUY) 

{

      d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

      if (OrderType()==OP_SELL) 

{

      d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

      if (r>d) r=NormalizeDouble(d, 0);

   }

   }

   }

   }

   }

       return(r);

           return(r);

   }

   }

//-------------------------------------------------------------------------------------------


 
ыыыыыыыыыыыыыыыыы