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

#3bar trailer.mq4

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

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

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

О программе

Этот исходник представляет собой торговый советник для MetaTrader 4, написанный на языке MQL4. Его задача — сопровождение уже открытой позиции путём изменения уровня стоплосса. Советник не открывает новые сделки и не управляет объёмом; он только модифицирует защитный стоп уже существующего ордера.

Работа построена на анализе теней свечей выбранного таймфрейма. Пользователь задаёт тикет позиции, таймфрейм, количество баров и отступ в пунктах. Советник определяет экстремум по теням заданного числа свечей и переносит стоплосс на рассчитанное расстояние от этого экстремума. Для длинной позиции используется минимум теней, для короткой — максимум.

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

Советник вызывается на каждом тике, проверяет корректность входных значений и доступность ордера по тикету, после чего пытается изменить стоплосс через торговые функции MQL4. При неудаче выводится сообщение об ошибке. Исходный код содержит только подтверждённые операции модификации стоплосса и не реализует иных торговых действий.

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

НастройкаОписание
iTicket Уникальный номер (тикет) открытой позиции, которую необходимо сопровождать. Ноль считается некорректным значением.
iTmfrm Таймфрейм, по барам которого выполняется расчёт теней для трейлинга. Допускаются значения 1, 5, 15, 30, 60, 240, 1440, 10080 и 43200 минут.
iBars_n Количество последних баров выбранного таймфрейма, по теням которых рассчитывается экстремум для переноса стоплосса. Должно быть не меньше единицы.
iIndent Отступ в пунктах от найденного экстремума тени, на котором размещается новый уровень стоплосса. Должен быть неотрицательным.
bTrlinloss Логический переключатель, определяющий, разрешён ли перенос стоплосса в зоне убытка — между текущим стоплоссом и ценой открытия позиции. Если выключен, стоп переносится только при условии, что новый уровень лучше цены открытия.
Получить полный код

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

extern   int   iTicket;             // уникальный номер (тикет) открытой позиции
extern   int   iTmfrm;              // период, по барам которого следует тралить (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)
extern   int   iBars_n = 3;         // кол-во баров, по которым следует тралить
extern   int   iIndent = 5;         // отступ от тени бара, на котором размещается стоплосс
extern   bool  bTrlinloss = false;  // следует ли тралить на участке лоссов (между курсом стоплосса и открытия)

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

int deinit()
  {
   return(0);
  }

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

void TrailingByShadows(int ticket,int tmfrm,int bars_n, int indent,bool trlinloss)
   {  

   int i; // counter
   double new_extremum;

   if ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET)))
      {
      Print("Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов.");
      return(0);
      } 

   if (OrderType()==OP_BUY)
      {
      for(i=1;i<=bars_n;i++)
         {
         if (i==1) new_extremum = iLow(Symbol(),tmfrm,i);
         else 
         if (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
         }         

      if (trlinloss==true)
         {

         if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
         if (!OrderModify(ticket,OrderOpenPrice(),new_extremum - indent*Point,OrderTakeProfit(),OrderExpiration()))            
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
         }
      els

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

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

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

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

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

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

Стоимость полного кода
298,10₽ ≈ $3.64