Доработать закрывашку

 

В моей ТС баланс всегда выше эквити, а эквити со временем выше начального эквити. Хотел сделать закрывашку всех позиций, но не получилось, функции StartEquity нет. Я сделал из нее переменную, но как-то не то

extern double Equity_percent_from_Start_Equity = 10;
extern double StartEquity = 1500;

int start()
  {
   Comment("Start"  ,StartEquity, "\n" "Account"  ,AccountNumber(),"\n""Free Margin"  ,AccountFreeMargin(),"\n""Equity"  ,AccountEquity(),"\n""Balance"  ,AccountBalance());

   if(AccountEquity()>StartEquity * Equity_percent_from_Start_Equity/100 )
     {
      int total=OrdersTotal();

      for(int i=total-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS)==true)
           {
            int type=OrderType();

            bool result=false;

            switch(type)
              {
               case OP_BUY       : result=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,Red);
               break;
               case OP_SELL      : result=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,Red);
              }

            if(result==false)
              {
               Sleep(0);
              }
           }
        }
     }
   return(0);
  }
//+-------------
 
Sprut112:

В моей ТС баланс всегда выше эквити, а эквити со временем выше начального эквити. Хотел сделать закрывашку всех позиций, но не получилось, функции StartEquity нет. Я сделал из нее переменную, но как-то не то

Попробуйте утак:

if(AccountEquity()>StartEquity * Equity_percent_from_Start_Equity/100 )
     {
      int total=OrdersTotal();

      for(int i=total-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS)==true)
           {
            int type=OrderType();

            bool result=false;

            while(!result)
              {
               if(OrderType() == OP_BUY) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,clrRed);
               if(OrderType() == OP_SELL) OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,clrRed);
               
               if(OrdersTotal() == 0)
                 {
                   result=true;
                   break;//на всякий случай
                   return;//на всякий случай
                 }
              }

           }
        }
     }
   return(0);
  }
//+-------------
 
Evgeniy Zhdan:

Попробуйте утак:

return value of 'OrderClose' should be checked предупреждение выдает


return(0); так лучше


 
Sprut112:

return value of 'OrderClose' should be checked предупреждение выдает

хрен с ним, пусть выдает. Это не ошибка. Если прям припекает, то исправьте

 
Evgeniy Zhdan:

Попробуйте утак:

Сразу закрывает все позиции, как только устанавливаю на график. Даже не важно какие параметры ставлю

 
Sprut112:

Сразу закрывает все позиции, как только устанавливаю на график. Даже не важно какие параметры ставлю

Все правильною Закрывашка закрывает. Смотрите в сторону эту вот:

if(AccountEquity()>StartEquity * Equity_percent_from_Start_Equity/100 )
     {
}

тут что-то не правильно у Вас вычисляет. Мне кажется, тут вы сравниваете не сравнимое. Эквити с эквити+. Может баланс надо сравнивать с эквити?

 
Evgeniy Zhdan:

Все правильною Закрывашка закрывает. Смотрите в сторону эту вот:

тут что-то не правильно у Вас вычисляет. Мне кажется, тут вы сравниваете не сравнимое. Эквити с эквити+. Может баланс надо сравнивать с эквити?

Это так и было, эквити/баланс. Но у меня эквити всегда ниже баланса. Думал так получится
Причина обращения: