Author: ������ ��������
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
Moving average indicator
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
44.00 %
Total Trades 308
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -31.12
Gross Profit 7399.79
Gross Loss -16985.11
Total Net Profit -9585.32
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
82.00 %
Total Trades 615
Won Trades 348
Lost trades 267
Win Rate 0.57 %
Expected payoff -12.08
Gross Profit 33575.64
Gross Loss -41007.18
Total Net Profit -7431.54
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
31.00 %
Total Trades 236
Won Trades 88
Lost trades 148
Win Rate 0.37 %
Expected payoff -41.53
Gross Profit 4418.11
Gross Loss -14219.34
Total Net Profit -9801.23
-100%
-50%
0%
50%
100%
EMA2
//+------------------------------------------------------------------+
//|                                                          EMA.mq4 |
//|                                                 Âèêòîð ×åáîòàð¸â |
//|                                    http://www.chebotariov.co.ua/ |
//+------------------------------------------------------------------+
#property copyright "Âèêòîð ×åáîòàð¸â"
#property link      "http://www.chebotariov.co.ua/"

#define MAGIC 31052006

extern int    ShortEma = 4; // Ïåðèîä êîðîòêîé MA
extern int    ShortEma2 = 11; // Ïåðèîä âòîðîé êîðîòêîé MA
extern int    LongEma = 16; // Ïåðèîä äëèííîé MA
extern int    ShiftEma = 1;
extern int    RiskMax=45;
extern double LotsMax=90.0;
extern int    DecreaseFactor=6;
extern int    TakeProfit=60;
extern int    StopLoss=80;
extern int    TrailingStop=40;

//+------------------------------------------------------------------+
//| Ðàñ÷åò îïòèìàëüíîãî ðàçìåðà ëîòà                                 |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
//----
   double Lots=NormalizeDouble(AccountBalance()*RiskMax/(100000.0*Ask),1);
   if(AccountFreeMargin()<(1000*Ask*Lots))
     {
      Lots=NormalizeDouble(AccountFreeMargin()*RiskMax/(100000.0*Ask),1);
     }
   if(Lots>LotsMax)
     {
      Lots=LotsMax;
      Print("Ïðåâûøåí ìàêñèìàëüíûé ðàçìåð ëîòà. Ðàçìåð ëîòà èçìåíåí íà ",LotsMax);
     }
   
   int orders=HistoryTotal();
   int losses=0;
   
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Îøèáêà â èñòîðèè!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC || OrderType()>OP_SELL)continue;
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
         if(losses>1)
           {
            Lots=NormalizeDouble(Lots/(DecreaseFactor*losses),1);
           }
       }
     if(Lots<MarketInfo(Symbol(),MODE_MINLOT))
       {
        Lots=MarketInfo(Symbol(),MODE_MINLOT);
       }
     double raznica = MathMod(Lots,MarketInfo(Symbol(),MODE_LOTSTEP));
     if(raznica>0.0)
       {
        Lots -= raznica;
       }
//----
   return(Lots);
  }

//+------------------------------------------------------------------+

bool symbolOrders()
   {
//----
   int orders = OrdersTotal();
   for(int i=orders-1; i>=0; i--)
      {
      if(!OrderSelect(i, SELECT_BY_POS ))
         {
         Print("OrderSelect( ", i, ", SELECT_BY_POS ) - Error #", GetLastError());
         continue;
         }
         if(OrderSymbol()==Symbol())
            {
            if(OrderMagicNumber()==MAGIC)
               {
               return(true);
            }
         }
      }
//----
   return(false);
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int cnt, ticket;
   int total=OrdersTotal();

   if(Bars<100)
     {
      Print("Êîëè÷åñòâî áàðîâ ìåíüøå 100");
      return(0);  
     }
   if(TakeProfit<10 && TakeProfit>0)
     {
      TakeProfit=10;
      Print("Ðàçìåð TakeProfit áûë ìåíüøå 10, ïîýòîìó èçìåíåí íà 10");
     }

   double SEma0 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0);
   double SEma1 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma);
   double SEma02 = iMA(NULL,0,ShortEma2,0,MODE_EMA,PRICE_CLOSE,0);
   double SEma12 = iMA(NULL,0,ShortEma2,0,MODE_EMA,PRICE_CLOSE,ShiftEma);  
   double LEma0 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0);
   double LEma1 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma);
   
   if(!symbolOrders())
     {
      if(AccountFreeMargin()<(1000*LotsOptimized()))
        {
         Print("Ó Âàñ íåäîñòàòî÷íî äåíåã. Ñâîáîäíîé ìàðæè = ", AccountFreeMargin());
         return(0);
        }
      if(SEma0>LEma0 && SEma02<SEma0 && SEma12>SEma1)
        {
         if(!IsTradeAllowed())
           {
            Print("AD BUY: Òîðãîâûé ïîòîê çàíÿò.");
            return(0);
           }       
         ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"EMA BUY",MAGIC,0,CLR_NONE);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
              {
               Print("Îòêðûòà ïîçèöèÿ íà ïîêóïêó ïî ñèãíàëó EMA BUY: ",OrderOpenPrice());
              }
            else
              {
               Print("Îøèáêà îòêðûòèÿ ïîçèöèè íà ïîêóïêó ïî ñèãíàëó EMA BUY: ",GetLastError());
               return(0);
              }
           }         
        }
                
      if(SEma0<LEma0 && SEma02>SEma0 && SEma12<SEma1)
        {
         if(!IsTradeAllowed())
           {
            Print("EMA SELL: Òîðãîâûé ïîòîê çàíÿò.");
            return(0);
           }
         ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"EMA SELL",MAGIC,0,CLR_NONE);
         if(ticket>0)
           {
           if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
              {
               Print("Îòêðûòà ïîçèöèÿ íà ïðîäàæó ïî ñèãíàëó EMA SELL: ",OrderOpenPrice());
              }
            else
              {
               Print("Îøèáêà îòêðûòèÿ ïîçèöèè íà ïðîäàæó ïî ñèãíàëó EMA SELL: ",GetLastError());
               return(0);
              }
           }
        }
     }
     
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY)
           {
            if(SEma0<LEma0 && SEma02>SEma0 && SEma12<SEma1)
              {
               if(!IsTradeAllowed())
                 {
                  Print("Order ñlose: Òîðãîâûé ïîòîê çàíÿò.");
                  return(0);
                 }       
               OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
               return(0);
              }
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     if(!IsTradeAllowed())
                       {
                        Print("Trailing stop: Òîðãîâûé ïîòîê çàíÿò.");
                        return(0);
                       }       
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE);
                     return(0);
                    }
                 }
              }
           }
         else
           {
            if(SEma0>LEma0 && SEma02<SEma0 && SEma12>SEma1)
              {
               if(!IsTradeAllowed())
                 {
                  Print("Order ñlose: Òîðãîâûé ïîòîê çàíÿò.");
                  return(0);
                 }                    
               OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
               return(0);
              }
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     if(!IsTradeAllowed())
                       {
                        Print("Trailing stop: Òîðãîâûé ïîòîê çàíÿò.");
                        return(0);
                       }                   
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE);
                     return(0);
                    }
                 }
              }
           }
        }      
     }   
//----
   return(0);
  }
//+------------------------------------------------------------------+

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