Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
ТОП СООБЩЕНИЙ
20.04.2018, 10:46
Лучший ответ
Выплачено: 7412 RUB
убрал не нужное,код меньше работает также
PHP код:
extern double  Profit_Percent       10;     //% Шаг профита


double EquityStart=0;
bool Trall=false;
int slippage=1000;
//-------------------------------------------------------------------- 
int init() 

   
double AE AccountEquity();
   
EquityStart=AE+Profit_Percent;
   return(
0);
}
//+------------------------------------------------------------------+
int start()
{
   if (!
IsTradeAllowed()) return(0);

   
double AB AccountBalance();
   
double AE AccountEquity();

   
DrawLABEL("Balance",1,5,20,Green,StringConcatenate("Баланс ",DoubleToStr(AB,2)));
   
DrawLABEL("Equity" ,1,5,40,Green,StringConcatenate("Средства ",DoubleToStr(AE,2)));

   if (
OrdersTotal()==0) {Trall=false;EquityStart=AE;}
   if (!
Trall)
   {  
      
DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Закрытие при  ",DoubleToStr((EquityStart),2)));
      if (
AE>=EquityStart//запуск тралла по эквити
      
{  
        
         
Trall=true;
      }
   }
   if (
Trall)
   {  
      if (
EquityStart<AE+Profit_PercentEquityStart=AE+Profit_Percent;
      
DrawLABEL("Equity Start",1,5,60,Red,StringConcatenate("ЗАКРЫТИЕ ОРДЕРОВ ",DoubleToStr(AccountEquity(),2)));
      if (
AE<=EquityStart-EquityStart+AE)
      
         for (
int i=OrdersTotal()-1i>=0i--)
      {  
         if (!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (
OrderType()==OP_BUY OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
      if (
OrderType()==OP_SELLOrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);
         
Trall=false;
         
AE=AccountEquity();
         
EquityStart=AE+Profit_Percent;
      }
      return(
0);
   }
return(
0);
}
//------------------------------------------------------------------
int deinit()
{
   if (!
IsTesting()) 
   {
      
ObjectsDeleteAll(0);
   }
   return(
0);
}
//-------------------------------------------------------------------
void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name)
{
   if (
ObjectFind(name)!=-1ObjectDelete(name);
   
ObjectCreate(nameOBJ_LABEL000);
   
ObjectSet(nameOBJPROP_CORNERCORNER);
   
ObjectSet(nameOBJPROP_XDISTANCEX);
   
ObjectSet(nameOBJPROP_YDISTANCEY);
   
ObjectSetText(name,Name,10,"Arial",clr);
}
//+------------------------------------------------------------------+
color Color(bool P,color a,color b)
{
   if (
P) return(a);
   else return(
b);
}
//------------------------------------------------------------------ 
20.04.2018, 11:48
Лучший ответ
Выплачено: 7412 RUB
Пожалуй всё,не буду больше ничего менять. Вот рабочий советник : CloseEquity_Shag.mq4
вот код:
PHP код:
extern double Shag_Profita       10;     // Шаг профита 


double EquityStart=0
bool Trall=false
int slippage=1000
//--------------------------------------------------------------------  
int init()  
{  
   
double AE AccountEquity(); 
   
EquityStart=AE+Shag_Profita
   return(
0); 

//+------------------------------------------------------------------+ 
int start() 

   if (!
IsTradeAllowed()) return(0); 

   
double AB AccountBalance(); 
   
double AE AccountEquity(); 

   
DrawLABEL("Balance",1,5,20,Green,StringConcatenate("Баланс ",DoubleToStr(AB,2))); 
   
DrawLABEL("Equity" ,1,5,40,Lime,StringConcatenate("Средства ",DoubleToStr(AE,2))); 

   if (
OrdersTotal()==0) {Trall=false;EquityStart=AE;} 
   if (!
Trall
   {   
      
DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Закрытие при  ",DoubleToStr((EquityStart),2))); 
      if (
AE>=EquityStart//запуск тралла по эквити 
      
{   
         
         
Trall=true
      } 
   } 
   if (
Trall
   {   
      if (
EquityStart<AE+Shag_ProfitaEquityStart=AE+Shag_Profita
      
DrawLABEL("Equity Start",1,5,60,Red,StringConcatenate("ЗАКРЫТИЕ ОРДЕРОВ ",DoubleToStr(AccountEquity(),2))); 
      if (
AE<=EquityStart-EquityStart+AE
       
         for (
int i=OrdersTotal()-1i>=0i--) 
      {   
         if (!
OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
      if (
OrderType()==OP_BUY OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage); 
      if (
OrderType()==OP_SELLOrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage); 
         
Trall=false
         
AE=AccountEquity(); 
         
EquityStart=AE+Shag_Profita
      } 
      return(
0); 
   } 
return(
0); 


void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name

   if (
ObjectFind(name)!=-1ObjectDelete(name); 
   
ObjectCreate(nameOBJ_LABEL000); 
   
ObjectSet(nameOBJPROP_CORNERCORNER); 
   
ObjectSet(nameOBJPROP_XDISTANCEX); 
   
ObjectSet(nameOBJPROP_YDISTANCEY); 
   
ObjectSetText(name,Name,15,"Arial",clr); 

//+------------------------------------------------------------------+ 
color Color(bool P,color a,color b

   if (
P) return(a); 
   else return(
b); 

//------------------------------------------------------------------ 
Думаю можно ещё подправить.Если кто нибудь знает ,то пожалуйста.
20.04.2018, 16:09
Лучший ответ
Выплачено: 7412 RUB
Заметил что если нет отложенных ордеров,то закрывает ордера сразу после открытия.Нужно исправить.
11.04.2018, 16:36
Лучший ответ
Выплачено: 7412 RUB
12.02.2019, 14:31
Лучший ответ
Сообщение от Дмитрий Александрович Посмотреть сообщение
Заметил что если нет отложенных ордеров,то закрывает ордера сразу после открытия.Нужно исправить.
Добрый день!Подскажите пожалуйста, версия советника в предыдущем посте окончательная?
11.04.2018, 16:36
Лучший ответ
Выплачено: 7412 RUB
  • #1 Свернуть

    Цикличное закрытие всех ордеров по средствам(закрывашка по эквити).

    Здравствуйте.Возникла идея создания советника закрывающего все ордера когда увеличатся средства.Например депозит 100$ и средства соответственно 100$,в процессе торговли средства выросли до 110$ и советник закрыл все ордера.Баланс и средства стали по 110$ ,советник запомнил сумму 110 и следующие закрытие будет уже на 120$ по средствам,далее 130$ и т.д. При этом в настройках советника значение 10$(т.е. цикличное закрытие с шагом 10$),если поставить 5$, то соответственно первое закрытие будет когда средства достигнут 105$ ,второе на 110$ далее 115$ и т.д.
    Есть готовый советник закрывающий все ордера по средствам.
    ______________________________
    ВОТ: ClosersEquity.mq4
    Нажмите на изображение для увеличения.

Название:	closeEkvi.PNG
Просмотров:	1
Размер:	19.1 Кб
ID:	29932591
    Но закрытие происходит без запоминания значения эквити после закрытия.Т.е. после закрытия на 110$ ,повторное закрытие происходит также на 110$ ,пока в ручную не внесу следующее значение эквити на закрытие.Эту "закрывашку" прошу модернизировать.Такой метод закрытия ордеров будет полезен при автоматической торговли советниками.
    Если у кого нибудь есть такой готовый советник прошу поделиться.
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от Дмитрий Александрович Посмотреть сообщение
    Здравствуйте.Возникла идея создания советника закрывающего все ордера когда увеличатся средства.Например депозит 100$ и средства соответственно 100$,в процессе торговли средства выросли до 110$ и советник закрыл все ордера.Баланс и средства стали по 110$ ,советник запомнил сумму 110 и следующие закрытие будет уже на 120$ по средствам,далее 130$ и т.д. При этом в настройках советника значение 10$(т.е. цикличное закрытие с шагом 10$),если поставить 5$, то соответственно первое закрытие будет когда средства достигнут 105$ ,второе на 110$ далее 115$ и т.д.
    Есть готовый советник закрывающий все ордера по средствам.
    ______________________________
    ВОТ: [ATTACH]1886663[/ATTACH]
    [ATTACH]1886662[/ATTACH]
    Но закрытие происходит без запоминания значения эквити после закрытия.Т.е. после закрытия на 110$ ,повторное закрытие происходит также на 110$ ,пока в ручную не внесу следующее значение эквити на закрытие.Эту "закрывашку" прошу модернизировать.Такой метод закрытия ордеров будет полезен при автоматической торговли советниками.
    Если у кого нибудь есть такой готовый советник прошу поделиться.
    Это не "Закрывашка", это "Ждун".
    Поэтому каждый раз и надо устанавливать новое срабатывающее значение.
    Родина мать, не зовёт MQL-программированием заняться?
    Эта идея уже с такой "бородой", что не одно поколение писателей на MQL опробовали своё перо на ней.
    На CodeBase сходите, там Вас ещё и другие идеи посетят, вместе с исходными текстами, комментариями и обсуждениями.

    Комментарий

    • #3 Свернуть

      Сообщение от Дмитрий Александрович Посмотреть сообщение
      Есть готовый советник закрывающий все ордера по средствам
      Есть готовый - пользуйтесь. В чем суть вопроса?
      Сообщение от Дмитрий Александрович Посмотреть сообщение
      Но закрытие происходит без запоминания значения эквити после закрытия.
      Ну так бы сразу и сказал. Показывай код, здесь помогут в коде изменить стартовую суммы при нулевом количестве открытых ордеров. Можно, конечно, написать все сизнова, но ведь лениво, тем более, что тема того не стоит.
      Реализую за ваши деньги ваши идеи на MQL - mql@fx-prog.ru

      Комментарий

      • #4 Свернуть

        Сообщение от Дмитрий Александрович Посмотреть сообщение
        А.. вот оно.. Но позвольте. Это есть не то, чего вы описывали. Данный советник закрывает все ордера когда сумма превысит установленное значение. Ни о каком накоплении здесь речи нет. Ну и, собственно, изменений-то всего ничего.. Сморим ниже.
        PHP код:
        double       DesiredEquityPlus=10;
        extern string       Text "ЗАКРЫТИЕ ОРДЕРОВ";

        double       DesiredEquity;
        int OnInit() { return(INIT_SUCCEEDED); }
        void OnDeinit(const int reason) {}
        void OnTick() {
           if (
        OrdersTotal()==0DesiredEquity AccountEquity();
           else if (
        AccountEquity() >= DesiredEquity+DesiredEquityPlus)  {
              for (
        int i=OrdersTotal()-1i>=0i--) {
                 if (
        OrderSelect(iSELECT_BY_POS)) {
                    if (
        OrderType() == OP_BUY || OrderType() == OP_SELL) {
                       
        double price 0;
                       if (
        OrderType() == OP_BUY)  price MarketInfo(OrderSymbol(), MODE_BID);
                       if (
        OrderType() == OP_SELLprice MarketInfo(OrderSymbol(), MODE_ASK);
                       
        bool cls false;
                       while(!
        clscls OrderClose(OrderTicket(), OrderLots(), price100Black);
                       
        Alert(Text);
                    }
                 }
              }
           }

        Реализую за ваши деньги ваши идеи на MQL - mql@fx-prog.ru

        Комментарий

        • #5 Свернуть

          Сообщение от work2it Посмотреть сообщение
          А.. вот оно.. Но позвольте. Это есть не то, чего вы описывали. Данный советник закрывает все ордера когда сумма превысит установленное значение. Ни о каком накоплении здесь речи нет. Ну и, собственно, изменений-то всего ничего.. Сморим ниже.
          PHP код:
          double       DesiredEquityPlus=10;
          extern string       Text "ЗАКРЫТИЕ ОРДЕРОВ";

          double       DesiredEquity;
          int OnInit() { return(INIT_SUCCEEDED); }
          void OnDeinit(const int reason) {}
          void OnTick() {
             if (
          OrdersTotal()==0DesiredEquity AccountEquity();
             else if (
          AccountEquity() >= DesiredEquity+DesiredEquityPlus)  {
                for (
          int i=OrdersTotal()-1i>=0i--) {
                   if (
          OrderSelect(iSELECT_BY_POS)) {
                      if (
          OrderType() == OP_BUY || OrderType() == OP_SELL) {
                         
          double price 0;
                         if (
          OrderType() == OP_BUY)  price MarketInfo(OrderSymbol(), MODE_BID);
                         if (
          OrderType() == OP_SELLprice MarketInfo(OrderSymbol(), MODE_ASK);
                         
          bool cls false;
                         while(!
          clscls OrderClose(OrderTicket(), OrderLots(), price100Black);
                         
          Alert(Text);
                      }
                   }
                }
             }

          Мур.)
          Одно из возможных решений. У Вашего много минусов в том плане, что возрастают затраты на обработку всего этого. Написать можно проще.

          Комментарий

          • #6 Свернуть

            Сообщение от ppvic Посмотреть сообщение
            Одно из возможных решений. У Вашего много минусов в том плане, что возрастают затраты на обработку всего этого.
            Затраты на обработку мне до лампочки.. Не мне этим пользоваться.. Важны затраты на изменение существующего кода. В моем случае, по сравнению с исходным кодом, добавлена одна строчка кода и одна глобальная переменная. И, кстати, укажите все же, чем эта самая строчка увеличивает затраты на обработку
            PHP код:
            if (OrdersTotal()==0DesiredEquity AccountEquity(); 
            Реализую за ваши деньги ваши идеи на MQL - mql@fx-prog.ru

            Комментарий

            • #7 Свернуть

              Сообщение от work2it Посмотреть сообщение
              А.. вот оно.. Но позвольте. Это есть не то, чего вы описывали. Данный советник закрывает все ордера когда сумма превысит установленное значение. Ни о каком накоплении здесь речи нет.
              Да, я об этом написал:

              Сообщение от Дмитрий Александрович Посмотреть сообщение
              Но закрытие происходит без запоминания значения эквити после закрытия.Т.е. после закрытия на 110$ ,повторное закрытие происходит также на 110$ ,пока в ручную не внесу следующее значение эквити на закрытие.
              Сообщение от work2it Посмотреть сообщение
              Ну и, собственно, изменений-то всего ничего.. Сморим ниже
              Спасибо!
              Вот готовый советник: закрывашка по средствам с шагом.mq4

              Комментарий

              • #8 Свернуть

                Сообщение от Дмитрий Александрович Посмотреть сообщение
                Потестировал, первое закрытие по +10 ,остальные закрывает в ноль.Что то не то.

                Комментарий

                • #9 Свернуть

                  PHP код:
                  double price = 0;
                   if (OrderType() == OP_BUY)  price = MarketInfo(OrderSymbol(), MODE_BID);
                   if (OrderType() == OP_SELL) price = MarketInfo(OrderSymbol(), MODE_ASK);
                   bool cls = false;
                   while(!cls) cls = OrderClose(OrderTicket(), OrderLots(), price, 100, Black); 
                  Все это можно сократить:
                  PHP код:
                  cls = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), OrderType() + 9), 100, Black); 
                  OptionsTraderAssistant - автоматический расчет опционных уровней

                  Комментарий

                  • #10 Свернуть

                    Сообщение от nsemenov Посмотреть сообщение
                    PHP код:

                    double price = 0; if (OrderType() == OP_BUY)  price = MarketInfo(OrderSymbol(), MODE_BID); if (OrderType() == OP_SELL) price = MarketInfo(OrderSymbol(), MODE_ASK); bool cls = false; while(!cls) cls = OrderClose(OrderTicket(), OrderLots(), price, 100, Black); 



                    Все это можно сократить:

                    PHP код:

                    cls = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), OrderType() + 9), 100, Black);
                    Так?
                    PHP код:
                    extern double       DesiredEquityPlus=10// Шаг закрытия
                    extern string       Text "ЗАКРЫТИЕ ОРДЕРОВ";
                    double       DesiredEquity;

                    int OnInit() { return(INIT_SUCCEEDED); }
                    void OnDeinit(const int reason) {}
                    void OnTick() {
                       if (
                    OrdersTotal()==0DesiredEquity AccountEquity();
                       else if (
                    AccountEquity() >= DesiredEquity+DesiredEquityPlus)  {
                          for (
                    int i=OrdersTotal()-1i>=0i--) {
                             if (
                    OrderSelect(iSELECT_BY_POS)) {
                                if (
                    OrderType() == OP_BUY || OrderType() == OP_SELL) {
                                
                    bool cls false;
                                while(!
                    clscls OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), OrderType() + 9), 100Black);
                                   
                    Alert(Text);
                                }
                             }
                          }
                       }

                    Есть вот такая ещё "закрывашка с тралом",но прибыль в процентном соотношении.
                    PHP код:
                    extern double  Total_Profit_Start   5000;  //Сумма в USD от которой стартовать трал по Профиту
                    extern double  Profit_Percent       1;     //% Процент профита для старта трала
                    extern double  Profit_Rollback      0.5;   //% Процент отката для закрытия всех ордеров

                    double EquityStart=0;
                    bool Trall=false;
                    int slippage=1000;
                    //-------------------------------------------------------------------- 
                    int init() 

                       
                    double AE AccountEquity();
                       
                    EquityStart=AE+AE/100*Profit_Percent;
                       return(
                    0);
                    }
                    //+------------------------------------------------------------------+
                    int start()
                    {
                       if (!
                    IsTradeAllowed()) return(0);

                       
                    double AB AccountBalance();
                       
                    double AE AccountEquity();

                       
                    DrawLABEL("Balance",1,5,20,Lime,StringConcatenate("Balance ",DoubleToStr(AB,2)));
                       
                    DrawLABEL("Equity" ,1,5,40,Lime,StringConcatenate("Equity ",DoubleToStr(AE,2)));

                       if (
                    OrdersTotal()==0) {Trall=false;EquityStart=AE+AE/100*Profit_Percent;}
                       if (!
                    Trall)
                       {  
                          
                    DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Equity Start Trall ",DoubleToStr(MathMax(EquityStart,Total_Profit_Start),2)));
                          if (
                    AE>=EquityStart && AE>=Total_Profit_Start//запуск тралла по эквити
                          
                    {  
                             
                    EquityStart=AE+AE/100*Profit_Percent;
                             
                    Alert("Запуск трейлинга Equity, Equity = "+DoubleToStr(AE,2));
                             
                    Trall=true;
                          }
                       }
                       if (
                    Trall)
                       {  
                          if (
                    EquityStart<AE+AE/100*Profit_PercentEquityStart=AE+AE/100*Profit_Percent;
                          
                    DrawLABEL("Equity Start",1,5,0,Red,StringConcatenate("Трал Equity закрытие при ",DoubleToStr(EquityStart-EquityStart/100*Profit_Rollback,2)));
                          if (
                    AE<=EquityStart-EquityStart/100*Profit_Rollback)
                          {  
                             
                    CloseAll();
                             
                    Trall=false;
                             
                    AE=AccountEquity();
                             
                    EquityStart=AE+AE/100*Profit_Percent;
                          }
                          return(
                    0);
                       }
                    return(
                    0);
                    }
                    //------------------------------------------------------------------
                    int deinit()
                    {
                       if (!
                    IsTesting()) 
                       {
                          
                    ObjectsDeleteAll(0);
                       }
                       return(
                    0);
                    }
                    //-------------------------------------------------------------------
                    void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name)
                    {
                       if (
                    ObjectFind(name)!=-1ObjectDelete(name);
                       
                    ObjectCreate(nameOBJ_LABEL000);
                       
                    ObjectSet(nameOBJPROP_CORNERCORNER);
                       
                    ObjectSet(nameOBJPROP_XDISTANCEX);
                       
                    ObjectSet(nameOBJPROP_YDISTANCEY);
                       
                    ObjectSetText(name,Name,10,"Arial",clr);
                    }
                    //+------------------------------------------------------------------+
                    color Color(bool P,color a,color b)
                    {
                       if (
                    P) return(a);
                       else return(
                    b);
                    }
                    //------------------------------------------------------------------
                    double CloseAll()
                    {
                       
                    bool error=true;
                       
                    int OMN,nn,OT,Ticket,j;
                       
                    double loss=0;
                       while(
                    true)
                       {
                          for (
                    OrdersTotal()-1>= 0j--)
                          {
                             if (
                    OrderSelect(jSELECT_BY_POS))
                             {
                                
                    OT OrderType();
                                
                    OMN=OrderMagicNumber();
                                
                    Ticket OrderTicket();
                                if (
                    OT>1error=OrderDelete(Ticket);
                                if (
                    OT==OP_BUY
                                {
                                   
                    error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Blue);
                                   if (
                    errorloss+=OrderProfit();
                                }
                                if (
                    OT==OP_SELL
                                {
                                   
                    error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Red);
                                   if (
                    errorloss+=OrderProfit();
                                }
                             }
                          }
                          
                    int n=0;
                          for (
                    0OrdersTotal(); j++)
                          {
                             if (
                    OrderSelect(jSELECT_BY_POS))
                             {
                                
                    OT OrderType();
                                
                    n++;
                             }
                          }
                          if (
                    n==0) break;
                          
                    nn++;
                          if (
                    nn>10
                          {
                             
                    Alert(Symbol()," Не удалось закрыть все сделки, осталось еще ",n);
                             return(
                    loss);
                          }
                          
                    Sleep(1000);
                          
                    RefreshRates();
                       }
                       return(
                    loss);
                    }
                    //-------------------------------------------------------------------- 
                    Советник мне нравиться,выводит информацию на график о сумме средств при следующем закрытии,да и идея схожа с моей.
                    Я не силён в программировании, но так сказать на "догадках" изменил код чтобы закрывал по сумме прибыли.
                    Только нужно исключить трейлинг,либо сделать чтобы он отключался в настройках.
                    Возможно я что то не так изменил,посмотрите верно ли я поменял код,чтобы закрытие ордеров было с шагом по +10$ по средствам.
                    PHP код:
                    extern double  Total_Profit_Start   100;  //Сумма в USD от которой стартовать трал по Профиту
                    extern double  Profit_Percent       10;     //% Шаг профита
                    extern double  Profit_Rollback      0.1;   //% Сумма отката в USD

                    double EquityStart=0;
                    bool Trall=false;
                    int slippage=1000;
                    //-------------------------------------------------------------------- 
                    int init() 

                       
                    double AE AccountEquity();
                       
                    EquityStart=AE+Profit_Percent;
                       return(
                    0);
                    }
                    //+------------------------------------------------------------------+
                    int start()
                    {
                       if (!
                    IsTradeAllowed()) return(0);

                       
                    double AB AccountBalance();
                       
                    double AE AccountEquity();

                       
                    DrawLABEL("Balance",1,5,20,Lime,StringConcatenate("Balance ",DoubleToStr(AB,2)));
                       
                    DrawLABEL("Equity" ,1,5,40,Lime,StringConcatenate("Equity ",DoubleToStr(AE,2)));

                       if (
                    OrdersTotal()==0) {Trall=false;EquityStart=AE+Profit_Percent;}
                       if (!
                    Trall)
                       {  
                          
                    DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Equity Start Trall ",DoubleToStr(MathMax(EquityStart,Total_Profit_Start),2)));
                          if (
                    AE>=EquityStart && AE>=Total_Profit_Start//запуск тралла по эквити
                          
                    {  
                             
                    EquityStart=AE+Profit_Percent;
                             
                    Alert("Запуск трейлинга Equity, Equity = "+DoubleToStr(AE,2));
                             
                    Trall=true;
                          }
                       }
                       if (
                    Trall)
                       {  
                          if (
                    EquityStart<AE+Profit_PercentEquityStart=AE+Profit_Percent;
                          
                    DrawLABEL("Equity Start",1,5,0,Red,StringConcatenate("Трал Equity закрытие при ",DoubleToStr(EquityStart-EquityStart+Profit_Rollback,2)));
                          if (
                    AE<=EquityStart-EquityStart+AE+Profit_Rollback)
                          {  
                             
                    CloseAll();
                             
                    Trall=false;
                             
                    AE=AccountEquity();
                             
                    EquityStart=AE+Profit_Percent;
                          }
                          return(
                    0);
                       }
                    return(
                    0);
                    }
                    //------------------------------------------------------------------
                    int deinit()
                    {
                       if (!
                    IsTesting()) 
                       {
                          
                    ObjectsDeleteAll(0);
                       }
                       return(
                    0);
                    }
                    //-------------------------------------------------------------------
                    void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name)
                    {
                       if (
                    ObjectFind(name)!=-1ObjectDelete(name);
                       
                    ObjectCreate(nameOBJ_LABEL000);
                       
                    ObjectSet(nameOBJPROP_CORNERCORNER);
                       
                    ObjectSet(nameOBJPROP_XDISTANCEX);
                       
                    ObjectSet(nameOBJPROP_YDISTANCEY);
                       
                    ObjectSetText(name,Name,10,"Arial",clr);
                    }
                    //+------------------------------------------------------------------+
                    color Color(bool P,color a,color b)
                    {
                       if (
                    P) return(a);
                       else return(
                    b);
                    }
                    //------------------------------------------------------------------
                    double CloseAll()
                    {
                       
                    bool error=true;
                       
                    int OMN,nn,OT,Ticket,j;
                       
                    double loss=0;
                       while(
                    true)
                       {
                          for (
                    OrdersTotal()-1>= 0j--)
                          {
                             if (
                    OrderSelect(jSELECT_BY_POS))
                             {
                                
                    OT OrderType();
                                
                    OMN=OrderMagicNumber();
                                
                    Ticket OrderTicket();
                                if (
                    OT>1error=OrderDelete(Ticket);
                                if (
                    OT==OP_BUY
                                {
                                   
                    error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Blue);
                                   if (
                    errorloss+=OrderProfit();
                                }
                                if (
                    OT==OP_SELL
                                {
                                   
                    error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Red);
                                   if (
                    errorloss+=OrderProfit();
                                }
                             }
                          }
                          
                    int n=0;
                          for (
                    0OrdersTotal(); j++)
                          {
                             if (
                    OrderSelect(jSELECT_BY_POS))
                             {
                                
                    OT OrderType();
                                
                    n++;
                             }
                          }
                          if (
                    n==0) break;
                          
                    nn++;
                          if (
                    nn>10
                          {
                             
                    Alert(Symbol()," Не удалось закрыть все сделки, осталось еще ",n);
                             return(
                    loss);
                          }
                          
                    Sleep(1000);
                          
                    RefreshRates();
                       }
                       return(
                    loss);
                    }
                    //-------------------------------------------------------------------- 

                    Комментарий

                    • #11 Свернуть

                      На догадках ещё изменил код, уже выполняет то что я хотел и выглядит неплохо:
                      Нажмите на изображение для увеличения.

Название:	зэ3.PNG
Просмотров:	1
Размер:	35.5 Кб
ID:	26601850
                      Нажмите на изображение для увеличения.

Название:	зэ4.PNG
Просмотров:	1
Размер:	72.5 Кб
ID:	26601849
                      Нажмите на изображение для увеличения.

Название:	зэ5.PNG
Просмотров:	1
Размер:	37.1 Кб
ID:	26601861

                      Думаю,тут ещё есть что то лишние что можно убрать или сделать по другому.Буду ещё "ковырять",что нибудь слеплю
                      вот код:
                      PHP код:
                      extern double  Profit_Percent       10;     //% Шаг профита


                      double EquityStart=0;
                      bool Trall=false;
                      int slippage=1000;
                      //-------------------------------------------------------------------- 
                      int init() 

                         
                      double AE AccountEquity();
                         
                      EquityStart=AE+Profit_Percent;
                         return(
                      0);
                      }
                      //+------------------------------------------------------------------+
                      int start()
                      {
                         if (!
                      IsTradeAllowed()) return(0);

                         
                      double AB AccountBalance();
                         
                      double AE AccountEquity();

                         
                      DrawLABEL("Balance",1,5,20,Green,StringConcatenate("Баланс ",DoubleToStr(AB,2)));
                         
                      DrawLABEL("Equity" ,1,5,40,Green,StringConcatenate("Средства ",DoubleToStr(AE,2)));

                         if (
                      OrdersTotal()==0) {Trall=false;EquityStart=AE;}
                         if (!
                      Trall)
                         {  
                            
                      DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Закрытие при  ",DoubleToStr((EquityStart),2)));
                            if (
                      AE>=EquityStart//запуск тралла по эквити
                            
                      {  
                              
                               
                      Trall=true;
                            }
                         }
                         if (
                      Trall)
                         {  
                            if (
                      EquityStart<AE+Profit_PercentEquityStart=AE+Profit_Percent;
                            
                      DrawLABEL("Equity Start",1,5,60,Red,StringConcatenate("ЗАКРЫТИЕ ОРДЕРОВ ",DoubleToStr(AccountEquity(),2)));
                            if (
                      AE<=EquityStart-EquityStart+AE)
                            {  
                               
                      CloseAll();
                               
                      Trall=false;
                               
                      AE=AccountEquity();
                               
                      EquityStart=AE+Profit_Percent;
                            }
                            return(
                      0);
                         }
                      return(
                      0);
                      }
                      //------------------------------------------------------------------
                      int deinit()
                      {
                         if (!
                      IsTesting()) 
                         {
                            
                      ObjectsDeleteAll(0);
                         }
                         return(
                      0);
                      }
                      //-------------------------------------------------------------------
                      void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name)
                      {
                         if (
                      ObjectFind(name)!=-1ObjectDelete(name);
                         
                      ObjectCreate(nameOBJ_LABEL000);
                         
                      ObjectSet(nameOBJPROP_CORNERCORNER);
                         
                      ObjectSet(nameOBJPROP_XDISTANCEX);
                         
                      ObjectSet(nameOBJPROP_YDISTANCEY);
                         
                      ObjectSetText(name,Name,10,"Arial",clr);
                      }
                      //+------------------------------------------------------------------+
                      color Color(bool P,color a,color b)
                      {
                         if (
                      P) return(a);
                         else return(
                      b);
                      }
                      //------------------------------------------------------------------
                      double CloseAll()
                      {
                         
                      bool error=true;
                         
                      int OMN,nn,OT,Ticket,j;
                         
                      double loss=0;
                         while(
                      true)
                         {
                            for (
                      OrdersTotal()-1>= 0j--)
                            {
                               if (
                      OrderSelect(jSELECT_BY_POS))
                               {
                                  
                      OT OrderType();
                                  
                      OMN=OrderMagicNumber();
                                  
                      Ticket OrderTicket();
                                  if (
                      OT>1error=OrderDelete(Ticket);
                                  if (
                      OT==OP_BUY
                                  {
                                     
                      error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Blue);
                                     if (
                      errorloss+=OrderProfit();
                                  }
                                  if (
                      OT==OP_SELL
                                  {
                                     
                      error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Red);
                                     if (
                      errorloss+=OrderProfit();
                                  }
                               }
                            }
                            
                      int n=0;
                            for (
                      0OrdersTotal(); j++)
                            {
                               if (
                      OrderSelect(jSELECT_BY_POS))
                               {
                                  
                      OT OrderType();
                                  
                      n++;
                               }
                            }
                            if (
                      n==0) break;
                            
                      nn++;
                            if (
                      nn>10
                            {
                               
                      Alert(Symbol()," Не удалось закрыть все сделки, осталось еще ",n);
                               return(
                      loss);
                            }
                            
                      Sleep(1000);
                            
                      RefreshRates();
                         }
                         return(
                      loss);
                      }
                      //-------------------------------------------------------------------- 

                      Комментарий

                      • #12 Свернуть

                        Изменил что бы закрывались только открытые ордера.Отложенные ордера остаются.Мне так нужно...,может ещё кому.
                        Взял этот код от скрипта на закрытие открытых ордеров
                        PHP код:
                             for (int i=OrdersTotal()-1i>=0i--)
                              {  
                                 if (!
                        OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
                              if (
                        OrderType()==OP_BUY OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
                              if (
                        OrderType()==OP_SELLOrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage); 
                        И "воткнул" его ,вот полностью код.Работает
                        Не судите строго,я не программист,просто применяю метод интуитивного тыка
                        PHP код:
                        extern double  Profit_Percent       10;     //% Шаг профита


                        double EquityStart=0;
                        bool Trall=false;
                        int slippage=1000;
                        //-------------------------------------------------------------------- 
                        int init() 

                           
                        double AE AccountEquity();
                           
                        EquityStart=AE+Profit_Percent;
                           return(
                        0);
                        }
                        //+------------------------------------------------------------------+
                        int start()
                        {
                           if (!
                        IsTradeAllowed()) return(0);

                           
                        double AB AccountBalance();
                           
                        double AE AccountEquity();

                           
                        DrawLABEL("Balance",1,5,20,Green,StringConcatenate("Баланс ",DoubleToStr(AB,2)));
                           
                        DrawLABEL("Equity" ,1,5,40,Green,StringConcatenate("Средства ",DoubleToStr(AE,2)));

                           if (
                        OrdersTotal()==0) {Trall=false;EquityStart=AE;}
                           if (!
                        Trall)
                           {  
                              
                        DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Закрытие при  ",DoubleToStr((EquityStart),2)));
                              if (
                        AE>=EquityStart//запуск тралла по эквити
                              
                        {  
                                
                                 
                        Trall=true;
                              }
                           }
                           if (
                        Trall)
                           {  
                              if (
                        EquityStart<AE+Profit_PercentEquityStart=AE+Profit_Percent;
                              
                        DrawLABEL("Equity Start",1,5,60,Red,StringConcatenate("ЗАКРЫТИЕ ОРДЕРОВ ",DoubleToStr(AccountEquity(),2)));
                              if (
                        AE<=EquityStart-EquityStart+AE)
                              
                                 for (
                        int i=OrdersTotal()-1i>=0i--)
                              {  
                                 if (!
                        OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
                              if (
                        OrderType()==OP_BUY OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
                              if (
                        OrderType()==OP_SELLOrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);
                                 
                        Trall=false;
                                 
                        AE=AccountEquity();
                                 
                        EquityStart=AE+Profit_Percent;
                              }
                              return(
                        0);
                           }
                        return(
                        0);
                        }
                        //------------------------------------------------------------------
                        int deinit()
                        {
                           if (!
                        IsTesting()) 
                           {
                              
                        ObjectsDeleteAll(0);
                           }
                           return(
                        0);
                        }
                        //-------------------------------------------------------------------
                        void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name)
                        {
                           if (
                        ObjectFind(name)!=-1ObjectDelete(name);
                           
                        ObjectCreate(nameOBJ_LABEL000);
                           
                        ObjectSet(nameOBJPROP_CORNERCORNER);
                           
                        ObjectSet(nameOBJPROP_XDISTANCEX);
                           
                        ObjectSet(nameOBJPROP_YDISTANCEY);
                           
                        ObjectSetText(name,Name,10,"Arial",clr);
                        }
                        //+------------------------------------------------------------------+
                        color Color(bool P,color a,color b)
                        {
                           if (
                        P) return(a);
                           else return(
                        b);
                        }
                        //------------------------------------------------------------------
                        double CloseAll()
                        {
                           
                        bool error=true;
                           
                        int OMN,nn,OT,Ticket,j;
                           
                        double loss=0;
                           while(
                        true)
                           {
                              for (
                        OrdersTotal()-1>= 0j--)
                              {
                                 if (
                        OrderSelect(jSELECT_BY_POS))
                                 {
                                    
                        OT OrderType();
                                    
                        OMN=OrderMagicNumber();
                                    
                        Ticket OrderTicket();
                                    if (
                        OT>1error=OrderDelete(Ticket);
                                    if (
                        OT==OP_BUY
                                    {
                                       
                        error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Blue);
                                       if (
                        errorloss+=OrderProfit();
                                    }
                                    if (
                        OT==OP_SELL
                                    {
                                       
                        error=OrderClose(Ticket,OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)),slippage,Red);
                                       if (
                        errorloss+=OrderProfit();
                                    }
                                 }
                              }
                              
                        int n=0;
                              for (
                        0OrdersTotal(); j++)
                              {
                                 if (
                        OrderSelect(jSELECT_BY_POS))
                                 {
                                    
                        OT OrderType();
                                    
                        n++;
                                 }
                              }
                              if (
                        n==0) break;
                              
                        nn++;
                              if (
                        nn>10
                              {
                                 
                        Alert(Symbol()," Не удалось закрыть все сделки, осталось еще ",n);
                                 return(
                        loss);
                              }
                              
                        Sleep(1000);
                              
                        RefreshRates();
                           }
                           return(
                        loss);
                        }
                        //-------------------------------------------------------------------- 

                        Комментарий

                        • #13 Свернуть

                          убрал не нужное,код меньше работает также
                          PHP код:
                          extern double  Profit_Percent       10;     //% Шаг профита


                          double EquityStart=0;
                          bool Trall=false;
                          int slippage=1000;
                          //-------------------------------------------------------------------- 
                          int init() 

                             
                          double AE AccountEquity();
                             
                          EquityStart=AE+Profit_Percent;
                             return(
                          0);
                          }
                          //+------------------------------------------------------------------+
                          int start()
                          {
                             if (!
                          IsTradeAllowed()) return(0);

                             
                          double AB AccountBalance();
                             
                          double AE AccountEquity();

                             
                          DrawLABEL("Balance",1,5,20,Green,StringConcatenate("Баланс ",DoubleToStr(AB,2)));
                             
                          DrawLABEL("Equity" ,1,5,40,Green,StringConcatenate("Средства ",DoubleToStr(AE,2)));

                             if (
                          OrdersTotal()==0) {Trall=false;EquityStart=AE;}
                             if (!
                          Trall)
                             {  
                                
                          DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Закрытие при  ",DoubleToStr((EquityStart),2)));
                                if (
                          AE>=EquityStart//запуск тралла по эквити
                                
                          {  
                                  
                                   
                          Trall=true;
                                }
                             }
                             if (
                          Trall)
                             {  
                                if (
                          EquityStart<AE+Profit_PercentEquityStart=AE+Profit_Percent;
                                
                          DrawLABEL("Equity Start",1,5,60,Red,StringConcatenate("ЗАКРЫТИЕ ОРДЕРОВ ",DoubleToStr(AccountEquity(),2)));
                                if (
                          AE<=EquityStart-EquityStart+AE)
                                
                                   for (
                          int i=OrdersTotal()-1i>=0i--)
                                {  
                                   if (!
                          OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
                                if (
                          OrderType()==OP_BUY OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage);
                                if (
                          OrderType()==OP_SELLOrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);
                                   
                          Trall=false;
                                   
                          AE=AccountEquity();
                                   
                          EquityStart=AE+Profit_Percent;
                                }
                                return(
                          0);
                             }
                          return(
                          0);
                          }
                          //------------------------------------------------------------------
                          int deinit()
                          {
                             if (!
                          IsTesting()) 
                             {
                                
                          ObjectsDeleteAll(0);
                             }
                             return(
                          0);
                          }
                          //-------------------------------------------------------------------
                          void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name)
                          {
                             if (
                          ObjectFind(name)!=-1ObjectDelete(name);
                             
                          ObjectCreate(nameOBJ_LABEL000);
                             
                          ObjectSet(nameOBJPROP_CORNERCORNER);
                             
                          ObjectSet(nameOBJPROP_XDISTANCEX);
                             
                          ObjectSet(nameOBJPROP_YDISTANCEY);
                             
                          ObjectSetText(name,Name,10,"Arial",clr);
                          }
                          //+------------------------------------------------------------------+
                          color Color(bool P,color a,color b)
                          {
                             if (
                          P) return(a);
                             else return(
                          b);
                          }
                          //------------------------------------------------------------------ 

                          Комментарий

                          • #14 Свернуть

                            Пожалуй всё,не буду больше ничего менять. Вот рабочий советник : CloseEquity_Shag.mq4
                            вот код:
                            PHP код:
                            extern double Shag_Profita       10;     // Шаг профита 


                            double EquityStart=0
                            bool Trall=false
                            int slippage=1000
                            //--------------------------------------------------------------------  
                            int init()  
                            {  
                               
                            double AE AccountEquity(); 
                               
                            EquityStart=AE+Shag_Profita
                               return(
                            0); 

                            //+------------------------------------------------------------------+ 
                            int start() 

                               if (!
                            IsTradeAllowed()) return(0); 

                               
                            double AB AccountBalance(); 
                               
                            double AE AccountEquity(); 

                               
                            DrawLABEL("Balance",1,5,20,Green,StringConcatenate("Баланс ",DoubleToStr(AB,2))); 
                               
                            DrawLABEL("Equity" ,1,5,40,Lime,StringConcatenate("Средства ",DoubleToStr(AE,2))); 

                               if (
                            OrdersTotal()==0) {Trall=false;EquityStart=AE;} 
                               if (!
                            Trall
                               {   
                                  
                            DrawLABEL("Equity Start",1,5,60,Lime,StringConcatenate("Закрытие при  ",DoubleToStr((EquityStart),2))); 
                                  if (
                            AE>=EquityStart//запуск тралла по эквити 
                                  
                            {   
                                     
                                     
                            Trall=true
                                  } 
                               } 
                               if (
                            Trall
                               {   
                                  if (
                            EquityStart<AE+Shag_ProfitaEquityStart=AE+Shag_Profita
                                  
                            DrawLABEL("Equity Start",1,5,60,Red,StringConcatenate("ЗАКРЫТИЕ ОРДЕРОВ ",DoubleToStr(AccountEquity(),2))); 
                                  if (
                            AE<=EquityStart-EquityStart+AE
                                   
                                     for (
                            int i=OrdersTotal()-1i>=0i--) 
                                  {   
                                     if (!
                            OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break; 
                                  if (
                            OrderType()==OP_BUY OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage); 
                                  if (
                            OrderType()==OP_SELLOrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage); 
                                     
                            Trall=false
                                     
                            AE=AccountEquity(); 
                                     
                            EquityStart=AE+Shag_Profita
                                  } 
                                  return(
                            0); 
                               } 
                            return(
                            0); 


                            void DrawLABEL(string nameint CORNERint Xint Ycolor clrstring Name

                               if (
                            ObjectFind(name)!=-1ObjectDelete(name); 
                               
                            ObjectCreate(nameOBJ_LABEL000); 
                               
                            ObjectSet(nameOBJPROP_CORNERCORNER); 
                               
                            ObjectSet(nameOBJPROP_XDISTANCEX); 
                               
                            ObjectSet(nameOBJPROP_YDISTANCEY); 
                               
                            ObjectSetText(name,Name,15,"Arial",clr); 

                            //+------------------------------------------------------------------+ 
                            color Color(bool P,color a,color b

                               if (
                            P) return(a); 
                               else return(
                            b); 

                            //------------------------------------------------------------------ 
                            Думаю можно ещё подправить.Если кто нибудь знает ,то пожалуйста.

                            Комментарий

                            • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                            • #15 Свернуть

                              Заметил что если нет отложенных ордеров,то закрывает ордера сразу после открытия.Нужно исправить.

                              Комментарий

                              X