Momo_Trades_V3

Author: #xrustsolution#
Profit factor:
0.72
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Indicators Used
MACD HistogramMoving average indicator
Miscellaneous
It plays sound alerts
18 Views
0 Downloads
0 Favorites
Momo_Trades_V3
//+------------------------------------------------------------------+
//|                                                  Momo_Trades.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "#xrustsolution#"
#property link      "#xrust.ucoz.net#"
//-------------------------------------------------------------------+
// äîáàâëåíà ôóíêöèÿ áåçóáûòêà                                       +
// äîáàâëåí ðàñ÷åò ÒÏ îòøèðèíû êàíàëà
//---- input parameters----------------------------------------------+
extern double    Lots=0.1;
extern double    Risk=0.1;
extern int       Sl=100;
extern int       Tp=0;
extern int       bu=0;//êîë-âî ïóíêòîâ òðàëà: Åñëè "0",òî â áåçóáûòîê
extern int       magic=78977;
extern int       PriseShift=10;
extern bool      AutoLot=false;
extern bool      CloseEndDay=true;
extern bool      BU=false;
//---- Ma parameters-------------------------------------------------+
extern int       MaPeriod=22;
extern int       MaShift=1;
//---- MaCd parameters-----------------------------------------------+ 
extern int       Fast=12;      
extern int       Slow=26;
extern int       Signal=9;
extern int       MacdShift=1;
//------Variables----------------------------------------------------+
static int prevtime = 0 ;
double MacdMain[11];
//int
bool UseSound=false;
//------------------
bool first=true;
double MinLot, MaxLot, MarginMinLot;//,Risk=0.1; 
int    MinLotDgts;
//+------------------------------------------------------------------+
void FirstCalc()
{
// 
// Ïðåäñòàðòîâûé ðàñ÷åò. Âûïîëíÿåòñÿ îäèí ðàç - ïðè çàïóñêå
// (è êàæäûé ðàç ïîñëå ñáîÿ ñâÿçè).
//
      first=false;
//+--- Ìèíèìàëüíûé è ìàêñèìàëüíûé ðàçìåðû ëîòîâ
   MinLot=MarketInfo(Symbol(),MODE_MINLOT);
   if(MinLot<0.1) MinLotDgts=2; // ðàçìåðíîñòü ìèíëîòà   
   else
   {
      if(MinLot<1.0) MinLotDgts=1;
      else MinLotDgts=0;
   }
   MaxLot=MarketInfo(Symbol(),MODE_MAXLOT);   
//----
   return;
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   //if(!IsTesting())return(0);



   
   ArrayInitialize(MacdMain,0.0); 
// Æäåì, êîãäà ñôîðìèðóåòñÿ íîâûé áàð
   if (Time[0] == prevtime) return(0);
      prevtime = Time[0]; 
      MACD();  
      if(first==true) FirstCalc();
//----------------------BU--------------------------------------------+   
   if(OrdersTotal()>0&&BU){
    for(int n=0;n<OrdersTotal();n++){
     if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){Bu(OrderTicket());}}}
//-------------------------------------------------------------------+
   if(OrdersTotal()<1){
   if(MacdBuy()&&EmaBuy()){open(false,Sl,Tp,Lots);}
   
   if(MacdSell()&&EmaSell()){open(true,Sl,Tp,Lots);}
   }
//-------------------------------------------------------------------+
   if(DayOfWeek()!=5){int end=23;}else{end=21;}
   if(CloseEndDay&&OrdersTotal()>0&&Hour()==end){
    for(int m=0;m<OrdersTotal();n++){
     if(OrderSelect(m,SELECT_BY_POS,MODE_TRADES)){del(OrderTicket());}}} 


   if(OrdersTotal()>0){Comment(TimeOpenLastPos());}
//----
   return(0);
  }
//+------------------------------------------------------------------+
double CalcLotsAuto()
{
   // íóæåí çàëîã íà ìèíëîò
   double MarginMinLot=MarketInfo(Symbol(),MODE_MARGINREQUIRED)*MinLot;
   // èìååì ñâîáîäíûõ ñðåäñòâ
   double FreeMargin=AccountFreeMargin();
   // åñëè èõ íå èìååì :(
   if(MarginMinLot>FreeMargin) return(-1.0);
   // à åñëè èìååì, òî ñêîëüêî ëîòîâ ìîæåì ñåáå ïîçâîëèòü íà ïîçó
   int n=1;
   int m=NormalizeDouble(MaxLot/MinLot,0);
   double level=MarginMinLot*2;
   while(level<=FreeMargin && n<=m)
   {
      n++;
      level=level+MarginMinLot*n*Risk; // Ìåíåå àãðåññèâíî, äëÿ ìèíèôîðåêñà
      //level=level+MarginMinLot*MathSqrt(n*Risk); // Áîëåå àãðåññèâíî
   }
   n--;
   double lots=NormalizeDouble((MinLot*n),MinLotDgts);
   return(lots);
}  
//+------------------------------------------------------------------+
void MACD(){
for(int i=0;i<10;i++){
MacdMain[i]=iMACD(Symbol(),0,Fast,Slow,Signal,0,MODE_MAIN,MacdShift+i);}}
//+------------------------------------------------------------------+
bool MacdBuy(){
bool _MacdBuy=false;
   if(
     (MacdMain[3]>MacdMain[4]&&
      MacdMain[4]>MacdMain[5]&&
      MacdMain[5]==0&&
      MacdMain[5]>MacdMain[6]&&
      MacdMain[6]>MacdMain[7])||
     (MacdMain[3]>MacdMain[4]&&
      MacdMain[4]>MacdMain[5]&&
      MacdMain[5]>=0&&
      MacdMain[6]<=0&& 
      MacdMain[6]>MacdMain[7]&&
      MacdMain[7]>MacdMain[8])){_MacdBuy=true;}
return(_MacdBuy);}      
//+------------------------------------------------------------------+
bool MacdSell(){
bool _MacdSell=false;
   if(
     (MacdMain[3]<MacdMain[4]&&
      MacdMain[4]<MacdMain[5]&&
      MacdMain[5]==0&&
      MacdMain[5]<MacdMain[6]&&
      MacdMain[6]<MacdMain[7])||
     (MacdMain[3]<MacdMain[4]&&
      MacdMain[4]<MacdMain[5]&&
      MacdMain[5]<=0&&
      MacdMain[6]>=0&& 
      MacdMain[6]<MacdMain[7]&&
      MacdMain[7]<MacdMain[8])){_MacdSell=true;}
return(_MacdSell);}  
//+------------------------------------------------------------------+  
bool EmaBuy(){bool _Emabuy=false;
 if(Close[MaShift]
    -iMA(Symbol(),0,MaPeriod,0,1,0,MaShift)>PriseShift*Point)
      {_Emabuy=true;}
return(_Emabuy);}
//+------------------------------------------------------------------+  
bool EmaSell(){bool _EmaSell=false;
 if(iMA(Symbol(),0,MaPeriod,0,1,0,MaShift)
         -Close[MaShift]>PriseShift*Point){_EmaSell=true;}
return(_EmaSell);}  
//--------Ôóíêöèÿ îòêðûòèÿ îðäåðîâ-------------------------------------+
int open(bool tip,int Sl,int Tp,double lots)
{//tip = false => OP_BUYSTOP ; tip = true => OP_SELLSTOP;
   GetLastError();
   int err;
   if(AutoLot){lots=CalcLotsAuto();}
   double lastprise,prise,sl,tp; // ñàìàÿ ñâåæàÿ öåíà
   int ticket;
   int slip =(MarketInfo(Symbol(),MODE_SPREAD))*Point;//ìàêñ îòêëîíåíèå = ñïðåäó
   
//------   
   while (!IsTradeAllowed()){ Sleep(5000);}// åñëè ðûíîê çàíÿò òî ïîäîæäåì 5 ñåê
   if (tip == false)
    {
     prise = NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits);
     if(Sl!=0){sl = NormalizeDouble((MarketInfo(Symbol(),MODE_BID)-(Sl*Point)),Digits);}else{sl=0;}
     if(Tp!=0){tp = NormalizeDouble((MarketInfo(Symbol(),MODE_ASK)+(Tp*Point)),Digits);}else{tp=0;}
     for(int i=0;i<5;i++) 
      {
       RefreshRates();// îáíîâèì öåíó
        ticket = OrderSend(Symbol(), OP_BUY,lots ,prise, slip,sl,tp,NULL,magic,0, Blue);
         if (ticket < 0)
          {
           if(UseSound){PlaySound("timeout.wav");}
            Print("Öåíà ñëèøêîì áëèçêî!",prise,"  ",sl,"  ",tp,"  Íå ìîãó ïîñòàâèòü îðäåð BUY!");
             }
              else
               {
                break;
                 }
                  }
                   }
  if(tip==true)
   {
    prise = NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits);
    if(Sl!=0){sl = NormalizeDouble((MarketInfo(Symbol(),MODE_ASK)+(Sl*Point)),Digits);}else{sl=0;}
    if(Tp!=0){tp = NormalizeDouble((MarketInfo(Symbol(),MODE_BID)-(Tp*Point)),Digits);}else{tp=0;}    
    for( i=0;i<5;i++) 
     {
      RefreshRates();// îáíîâèì öåíó
       ticket = OrderSend(Symbol(), OP_SELL, lots ,prise, slip,sl,tp,NULL,magic,0, Red);
        if (ticket < 0)
         {
          if(UseSound){PlaySound("timeout.wav");}
           Print("Öåíà ñëèøêîì áëèçêî!",prise,"  ",sl,"  ",tp,"  Íå ìîãó ïîñòàâèòü îðäåð SELL!");
            }
             else
              {
               break;
                }
                 }
                  }

return(ticket); 
 } 
//-------------------------------------------------------------------+
int del(int ticket)
   {
    int err;
        GetLastError();//îáíóëÿåì îøèêó
        OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
        string symbol = OrderSymbol();
        
        if(OrderType()==OP_BUY)
         {
          RefreshRates();
           double prise = MarketInfo(symbol,MODE_BID);
            OrderClose(ticket,OrderLots(),prise,3,Green);
             err = GetLastError();
             }
        if(OrderType()==OP_SELL)
         {
          RefreshRates();
           prise = MarketInfo(symbol,MODE_ASK);
            OrderClose(ticket,OrderLots(),prise,3,Green);
             err = GetLastError();
             }
        if (err == 0&&UseSound){PlaySound("expert.wav");} if (err != 0) {PlaySound("timeout.wav");Print(err);} 
        while (!IsTradeAllowed()){ Sleep(5000);}// åñëè ðûíîê çàíÿò òî ïîäîæäåì 5 ñåê 
    return(err);     
    }            
//-------------------------------------------------------------------+
// ôóíêöèÿ ïåðåâîäèò ÑË â áó èëè íà íóæíûé óðîâåíü                   +
//+------------------------------------------------------------------+
 int Bu(int ti=0)
 {
  int err;double sl;
  if(ti==0){return(-1);}
  if(OrderSelect(ti,SELECT_BY_TICKET,MODE_TRADES)&&(OrderCloseTime()==0)){
    if(bu==0){sl=OrderOpenPrice();}else{
      if(OrderType()==OP_BUY) {sl=NormalizeDouble((OrderOpenPrice()+bu*Point),Digits);}
       if(OrderType()==OP_SELL){sl=NormalizeDouble((OrderOpenPrice()-bu*Point),Digits);}} 
    if(OrderType()==OP_BUY){
     if(sl<MarketInfo(OrderSymbol(),MODE_BID)-(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)*Point)&&sl!=OrderStopLoss()){ 
      err = OrderModify(ti,OrderOpenPrice(),sl,OrderTakeProfit(),0,White);}} 
    if(OrderType()==OP_SELL){
     if(sl>MarketInfo(OrderSymbol(),MODE_ASK)+(MarketInfo(OrderSymbol(),MODE_STOPLEVEL)*Point)&&sl!=OrderStopLoss()){ 
      err = OrderModify(ti,OrderOpenPrice(),sl,OrderTakeProfit(),0,White);}}}      
 return(err);
 }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò âðåìÿ îòêðûòèÿ ïîñëåäíåé îòêðûòîé ïîçèöèé.          |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
datetime TimeOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
//--------------------âû÷èñëÿåì ðàçíîñòü âðåìåíè-------------------------------
  int TimeShift = (TimeCurrent()-t)/60;
  
  
  
  return(TimeShift);
}     
  





        

Profitability Reports

NZD/USD Jul 2025 - Sep 2025
0.85
Total Trades 45
Won Trades 15
Lost trades 30
Win Rate 33.33 %
Expected payoff -0.96
Gross Profit 246.40
Gross Loss -289.80
Total Net Profit -43.40
-100%
-50%
0%
50%
100%
GBP/USD Jul 2025 - Sep 2025
0.73
Total Trades 46
Won Trades 13
Lost trades 33
Win Rate 28.26 %
Expected payoff -1.98
Gross Profit 242.70
Gross Loss -333.90
Total Net Profit -91.20
-100%
-50%
0%
50%
100%
GBP/CAD Jul 2025 - Sep 2025
0.08
Total Trades 37
Won Trades 4
Lost trades 33
Win Rate 10.81 %
Expected payoff -12.39
Gross Profit 37.49
Gross Loss -495.90
Total Net Profit -458.41
-100%
-50%
0%
50%
100%
GBP/AUD Jul 2025 - Sep 2025
0.57
Total Trades 50
Won Trades 9
Lost trades 41
Win Rate 18.00 %
Expected payoff -3.00
Gross Profit 196.48
Gross Loss -346.39
Total Net Profit -149.91
-100%
-50%
0%
50%
100%
EUR/USD Jul 2025 - Sep 2025
0.90
Total Trades 56
Won Trades 14
Lost trades 42
Win Rate 25.00 %
Expected payoff -0.71
Gross Profit 367.10
Gross Loss -406.80
Total Net Profit -39.70
-100%
-50%
0%
50%
100%
AUD/USD Jul 2025 - Sep 2025
0.92
Total Trades 40
Won Trades 13
Lost trades 27
Win Rate 32.50 %
Expected payoff -0.46
Gross Profit 224.60
Gross Loss -243.20
Total Net Profit -18.60
-100%
-50%
0%
50%
100%
USD/JPY Jul 2025 - Sep 2025
0.28
Total Trades 31
Won Trades 2
Lost trades 29
Win Rate 6.45 %
Expected payoff -9.71
Gross Profit 118.36
Gross Loss -419.24
Total Net Profit -300.88
-100%
-50%
0%
50%
100%
USD/CHF Jul 2025 - Sep 2025
0.31
Total Trades 25
Won Trades 4
Lost trades 21
Win Rate 16.00 %
Expected payoff -7.55
Gross Profit 86.38
Gross Loss -275.15
Total Net Profit -188.77
-100%
-50%
0%
50%
100%
USD/CAD Jul 2025 - Sep 2025
0.57
Total Trades 21
Won Trades 4
Lost trades 17
Win Rate 19.05 %
Expected payoff -2.47
Gross Profit 67.58
Gross Loss -119.48
Total Net Profit -51.90
-100%
-50%
0%
50%
100%
NZD/USD Jul 2025 - Sep 2025
1.02
Total Trades 22
Won Trades 9
Lost trades 13
Win Rate 40.91 %
Expected payoff 0.10
Gross Profit 114.30
Gross Loss -112.10
Total Net Profit 2.20
-100%
-50%
0%
50%
100%

Comments