Группа "Стол заказов MQL"

Рейтинг 2073



РЕКОМЕНДУЮ



Советник для закрытия ордеров

Андрей если не сложно сделай советник, для закрытия открытых ордеров.

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

Советник должен при включении, проверить заданную сумму средств, и ее запомнить. Как только средства+сумма глобальной переменной, превысят или будут равны, запомнить все открытые ордера, и все их закрыть. Запомнить новый показатель средств, и ждать до тех пор, пока условия на закрытие, не будут выполнены (запомненные средства+глобальная переменная =>), Те ордера которые вновь будут открыты по рынку, в процессе закрытия, их не трогать, до тех пор, пока не будет выполнено новое условие на закрытие. В общем, в процессе закрытия, те советники которые установлены в терминале, будут по новым условиям, открывать сделки, открытие новых сделок, может совпасть, с моментом, закрытия данным советником. По этому те ордера трогать нельзя, они будут закрываться при новом изменении баланса. Советник должен ориентироваться на средства, а не баланс. И должен закрывать ордера с любым мейджиком.
  • +1
  • Просмотров: 3082
  • 20 октября 2017, 19:19
  • Syte
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Сеточник с открытием по времени
Следующая запись в группе  
Прошу сделать советник, хотя это "индюк"...
19 октября 2017
20 октября 2017

Комментарии (13)

+
0
После выходных посмотрю.
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 20 октября 2017, 20:23
+
0
Хорошо. Если можно, вывести на экран терминала, три параметра, в верхний левый угол, сколько ордеров открыто, сколько в сел, сколько в бай. По всем парам. Если нет, то сам допишу.
avatar

  14  Syte Автор Сообщений: 399

  • 20 октября 2017, 20:31
+
0
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 23 октября 2017, 18:37
+
0
Спасибо :)  Можно в верхнем левом углу, поправить? Ордера показывает, только те которые открыты на том инструменте, на котором стоит советник. А нужно, что бы все ордера показывал, на всех инструментах. Закрытие еще не проверил. Вы сделали, что бы ордера закрывались, на всех инструментах? Или только на том, на котором стоит советник? Нужно, что бы советник закрывал все ордера, на всех инструментах.
avatar

  14  Syte Автор Сообщений: 399

  • 23 октября 2017, 18:44
+
0
Вы сделали, что бы ордера закрывались, на всех инструментах?

Нет об этом не было сказано ни слова. Смотрите все сразу и напишите потом что поправить.
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 23 октября 2017, 18:46
+
0
Я все посмотрел. Я просто это условие пропустил. Нужно, что бы советник, запоминал средства, и как только средства будут превышены либо равно заданной переменной, нужно закрывать все ордера, на всех инструментах, с любым майджиком, а новые если будут открыты в процессе закрытия, не трогал. До следующего выполнения условия. А так все работает.
avatar

  14  Syte Автор Сообщений: 399

  • 23 октября 2017, 18:50
+
+1
Убрал контроль по символу: www.opentraders.ru/downloads/1697/
avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 23 октября 2017, 18:56
+
0
Огромное спасибо. Буду должен.
avatar

  14  Syte Автор Сообщений: 399

  • 23 октября 2017, 19:02
+
0
У меня 7 инструментов, и 7 советников. Они торгуют по разным стратегиям. Бывает такое, что в тренде, ряд советников, удерживают минусовые ордера, а другие во флете, набрали значительный плюс, который покрывает эти убытки и выводят счет в плюс. Вот мне и приходиться запускать скрипт, что бы закрыть все ордера, с разными мейджиками на всех инструментах. Что бы советники торговать начали с нуля. Я просто этот момент не всегда могу увидеть. Не всегда за компом. Я хочу, что бы ваш советник, эту проблему решил. Что бы как только средства достигли заданного значения, он закрыл все ордера на всех инструментах, но вновь открытые, в процессе закрытия не трогал, до следующего раза, когда выполнится новое условие, для закрытия.
avatar

  14  Syte Автор Сообщений: 399

  • 23 октября 2017, 19:01
+
0
Какая то ошибка. Закрывал ордера, но наткнулся на ошибку, и перестал закрывать
avatar

  14  Syte Автор Сообщений: 399

  • 23 октября 2017, 19:14
+
+1
Вот этот вариант посмотрите:


//+------------------------------------------------------------------+
//|                                                  CloseProfit.mq4 |
//|                                             Copyright 2017, AM2. |
//|                                      http://www.forexsyatems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2."
#property link      "http://www.forexsyatems.biz"
#property version   "1.00"
#property strict

input double Profit=30;
double equity=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   equity=AccountEquity();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==0 && (ot==0 || ot==-1))
           {
            pr+=OrderProfit()+OrderCommission()+OrderSwap();
           }

         if(OrderType()==1 && (ot==1 || ot==-1))
           {
            pr+=OrderProfit()+OrderCommission()+OrderSwap();
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   int dig=0;
   double bid=0,ask=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==0 && (ot==0 || ot==-1))
           {
            RefreshRates();
            bid=MarketInfo(OrderSymbol(),MODE_BID);
            dig=(int)MarketInfo(OrderSymbol(),MODE_DIGITS);
            cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(bid,dig),33,White);
           }
         if(OrderType()==1 && (ot==1 || ot==-1))
           {
            RefreshRates();
            ask=MarketInfo(OrderSymbol(),MODE_ASK);
            dig=(int)MarketInfo(OrderSymbol(),MODE_DIGITS);
            cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(ask,dig),33,White);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,1,NormalizeDouble(price,Digits),33,0,0,"",0,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==type) count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(IsTesting() && CountOrders(4)<1)
     {
      for(int i=1;i<11;i++) PutOrder(4,Bid+300*_Point*i);
     }

   if(AccountEquity()-equity>Profit)
     {
      CloseAll();
      equity=AccountEquity();
     }

   Comment("\n First Equity: ",equity,
           "\n Profit: ",AllProfit(),
           "\n Orders: ",CountOrders(0)+CountOrders(1),
           "\n Buy: ",CountOrders(0),
           "\n Sell: ",CountOrders(1));
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15826 - Андрей

  • 23 октября 2017, 19:45
+
0
Да, визуально все ордера закрывает. :)  В процессе закрытия советники, открывают ордера заново, те которые были открыты ранее минуту назад. Все правильно. Ошибок больше не возникает. Еще раз спасибо.
avatar

  14  Syte Автор Сообщений: 399

  • 23 октября 2017, 20:04
+
0
Всем здравствуйте! Можно я здесь напишу, чтоб не создавать лишнюю тему? Спасибо. Ищу советника для сопровождения открытых позиций или функцию). Может здесь уже есть такой, не смог найти. Если есть, ткните пальцем пожалуйста. Принцип такой: трехуровневое сопровождение каждого отдельного ордера. Я нашел 1 подобный. В нем выставляется кол-во пунктов до первого, второго частичного закрытия. Хочется универсальный. Чтоб сопровождал сделки с абсолютно разными стопами и целями. Примерно так: цена проходит в профитную сторону «х» расстояний стопа. Кроется 1/«y» лота, стоп переносится на «z» расстояний стопа. Тралл остатка ДА\НЕТ, цена проходит еще, кроется снова часть, и т.д. Эсли для вас это будет не сложно и интересно написать, напишу в стол заказов. Но мне кажется сложновато здесь.
avatar

  8  Kofa Сообщений: 42

  • 4 ноября 2017, 03:12

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари