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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.