Mouteki EA
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mouteki ea.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для платформы MetaTrader 4, реализующий торговую логику на основе построения линий тренда по локальным экстремумам цены. Он определяет направление тренда, отслеживает пробои линий и управляет позициями — открывает, модифицирует и закрывает ордера. Проверка условий и управление позициями выполняются в заданные временные интервалы. Советник использует торговые API MetaTrader для исполнения операций и может отправлять уведомления о событиях.
Настройки программы
| Настройка | Описание |
|---|---|
| ExpertID | Идентификатор эксперта — Целое число, используемое при формировании магического номера ордеров для их идентификации. |
| AlertsOn | Включить уведомления — Переключатель, определяющий, будут ли отправляться уведомления о событиях и условиях. |
| MultiPositions | Множественные позиции — Переключатель, разрешающий или запрещающий одновременное открытие нескольких позиций. |
| LotsPerTrade | Объём на сделку — Числовой параметр, задающий размер лота для каждой новой сделки. |
Поиск по коду файла
extern int ExpertID = 40050610;
extern bool AlertsOn=true;
extern bool MultiPositions=false;
extern double LotsPerTrade=1;
int spread;
bool TD=False;/*Default is false. True setting draws up and down arrows instead of dots on TD Points creating more clutter.*/
int BackSteps=0;/*Used to be extern int now just int. Leave at 0*/
int ShowingSteps=1;/*Used to be extern int now just int. Leave at 1*/
bool FractalAsTD=false;/*Used to be extern bool now just bool. Leave at false, otherwise Trend Lines based on Fractal Points not TD Points*/
double TrendLineBreakUp=-1;//Line added.
double TrendLineBreakUpPrev=-1;//Line added.
bool TrendLineBreakUpFlag=False;//Line added.
double TrendLineBreakDown=-1;//Line added.
double TrendLineBreakDownPrev=-1;//Line added.
bool TrendLineBreakDownFlag=False;//Line added.
double highs[100000];
double lows[100000];
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int SetTDPoint(int B)
{
int shift;
if (FractalAsTD==false)
{
for (shift=B;shift>2;shift--)
{
if (High[shift+2]<High[shift] && High[shift+1]<High[shift] &&
High[shift-1]<High[shift] && High[shift-2]<High[shift])
highs[shift]=High[shift];
if (Low[shift+2]>Low[shift] && Low[shift+1]>Low[shift] &&
Low[shift-1]>Low[shift] && Low[shift-2]>Low[shift])
lows[shift]=Low[shift];
}
highs[0]=0;
lows[0]=0;
highs[1]=0;
lows[1]=0;
}
else
{
for (shift=B;shift>3;shift--)
{
if (High[shift+1]<=High[shift] && High[shift-1]<High[shift] &&
High[shift+2]<=High[shift] && High[shift-2]<High[shift])
highs[shift]=High[shift];
else highs[shift]=0;
if (Low[shift+1]>=Low[shift] && Low[shift-1]>Low[shift] &&
Low[shift+2]>=Low[shift] && Low[shift-2]>Low[shift])
lows[shift]=Low[shift];
else lows[shift]=0;
}
highs[0]=0;
lows[0]=0;
highs[1]=0;
lows[1]=0;
highs[2]=0;
lows[2]=0;
}
return(0);
}
int GetHighTD(int P)
{
int i=0,j=0;
while (j<P)
{
i++;
while(highs[i]==0)
{i++;if(i>Bars-2)return(-1);}
j++;
}
return (i);
}
int GetNextHighTD(int P)
{
int i=P+1;
while(highs[i]<=High[P]){i++;if(i>Bars-2)return(-1);}
return (i);
}
int GetLowTD(int P)
{
int i=0,j=0;
while (j<P)
{
i++;
while(lows[i]==0)
{i++;if(i>Bars-2)return(-1);}
j++;
}
return (i);
}
int GetNextLowTD(int P)
{
int i=P+1;
while(lows[i]>=Low[P] || lows[i]==0){i++;if(i>Bars-2)return(-1);}
return (i);
}
int start()
{
// код доступен только после оплаты
}
int cnt, H1, H2, L1, L2, ii, pos, total, ticket;
double kH, kL, k, pp, tp, sl;
int MagicNumber = MakeMagicNumber(ExpertID, true);
if (MathMod(Hour(),4)==0 && Minute()==0 && Seconds()<10)
{
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==true)
{
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY &&
Bid-OrderOpenPrice()>=40*Point &&
OrderOpenPrice()-OrderStopLoss()>=0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+10*Point,OrderTakeProfit(),0);
continue;
}
if(OrderType()==OP_SELL &&
OrderOpenPrice()-Ask>=40*Point &&
OrderOpenPrice()-OrderStopLoss()<=0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-10*Point,OrderTakeProfit(),0);
continue;
}
}
}
else
Print("OrderSelect returned the error of ",GetLastError());
}
SetTDPoint(Bars-1);
H1=GetHighTD(1);
H2=GetNextHighTD(H1);
L1=GetLowTD(1);
L2=GetNextLowTD(L1);
kH=(High[H2]-High[H1])/(H2-H1);
kL=(Low[L1]-Low[L2])/(L2-L1);
TrendLineBreakUp=High[H2]-kH*H2;
TrendLineBreakUpPrev=High[H2]-kH*(H2-1);
TrendLineBreakDown=Low[L2]+kL*L2;
TrendLineBreakDownPrev=Low[L2]+kL*(L2-1);
if(Open[0]>TrendLineBreakUp && Open[0]<TrendLineBreakDown)
{
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==true)
{
if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
continue;
}
if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
continue;
}
}
else
Print("OrderSelect returned the error of ",GetLastError());
}
ArrayInitialize(highs, 0.0);
ArrayInitialize(lows, 0.0);
return(0);
}
/*if(Open[0]>TrendLineBreakUp && Open[0]>TrendLineBreakDown &&
(Open[1]<TrendLineBreakUpPrev || Open[2]<TrendLineBreakUpPrev) &&
H2<50 && L2<50)*/
if(Open[0]>TrendLineBreakUp && Open[0]>TrendLineBreakDown &&
(Open[1]<TrendLineBreakUpPrev || Open[2]<TrendLineBreakUpPrev))
{
if(AlertsOn)
Alert("UTL Break>",TrendLineBreakUp," on ",Symbol()," ",Period()," @ ",Ask);
ii=Lowest(NULL,0,MODE_LOW,H2-1,1);
pp=High[H2]-kH*(H2-ii)-Low[ii];
tp=pp-spread*Point+Open[0];
if (pp>90*Point)
sl=Open[0]-spread*Point-MathRound(10000*pp*0.33)/10000;
else
sl=Open[0]-spread*Point-MathRound(10000*pp*0.5)/10000;
total=OrdersTotal();
pos=0;
for(cnt=0;cnt<total;cnt++)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==true)
{
Показано первые 50% кода (символов: 8436)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.