Меню

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

  •    Автор:  TTraders
Описание:
Скрипт служит для ускорения закрытия сделок.

//+------------------------------------------------------------------+
#property copyright "Vladimir Khlistov"
#property link      "http://cmillion.narod.ru"
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
 
int   Magic  = 0; //если Magic  = 0 закрывать все

//+------------------------------------------------------------------+
int start()
{  
   bool error=true;
   int Ошибка;
   string txt="Cкрипт закрытия ордеров";
   if (Magic!=0)  txt=StringConcatenate(txt," с Magic=",Magic);
   Comment("");
   int ret=MessageBox("Закрыть все ордера (Да)   Закрыть только профитные (Нет)",
       txt, MB_YESNOCANCEL|MB_TOPMOST);
   if (ret==IDCANCEL) return;
   for (int j = 0; j < OrdersTotal(); j++)
   {
      if (OrderSelect(j, SELECT_BY_POS))
      {
         if (OrderSymbol() == Symbol() && (OrderMagicNumber() == Magic || Magic == 0))
         {
            if (ret==IDNO && OrderProfit()<0) continue;
            if (OrderType()==OP_BUY ) 
            {
               error=OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               if (error) Alert("Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                                  "     ",TimeToStr(TimeCurrent(),TIME_MINUTES));
            }
            if (OrderType()==OP_SELL) 
            {
               error=OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
               if (error) Alert("Закрыт ордер N ",OrderTicket(),"  прибыль ",OrderProfit(),
                                  "     ",TimeToStr(TimeCurrent(),TIME_MINUTES));
            }
            if (!error) 
            {
               Ошибка = GetLastError();
               if (Ошибка<2) continue;
               if (Ошибка==129) 
               {
                  j--;
                  Sleep(5000);
                  RefreshRates();
                  continue;
               }
               if (Ошибка==146) 
               {
                  int ret1=MessageBox("Подсистема торговли занята"," ", 
                      MB_RETRYCANCEL|MB_TOPMOST|MB_ICONWARNING);
                  if (ret1==IDCANCEL) return;
                  j--;
                  if (IsTradeContextBusy()) Sleep(2000);
                  continue;
               }
               Comment("Ошибка ",Ошибка," закрытия ордера N ",OrderTicket(),
                       "     ",TimeToStr(TimeCurrent(),TIME_MINUTES));
            }
         }
      }
   }
   return(0);
}
//+------------------------------------------------------------------+
 

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

 

CloseOrders.mq4

Перейти вверх

Добавить комментарий


Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

C чего начать

Типы

Анализ

Обучение

Инвестиции

«Поделиться»

18+

обновить