Mouteki EA
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mouteki ea 0.4.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Mouteki EA v0.4 — торговый советник для MetaTrader 4, работающий на основе анализа трендовых линий, построенных по точкам разворота цены (TD Points). Советник определяет верхнюю и нижнюю трендовые линии по ключевым максимумам и минимумам, а затем открывает длинные или короткие позиции при пробое этих линий ценой.
Торговые операции выполняются только в первые 10 секунд каждого 4-часового интервала, что ограничивает частоту проверок и открытия сделок. В качестве фильтрации времени доступны сессии Лондона, Нью-Йорка и Токио — каждая из них может быть включена или отключена отдельно.
Советник поддерживает управление открытыми позициями: перемещение стоп-лосса при достижении определённой прибыли, корректировку тейк-профита и стоп-лосса при формировании новых setups в том же направлении, а также закрытие противоположных позиций при обратном пробое трендовой линии. Дополнительно реализована функция оповещений о ключевых событиях.
Настройки программы
| Настройка | Описание |
|---|---|
| ExpertID | ID советника — Идентификатор эксперта, используемый при формировании магического номера ордеров для их различения. |
| AlertsOn | Оповещения — Включает или отключает всплывающие уведомления о пробое трендовых линий и других событиях. |
| MultiPositions | Множественные позиции — Разрешает одновременное удержание нескольких позиций в одном направлении. При отключении открывается только одна позиция. |
| LotsPerTrade | Лот на сделку — Размер лота для каждой открытой позиции. |
| ProfitToMoveSL | Прибыль для перемещения СЛ — Порог прибыли в пунктах, при превышении которого стоп-лосс перемещается в безубытку на уровень PositiveSL. |
| PositiveSL | Положительный стоп-лосс — Расстояние в пунктах, на которое перемещается стоп-лосс в безубытку при достижении прибыли, превышающей параметр ProfitToMoveSL. |
| SL_Offset | Смещение стоп-лосса — Дополнительный сдвиг стоп-лосса в пунктах от расчётного значения (положительное значение — ослабление защиты). |
| TP_Offset | Смещение тейк-профита — Дополнительный сдвиг тейк-профита в пунктах от расчётного значения. |
| LondonOpen | Лондонская сессия — Разрешает открытие сделок в лондонской торговой сессии (с 7:00 до 16:00 по серверному времени). |
| NewYorkOpen | Нью-Йоркская сессия — Разрешает открытие сделок в нью-йоркской торговой сессии (с 12:00 до 21:00 по серверному времени). |
| TokyoOpen | Токийская сессия — Разрешает открытие сделок в токийской торговой сессии (с 0:00 до 8:00 и с 23:00 до 24:00 по серверному времени). |
Поиск по коду файла
extern int ExpertID = 30050610;
extern bool AlertsOn=true;
extern bool MultiPositions=false;
extern double LotsPerTrade=1;
extern int ProfitToMoveSL=40;
extern int PositiveSL=10;
extern int SL_Offset=0;
extern int TP_Offset=0;
extern bool LondonOpen=true;
extern bool NewYorkOpen=true;
extern bool TokyoOpen=true;
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.
double TrendLineBreakUpPrev1=-1;//Line added.
bool TrendLineBreakUpFlag=False;//Line added.
double TrendLineBreakDown=-1;//Line added.
double TrendLineBreakDownPrev=-1;//Line added.
double TrendLineBreakDownPrev1=-1;//Line added.
bool TrendLineBreakDownFlag=False;//Line added.
bool BothTLBroken=false;
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, iii, 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()>=ProfitToMoveSL*Point &&
OrderOpenPrice()-OrderStopLoss()>=0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+PositiveSL*Point,OrderTakeProfit(),0);
continue;
}
if(OrderType()==OP_SELL &&
OrderOpenPrice()-Ask>=ProfitToMoveSL*Point &&
OrderOpenPrice()-OrderStopLoss()<=0)
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-PositiveSL*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);
TrendLineBreakUpPrev1=High[H2]-kH*(H2-2);
TrendLineBreakDown=Low[L2]+kL*L2;
TrendLineBreakDownPrev=Low[L2]+kL*(L2-1);
TrendLineBreakDownPrev1=Low[L2]+kL*(L2-2);
/*
Print("H1=", H1, " High[H1]=", High[H1]);
Print("H2=", H2, " High[H2]=", High[H2]);
Print("L1=", L1, " Low[L1]=", Low[L1]);
Print("L2=", L2, " Low[L2]=", Low[L2]);
Print("TrendLineBreakUp=", TrendLineBreakUp);
Print("TrendLineBreakDown=", TrendLineBreakDown);
Print("Open[0]=", Open[0], " Open[1]=", Open[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());
}
*/
BothTLBroken=true;
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]<TrendLineBreakUpPrev1||
Open[3]<TrendLineBreakUpPrev1)
) || (
BothTLBroken==true &&
Open[0]>TrendLineBreakUp&&Open[0]>TrendLineBreakDown && (
Open[1]<TrendLineBreakDownPrev||Open[2]<TrendLineBreakDownPrev1||
Open[3]<TrendLineBreakDownPrev1)
))
{
BothTLBroken=false;
if(AlertsOn)
Alert("UTL Break>",TrendLineBreakUp," on ",Symbol()," ",Period()," @ ",Ask);
ii=Lowest(NULL,0,MODE_LOW,H2-1,1);
iii=Lowest(NULL,0,MODE_LOW,H2-H1,H1);
pp=MathMax(High[H2]-kH*(H2-ii)-Low[ii], High[H2]-kH*(H2-iii)-Low[iii]);
tp=pp-spread*Point+Open[0]+TP_Offset*Point;
if (pp>90*Point)
sl=Open[0]-spread*Point-MathRound(10000*pp*0.33)/10000-SL_Offset*Point;
else
sl=Open[0]-spread*Point-MathRound(10000*pp*0.5)/10000-SПоказано первые 50% кода (символов: 10187)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.