Momo_Trades_V3

Author: #xrustsolution#
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
7 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
18.00 %
Total Trades 23
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -6.84
Gross Profit 35.70
Gross Loss -193.00
Total Net Profit -157.30
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
209.00 %
Total Trades 23
Won Trades 8
Lost trades 15
Win Rate 0.35 %
Expected payoff 7.37
Gross Profit 325.50
Gross Loss -156.00
Total Net Profit 169.50
-100%
-50%
0%
50%
100%
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);
}     
  





        

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---