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

Mouteki EA

mouteki ea 0.4 modifie16-11-2006-23-46.mq4
Вы автор или правообладатель?

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

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

О программе

Mouteki EA — торговый советник для MetaTrader 4, написанный на языке MQL4. Продукт анализирует графики цен, определяя ключевые точки максимумов и минимумов, и отображает на них аналитические линии.

Советник рисует трендовые линии и проекционные уровни, а также горизонтальные линии, помогая визуально отслеживать структуру цены. Настройки стилей, цветов и ширины линий позволяют настраивать отображение.

EA поддерживает автоматическое открытие позиций при пробое трендовых линий ценой, управление стоп-лоссом с фиксацией прибыли, а также оптимизацию размера лота с учётом серии убыточных сделок. Доступны уведомления и комментарии на графике.

Параметры торговли, такие как объём позиции, допустимый риск и коэффициент уменьшения лота, настраиваются пользователем. Множественные позиции и идентификатор советника управляют одновременной работой нескольких экземпляров.

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

НастройкаОписание
ExpertID Идентификатор советника, используемый для формирования уникального магического номера ордеров
nameEA Название советника, отображаемое в комментариях к ордерам
AlertsOn Включение или отключение звуковых уведомлений при событиях
MultiPositions Разрешение одновременного открытия нескольких позиций в одном направлении
ProfitToMoveSL Прибыль в пунктах, при достижении которой активируется перенос стоп-лосса
PositiveSL Расстояние в пунктах от цены открытия до стоп-лосса при переносе
SL_Offset Дополнительный сдвиг стоп-лосса в пунктах от расчётного значения
TP_Offset Дополнительный сдвиг тейк-профита в пунктах от расчётного значения
Comments Отображение текстовых комментариев на графике
TrendLine Отображение трендовых линий на графике
TrendLineStyle Стиль линий тренга (сплошная, пунктир, точка и т.д.)
TrendLineWidth Толщина линий тренга
UpperTrendLineColour Цвет верхней трендовой линии
LowerTrendLineColour Цвет нижней трендовой линии
ProjectionLines Отображение проекционных ценовых линий
ProjectionLinesStyle Стиль проекционных линий
ProjectionLinesWidth Толщина проекционных линий
UpperProjectionLineColour Цвет верхней проекционной линии
LowerProjectionLineColour Цвет нижней проекционной линии
HorizontLine Отображение горизонтальных линий на графике
Lots Начальный размер лота для торговых операций
MaximumRisk Максимальный процент риска от свободных средств для расчёта размера лота
DecreaseFactor Коэффициент уменьшения лота при серии убыточных сделок
Получить полный код

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

extern int ExpertID = 20050610;
extern string nameEA       = "Mouteki";

extern bool    AlertsOn=True;
extern bool    MultiPositions=False;
extern int     ProfitToMoveSL=40;
extern int     PositiveSL=10;
extern int     SL_Offset=0;
extern int     TP_Offset=0;

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];

extern bool      Comments=true;/*Optional Comments.  Default is false. Orginal variable called "Commen"*/
extern bool      TrendLine=True;/*Default is true to draw current TD Lines*/
extern int       TrendLineStyle=STYLE_SOLID;/*STYLE>_SOLID=0,DASH=1,_DOT=2,_DASHDOT=3,_DASHDDOTDOT=4. Line of code added from original.*/
extern int       TrendLineWidth=1;/*Thinnest or allow dots and dashes = 0 or 1, Thinner=2, Medium=3,Thicker=4,Thickest=5.  Line of code added from original.*/
extern color     UpperTrendLineColour=LimeGreen;/*Line of code added from original.*/
extern color     LowerTrendLineColour=Red;/*Line of code added from original.*/
extern bool      ProjectionLines=True;/*Default is True.  These are the TD Price Projections. Original variable called "Take Prof"*/
extern int       ProjectionLinesStyle=STYLE_DOT;/*STYLE>_SOLID=0,DASH=1,_DOT=2,_DASHDOT=3,_DASHDDOTDOT=4. Line of code added from original.*/
extern int       ProjectionLinesWidth=1;/*Thinnest or allow dots and dashes = 0 or 1, Thinner=2, Medium=3,Thicker=4,Thickest=5.  Line of code added from original.*/
extern color     UpperProjectionLineColour=LimeGreen;/*Line of code added from original.*/
extern color     LowerProjectionLineColour=Red;/*Line of code added from original.*/
extern bool      HorizontLine=true;/*Default is false.  It seems the Horizontal Lines are were the code predicts price may cross TD line.*/
string Comm="";

extern double  Lots              = 0.1;
extern double  MaximumRisk       = 0.02;
extern double  DecreaseFactor    = 3;

bool isBuying = false;
bool isSelling = false;
bool isClosing = false;

int init()
   {
      // код доступен только после оплаты
   }

int deinit()
   {

      for (int i=1;i<=10;i++)
         {
            ObjectDelete("HHL_"+i);ObjectDelete("HL_"+i);
            ObjectDelete("HLL_"+i);ObjectDelete("LL_"+i);
            ObjectDelete("HC1_"+i);
            ObjectDelete("HC2_"+i);
            ObjectDelete("HC3_"+i);
            ObjectDelete("LC1_"+i);
            ObjectDelete("LC2_"+i);
            ObjectDelete("LC3_"+i);
         }
      Comment("");     

   return(0);
  }

double LotsOptimized()
   {
      double lot=Lots;
      int    orders=HistoryTotal();     // Historique des ordres
      int    losses=0;                  // Nombre de trade perdants cons?cutif
/* Selection de la taille du lot */
      lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000,1);
/* Calcul du nombre de perte consecutive */
      if(DecreaseFactor>0)
         {
            for(int i=orders-1;i>=0;i--)
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==False) { Print("Erreur dans l historique!"); break; }
                  if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;

                  if(OrderProfit()>0) break;
                  if(OrderProfit()<0) losses++;
               }
            if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
         }
/* Retour de la taille du lot */
      if(lot<0.1) lot=0.1;
      return(lot);
   }

/* Recherche des Hauts et des Bas dans le graph */
int SetTDPoint(int B)
   {
      int shift;
      if (FractalAsTD==False)
         {
            for (shift=B;shift>2;shift--)
               {       

/*If the High of the left bar is equal to the High of the current bar, the High of the current bar is a valid High*/
                  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 the Low of the left bar is equal to the Low of the current bar, the Low of the current bar is a valid Low*/
                  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);
   }

/* Sommet Haut 1 */
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);         
   }
/* Sommet Haut 2 */
int GetNextHighTD(int P)
   { 
      int i=P+1;
      while(lows[i]<=High[P])
         {
            i++;if(i>Bars-2)return(-1);
         }
      return (i);
   }
/* Sommet Bas 1 */
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); 
   }
/* Sommet Bas 2 */
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 TrendLineHighTD(int H1,int H2,int Step,int Col)
   {
      ObjectSet("HL_"+Step,OBJPROP_TIME1,Time[H2]);
      ObjectSet("HL_"+Step,OBJPROP_TIME2,Time[H1]);
      ObjectSet("HL_"+Step,OBJPROP_PRICE1,High[H2]);
      ObjectSet("HL_"+Step,OBJPROP_PRICE2,High[H1]);
      ObjectSet("HL_"+Step,OBJPROP_COLOR,UpperTrendLineColour);/*TEMP Original OBJPROP_COLOR,Col*/
      if (Step==1)
         ObjectSet("HL_"+Step,OBJPROP_WIDTH,TrendLineWidth);/*Original OBJPROP_WIDTH,2*/
      else 
         ObjectSet("HL_"+Step,OBJPROP_WIDTH,1);
      return(0);
   }   

int TrendLineLowTD(int L1,int L2,int Step,int Col)/*Draw Lower Trend Line*/
   {
      ObjectSet("LL_"+Step,OBJPROP_TIME1,Time[L2]);
      ObjectSet("LL_"+Step,OBJPROP_TIME2,Time[L1]);
      ObjectSet("LL_"+Step,OBJPROP_PRICE1,Low[L2]);
      ObjectSet("LL_"+Step,OBJPROP_PRICE2,Low[L1]);
      ObjectSet("LL_"+Step,OBJPROP_COLOR,LowerTrendLineColour);/*TEMP Original OBJPROP_COLOR,Col*/
      if (Step==1)
         ObjectSet("LL_"+Step,OBJPROP_WIDTH,TrendLineWidth);/*Original OBJPROP_WIDTH,2*/
      else 
         ObjectSet("LL_"+Step,OBJPROP_WIDTH,1);      
      return(0);
   }

string TakeProfitHighTD(int H1,int H2,int Step,int Col)/*Draw Buy TD Price Projection(s)*/
   {
      int i,ii,j=0;
      string Comm="";
      double kH,HC1,HC2,HC3,k,St;
      kH=(High[H2]-High[H1])/(H2-H1);
      while (NormalizeDouble(Point,j)==0)j++; 
         k=0;
         for(i=H1;i>0;i--)
            if(Close[i]>High[H2]-kH*(H2-i)){k=High[H2]-kH*(H2-i);
               break;}
            if (k>0)
               { 
                  Comm=Comm+"UTD_Line ("+DoubleToStr(High[H2]-kH*H2,j)+") broken at "+DoubleToStr(k,j)+", uptargets:\n";
                  ii=Lowest(NULL,0,MODE_LOW,H2-i,i);    
                  HC1=High[H2]-kH*(H2-ii)-Low[ii];
                  HC2=High[H2]-kH*(H2-ii)-Close[ii];
                  ii=Lowest(NULL,0,MODE_CLOSE,H2-i,i);
                  HC3=High[H2]-kH*(H2-ii)-Close[ii];
                  St=TrendLineStyle;/*Original STYLE_SOLID*/ 
               } 
            else
               {
                  k=High[H2]-kH*H2;
                  Comm=Comm+"UTD_Line ("+DoubleToStr(k,j)+"), probable break-up targets:\n";  
                  ii=Lowest(NULL,0,MODE_LOW,H2,0);    
                  HC1=High[H2]-kH*(H2-ii)-Low[ii];
                  HC2=High[H2]-kH*(H2-ii)-Close[ii];
                  ii=Lowest(NULL,0,MODE_CLOSE,H2,0);
                  HC3=High[H2]-kH*(H2-ii)-Close[ii];
                  St=TrendLineStyle;/*Original STYLE_DASHDOT*/ 
               }
            ObjectSet("HL_"+Step,OBJPROP_STYLE,St);  
            Comm=Comm+"T1="+DoubleToStr(HC1+k,j)+" ("+DoubleToStr(HC1/Point,0)+"pts.)\n";//changed "pts.)" to "pts.)\n"
            ObjectSet("HC1_"+Step,OBJPROP_TIME1,Time[H1]);ObjectSet("HC1_"+Step,OBJPROP_TIME2,Time[0]);
            ObjectSet("HC1_"+Step,OBJPROP_PRICE1,HC1+k);ObjectSet("HC1_"+Step,OBJPROP_PRICE2,HC1+k);
            ObjectSet("HC1_"+Step,OBJPROP_COLOR,Col);ObjectSet("HC1_"+Step,OBJPROP_STYLE,St);      
            if (Step==1)
               {
                  ObjectSet("HC1_"+Step,OBJPROP_WIDTH,ProjectionLinesWidth);/*Original OBJPROP_WIDTH,2*/
                  ObjectSet("HC1_"+Step,OBJPROP_STYLE,ProjectionLinesStyle);/*This Line of code added from original. TD Upper Projection Line Style*/
               } 
            else
               {
                  ObjectSet("HC1_"+Step,OBJPROP_WIDTH,2);
               }
            return(Comm); 
   }

string TakeProfitLowTD(int L1,int L2,int Step,int Col)/*Draw Sell TD Price Projection(s)*/
   {
      int i,ii,j=0;
      string Comm="";
      double kL,LC1,LC2,LC3,k,St;
      kL=(Low[L1]-Low[L2])/(L2-L1);
      while (NormalizeDouble(Point,j)==0)j++; 
         k=0;
         for(i=L1;i>0;i--)
            if(Close[i]<Low[L2]+kL*(L2-i))
               {k=Low[L2]+kL*(L2-i);
               break;}
            if (k>0)
               {
                  Comm=Comm+"LTD_Line ("+DoubleToStr(Low[L2]+kL*L2,j)+") broken at "+DoubleToStr(k,j)+", downtargets:\n";
                  ii=Highest(NULL,0,MODE_HIGH,L2-i,i);    
                  LC1=High[ii]-(Low[L2]+kL*(L2-ii));
                  LC2=Close[ii]-(Low[L2]+kL*(L2-ii));
                  i=Highest(NULL,0,MODE_CLOSE,L2-i,i);
                  LC3=Close[ii]-(Low[L2]+kL*(L2-ii));
                  St=TrendLineStyle;/*Original STYLE_SOLID*/ 
               } 
            else
               {
                  k=Low[L2]+kL*L2;
                  Comm=Comm+"LTD_Line ("+DoubleToStr(k,j)+"), probable downbreak targets:\n";        
                  ii=Highest(NULL,0,MODE_HIGH,L2,0);    
                  LC1=High[ii]-(Low[L2]+kL*(L2-ii));
                  LC2=Close[ii]-(Low[L2]+kL*(L2-ii));
                  ii=Highest(NULL,0,MODE_CLOSE,L2,0);
                  LC3=Close[ii]-(Low[L2]+kL*(L2-ii));
                  St=TrendLineStyle;/*Original STYLE_DASHDOT*/ 
               }
            ObjectSet("LL_"+Step,OBJPROP_STYLE,St);   
            Comm=Comm+"T1="+DoubleToStr(k-LC1,j)+" ("+DoubleToStr(LC1/Point,0)+"pts.)\n";//changed "pts.)" to "pts.)\n"
            ObjectSet("LC1_"+Step,OBJPROP_TIME1,Time[L1]);ObjectSet("LC1_"+Step,OBJPROP_TIME2,Time[0]);
            ObjectSet("LC1_"+Step,OBJPROP_PRICE1,k-LC1);ObjectSet("LC1_"+Step,OBJPROP_PRICE2,k-LC1);
            ObjectSet("LC1_"+Step,OBJPROP_COLOR,Col);ObjectSet("LC1_"+Step,OBJPROP_STYLE,St);      
            if (Step==1)
               {
                  ObjectSet("LC1_"+Step,OBJPROP_WIDTH,ProjectionLinesWidth);/*Original OBJPROP_WIDTH,2*/
                  ObjectSet("LC1_"+Step,OBJPROP_STYLE,ProjectionLinesStyle);/*This Line of code added from original. TD Lower Projection Line Style*/
               } 
            else
               {
                  ObjectSet("LC1_"+Step,OBJPROP_WIDTH,2);
               }
            return(Comm);
   }

string TDMain(int Step)
   {
      int H1,H2,L1,L2;

      int i,j; while (NormalizeDouble(Point,j)==0)j++;
      double Style;
      double Col[20];Col[0]=UpperProjectionLineColour/*Original Col[0]=Red, Colour for Current Upper TD Projection*/;Col[2]=Magenta;Col[4]=Chocolate;Col[6]=Goldenrod;Col[8]=SlateBlue;
                Col[1]=LowerProjectionLineColour/*Original Col[1]=Blue, Colour for Current Lower TD Projection*/;Col[3]=FireBrick;Col[5]=Green;Col[7]=MediumOrchid;Col[9]=CornflowerBlue;
                Col[10]=Red;Col[12]=Magenta;Col[14]=Chocolate;Col[16]=Goldenrod;Col[18]=SlateBlue;
                Col[11]=Blue;Col[13]=FireBrick;Col[15]=Green;Col[17]=MediumOrchid;Col[19]=CornflowerBlue;
      Step=Step+BackSteps;  
      H1=GetHighTD(Step);
      H2=GetNextHighTD(H1);
      L1=GetLowTD(Step);
      L2=GetNextLowTD(L1);
      TrendLineBreakUp=High[H2]-(High[H2]-High[H1])/(H2-H1)*H2;//added line
      TrendLineBreakDown=Low[L2]+(Low[L1]-Low[L2])/(L2-L1)*L2;//added line
      if (H1<0)
         Comm=Comm+"UTD no TD up-point \n";
      else 
      if (H2<0)
         Comm=Comm+"UTD no TD point-upper then last one ("+DoubleToStr(High[H1],j)+")\n";
      else 
         Comm=Comm+"UTD "+DoubleToStr(High[H2],j)+"  "+DoubleToStr(High[H1],j)+"\n"; 
      if (L1<0)
         Comm=Comm+"LTD no TD down-point \n";
      else 
      if (L2<0)
         Comm=Comm+"LTD no TD point-lower then last one ("+DoubleToStr(Low[L1],j)+")\n";   
      else 
         Comm=Comm+"LTD  "+DoubleToStr(Low[L2],j)+"  "+DoubleToStr(Low[L1],j)+"\n";

      if (Step==1)
         Style=STYLE_SOLID;
      else 
         Style=STYLE_DOT;
      if (H1>0 && H2>0)
         {
            if (TrendLine==1)
               {
                  ObjectCreate("HL_"+Step,OBJ_TREND,0,0,0,0,0);
                  TrendLineHighTD(H1,H2,Step,Col[Step*2-2]);
               } 
            else 
               ObjectDelete("HL_"+Step);
            if (HorizontLine==1 && Step==1)
               {
                  ObjectCreate("HHL_"+Step,OBJ_HLINE,0,0,0,0,0);
                  ObjectSet("HHL_"+Step,OBJPROP_BACK,True);//Line added
               } 
            else 
               ObjectDelete("HHL_"+Step);
            if (ProjectionLines==1)
              

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

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

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

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

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

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

Стоимость полного кода
1 998,50₽ ≈ $24.43