virtual_trailing_stop.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «virtual_trailing_stop.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Виртуальный trailing stop для MetaTrader 4. Советник отслеживает открытые позиции и реализует механизм трейлинг-стопа с возможностью установки фиксированных уровней стоп-лосс и тейк-профита. Отображает уровни стоп-лосса на графике в виде горизонтальных линий.
Советник работает в функции start(), обрабатывая все открытые ордера по текущему символу. Для каждой позиции проверяются условия фиксации по стоп-лоссу и тейк-профиту, а также обновляется виртуальный уровень стоп-лосса при движении цены в нужную сторону. При достижении виртуального уровня стоп-лосс фиксирует позицию, если она прибыльна.
В режиме тестирования при отсутствии открытых ордеров советник демонстрирует открытие тестовых позиций в обе стороны.
Настройки программы
| Настройка | Описание |
|---|---|
| Stoploss (Stoploss) | Стоп-лосс — Фиксированный уровень стоп-лосса в пунктах от цены открытия позиции |
| Takeprofit (Takeprofit) | Тейк-профит — Фиксированный уровень тейк-профита в пунктах от цены открытия позиции |
| TrailingStop (TrailingStop) | Трейлинг-стоп — Расстояние в пунктах для виртуального трейлинг-стопа от текущей цены |
| TrailingStart (TrailingStart) | Начало трейлинга — Минимальное движение цены в пунктах, после которого начинается трейлинг-стоп |
| TrailingStep (TrailingStep) | Шаг трейлинга — Шаг сдвига виртуального стоп-лосса в пунктах при дальнейшем движении цены |
Поиск по коду файла
#property strict
extern int Stoploss = 0; // Stoploss
extern int Takeprofit = 0; // Takeprofit
extern int TrailingStop = 5; // TrailingStop
extern int TrailingStart = 5; // TrailingStart
extern int TrailingStep = 1; // TrailingStep
double TrallB = 0;
double TrallS = 0;
int slippage=30;
int start()
{
// код доступен только после оплаты
}
double OOP,SL;
int b=0,s=0,tip,TicketB=0,TicketS=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
tip = OrderType();
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
if(tip==OP_BUY)
{
b++;
TicketB=OrderTicket();
if(Stoploss!=0 && Bid<=OOP - Stoploss * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,clrNONE)) continue;}
if(Takeprofit!=0 && Bid>=OOP + Takeprofit * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,clrNONE)) continue;}
if(TrailingStop>0)
{
SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
if(SL>=OOP+TrailingStart*Point && (TrallB==0 || TrallB+TrailingStep*Point<SL)) TrallB=SL;
}
}
if(tip==OP_SELL)
{
s++;
if(Stoploss!=0 && Ask>=OOP + Stoploss * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,clrNONE)) continue;}
if(Takeprofit!=0 && Ask<=OOP - Takeprofit * Point) {if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,clrNONE)) continue;}
TicketS=OrderTicket();
if(TrailingStop>0)
{
SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
iПоказано первые 50% кода (символов: 2693)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.