← К каталогу
Исходный код · ID 36

close profits.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный скрипт написан на языке MQL4 для платформы MetaTrader 4. Его основное назначение — закрытие открытых позиций, имеющих положительную прибыль. При запуске скрипт проверяет все активные ордера и закрывает те из них, тип которых OP_BUY или OP_SELL и прибыль которых больше нуля.

Скрипт поддерживает два режима работы. Если он запущен с графика конкретной пары, он закрывает только прибыльные позиции этой пары. Если запущен не с графика пары, закрываются все прибыльные позиции на счёте.

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

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

Настройки программы

НастройкаОписание
Loading Text (Text) Текст, отображаемый на информационной метке во время выполнения скрипта. По умолчанию установлено значение "Closing Profits".
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property strict

extern string Text="Closing Profits";            //Loading Text

int Slippage = 10;
double DropPoint;
bool FocusPair;

int _ErrorCheck;

void OnStart()
  {
      // код доступен только после оплаты
   }

   string strTmp=Text;

   DropPoint=WindowPriceOnDropped();

   if(DropPoint==0)
      FocusPair=false;
   else
      FocusPair=true;

   int total=OrdersTotal();

   if(total>0)
     {
      for(int i=total-1;i>=0;i--)
        {
        DrawLabel(strTmp);
         strTmp+=".";
         if(StringLen(strTmp)>=StringLen(Text)+6)
            strTmp=Text;

         _ErrorCheck=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

         if(_ErrorCheck==-1)
           {
            Alert("Error Order Select: ",GetLastError());
            break;
           }

         if((OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderProfit() > 0)  //Profit >= 0 ??
           {
            _ErrorCheck=0;

            for(int l=0; l<5; l++)
              {

               if(FocusPair && Symbol()!=OrderSymbol())
                  break;

               if(OrderType()==OP_SELL)
                  _ErrorCheck=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_ASK),Slippage,clrNONE);
               else
                  _ErrorCheck=OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),Slippage,clrNONE);

               if(_ErrorCheck==-1)
                  Sleep(100);
               else
                  break;
              }

            if(_ErrorCheck==-1)
              {
               string _ErrorComment;
               int _LastErrorFound=GetLastError();

               switch(_LastErrorFound)
                 {
                  case 1:
                     _ErrorComment="ERR_NO_RESULT";
                     break;
                  case 2:
                     _ErrorComment="ERR_COMMON_ERROR";
                     break;
                  case 3:
                     _ErrorComment="ERR_INVALID_TRADE_PARAMETERS";
                     break;
                  case 4:
                     _ErrorComment="ERR_SERVER_BUSY";
                     break;
                  case 5:
                     _ErrorComment="ERR_OLD_VERSION";
                     break;
                  case 6:
                     _ErrorComment="ERR_NO_CONNECTION";
                     break;
                  case 7:
                     _ErrorComment="ERR_NOT_ENOUGH_RIGHTS";
                     break;
                  case 8:
                     _ErrorComment="ERR_TOO_FREQUENT_REQUESTS";
                     break;
                  case 9:
                     _ErrorComment="ERR_MALFUNCTIONAL_TRADE";
                     break;
                  case 64:
                     _ErrorComment="ERR_ACCOUNT_DISABLED";
                     break;
                  case 65:
                     _ErrorComment="ERR_INVALID_ACCOUNT";
                     break;
                  case 128:
                     _ErrorComment="ERR_TRADE_TIMEOUT";
                     break;
                  case 129:
                     _ErrorComment="ERR_INVALID_PRICE";
                     break;
                  case 130:
          

Показано первые 50% кода (символов: 3590)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
359₽ ≈ $4.39