Executer_AC

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
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
28.00 %
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%
NZD/USD Oct 2024 - Jan 2025
22.00 %
Total Trades 2054
Won Trades 628
Lost trades 1426
Win Rate 0.31 %
Expected payoff -4.65
Gross Profit 2629.90
Gross Loss -12181.30
Total Net Profit -9551.40
-100%
-50%
0%
50%
100%
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);
  }
//+------------------------------------------------------------------+

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