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

trade_protector-1.2.mq4

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

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

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

О программе

Торговый советник для MetaTrader 4, предназначенный для мониторинга и управления открытыми позициями. Советник отслеживает текущие ордера на текущем символе и модифицирует уровни стоп-лосса и тейк-профита в соответствии с заданными параметрами. Поддерживается фиксированный начальный стоп-лосс, фиксированный трейлинг-стоп, пропорциональный трейлинг-стоп, активирующийся после достижения определённого уровня прибыли, а также механизм аварийного выхода (escape), устанавливающий тейк-профит при достижении позиции заданного убытка. Все действия записываются в лог-файлы в формате CSV.

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

НастройкаОписание
logging Логирование — Уровень записи логов: 0 — без логирования, 1 — основной лог операций, 2 и выше — расширенный лог изменений стоп-лосса.
nInitialSL Начальный стоп-лосс — Начальный уровень стоп-лосса в пунктах, устанавливаемый для новых позиций при отсутствии установленного стоп-лосса.
nTrailingStop Фиксированный трейлинг-стоп — Расстояние трейлинг-стопа в пунктах, используемое до достижения позиции заданного уровня прибыли.
nPropSLThreshold Порог пропорционального стоп-лосса — Уровень прибыли в пунктах, после активации которого включается пропорциональный трейлинг-стоп.
dPropSLRatio Коэффициент пропорционального стоп-лосса — Множитель для расчёта пропорционального уровня стоп-лосса на основе текущей прибыли позиции.
nUseEscape Использовать аварийный выход — Включает или отключает механизм аварийного выхода (1 — включён, 0 — выключен).
nEscapeLevel Уровень аварийного выхода — Глубина убытка в пунктах, при достижении которой срабатывает механизм аварийного выхода.
nEscapeTP Тейк-профит аварийного выхода — Уровень тейк-профита в пунктах, устанавливаемый при срабатывании аварийного выхода; может быть отрицательным.
nSleep Задержка после нового бара — Время задержки в миллисекундах после обработки нового бара перед началом работы.
nSlip Максимальный проскальзывание — Допустимое максимальное отклонение цены при исполнении ордеров в пунктах.
Получить полный код

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

extern int logging=1;

extern int nInitialSL=15;

extern int nTrailingStop=35;

extern int nPropSLThreshold=12;

extern double dPropSLRatio=0.35;

extern int nUseEscape=0;

extern int nEscapeLevel=0;

extern int nEscapeTP=35;

extern int nSleep=0;

extern int nSlip = 2;

double dEscapeLevel;
double dInitialSL;
double dTrailingStop;
double dEscapeTP;
double dPropSLThreshold;
double dTakeProfit;
double dTakeProfitMin;
double dTakeProfitMax;
double dTakeProfitT;
int nBars, nSpread, nDigits, nBarsSameTrend, nCloseErr, nOpenErr, i;

double dDeltaPrice, dnBid, dnAsk, dSpread, dStopLevel, dMax, dMin, dMacdDelta, dMacd1, dMacd2;

int nTakeProfitMax=100;

int nBarsSinceTrade=0;

string strExpert;

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

int deinit()
{
   return(0);
}

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

void ModifyOrders()
{ 
   double dSl;
   double arrSL[4];
   double arrTP[4];

   dTrailingStop = NormalizeDouble(nTrailingStop * Point,4);
   dEscapeTP = NormalizeDouble(nEscapeTP * Point,4);
   dPropSLThreshold = nPropSLThreshold * Point;
   dSpread = MarketInfo(Symbol(),MODE_SPREAD) * Point;
   dStopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * Point;
   dInitialSL = NormalizeDouble(nInitialSL * Point,4);

   for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
   {
      OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() ) //(OrderMagicNumber() == nMagic)
      {
         if(OrderType() == OP_BUY)
         { 
            dSl=OrderStopLoss();
            if( dSl == 0 )
               if( dInitialSL != 0)
                  dSl = dnAsk - dInitialSL;

            ArrayResize(arrSL,5);
            ArrayInitialize(arrSL,dSl);

            LogSL("OP_BUY-check",dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);

            if( dPropSLRatio > 0 ) 
            {
               if( Bid >= (OrderOpenPrice() + dPropSLThreshold) )
               {
                  dSl = NormalizeDouble( OrderOpenPrice() + dPropSLRatio*(Bid - OrderOpenPrice()) - dSpread,4 ); 
                  if(OrderStopLoss() < dSl)
                  arrSL[1]=dSl;
               } 
               else
               {
                  if(dTrailingStop != 0)
                     arrSL[2]=dnBid - dTrailingStop;
               }
            }               

            dSl=arrSL[ArrayMaximum(arrSL)];

            LogSL("OP_BUY - max",dSl,arrSL[0],arrSL[1],arrSL[2],arrSL[3]);

            if( dSl > OrderStopLoss() || OrderStopLoss() == 0 )
               {
                  OrderModify(OrderTicket(), OrderOpenPrice(), 
                     dSl, OrderTakeProfit(), 0, Yellow);
                  Log("Buy - modify", OrderOpenPrice(), dSl, OrderTakeProfit());
               }

      

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

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

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

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

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

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

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