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

trailsl.mq4

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

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

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

О программе

trailsl — торговый советник для MetaTrader 4, предназначенный для управления стоп-лоссом открытых позиций на текущем инструменте. В коде реализованы два основных механизма: перевод стоп-лосса в безубыточную зону (Break Even) и трейлинг-стоп с пошаговым следованием за ценой. Советник не открывает новые позиции — весь код открытия ордеров закомментирован, поэтому работает исключительно с уже существующими ордерами.

При каждом тике запускаются функции be() и trailSL(), которые перебирают все открытые ордера на текущем символе и корректируют их стоп-лоссы через OrderModify. Безубыточный перевод срабатывает, когда цена отдалилась от цены открытия на заданное число пунктов. Трейлинг-стоп активируется после достижения определённой дистанции от цены открытия и двигает стоп-лосс шагами в направлении движения цены.

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

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

НастройкаОписание
ENABLE_BE Включает или отключает функцию перевода стоп-лосса в безубыточную зону для открытых позиций.
BE_STEP Минимальное отдаление цены от точки открытия в пунктах, при котором срабатывает перевод стоп-лосса в безубыточную зону.
BE_POINT Расстояние в пунктах для установки стоп-лосса при переводе позиции в безубыточную зону. Если значение равно 0, безубыточный перевод не применяется.
ENABLE_TRAILSL Включает или отключает функцию трейлинг-стоп для открытых позиций.
TRAIL_AFTER_BE Определяет, будет ли трейлинг-стоп работать только после того, как для позиции уже применён безубыточный перевод. При значении false трейлинг работает независимо от безубыточного перевода.
TRAIL_START Минимальное отдаление цены от точки открытия в пунктах, при котором трейлинг-стоп начинает двигать стоп-лосс.
TRAIL_STEP Шаг в пунктах по цене открытия, определяющий интенсивность перемещения стоп-лосса при работе трейлинг-стопа.
TRAIL_POINT Размер шага в пунктах для перемещения стоп-лосса при работе трейлинг-стопа.
Получить полный код

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

#property version   "1.00"
#property strict

input bool ENABLE_BE = true;
input int BE_STEP = 20;
input int BE_POINT = 10;
input bool ENABLE_TRAILSL = true;
input bool TRAIL_AFTER_BE = true;
input int TRAIL_START = 40;
input int TRAIL_STEP = 10;
input int TRAIL_POINT = 10;

double SL = 200;

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

void OnDeinit(const int reason) {

}

bool firstLoad = false;
void OnTick() {
      // код доступен только после оплаты
   }

void be() {
   if (ENABLE_BE == false) { return; }

   for(int x=OrdersTotal(); x>=0; x--) {
      if (OrderSelect(x, SELECT_BY_POS) == false) { continue; }
      if (OrderSymbol() != Symbol()) { continue; }

      if (OrderType() != OP_BUY && OrderType() != OP_SELL) { continue; }
      if (OrderProfit() < 0) { continue; }
      if (OrderType() == OP_BUY  && OrderStopLoss() > OrderOpenPrice()) { continue; }
      if (OrderType() == OP_SELL && OrderStopLoss() < OrderOpenPrice()) { continue; }

      if (MathAbs(price_diff(OrderOpenPrice(), (OrderType() == OP_BUY ? Bid : Ask))) < BE_STEP) { continue; }

      double newSL = BE_POINT > 0 ? price_calc(OrderOpenPrice(), BE_POINT*(OrderType() == OP_BUY ? 1 : -1)) : 0;

      bool ret = OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0);
      if (ret == true) {
         double _close = OrderType() == OP_BUY ? Bid : Ask;
         Print(__FUNCTION__, " [ok @ ", DoubleToString(_close, Digits), " newSL: ", DoubleToString(newSL, Digits), "]");
      } else {
         Print(__FUNCTION__, " [error ", GetLastError(), "]");
      }
   }
}

void trailSL() {
   if (ENABLE_TRAILSL == false) { return; }

   for(int x=OrdersTotal(); x>=0; x--) {
      if (OrderSelect(x, SELECT_BY_POS) == false) { continue; }
      if (OrderSymbol() != Symbol()) { continue; }

      if (OrderType() != OP_BUY && OrderType() != OP_SELL) { continue; }
      if (OrderProfit() < 0) { continue; }

      double _close = OrderType() == OP_BUY ? Bid : Ask;
      bool _trailAfterBE = TRAIL_AFTER_BE == true && ENABLE_BE == true ? true : false;
      if (_trailAfterBE == true) {
         if (OrderType() == OP_BUY  && OrderStopLoss() < OrderOpenPrice()) { continue; }
         if (OrderType() == OP_SELL && OrderStopLoss() > OrderOpenPrice()) { continue; }
      }

      if (_trailAfterBE == false && MathAbs(price_diff(OrderOpenPrice(), _close)) < TRAIL_START) { continue; }

      do

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

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

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

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

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

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

Стоимость полного кода
376,60₽ ≈ $4.60