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

adx ea.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 и выполняет автоматическую торговлю на основе нескольких технических индикаторов. В качестве основных сигналов для входа в позицию используются ADX с линиями +DI/-DI, скользящие средние, индикатор Momentum, объёмы торгов и Bollinger Bands. Советник открывает позиции BUY или SELL при выполнении заданных условий и управляет ими с помощью стоп-лосса, тейк-профита, трейлинг-стопа и перевода в безубыток.

В советнике реализованы два основных режима генерации сигналов: стратегия прорыва (Breakout Strategies) и кросс-стратегия (Cross Strategy), каждая из которых может дополнительно фильтроваться по тренду через +DI/-DI. Параметры FastMA и SlowMA задают периоды скользящих средних, а Distance — дистанцию между ними. Дополнительно используются уровни входа и выхода, а также настройки управления рисками.

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

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

НастройкаОписание
str1 Заголовок стратегии прорыва — Заголовок раздела настроек стратегии прорыва.
Enable Breakout Strategies (Breakout_Strategies) Стратегия прорыва — Включает или отключает стратегию прорыва для генерации сигналов на вход в позицию. При активации советник использует уровни Entry_Level и фильтрацию +DI/-DI для определения направления сделки.
Set the Breakout Level. (Entry_Level) Уровень входа — Уровень входа для стратегии прорыва. Задаёт минимальное значение ADX или +DI, при котором возможно открытие позиции.
Use +DI/-DI Trend Filter (Trend_Filter) Фильтр тренда — Включает или отключает фильтрацию тренда через сравнение линий +DI и -DI. При активации позиции открываются только в направлении доминирующего тренда.
Minimum.difference.+DI.-DI (Min_Price_Difference) Минимальная разница ценовых линий — Минимальная разница между значениями +DI и -DI, необходимая для подтверждения направления тренда.
str2 Разделитель настроек — Разделитель в настройках советника.
str3 Заголовок кросс-стратегии — Заголовок раздела кросс-стратегии.
Enable Cross Strategies (Cross_Strategy) Кросс-стратегия — Включает или отключает кросс-стратегию, которая анализирует пересечение линий ADX и направление основного тренда для генерации торговых сигналов.
Min_Level_Of_Main_Line Минимальный уровень основной линии — Минимальный уровень ADX для основной линии, необходимый для подтверждения тренда в кросс-стратегии.
Main_Line_Sloping_Upwards Направление основной линии вверх — Задаёт направление основной линии ADX для кросс-стратегии. При активации ожидается восходящий тренад основной линии.
Confirm_Cross_On_Breakout Подтверждение кросса на прорыве — При активации кросс-стратегия требует подтверждения прорыва через сравнение текущих и предыдущих значений +DI и -DI перед открытием позиции.
str4 Разделитель настроек — Разделитель в настройках советника.
str5 Заголовок направления торговли — Заголовок раздела направления торговли.
Distance (Distance) Дистанция между скользящими — Дистанция в пунктах между быстрой и медленной скользящими средними, используемая при формировании торговых сигналов.
FastMA (FastMA) Быстрая скользящая средняя — Период быстрой скользящей средней (LWMA), используемой совместно с медленной скользящей для формирования сигналов.
SlowMA (SlowMA) Медленная скользящая средняя — Период медленной скользящей средней (LWMA), используемой совместно с быстрой для формирования торговых сигналов.
str6 Разделитель настроек — Разделитель в настройках советника.
Exit_Level Уровень выхода — Уровень выхода, используемый при закрытии позиций.
Enable "no loss" (USEMOVETOBREAKEVEN) Перевод в безубыток — Включает или отключает функцию перевода позиции в безубыток при достижении заданного уровня прибыли.
When to move break even (WHENTOMOVETOBE) Расстояние до перевода в безубыток — Расстояние в пунктах от цены открытия, при достижении которого позиция переводится в безубыток.
How much pips to move sl (PIPSTOMOVESL) Пункты перемещения стоп-лосса — Количество пунктов для перемещения стоп-лосса при переводе позиции в безубыток.
Lots size (Lots) Размер лота — Размер лота для открытия позиции, задаётся в единицах торгового инструмента.
MaximumRisk Максимальный риск — Максимальный риск в процентах от свободного маржинального баланса, используемый для расчёта размера лота.
DecreaseFactor Фактор уменьшения — Фактор уменьшения лота на основе количества убыточных сделок в истории. При наличии убыточных ордеров размер лота рассчитывается с учётом этого параметра.
TrailingStop (TrailingStop) Трейлинг-стоп — Расстояние в пунктах для трейлинг-стопа — автоматического перемещения стоп-лосса вслед за ценой при достижении определённой прибыли.
Stop Loss (Stop_Loss) Стоп-лосс — Уровень стоп-лосса в пунктах, устанавливаемый при открытии позиции.
MagicNumber (MagicNumber) Магический номер — Магический номер, идентифицирующий ордера, открытые данным советником, для корректной работы с позициями и модификаций.
TakeProfit (TakeProfit) Тейк-профит — Уровень тейк-профита в пунктах, устанавливаемый при открытии позиции.
Получить полный код

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

#property version     "1.00"
#property strict

extern string     str1="Breakout Strategies";
extern bool       Breakout_Strategies=true;     //Enable Breakout Strategies
extern double     Entry_Level=10;               //Set the Breakout Level.
extern bool       Trend_Filter=true;           //Use +DI/-DI Trend Filter
extern double     Min_Price_Difference=10;     //Minimum.difference.+DI.-DI
extern string     str2="*****************";
extern string     str3=" Cross Strategy";
extern bool       Cross_Strategy=true;           //Enable Cross Strategies
extern double     Min_Level_Of_Main_Line=10;
extern bool       Main_Line_Sloping_Upwards=true;
extern bool       Confirm_Cross_On_Breakout=true;
extern string     str4="*****************";
extern string      str5="Trade Direction";
extern double     Distance=5;          //Distance 
extern int        FastMA=6;             //FastMA 
extern int        SlowMA=85;            //SlowMA 
extern string     str6="*****************";
extern double     Exit_Level=10;
extern bool        USEMOVETOBREAKEVEN=true;//Enable "no loss"
extern double         WHENTOMOVETOBE=10;      //When to move break even
extern double         PIPSTOMOVESL=5;         //How much pips to move sl
extern double      Lots=0.01;              //Lots size 
input  double       MaximumRisk   =0.02;
input  double       DecreaseFactor=3;
extern double         TrailingStop=40;        //TrailingStop 
extern double         Stop_Loss=20;           //Stop Loss  
extern int         MagicNumber=1234;       //MagicNumber 
input  double       TakeProfit=50;          //TakeProfit
int           err;
bool               FractalsUp=false;
bool               FractalsDown=false;
double             FractalsUpPrice=0;
double             FractalsDownPrice=0;
int                FractalsLimit=200;
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,MA_3,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;

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

void OnDeinit(const int reason)
  {
  }

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

void stop()
  {
   int cnt;

   double middleBB=iBands(Symbol(),0,20, 2,0,0,MODE_MAIN,1);//middle
   double lowerBB=iBands(Symbol(),0,20, 2,0,0,MODE_LOWER,1);//lower
   double upperBB=iBands(Symbol(),0,20, 2,0,0,MODE_UPPER,1);//upper

   double  MacdMAIN=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   double  MacdSIGNAL=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

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

         if(OrderType()==OP_BUY)
           {

            if(((Bid<OrderOpenPrice()-iATR(NULL,0,14,0))
               || ((MacdMAIN>0 && MacdMAIN<MacdSIGNAL) || (MacdMAIN<0 && (MathAbs(MacdMAIN)>MathAbs(MacdSIGNAL))))
               || Close[1]==upperBB))
               exitbuys();

           }
         else // go to short position
           {

            if(((Ask>OrderOpenPrice()+iATR(NULL,0,14,0))
               || ((MacdMAIN>0 && MacdMAIN>MacdSIGNAL) || (MacdMAIN<0 && (MathAbs(MacdMAIN)<MathAbs(MacdSIGNAL)))))
               || Close[1]==lowerBB)
               exitsells();

           }
        }
     }
  }

void Trail1()
  {
   total=OrdersTotal();

   for(int cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         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()+pips*TrailingStop;
                     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()-pips*TrailingStop;
                     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(!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(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
                     Print("eror");
     }
  }

double LotsOptimized()
  {
   double lot=Lots;
   int    orders=OrdersHistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break

   if(MaximumRisk>0)
     {
      lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
     }

   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() /*|| OrderType()>OP_SELL*/)
            continue;

         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }

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

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

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

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

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

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

Стоимость полного кода
1 723,20₽ ≈ $21.06