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

Mouteki EA

mouteki ea 01.4.mq4
Вы автор или правообладатель?

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

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

О программе

Mouteki EA — торговый советник для MetaTrader 4, работающий на основе анализа линий тренда. Советник определяет верхнюю и нижнюю линии тренда по ключевым максимумам и минимумам цены и открывает сделки при пробое этих линий. Расчёт стоп-лосса и тейк-профита основывается на оценке потенциального движения цены после пробоя.

Советник проверяет условия входа и модификации позиций в первые 10 секунд каждого четвёртого часа. При достижении заданного уровня прибыли стоп-лосс перемещается в зону безубытка. При формировании нового сигнала в направлении существующей позиции советник может корректировать уровни стоп-лосса и тейк-профита, а при наличии разрешения — добавлять дополнительные позиции. При формировании сигнала в противоположном направлении существующие позиции закрываются.

Для управления торговлей доступны настройки сессий: Лондон, Нью-Йорк и Токио, позволяющие ограничить торговлю определёнными часовыми периодами. Советник поддерживает уведомления о событиях и позволяет управлять количеством одновременных позиций, размером лота и дополнительными смещениями стоп-лосса и тейк-профита.

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

НастройкаОписание
AlertsOn Уведомления — Включает или выключает отправку уведомлений о событиях и условиях
MultiPositions Множественные позиции — Разрешает открытие нескольких позиций одновременно в одном направлении
LotsPerTrade Лот на сделку — Задаёт размер объёма позиции в лотах для каждой сделки
ProfitToMoveSL Прибыль для переноса стоп-лосса — Уровень прибыли в пунктах, при достижении которого стоп-лосс перемещается в зону безубытка
PositiveSL Положительный стоп-лосс — Смещение стоп-лосса в пунктах от цены входа при переносе в безубыток
SL_Offset Смещение стоп-лосса — Дополнительное смещение уровня стоп-лосса в пунктах
TP_Offset Смещение тейк-профита — Дополнительное смещение уровня тейк-профита в пунктах
LondonOpen Лондонская сессия — Разрешает торговлю в лондонской сессии
NewYorkOpen Нью-йоркская сессия — Разрешает торговлю в нью-йоркской сессии
TokyoOpen Токийская сессия — Разрешает торговлю в токийской сессии
Получить полный код

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

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;

   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);
      }

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

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

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

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

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

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

Стоимость полного кода
838,40₽ ≈ $10.25