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

ReverseTrailing

reverse trailing mt5 source code.mq5
Вы автор или правообладатель?

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

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

О программе

ReverseTrailing — торговый советник для платформы MetaTrader 5, реализующий систему обратного трейлинг-стопа с переворотной логикой. Советник отслеживает открытую позицию по заданному магическому номеру, перемещает стоп-лосс в сторону движения цены и одновременно выставляет отложенный ордер на переворот в противоположном направлении. При срабатывании стоп-лосса текущей позиции отложенный ордер активируется и открывает новую позицию в обратном направлении, продолжая цикл управления.

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

НастройкаОписание
Тип управления капиталом (InpMMType) Тип управления капиталом — Выбор режима расчёта объёма лота: фиксированный размер или процент от свободного депозита.
Фиксированный лот (если выбран Fixed) (InpLotSize) Фиксированный лот (если выбран Fixed) — Размер лота, используемый при фиксированном типе управления капиталом.
Процент риска от Free Margin (если выбран %) (InpRiskPercent) Процент риска от Free Margin (если выбран %) — Доля свободного маржи, используемая для расчёта объёма лота при процентном типе управления капиталом.
Расстояние для Трейлинга и Стоп-ордеров (в пипсах/поинтах) (InpDistancePips) Расстояние для Трейлинга и Стоп-ордеров (в пипсах/поинтах) — Расстояние в пипсах или поинтах для установки трейлинг-стопа и переворотных отложенных ордеров.
Магический номер робота (InpMagicNumber) Магический номер робота — Идентификатор робота, по которому советник определяет свои позиции и ордера на счёте.
Получить полный код

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

#property version   "1.00"
#property strict

#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade        m_trade;       // Объект для исполнения торговых приказов
CSymbolInfo   m_symbol;      // Объект для получения рыночных данных

enum ENUM_MM_TYPE
  {
   MM_FIXED_LOT   = 0, // Фиксированный лот
   MM_PERCENT_DEP = 1  // % от свободного депозита
  };

input group "=== Торговые настройки ==="
input ENUM_MM_TYPE InpMMType       = MM_FIXED_LOT;   // Тип управления капиталом
input double       InpLotSize      = 0.1;            // Фиксированный лот (если выбран Fixed)
input double       InpRiskPercent  = 1.0;            // Процент риска от Free Margin (если выбран %)
input int          InpDistancePips = 100;            // Расстояние для Трейлинга и Стоп-ордеров (в пипсах/поинтах)
input ulong        InpMagicNumber  = 123456;         // Магический номер робота

double m_adjusted_distance = 0;

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

void OnDeinit(const int reason)
  {
  }

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

   if(!m_symbol.RefreshRates()) return;

   bool has_position = false;
   ENUM_POSITION_TYPE pos_type = POSITION_TYPE_BUY;
   double pos_open = 0;
   double pos_sl = 0;
   ulong  pos_ticket = 0;

   for(int i = PositionsTotal() - 1; i >= 0; i--)
     {
      if(PositionGetSymbol(i) == _Symbol && PositionGetInteger(POSITION_MAGIC) == InpMagicNumber)
        {
         has_position = true;
         pos_type   = (ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
         pos_open   = PositionGetDouble(POSITION_PRICE_OPEN);
         pos_sl     = PositionGetDouble(POSITION_SL);
         pos_ticket = PositionGetInteger(POSITION_TICKET);
         break; // Работаем с одной основной позицией
        }
     }

   bool has_stop_order = false;
   ulong order_ticket = 0;
   ENUM_ORDER_TYPE ord_type = ORDER_TYPE_BUY_STOP;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      ulong ticket = OrderGetTicket(i);
      if(ticket > 0)
        {
         if(OrderGetString(ORDER_SYMBOL) == _Symbol && OrderGetInteger(ORDER_MAGIC) == InpMagicNumber)
           {
            has_stop_order = true;
            order_ticket   = ticket;
            ord_type       = (ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);
            break;
           }
        }
     }

   if(!has_position && !has_stop_order)
     {
      double lot = CalculateLot();

      if(m_trade.Buy(lot, _Symbol, m_symbol.Ask(), 0, 0, "Initial Buy"))
        {
         Print("Стартовая позиция BUY открыта.");
        }
      return;
     }

   if(!has_position && has_stop_order)
     {

      return;
     }

   if(has_position)
     {
      double current_ask = m_symbol.Ask();
      double current_bid = m_symbol.Bid();
  

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

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

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

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

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

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

Стоимость полного кода
394,90₽ ≈ $4.83