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

accelerator trailing tp&sl.mq4

Похожие материалы по тегам

2 to 1 strategy with signals.pineTradingView · 2 общих теговmulti_lot_scalper_a.mq4MQL4 / MetaTrader 4 · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 2 общих теговfresh algo v24 tradingview indicator_5918156155804195406.pineTradingView · 2 общих теговlinear regression channel.mq4MQL4 / MetaTrader 4 · 2 общих теговtrading criteria.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

Советник включает функцию перемещения стоп-лосса в безубыток при достижении заданного уровня прибыли, а также стратегию выхода из сделок по сигналу импульса. Позволяет ограничивать максимальное количество одновременных сделок и контролировать риск через параметры лотности с экспоненциальным увеличением при убытках. Перед открытием и модификацией ордеров выполняются проверки свободных средств, стоп-уровней платформы и допустимого объёма.

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

НастройкаОписание
Use_TP_In_Money Фиксация прибыли в деньгах — Включает или выключает автоматическое закрытие всех сделок при достижении заданной суммы прибыли в денежном выражении
TP_In_Money Сумма прибыли для фиксации — Целевая сумма прибыли в денежном выражении, при достижении которой все сделки закрываются
Use_TP_In_percent Фиксация прибыли в процентах — Включает или выключает автоматическое закрытие всех сделок при достижении заданного процента прибыли от баланса
TP_In_Percent Процент прибыли для фиксации — Процент от текущего баланса, при достижении которого все сделки закрываются
——————————————————————————————————————————— (txt32) Разделитель группы — Текстовый разделитель, обозначающий начало группы настроек трейлинг-стопа в деньгах
Enable_Trailing (Enable_Trailing) Включить трейлинг-стоп — Активирует или деактивирует функцию трейлинг-стопа для открытых позиций
Take Profit In Money (in current currency) (Take_Profit_Money) Прибыль для трейлинга в деньгах — Целевая сумма прибыли в денежном выражении, используемая при расчёте трейлинг-стопа
Stop Loss In Money(in current currency) (Stop_Loss_Money) Убыток для трейлинга в деньгах — Допустимый размер убытка в денежном выражении, используемый при расчёте трейлинг-стопа
Enable Exit strategy (Exit) Включить стратегию выхода — Активирует закрытие сделок по сигналу импульса на основе MACD при наличии открытых позиций
IncreaseFactor (IncreaseFactor) Множитель увеличения лота — Коэффициент, определяющий скорость увеличения размера лота при последовательных убытках
Num.Of Candles For Divergence (CandlesToRetrace) Свечей для расчёта дивергенции — Количество свечей, используемое для анализа отката и расчёта условий входа
Lots size (Lots) Начальный размер лота — Базовый размер лота для открытия новых сделок
Stop Loss (Stop_Loss) Стоп-лосс в пунктах — Расстояние стоп-лосса от цены входа в пунктах
Lots size Exponent (LotExponent) Показатель степени лота — Степень, используемая для расчёта размера лота с учётом количества открытых сделок
MagicNumber (MagicNumber) Магический номер — Уникальный идентификатор ордеров советника для их фильтрации и управления
TakeProfit (Take_Profit) Тейк-профит в пунктах — Расстояние тейк-профита от цены входа в пунктах
FastMA (FastMA) Период быстрой MA — Период быстрой скользящей средней, используемой для определения направления тренда
SlowMA (SlowMA) Период медленной MA — Период медленной скользящей средней, используемой для определения направления тренда
Momentum_Sell (Mom_Sell) Порог импульса для продажи — Значение импульса, ниже которого считается сигнал на открытие короткой позиции
Momentum_Buy (Mom_Buy) Порог импульса для покупки — Значение импульса, ниже которого считается сигнал на открытие длинной позиции
Use Equity Stop (UseEquityStop) Использовать остановку по средствам — Включает или выключает автоматическое закрытие всех сделок при превышении допустимого риска средств
Total Equity Risk (TotalEquityRisk) Максимальный риск средств — Максимальный допустимый процент убытка от средств счёта, при превышении которого происходит закрытие всех позиций
Max_Trades Максимум сделок — Максимальное количество одновременно открытых сделок, разрешённых советником
TrailingStop (TrailingStop) Трейлинг-стоп в пунктах — Расстояние трейлинг-стопа от текущей цены в пунктах
Enable "no loss" (USEMOVETOBREAKEVEN) Перемещение в безубыток — Включает или выключает автоматическое перемещение стоп-лосса в точку безубытка
When to move break even (WHENTOMOVETOBE) Уровень для перехода в безубыток — Прибыль в пунктах, при достижении которой стоп-лосс перемещается в точку входа
How much pips to move sl (PIPSTOMOVESL) Пункты для сдвига стоп-лосса — Расстояние в пунктах, на которое стоп-лосс сдвигается от точки безубытка при переходе в безубыток
Получить полный код

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

#property version     "1.00"
#property strict

extern bool   Use_TP_In_Money=false;
extern double TP_In_Money=10;
extern bool   Use_TP_In_percent=false;
extern double TP_In_Percent=10;

input    string               txt32                    = "------------[Money Trailing Stop]---------------"; //———————————————————————————————————————————
input    bool                 Enable_Trailing           = true; //Enable_Trailing
input    double               Take_Profit_Money       = 40.0; //Take Profit In Money (in current currency)
input    double               Stop_Loss_Money         = 10; //Stop Loss In Money(in current currency)

extern bool         Exit=false;//Enable Exit strategy
extern double      IncreaseFactor=0.001;   //IncreaseFactor
extern int         CandlesToRetrace=10;    //Num.Of Candles For Divergence
extern double      Lots=0.01;              //Lots size
extern double      Stop_Loss=20;           //Stop Loss
extern double      LotExponent = 1.44;     //Lots size Exponent
extern int         MagicNumber=1234;       //MagicNumber
input double       Take_Profit=50;          //TakeProfit
extern int         FastMA=6;             //FastMA
extern int         SlowMA=85;            //SlowMA
extern double      Mom_Sell=0.3;           //Momentum_Sell
extern double      Mom_Buy=0.3;            //Momentum_Buy
input bool      UseEquityStop = true;  //Use Equity Stop
input double    TotalEquityRisk = 1.0; //Total Equity Risk
input int       Max_Trades=10;
extern double      TrailingStop=40;        //TrailingStop
input bool            USEMOVETOBREAKEVEN=true;//Enable "no loss"
input double          WHENTOMOVETOBE=30;      //When to move break even
input double          PIPSTOMOVESL=30;         //How much pips to move sl

int           err;

int total=0;
double
Lot,Dmax,Dmin,// Amount of lots in a selected order
    Lts,                             // Amount of lots in an opened order
    Min_Lot,                         // Minimal amount of lots
    Step,                            // Step of lot size change
    Free,                            // Current free margin
    One_Lot,                         // Price of one lot
    Price,                           // Price of a selected order,
    pips,
    MA_1,MA_2,MACD_SIGNAL;
int Type,freeze_level,Spread;

double priceopen,stoploss,takeprofit;

int orderticket;

int
Period_MA_2,  Period_MA_3,       // Calculation periods of MA for other timefr.
              Period_MA_02, Period_MA_03,      // Calculation periods of supp. MAs
              K2,K3,T,L;

int INDEX2=0;
double PROFIT_SUM1=0;
double PROFIT_SUM2=0;

double AccountEquityHighAmt,PrevEquity;

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

void OnDeinit(const int reason)
  {
  }

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

void Trail1()
  {
   total=OrdersTotal();

   for(int cnt=0; cnt<total; cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderMagicNumber()!=MagicNumber)
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position
         OrderSymbol()==Symbol())  // check for symbol
        {

         if(OrderType()==OP_BUY)
           {

            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>pips*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-pips*TrailingStop)
                    {

                     RefreshRates();
                     stoploss=Bid-(pips*TrailingStop);
                     takeprofit=OrderTakeProfit();
                     double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
                     if(stoploss<StopLevel*pips)
                        stoploss=StopLevel*pips;
                     string symbol=OrderSymbol();
                     double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
                     if(MathAbs(OrderStopLoss()-stoploss)>point)
                        if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)

                           if(CheckStopLoss_Takeprofit(OP_BUY,stoploss,takeprofit))
                              if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
                                 if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Green))
                                    Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {

            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(pips*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+pips*TrailingStop)) || (OrderStopLoss()==0))
                    {

                     RefreshRates();
                     stoploss=Ask+(pips*TrailingStop);
                     takeprofit=OrderTakeProfit();
                     double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
                     if(stoploss<StopLevel*pips)
                        stoploss=StopLevel*pips;
                     if(takeprofit<StopLevel*pips)
                        takeprofit=StopLevel*pips;
                     string symbol=OrderSymbol();
                     double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
                     if(MathAbs(OrderStopLoss()-stoploss)>point)
                        if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)

                           if(CheckStopLoss_Takeprofit(OP_SELL,stoploss,takeprofit))
                              if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
                                 if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Red))
                                    Print("OrderModify error ",GetLastError());
                     return;
                    }
                 }
              }
           }
        }
     }
  }

void MOVETOBREAKEVEN()

  {
   for(int b=OrdersTotal()-1; b>=0; b--)
     {
      if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()!=MagicNumber)
            continue;
      if(OrderSymbol()==Symbol())
         if(OrderType()==OP_BUY)
            if(Bid-OrderOpenPrice()>WHENTOMOVETOBE*pips)
               if(OrderOpenPrice()>OrderStopLoss())
                  if(CheckStopLoss_Takeprofit(OP_SELL,OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit()))
                     if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit()))
                        if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
                           Print("eror");
     }

   for(int s=OrdersTotal()-1; s>=0; s--)
     {
      if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()!=MagicNumber)
            continue;
      if(OrderSymbol()==Symbol())
         if(OrderType()==OP_SELL)
            if(OrderOpenPrice()-Ask>WHENTOMOVETOBE*pips)
               if(OrderOpenPrice()<OrderStopLoss())
                  if(CheckStopLoss_Takeprofit(OP_SELL,OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit()))
                     if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit()))
                        if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
                           Print("eror");
     }
  }

double NDTP(double val)
  {
   RefreshRates();
   double SPREAD=MarketInfo(Symbol(),MODE_SPREAD);
   double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if(val<StopLevel*pips+SPREAD*pips)
      val=StopLevel*pips+SPREAD*pips;
   return(NormalizeDouble(val, Digits));

  }

double ND(double val)
  {
   return(NormalizeDouble(val, Digits));
  }

bool OrderModifyCheck(int ticket,double price,double sl,double tp)
  {

   if(OrderSelect(ticket,SELECT_BY_TICKET))
     {

      string symbol=OrderSymbol();
      double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

      bool PriceOpenChanged=true;
      int type=OrderType();
      if(!(type==OP_BUY || type==OP_SELL))
        {
         PriceOpenChanged=(MathAbs(OrderOpenPrice()-price)>point);
        }

      bool StopLossChanged=(MathAbs(OrderStopLoss()-sl)>point);

      bool TakeProfitChanged=(MathAbs(OrderTakeProfit()-tp)>point);

      if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
         return(true);  // order can be modified

      else

         PrintFormat("Order #%d already has levels of Open=%.5f SL=%.5f TP=%.5f",
                     ticket,OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
     }

   return(false);       // no point in modifying
  }

bool CheckStopLoss_Takeprofit(ENUM_ORDER_TYPE type,double SL,double TP)
  {

   int stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
   if(stops_level!=0)
     {
      PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must"+

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

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

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

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

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

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

Стоимость полного кода
2 081,60₽ ≈ $25.44