trailsl.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.