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

flow v1.6.6.mq4

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

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

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

О программе

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

Включает настраиваемые фильтры по времени и дням недели, позволяющие ограничивать торговлю конкретными часами и сессиями. Фильтры применяются отдельно для длинных и коротких позиций. Доступна настройка старшего таймфрейма для дополнительной фильтрации сигналов.

Реализована функция динамического изменения размера лота в зависимости от текущего уровня капитала. При достижении заданного количества активных позиций предусмотрено закрытие всех ордеров по сигналу ретрейсмента. Торговля может быть полностью отключена при падении средств ниже заданного порога.

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

НастройкаОписание
MagicNumber Магический номер — Уникальный идентификатор ордеров, открываемых советником.
Lot Лот — Начальный размер лота для каждой сделки.
StopLoss Стоп-лосс — Расстояние стоп-лосса в пунктах от цены входа.
TPRetracement ТП ретрейсмента — Параметр для расчёта уровня фиксации прибыли при закрытии по ретрейсменту.
TakeProfit Тейк-профит — Расстояние тейк-профита в пунктах от цены входа.
BandPeriod Период полос — Период расчёта полос Боллинджера.
BandShift Сдвиг полос — Горизонтальный сдвиг полос Боллинджера.
BandDeviation Отклонение полос — Множитель отклонения полос Боллинджера от средней линии.
BandTriggerBuffer Буфер триггера полос — Дополнительный буфер в пунктах для срабатывания сигнала при пробое полосы.
MultipleOrders Множественные ордера — Включает режим открытия нескольких ордеров одновременно.
MagicNumber2 Магический номер 2 — Второй магический номер для дополнительных ордеров в режиме наращивания.
RetracementActivate Активация ретрейсмента — Минимальное количество активных ордеров для включения механизма закрытия по ретрейсменту.
MaximumOrders Максимум ордеров — Максимально допустимое количество активных ордеров в режиме множественных позиций.
OrderInterval Интервал ордеров — Шаг в пунктах между уровнями для открытия последующих ордеров.
OrderMultiplier Множитель ордеров — Множитель увеличения размера лота при каждом следующем ордере.
OrderIncrementMin Минимальный прирост лота — Минимальное увеличение лота между последовательными ордерами.
LotMultiplier Множитель лота — Включает автоматическое изменение размера лота в зависимости от текущего капитала.
LotMultiplierPercent Процент множителя лота — Процентное изменение лота при росте или падении капитала относительно начального значения.
InitialEquity Начальный капитал — Базовое значение капитала, используемое для расчёта динамического размера лота.
EquityKillSwitch Аварийное отключение по капиталу — Включает блокировку торговли при падении капитала ниже заданного порога.
EquityCutoff Порог капитала — Значение капитала, при достижении которого советник прекращает открытие новых позиций.
SameSL Общий стоп-лосс — Фиксирует стоп-лосс новых ордеров на уровне стоп-лосса предыдущей позиции.
HigherBandFilter Фильтр старших полос — Включает дополнительную фильтрацию сигналов по полосам Боллинджера на старшем таймфрейме.
HighTimeframe Старший таймфрейм — Таймфрейм для расчёта полос Боллинджера фильтра. Варианты: M1, M5, M15, M30, H1, H4, D1, W1.
HighBandPeriod Период полос фильтра — Период расчёта полос Боллинджера для фильтра на старшем таймфрейме.
HighBandShift Сдвиг полос фильтра — Горизонтальный сдвиг полос Боллинджера фильтра.
HighBandDeviation Отклонение полос фильтра — Множитель отклонения полос Боллинджера фильтра от средней линии.
Hourly filter (TimeFilter) Почасовой фильтр — Включает фильтрацию торговли по часам суток.
t00to01 00:00–01:00 — Настройка разрешения торговли для часа с 00:00 до 01:00. Варианты: Long & Short, Long Only, Short Only, None.
t01to02 01:00–02:00 — Настройка разрешения торговли для часа с 01:00 до 02:00. Варианты: Long & Short, Long Only, Short Only, None.
t02to03 02:00–03:00 — Настройка разрешения торговли для часа с 02:00 до 03:00. Варианты: Long & Short, Long Only, Short Only, None.
t03to04 03:00–04:00 — Настройка разрешения торговли для часа с 03:00 до 04:00. Варианты: Long & Short, Long Only, Short Only, None.
t04to05 04:00–05:00 — Настройка разрешения торговли для часа с 04:00 до 05:00. Варианты: Long & Short, Long Only, Short Only, None.
t05to06 05:00–06:00 — Настройка разрешения торговли для часа с 05:00 до 06:00. Варианты: Long & Short, Long Only, Short Only, None.
t06to07 06:00–07:00 — Настройка разрешения торговли для часа с 06:00 до 07:00. Варианты: Long & Short, Long Only, Short Only, None.
t07to08 07:00–08:00 — Настройка разрешения торговли для часа с 07:00 до 08:00. Варианты: Long & Short, Long Only, Short Only, None.
t08to09 08:00–09:00 — Настройка разрешения торговли для часа с 08:00 до 09:00. Варианты: Long & Short, Long Only, Short Only, None.
t09to10 09:00–10:00 — Настройка разрешения торговли для часа с 09:00 до 10:00. Варианты: Long & Short, Long Only, Short Only, None.
t10to11 10:00–11:00 — Настройка разрешения торговли для часа с 10:00 до 11:00. Варианты: Long & Short, Long Only, Short Only, None.
t11to12 11:00–12:00 — Настройка разрешения торговли для часа с 11:00 до 12:00. Варианты: Long & Short, Long Only, Short Only, None.
t12to13 12:00–13:00 — Настройка разрешения торговли для часа с 12:00 до 13:00. Варианты: Long & Short, Long Only, Short Only, None.
t13to14 13:00–14:00 — Настройка разрешения торговли для часа с 13:00 до 14:00. Варианты: Long & Short, Long Only, Short Only, None.
t14to15 14:00–15:00 — Настройка разрешения торговли для часа с 14:00 до 15:00. Варианты: Long & Short, Long Only, Short Only, None.
t15to16 15:00–16:00 — Настройка разрешения торговли для часа с 15:00 до 16:00. Варианты: Long & Short, Long Only, Short Only, None.
t16to17 16:00–17:00 — Настройка разрешения торговли для часа с 16:00 до 17:00. Варианты: Long & Short, Long Only, Short Only, None.
t17to18 17:00–18:00 — Настройка разрешения торговли для часа с 17:00 до 18:00. Варианты: Long & Short, Long Only, Short Only, None.
t18to19 18:00–19:00 — Настройка разрешения торговли для часа с 18:00 до 19:00. Варианты: Long & Short, Long Only, Short Only, None.
t19to20 19:00–20:00 — Настройка разрешения торговли для часа с 19:00 до 20:00. Варианты: Long & Short, Long Only, Short Only, None.
t20to21 20:00–21:00 — Настройка разрешения торговли для часа с 20:00 до 21:00. Варианты: Long & Short, Long Only, Short Only, None.
t21to22 21:00–22:00 — Настройка разрешения торговли для часа с 21:00 до 22:00. Варианты: Long & Short, Long Only, Short Only, None.
t22to23 22:00–23:00 — Настройка разрешения торговли для часа с 22:00 до 23:00. Варианты: Long & Short, Long Only, Short Only, None.
t23to00 23:00–00:00 — Настройка разрешения торговли для часа с 23:00 до 00:00. Варианты: Long & Short, Long Only, Short Only, None.
DayFilter Дневной фильтр — Включает фильтрацию торговли по дням недели.
Monday Понедельник — Разрешение торговли в понедельник. Варианты: Long & Short, Long Only, Short Only, None.
Tuesday Вторник — Разрешение торговли во вторник. Варианты: Long & Short, Long Only, Short Only, None.
Wednesday Среда — Разрешение торговли в среду. Варианты: Long & Short, Long Only, Short Only, None.
Thursday Четверг — Разрешение торговли в четверг. Варианты: Long & Short, Long Only, Short Only, None.
Friday Пятница — Разрешение торговли в пятницу. Варианты: Long & Short, Long Only, Short Only, None.
Получить полный код

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

#property version   "1.00"
#property strict

input int MagicNumber = 9321;
input double Lot = 0.1;
input double StopLoss = 1000;
input double TPRetracement = 0.5;
input double TakeProfit = 100;

input int BandPeriod = 10;
input int BandShift = 0;
input double BandDeviation = 2.5;
input double BandTriggerBuffer = 50;

input bool MultipleOrders = true;
input int MagicNumber2 = 9322;
input int RetracementActivate = 0;
input int MaximumOrders = 5;
input double OrderInterval = 500;
input double OrderMultiplier = 3;
input double OrderIncrementMin = 0.01;

input bool LotMultiplier = false;
input double LotMultiplierPercent = 1;
input double InitialEquity = 10000;

input bool EquityKillSwitch = false;
input double EquityCutoff = 1700;

/*input*/ bool StochasticFilter = false;
/*input*/ int StoK = 50;
/*input*/ int StoD = 20;
/*input*/ int StoSlow = 20;

input bool SameSL = false;

enum inputOptionsB{
   C1 = PERIOD_M1, //1 Minute
   C2 = PERIOD_M5, //5 Minute
   C3 = PERIOD_M15, //15 Minute
   C4 = PERIOD_M30, //30 Minute
   C5 = PERIOD_H1, //1 Hour
   C6 = PERIOD_H4, //4 Hours
   C7 = PERIOD_D1, //1 Day
   C8 = PERIOD_W1, //1 Week
};

input bool HigherBandFilter = false;
input inputOptionsB HighTimeframe = C5;
input int HighBandPeriod = 10;
input int HighBandShift = 0;
input double HighBandDeviation = 0.1;

input bool TimeFilter = true;//Hourly filter
enum inputOptionsA{
   B1 = 2, //Long & Short
   B2 = 1, //Long Only
   B3 = 3, //Short Only
   B4 = 0, //None
};

input inputOptionsA t00to01 = B1;
input inputOptionsA t01to02 = B1;
input inputOptionsA t02to03 = B1;
input inputOptionsA t03to04 = B1;
input inputOptionsA t04to05 = B1;
input inputOptionsA t05to06 = B1;
input inputOptionsA t06to07 = B1;
input inputOptionsA t07to08 = B1;
input inputOptionsA t08to09 = B1;
input inputOptionsA t09to10 = B1;
input inputOptionsA t10to11 = B1;
input inputOptionsA t11to12 = B1;
input inputOptionsA t12to13 = B1;
input inputOptionsA t13to14 = B1;
input inputOptionsA t14to15 = B1;
input inputOptionsA t15to16 = B1;
input inputOptionsA t16to17 = B1;
input inputOptionsA t17to18 = B1;
input inputOptionsA t18to19 = B1;
input inputOptionsA t19to20 = B1;
input inputOptionsA t20to21 = B1;
input inputOptionsA t21to22 = B1;
input inputOptionsA t22to23 = B1;
input inputOptionsA t23to00 = B1;

input bool DayFilter = true;

input inputOptionsA Monday = B1;
input inputOptionsA Tuesday = B1;
input inputOptionsA Wednesday = B1;
input inputOptionsA Thursday = B1;
input inputOptionsA Friday = B1;

bool StoInd;
double StoSignal, StoMain;
double Lot1, SL, TP, SubLot1, SubSL, SubTP;
double BandUpper, BandMain, BandLower;
double counter, counterFinal,counter1, counterFinal1;
bool OkaySign, OkaySignBuy, OkaySignSell,NewBar;
static int BARS;
int MN;
double InitPrice, LastPrice, LotHolder, HighBandUpper, HighBandLower;
bool CloseBool;
int OrderHolder;
double SLHolder;

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

void OnDeinit(const int reason)
  {

  }

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

   if(IsNewBar())
   {
      NewBar = true;
      BandMain = iBands(Symbol(),0,BandPeriod,BandDeviation,BandShift,PRICE_CLOSE,0,1);
      BandUpper = iBands(Symbol(),0,BandPeriod,BandDeviation,BandShift,PRICE_CLOSE,1,1);
      BandLower = iBands(Symbol(),0,BandPeriod,BandDeviation,BandShift,PRICE_CLOSE,2,1);
      StoCheckLong(); BandCheckLong();
      StoCheckShort(); BandCheckShort();
       for(int a=0; a<=OrdersTotal(); a++)
         {
            if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES))
            {
               if (OrderSymbol() == Symbol()&& (OrderMagicNumber()== MagicNumber || OrderMagicNumber() == MagicNumber2))
                  {
                      counter = counter +1;
                  }
                      if(a+1 == OrdersTotal())
                      { 
                        counterFinal = counter;
                        counter = 0;
                      }
             }
          }

    if(counterFinal == 0)
    {
      if(iClose(Symbol(),0,1) > BandUpper + BandTriggerBuffer*SymbolInfoDouble(Symbol(),SYMBOL_POINT) && StoCheckShort())
      {
      if(LotMultiplier == true) 
      {Lot1 = NormalizeDouble(Lot * (1 + LotMultiplierPercent*(AccountEquity()/InitialEquity-1)),2); }
      else {Lot1 = Lot;}
         MN = MagicNumber; SL = StopLoss; TP = TakeProfit;
         makeOrder(OP_SELL); InitPrice = SymbolInfoDouble(Symbol(),SYMBOL_BID); LastPrice = 0; LotHolder = Lot1;
      }
      if(iClose(Symbol(),0,1) < BandLower - BandTriggerBuffer*SymbolInfoDouble(Symbol(),SYMBOL_POINT) && StoCheckLong())
      {
      if(LotMultiplier == true) {Lot1 = NormalizeDouble(Lot * (1 + LotMultiplierPercent*(AccountEquity()/InitialEquity-1)),2); }
      else {Lot1 = Lot;}
         MN = MagicNumber; SL = StopLoss; TP = TakeProfit;
         makeOrder(OP_BUY); InitPrice = SymbolInfoDouble(Symbol(),SYMBOL_ASK); LastPrice = 0; LotHolder = Lot1; 
      }
   }
   SymbolInfoDouble("EURUSD",SYMBOL_BID);
   }

   for(int c=0; c<=OrdersTotal(); c++)
         {
            if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES))
            {
               if(OrderSymbol() == Symbol()&& (OrderMagicNumber()== MagicNumber || OrderMagicNumber() == MagicNumber2))
                 {  
                  counter1 = counter1 +1; 
                 }
                      if(c+1 == OrdersTotal())
                      {
                       counterFinal1 = counter1;
                       counter1 = 0;
                      }
             }
          }   

   if(MultipleOrders == true)
   {
    for(int b=0; b<=OrdersTotal(); b++)
         {
            if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
            {
               if(OrderSymbol() == Symbol()&&OrderMagicNumber()== MagicNumber)
                 {  
                    if(OrderLots() == LotHolder)
                    {
                        if(OrderProfit() < (-1)*OrderLots()*OrderInterval*counterFinal1 && counterFinal1>0)
                        {
                         if(OrderType() == OP_BUY)
                         {OkaySignBuy = true;}
                         if(OrderType() == OP_SELL)
                         {OkaySignSell = true;}
                         OkaySign = true;
                         SLHolder = OrderStopLoss();
                        }
                    }
                    SubLot1 = OrderLots();
                    SubTP = OrderTakeProfit();
                    SubSL = OrderStopLoss();
                  }
                  if(b+1 == OrdersTotal())
                      {
                    if(counterFinal1 < MaximumOrders && OkaySign == true)
                          {
                           if(OkaySignBuy == true)
                              {if(LotMultiplier == true){Lot1 = NormalizeDouble(MathMax(SubLot1 + OrderIncrementMin,Lot*MathPow(OrderMultiplier,counterFinal1)* (1 + LotMultiplierPercent*(AccountEquity()/InitialEquity-1))),2);}
                              else {Lot1 = NormalizeDouble(MathMax(SubLot1 + OrderIncrementMin,Lot*MathPow(OrderMultiplier,counterFinal1)),2);}
                               MN = MagicNumber2; TP = NormalizeDouble((SubTP-SymbolInfoDouble(Symbol(),SYMBOL_ASK))*(1/SymbolInfoDouble(Symbol(),SYMBOL_POINT)),0);
                               if(SameSL == true)
                               {SL = NormalizeDouble((SymbolInfoDouble(Symbol(),SYMBOL_ASK)-SLHolder)*(1/SymbolInfoDouble(Symbol(),SYMBOL_POINT)),0);}
                               else {SL = StopLoss;}
                               makeOrder(OP_BUY);}
                           if(OkaySignSell == true)
                              {if(LotMultiplier == true)
                              {Lot1 = NormalizeDouble(MathMax(SubLot1 + OrderIncrementMin,Lot*MathPow(OrderMultiplier,counterFinal1)* (1 + LotMultiplierPercent*(AccountEquity()/InitialEquity-1))),2);}
                              else {Lot1 = NormalizeDouble(MathMax(SubLot1 + OrderIncrementMin,Lot*MathPow(OrderMultiplier,counterFinal1)),2);}
                               MN = MagicNumber2; TP = NormalizeDouble((SymbolInfoDouble(Symbol(),SYMBOL_BID)-SubTP)*(1/SymbolInfoDouble(Symbol(),SYMBOL_POINT)),0);
                               if(SameSL == true)
                               {SL = NormalizeDouble((SLHolder-SymbolInfoDouble(Symbol(),SYMBOL_BID))*(1/SymbolInfoDouble(Symbol(),SYMBOL_POINT)),0);}
                               else {SL = StopLoss;}
                              makeOrder(OP_SELL);}

                           OkaySign = false;
                           OkaySignBuy = false;
                           OkaySignSell = false;
                          }
                      }
                    if(OrderSymbol() == Symbol()&&OrderMagicNumber()== MagicNumber2)
                    {  
                      if(counterFinal1 > 1)
                      {
                      if(OrderType() == OP_BUY)
                      {LastPrice = OrderOpenPrice();}
                      if(OrderType() == OP_SELL)
                      {LastPrice = OrderOpenPrice();}
                      }
                    }
             }
         }

      if(counterFinal1 >= RetracementActivate)
      {
         for(int c=0; c<=OrdersTotal(); c++)
               {
                  if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES))
                  {
                     if(OrderSymbol() == Symbol()&&(OrderMagicNumber()== MagicNumber || OrderMagicNumber() == MagicNumber2))
                       {  
     

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

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

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

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

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

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

Стоимость полного кода
1 240,60₽ ≈ $15.16