Executer_AC

Profit factor:
0.36
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
Bill Williams Accelerator/Decelerator oscillator
1 Views
0 Downloads
0 Favorites
Executer_AC
//+------------------------------------------------------------------+
//|                                                  Executer_AC.mq4 |
//|                           Copyright © 2006, Alex Sidd (Executer) |
//|                                           mailto:work_st@mail.ru |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|  Äàííûé ñîâåòíèê  íàïèñàí íà îñíîâå ñîâåòíèêà  MACD Sample.      |
//+------------------------------------------------------------------+
extern double TakeProfit = 120;  //ïðîôèò
extern double Lots = 0.9;        //êîë-âî âûñòàâëÿåìûõ ëîòîâ
extern double TrailingStop = 30; //òðåéëèíã ñòîï
extern double StopLoss = 70;
extern double DecreaseFactor = 80;
extern double MaximumRisk    = 0.014;
extern double MaximumLots    = 100;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetSizeLot() //îïòèìèçàöèÿ ëîòîâ
  {
   double Lot = Lots;
   int cycle;
   int prof = 0;
   int orders = HistoryTotal();     // history orders total
   int losses = 0;                  // number of losses orders without a break
   int vinn = 0;
   int i = orders;
//---- select lot size
  Lot = NormalizeDouble(AccountFreeMargin()*MaximumRisk / 100, 1);
//----
   if(AccountFreeMargin() <= 14) 
       DecreaseFactor = 14;
//----
   if(AccountFreeMargin() > 10000) 
       DecreaseFactor = 60;
//----
   if(DecreaseFactor > 0 && orders > DecreaseFactor)
     {
       //----
       for(cycle = 1; cycle < DecreaseFactor; cycle++)
         {
           i--;
           //----
           if(OrderSelect(i, SELECT_BY_TICKET, MODE_HISTORY) == false) 
             { 
               Print("Error in history!"); 
               break; 
             } 
           //----
           if(OrderCloseTime()>0)
             {
               prof = prof + OrderProfit(); 
               if(OrderProfit() <= 0 ) 
                   losses++;
               else 
                   vinn++;
             }
         }  
       if(prof <= 0 && losses > vinn) 
           Lot = 0.1;
       if(prof <=0 && vinn > losses) 
           Lot = Lot - (0.1*losses);
       if(prof > 0 && losses > vinn) 
         {
           Lot = Lot + (0.1*NormalizeDouble(vinn / 4, 0.1));
         }
       if(prof > 0 && losses <= vinn )
         {
           Lot = Lot + (0.1*NormalizeDouble(vinn / 2, 0.1));
         }
     } 
   if(AccountFreeMargin() < 300 || Lot < 0.1) 
       Lot = 0.1;
   if(Lot*1275 >= AccountFreeMargin()) 
       Lot = NormalizeDouble(AccountFreeMargin()*MaximumRisk / 100, 1);
   if(MaximumLots != 0 && Lot > MaximumLots) 
       Lot = MaximumLots;
   if(DecreaseFactor > orders) 
       Lot = Lots;
   return(Lot);
  }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
int start()
  {
   double ACCur, ACPrev, ACPrev2, ACPrev3;
   int cnt, ticket, total;
// iAC - îñöèëëÿòîð óñêîðåíèÿ-çàìåäëåíèÿ.
// Ñèíòàêñèñ: iAC( shift ) 
// Ïàðàìåòð: shift - ñìåùåíèå îòíîñèòåëüíî òåêóùåãî áàðà (êîëè÷åñòâî ïåðèîäîâ 
// íàçàä), îòêóäà íóæíî áðàòü äàííûå.
   if(Bars < 100)
     {
       Print("Áàðîâ ìåíüøå 100");
       return(0);  
     }
   if(TakeProfit < 10)
     {
       Print("TakeProfit ìåíüøå ÷åì 10");
       return(0);  // check TakeProfit
     }
   ACCur = iAC(NULL, 0, 1);
   ACPrev = iAC(NULL, 0, 2);
   ACPrev2 = iAC(NULL, 0, 3);
   ACPrev3 = iAC(NULL, 0, 4);
   total = OrdersTotal();  // ïðîâåðÿåì åñòü ëè îòêðûòûå ïîçèöèè
   if(total < 1) 
     {
       if(AccountFreeMargin() < (500*Lots))  // ïðîâåðÿåì äåíåæêè íà ñ÷åòó
         {
           Print("Äåíåã ïî÷òè íåò, îñòàëîñü âñåãî: ", AccountFreeMargin());
           return(0);  
         }
       // ïðîâåðÿåì îòêðûòèå ïîçèöèè íà ïîêóïêó
       if(ACCur > 0 && ACPrev > 0)
         {
           // ïðîâåðÿåì âîçìîæíîñòü îòêðûòèÿ íà ïîêóïêó
           if(ACCur > ACPrev && ACPrev > ACPrev2)
             {
               OrderSend(Symbol(), OP_BUY, GetSizeLot(), Ask, 3, Ask - StopLoss*Point, 
                         Ask + TakeProfit*Point, "AC expert", 16384, 0, Green);
               return(0); 
             }
           // ïðîâåðÿåì âîçìîæíîñòü îòêðûòèÿ íà ïðîäàæó
           if(ACCur < ACPrev && ACPrev < ACPrev2 && ACPrev2 < ACPrev3)
             {
               OrderSend(Symbol(), OP_SELL, GetSizeLot(), Bid, 3, Bid + StopLoss*Point, 
                         Bid - TakeProfit*Point, "AC expert", 16384, 0, Red);
               return(0); 
             }
         }
       if(ACCur < 0 && ACPrev < 0)
         {
           // ïðîâåðÿåì âîçìîæíîñòü îòêðûòèÿ íà ïîêóïêó
           if(ACCur > ACPrev && ACPrev > ACPrev2 && ACPrev2 > ACPrev3)
             {
               OrderSend(Symbol(), OP_BUY, GetSizeLot(), Ask, 3, Ask - StopLoss*Point, 
                         Ask + TakeProfit*Point, "AC expert", 16384, 0, Green);
               return(0); 
             }
           // ïðîâåðÿåì âîçìîæíîñòü îòêðûòèÿ íà ïðîäàæó
           if(ACCur < ACPrev && ACPrev < ACPrev2)
             {
               OrderSend(Symbol(), OP_SELL, GetSizeLot(), Bid, 3, Bid + StopLoss*Point, 
                         Bid - TakeProfit*Point, "AC expert", 16384, 0, Red);
               return(0); 
             }
         }
       if(ACCur > 0 && ACPrev < 0)
         {
           OrderSend(Symbol(), OP_BUY, GetSizeLot(), Ask, 3, Ask - StopLoss*Point, 
                     Ask + TakeProfit*Point, "AC expert", 16384, 0, Green);
           return(0); 
         }
       if(ACCur < 0 && ACPrev > 0)
         {
           OrderSend(Symbol(), OP_SELL, GetSizeLot(), Bid, 3, Bid + StopLoss*Point, 
                     Bid - TakeProfit*Point, "AC expert", 16384, 0, Red);
           return(0); 
         }
       return(0);
     }
   for(cnt = 0; cnt < total; cnt++)
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderType() <= OP_SELL &&   // ïðîâåðêà îòêðûòîé ïîçèöèè 
          OrderSymbol() == Symbol())  // ïðîâåðêà ñ íàøåãî ëè îíà ãðàôèêà
         {
           if(OrderType() == OP_BUY)    // åñëè îòêðûòà ïîçèöèÿ íà ïîêóïêó
             {
               // íàäî ëè åå çàêðûòü?
               if(ACCur < ACPrev)
                 {
                   OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // çàêðûëè
                   return(0);  // ñâàëèâàåì
                 }
               // íóæíî ëè äâèãàòü òðåéëèíã ñòîï
               if(TrailingStop > 0)  
                 {                 
                   if(Bid - OrderOpenPrice() > Point*TrailingStop)
                     {
                       if(OrderStopLoss() < Bid - Point*TrailingStop)
                         {
                           OrderModify(OrderTicket(), OrderOpenPrice(), 
                                       Bid - Point*TrailingStop, OrderTakeProfit(), 
                                       0, Green);
                           return(0);
                         }
                     }
                 }
             }
           else // åñëè ýòà ïîçèöèÿ íà ïðîäàæó
             {
               // íàäî ëè çàêðûòü?
               if(ACCur > ACPrev)
                 {
                   OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // çàêðûëè
                   return(0); // âûõîä
                 }
               // íóæîí ëè òðåéëèíãñòîïèíã
               if(TrailingStop > 0)  
                 {                 
                   if((OrderOpenPrice() - Ask) > (Point*TrailingStop))
                     {
                       if((OrderStopLoss() > (Ask + Point*TrailingStop)) || 
                          (OrderStopLoss() == 0))
                         {
                           OrderModify(OrderTicket(), OrderOpenPrice(), 
                                       Ask + Point*TrailingStop, OrderTakeProfit(),
                                       0, Red);
                           return(0);
                         }
                     }
                 }
             }
         }
     }
   return(0);
  }
//+------------------------------------------------------------------+

Profitability Reports

USD/CAD Oct 2024 - Jan 2025
0.59
Total Trades 3011
Won Trades 1442
Lost trades 1569
Win Rate 47.89 %
Expected payoff -1.86
Gross Profit 8220.76
Gross Loss -13819.91
Total Net Profit -5599.15
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.22
Total Trades 2054
Won Trades 628
Lost trades 1426
Win Rate 30.57 %
Expected payoff -4.65
Gross Profit 2629.90
Gross Loss -12181.30
Total Net Profit -9551.40
-100%
-50%
0%
50%
100%
AUD/USD Oct 2024 - Jan 2025
0.28
Total Trades 2350
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -3.63
Gross Profit 3374.10
Gross Loss -11897.50
Total Net Profit -8523.40
-100%
-50%
0%
50%
100%

Comments