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

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 и перейдите к оплате.

Стоимость полного кода
1 018,70₽ ≈ $12.45