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

Flat Trend v1.0

flat trend.v1.0.mq4
Вы автор или правообладатель?

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

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

О программе

Flat Trend v1.0 — советник для MetaTrader 4, который анализирует рынок с помощью пользовательского индикатора FlatTrend V2 и дополнительных фильтров на базе ADX и Juice. Он определяет условия для открытия длинных и коротких позиций и управляет торговыми операциями на основании заданных правил входа и выхода.

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

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

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

НастройкаОписание
MaximumRisk MaximumRisk — Максимальный риск в процентах от свободного маржинального баланса, используемый при расчёте размера лота при активном money management.
Magic Magic — Уникальный идентификатор (магическое число) ордеров, позволяющий различать позиции, открытые данным советником, от других советников и ручных сделок.
comment comment — Текстовый комментарий, прикрепляемый к каждому открытому ордеру для идентификации позиции в истории торгов.
sep1 sep1 — Разделитель-строка, используемая в настройках советника для визуального группирования параметров.
sep2 sep2 — Разделитель-строка, используемая в настройках советника для визуального группирования параметров.
sep3 sep3 — Разделитель-строка, используемая в настройках советника для визуального группирования параметров.
sep4 sep4 — Разделитель-строка, используемая в настройках советника для визуального группирования параметров.
Получить полный код

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

extern int     Trigger.Period=5;
extern int     Filter.Period.1=15;
extern int     Filter.Period.2=60;
extern bool    Ignore.Light.Colors.For.Entry=false;
extern bool    Ignore.Light.Colors.For.Exit=true;

extern double  tsl.divisor=0.40;
extern int     stoploss.pips=40;
extern bool    Use.ADR.for.SL.pips?=true;

extern bool    Use.Money.Management?=false;//if false, lot=Minimum.Lot
extern double  Minimum.Lot=1;
extern double  MaximumRisk=0.03;
extern int     Lot.Margin=100;
extern int     Magic=1801;
extern string  comment=" Flat.Trend.v1.0[EA]";
extern string  sep1="----------------";
extern bool    Use.Only.First2.Indicators=false;
extern bool    Use.Trading.Hours.Restriction = false;
extern int     Start.Trading.Hour.Begin = 0;
extern int     Start.Trading.Hour.End   = 24;

extern string  sep2="----------------";
extern bool    Use.Juice=true;
extern int     Juice.TimeFrame= 5;
extern int     Juice.Period= 7;
extern int     Juice.Level = 4;
extern string  sep3="----------------";
extern bool    Use.Adx   = true;
extern int     Adx.TimeFrame   = 5;
extern int     Adx.Period   = 14;
extern int     Adx.Threshold   = 20;
extern bool    Use.Plus.Minus.DI   = true;
extern string  sep4="----------------";
extern int     Move.To.BreakEven.at.pips=20;
extern int     Move.To.BreakEven.Lock.pips=1;

int b.ticket, s.ticket, slip;
string DR, DR1;
double avg.rng, rng, sum.rng, x, Year.ADR, ADR.AddOn=1.40;
int t0c, t1c, t2c, t3c, t0p, t1p, t2p, t3p;
int f10c, f11c, f12c, f13c, f10p, f11p, f12p, f13p;
int f20c, f21c, f22c, f23c, f20p, f21p, f22p, f23p;

bool TradingEnabled, LongTradeEnabled, ShortTradeEnabled;
double ADXMain1, PlusDI1, MinusDI1, ADXMain2, PlusDI2, MinusDI2, CurrentJuice;

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

void Indicator.Values() 
{  t0c=iCustom(NULL,Trigger.Period, "FlatTrend V2", 3, 1); //LightGreen.
   t1c=iCustom(NULL,Trigger.Period, "FlatTrend V2", 1, 1); //Lime.
   t2c=iCustom(NULL,Trigger.Period, "FlatTrend V2", 2, 1); //Salmon.
   t3c=iCustom(NULL,Trigger.Period, "FlatTrend V2", 0, 1); //Red.

   t0p=iCustom(NULL,Trigger.Period, "FlatTrend V2", 3, 2); //LightGreen.
   t1p=iCustom(NULL,Trigger.Period, "FlatTrend V2", 1, 2); //Lime.
   t2p=iCustom(NULL,Trigger.Period, "FlatTrend V2", 2, 2); //Salmon.
   t3p=iCustom(NULL,Trigger.Period, "FlatTrend V2", 0, 2); //Red.

   f10c=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 3, 1); //LightGreen.
   f11c=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 1, 1); //Lime.
   f12c=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 2, 1); //Salmon.
   f13c=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 0, 1); //Red.

   f10p=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 3, 2); //LightGreen.
   f11p=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 1, 2); //Lime.
   f12p=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 2, 2); //Salmon.
   f13p=iCustom(NULL,Filter.Period.1, "FlatTrend V2", 0, 2); //Red.

   f20c=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 3, 1); //LightGreen.
   f21c=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 1, 1); //Lime.
   f22c=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 2, 1); //Salmon.
   f23c=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 0, 1); //Red.

   f20p=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 3, 2); //LightGreen.
   f21p=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 1, 2); //Lime.
   f22p=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 2, 2); //Salmon.
   f23p=iCustom(NULL,Filter.Period.2, "FlatTrend V2", 0, 2); //Red.
}

void Filter.Values()
{  ADXMain1=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MAIN,1);
   MinusDI1=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MINUSDI,1);
   PlusDI1 =iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_PLUSDI,1);
   ADXMain2=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MAIN,2);
   MinusDI2=iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_MINUSDI,2);
   PlusDI2 =iADX(NULL,Adx.TimeFrame,Adx.Period,PRICE_CLOSE,MODE_PLUSDI,2);
   CurrentJuice = Juice(1, Juice.Period, Juice.Level,Juice.TimeFrame);
}

double Daily.Range() 
{  if (DR==TimeToStr(CurTime(),TIME_DATE)) 
   {  return(NormalizeDouble(avg.rng,Digits));
   }
   rng=0;sum.rng=0;avg.rng=0;
   for (int i=0;i<iBars(Symbol(),1440);i++) 
   {  rng=(iHigh(Symbol(),PERIOD_D1,i)-iLow(Symbol(),PERIOD_D1,i));
      sum.rng+=rng;
   }
   double db=iBars(Symbol(),1440);
   avg.rng=sum.rng/db;
   DR=TimeToStr(CurTime(),TIME_DATE);
   return (NormalizeDouble(avg.rng,Digits));
}

double Year.Avg.ADR() 
{  if (DR1==TimeToStr(CurTime(),TIME_DATE)) 
   {  return(NormalizeDouble(Year.ADR,Digits));
   }
   Year.ADR=0;

   for (int i=1;i<151;i++) 
   {  Year.ADR=+(iHigh(Symbol(),PERIOD_D1,i)-iLow(Symbol(),PERIOD_D1,i));
   }
   Year.ADR=(Year.ADR*ADR.AddOn)/150;
   DR1=TimeToStr(CurTime(),TIME_DATE);
   return (NormalizeDouble(Year.ADR,Digits));
}

void PosCounter() 
{  b.ticket=0;s.ticket=0;
   for (int cnt=0;cnt<=OrdersTotal();cnt++)   
   {  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) 
      {  if (OrderType()==OP_SELL) {s.ticket=OrderTicket();}
         if (OrderType()==OP_BUY)  {b.ticket=OrderTicket();} 
      }
   }
}

double LotCalc() 
{  double lot;
   if (Use.Money.Management?)   
   {  //lot=AccountFreeMargin()*(MaximumRisk/Lot.Margin);
      lot=NormalizeDouble((AccountFreeMargin()*MaximumRisk)/(MarketInfo(Symbol(),MODE_TICKVALUE)*stoploss.pips),2);
   }
   if (!Use.Money.Management?) {lot=Minimum.Lot;}
   return(lot);
}

void comments()   {
if(MarketInfo(Symbol(),MODE_SWAPLONG)>0) string swap="longs.";
else swap="shorts.";
if(MarketInfo(Symbol(),MODE_SWAPLONG)<0 && MarketInfo(Symbol(),MODE_SWAPSHORT)<0) swap="your broker. :(";
Comment("Last Tick: ",TimeToStr(CurTime(),TIME_DATE|TIME_SECONDS),"\n",

           "Average Daily Range: ",Daily.Range(),"\n",
           "Trailing Stop: ",x,"\n",
           "Open Long/Short Ticket #","\'","s: ",b.ticket," ",s.ticket,"  Profit: ",OrderProfit());  }

void Trail.Stop() 
{  PosCounter();

   if(b.ticket>0) 
   {  double bsl=NormalizeDouble(x,Digits);double b.tsl=0;
      OrderSelect(b.ticket,SELECT_BY_TICKET);

      if(OrderStopLoss()<OrderOpenPrice() && OrderOpenPrice()-OrderStopLoss()<x) 
      {  bsl=OrderOpenPrice()-OrderStopLoss();
      }

      if(OrderStopLoss(

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

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

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

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

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

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

Стоимость полного кода
1 263₽ ≈ $15.44