Помогите !!! как подправить

 
//+------------------------------------------------------------------+
//|                                                        ооооо.mq4 |
//|                                                          dimasik |
//|                                               WWW.dimasik9888.ru |
//+------------------------------------------------------------------+
#property copyright "dimasik"
#property link      "WWW.dimasik9888.ru"
#property version   "1.00"
#property strict
//--------------------------------------------------------------------
extern double Lots          = 0.1; //лот
extern int    risk               = 50;            //риск от депо
extern int    NoLoss            = 90;
extern int    TrailingStop       = 90;
extern int    StopLoss      = 500; //стоплосс отложенного ордера(если 0 то на предыдущий хай или лоу)
extern int    TakeProfit    = 500; //тейкпрофит  отложенного ордера
extern int    Delta         = 100; //расстояние от лоу или хая
extern int    StartHour     = 0;   //час начала торговли
extern int    StartMin      = 30;  //минута начала торговли
extern int    EndHour       = 23;  //час окончания торговли
extern int    EndMin        = 30;  //минута окончания торговли
extern int    StopLimit     = 0;   //0-stop 1-limit
extern int    проскальзывание          = 0;   //проскальзывание ордеров
extern int    sped         = 20;  //спред
extern int    баров         = 8;   //баров для расчета
extern int    магик         = 123; //магик
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==магик)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }

//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelAllOrders()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==магик || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUYSTOP) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_BUYLIMIT) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
  //-----------------------------------------------------------------
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   double sl=0,tp=0;
if (risk!=0) Lots = LOT();
   if(type==1 || type==3 || type==5)
     {
      clr=clrRed;
      if(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=clrBlue;
      if(StopLoss>0)   sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),проскальзывание,0,tp,"",магик,0,clrWhite);
   return;
  }
//+------------------------------------------------------------------+
//| //==================================================================================================

 // функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам

 //==================================================================================================

 void No_Loss(int gNoLoss)

 { 
double sl=0,tp=0;
   for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров

     {

       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие

         {

           if(OrderType()==OP_BUY) //если тип бай

            {

             double  bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента

             double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

             

               if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия

                {

                  if(bid-tp*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия

                   {//модифицируем стоп лос

 bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(NoLoss*point,Digits),OrderTakeProfit(),0,clrNONE);

              if(!ord_modifik)//если не получилось

              Comment(GetLastError());//номер ошибки в угол

                   }

                   

                }

            }

            if(OrderType()==OP_SELL)//если тип селл

            {

              double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента

              double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

              

              if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю

              {

                if(ask+tp*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия

                  {//модифицируем стоп лос

  bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(NoLoss*point,Digits),OrderTakeProfit(),0,clrNONE);

                  if(!ord_modifik)//если не получилось

                  Comment(GetLastError());//номер ошибки в  угол

                  }

                }

             } 

          }

       }

    }                                                                
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==магик)
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int spedd=(int)MarketInfo(NULL,MODE_SPREAD);
   double Max=High[iHighest(NULL,0,MODE_HIGH,баров,1)];
   double Min= Low[iLowest(NULL,0,MODE_LOW,баров,1)];

   if(CountTrades()>0) DelAllOrders();
   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && sped<=sped)
     {
      if(StopLimit==0)
        {
         if(CountOrders(4)<1) PutOrder(4,Max+Delta*Point);
         if(CountOrders(5)<1) PutOrder(5,Min-Delta*Point);
        }

      if(StopLimit==1)
        {
         if(CountOrders(3)<1) PutOrder(3,Max+Delta*Point);
         if(CountOrders(2)<1) PutOrder(2,Min-Delta*Point);
        }
     }
    return(0); 
  }
//+------------------------------------------------------------------+
double LOT()
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   double LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/15;
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MINLOT) LOT = MINLOT;
   if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
   return(LOT);
}
//+------------------------------------------------------------------+  
 

не работоет безубыток и ошибка 130

 
double sl=0,tp=0;
if(bid-tp*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия
if(ask+tp*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия
Должно быть так: tp>=stoplevel (Минимально допустимый уровень стоп-лосса/тейк-профита)
 
Artem Khafizov:
Должно быть так: tp>=stoplevel (Минимально допустимый уровень стоп-лосса/тейк-профита)

а куда её вставить помоги пож устал голову ломать 200 руб кину на киви есле поможешь подправить

 
dimasik9888:

а куда её вставить помоги пож устал голову ломать 200 руб кину на киви есле поможешь подправить

Во-первых, функция No_Loss не используется, поэтому безубыток и не работает. Вставь ее в start().

Во-вторых, в самой функции No_Loss ошибки. Зачем тебе переменная tp, если она всегда равна нулю? И судя по тому, что в настройках NoLoss = 90, вместо tp нужно использовать NoLoss.
А там где у тебя 

bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(NoLoss*point,Digits),OrderTakeProfit(),0,clrNONE);

сделай

bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point,OrderTakeProfit(),0,clrNONE);

Тогда если разница между текущей ценой и ценой открытия будет больше NoLoss, стоп-лосс будет переноситься в безубыток на один пункт.

Причина обращения: