Author: Copyright � 2006, Alex Sidd (Executer)
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
FractalsBill Williams Awesome oscillator
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 3667
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff -2.70
Gross Profit 10.00
Gross Loss -9915.20
Total Net Profit -9905.20
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 7084
Won Trades 18
Lost trades 7066
Win Rate 0.00 %
Expected payoff -1.40
Gross Profit 27.20
Gross Loss -9927.40
Total Net Profit -9900.20
-100%
-50%
0%
50%
100%
ExFractals
//+------------------------------------------------------------------+
//|                                                   ExFractals.mq4 |
//|                           Copyright © 2006, Alex Sidd (Executer) |
//|                                           mailto:work_st@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Alex Sidd (Executer)"
#property link      "mailto:work_st@mail.ru"
//----
#define MAGIC 612457
//----
extern double lStopLoss = 40;
extern double sStopLoss = 40;
extern double lTakeProfit = 100;
extern double sTakeProfit = 100;
extern double lTrailingStop = 30;
extern double sTrailingStop = 30;
extern double Lots = 0.10;
extern int a = 3;
extern double DecreaseFactor = 100;
extern double MaximumRisk    = 0.025;
extern double MaximumLots    = 100;
extern int coeff = 0;
//----
int IsLastBuy = 0;
int what = 0;
color clOpenBuy = Blue;
color clCloseBuy = Aqua;
color clOpenSell = Red;
color clCloseSell = Violet;
color clModiBuy = Blue;
color clModiSell = Red;
string Name_Expert = "ExFractals";
int Slippage = 0;
bool UseSound = True;
string NameFileSound = "alert.wav";
//----
double FractUp1 = 0;
double FractUp2 = 0;
double FractDn1 = 0;
double FractDn2 = 0;
datetime FTimeUp1, FTimeUp2, FTimeDn1, FTimeDn2, curTime;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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() <= 10000 && AccountFreeMargin() > 5000) 
       DecreaseFactor = NormalizeDouble(AccountFreeMargin() / 100, 1);
   if(AccountFreeMargin() <= 5000 && AccountFreeMargin() > 3000) 
       DecreaseFactor = NormalizeDouble(AccountFreeMargin() / 200, 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 ) 
           Lot = 0.1;//Lot - (0.1*losses); //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;
   Lot = Lots;
//----
   return(Lot);
  }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
void deinit() 
  {  
//----
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LevelCalculate(double Price1, double Time1, double Price2,  
                      double Time2, double NewTime)
  {
   double level;
   if(Time2 != Time1) // Íà âñÿêèé ñëó÷àé, ÷òîáû íå áûëî äåëåíèÿ íà 0.
       level = (NewTime - Time1)*(Price2 - Price1) / (Time2-Time1) + Price1;
   else
       return(Price2);
   return(level);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(Bars < 100)
     {
       Print("bars less than 100");
       return(0);
     }
   if(lStopLoss < 3)
     {
       Print("StopLoss less than 3");
       return(0);
     }
   if(lTakeProfit < 3)
     {
       Print("TakeProfit less than 3");
       return(0);
     }
   if(sStopLoss < 3) 
     {
       Print("StopLoss less than 3");
       return(0);
     }
   if(sTakeProfit < 3)
     {
       Print("TakeProfit less than 3");
       return(0);
     }
   if(AccountFreeMargin() < (1000*Lots))
     {
       Print("We have no money. Free Margin = ", AccountFreeMargin());
       return(0);
     }
   double Fup, Fdn;
   Fup = iFractals(NULL, 0, MODE_UPPER, 3);
   Fdn = iFractals(NULL, 0, MODE_LOWER, 3);
   double AO_1, AO_2, AO_D1, AO_D2;
   AO_1 = iAO(NULL, 60, 1);
   AO_2 = iAO(NULL, 60, 2);
   AO_D1 = iAO(NULL, 240, 1);
   AO_D2 = iAO(NULL, 240, 2);
   if(AO_1 > AO_2 && AO_D1 > AO_D2)
       what = 1;
   if(AO_1 < AO_2 && AO_D1 < AO_D2) 
       what = 2;
   if(AO_1 > AO_2 && AO_D1 < AO_D2) 
       what = 3;
   if(AO_1 < AO_2 && AO_D1 > AO_D2) 
       what = 4;
   if(Fup > 0) 
     {
       if(FractUp1 == 0 && FractUp2 == 0) 
         {
           FractUp1 = Fup; 
           FTimeUp1 = Time[3];
         }
       if(FractUp1 != 0&&FractUp2 == 0 && FTimeUp1 != Time[3]) 
         {
           FractUp2 = Fup; 
           FTimeUp2 = Time[3];
         }
       if(FractUp1 != 0 && FractUp2 != 0 && FTimeUp2 != Time[3])
         {
           FractUp1 = FractUp2;
           FTimeUp1 = FTimeUp2;
           FractUp2 = Fup;
           FTimeUp2 = Time[3];
         } 
     }
   if(Fdn > 0) 
     {
       if(FractDn1 == 0 && FractDn2 == 0) 
         {
           FractDn1 = Fdn; 
           FTimeDn1 = Time[3];
         }
       if(FractDn1 != 0 && FractDn2 == 0 && FTimeDn1 != Time[3]) 
         {
           FractDn2 = Fdn; 
           FTimeDn2 = Time[3];
         }
       if(FractDn1 != 0 && FractDn2 != 0 && FTimeDn2 != Time[3])
         {
           FractDn1 = FractDn2;
           FTimeDn1 = FTimeDn2;
           FractDn2 = Fdn;
           FTimeDn2 = Time[3];
         } 
     }
   double lvldn, lvlup;
   double I1 = iCustom(NULL, 0, "ExVol", 0, 1);
   if(FractUp1 != 0 && FractUp2 != 0)
     {
       lvlup = LevelCalculate(FractUp1, FTimeUp1, FractUp2, FTimeUp2, Time[0]);
       lvldn = LevelCalculate(FractDn1, FTimeDn1, FractDn2, FTimeDn2, Time[0]);
       ObjectCreate("FractalLineUp", OBJ_TREND, 0, FTimeUp1, FractUp1, FTimeUp2, FractUp2);
       ObjectSet("FractalLineUp", OBJPROP_TIME1, FTimeUp1);
       ObjectSet("FractalLineUp", OBJPROP_PRICE1, FractUp1);
       ObjectSet("FractalLineUp", OBJPROP_TIME2, FTimeUp2);
       ObjectSet("FractalLineUp", OBJPROP_PRICE2, FractUp2);
       if(!ExistPositionsBuy())
         {
           if(Ask > lvlup && Close[1] > lvlup&&I1 < 0)    
             {
               OpenBuy(lvlup);
               ObjectCreate("FractUp" + Bars, OBJ_ARROW, 0, Time[0], lvlup);
               ObjectSet("FractUp" + Bars, OBJPROP_COLOR, Blue);
               ObjectSet("FractUp" + Bars, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
               return(0);
             }
         }
     }
   if(ExistPositionsBuy())
     {
       if((what == 1 && AO_1 < AO_2 || AO_D1 < AO_D2) || (what == 2 && AO_1 > AO_2 || 
          AO_D1 > AO_D2) || (what == 3 && AO_1 < AO_2 || AO_D1 > AO_D2) || 
          (what == 4 && AO_1 > AO_2 || AO_D1 < AO_D2))  
           CloseBuy();
     }
   if(FractDn1 != 0 && FractDn2 != 0)
     {
       lvldn = LevelCalculate(FractDn1, FTimeDn1, FractDn2, FTimeDn2, Time[0]);
       lvlup = LevelCalculate(FractUp1, FTimeUp1, FractUp2, FTimeUp2, Time[0]);
       ObjectCreate("FractalLineDn", OBJ_TREND, 0, FTimeDn1, FractDn1, FTimeDn2, FractDn2);
       ObjectSet("FractalLineDn", OBJPROP_TIME1, FTimeDn1);
       ObjectSet("FractalLineDn", OBJPROP_PRICE1, FractDn1);
       ObjectSet("FractalLineDn", OBJPROP_TIME2, FTimeDn2);
       ObjectSet("FractalLineDn", OBJPROP_PRICE2, FractDn2);
       if(!ExistPositionsSell())
         {
           if(lvldn > Bid && Close[1] < lvldn && I1 > 0)  
             {
               OpenSell(lvldn);
               ObjectCreate("FractDn" + Bars, OBJ_ARROW, 0, Time[0], lvldn);
               ObjectSet("FractDn" + Bars, OBJPROP_COLOR, Red);
               ObjectSet("FractDn" + Bars, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
               return(0);
             }
         }
     }
   if(ExistPositionsSell())
     {
       if((what == 1 && AO_1 < AO_2 || AO_D1 < AO_D2) || (what == 2 && AO_1 > AO_2 || 
          AO_D1 > AO_D2) || (what == 3 && AO_1 < AO_2 || AO_D1 > AO_D2) || 
          (what == 0 && AO_1 > AO_2 || AO_D1 < AO_D2)) 
           CloseSell();// ;
     }
   TrailingPositionsBuy(lTrailingStop);
   TrailingPositionsSell(sTrailingStop);
//----
   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistPositionsSell() 
  {
	  for(int i = 0; i < OrdersTotal(); i++) 
	    {
		     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
		       {
			        if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC && 
			           OrderType() == OP_SELL) 
			          {
				           return(True);
			          }
		       }  
	    } 
//----
	  return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistPositionsBuy() 
  {
   for(int i = 0; i < OrdersTotal(); i++) 
     {
	      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
	        {
		         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC && 
		            OrderType() == OP_BUY) 
		           {
			            return(True);
		           }
	        } 
     } 
//----
	  return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TrailingPositionsBuy(int trailingStop) 
  { 
   for(int i = 0; i < OrdersTotal(); i++) 
     { 
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
         { 
           if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC) 
             { 
               if(OrderType() == OP_BUY) 
                 { 
                   if(Bid - OrderOpenPrice() > trailingStop*Point) 
                     { 
                       if(OrderStopLoss() < Bid - trailingStop*Point) 
                           ModifyStopLoss(Bid - trailingStop*Point); 
                     } 
                 } 
             } 
         } 
     } 
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void TrailingPositionsSell(int trailingStop) 
  { 
   for(int i = 0; i < OrdersTotal(); i++) 
     { 
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
         { 
           if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC) 
             { 
               if(OrderType() == OP_SELL) 
                 { 
                   if(OrderOpenPrice() - Ask > trailingStop*Point) 
                     { 
                       if(OrderStopLoss() > Ask + trailingStop*Point || OrderStopLoss() == 0)  
                           ModifyStopLoss(Ask + trailingStop*Point); 
                     } 
                 } 
             } 
         } 
     } 
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) 
  { 
   bool fm;
   fm = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 
                    0, CLR_NONE); 
   if(fm && UseSound) 
       PlaySound(NameFileSound); 
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseBuy() 
  { 
   bool fc; 
   fc = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy); 
   if(fc && UseSound) 
       PlaySound(NameFileSound); 
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseSell() 
  { 
   bool fc; 
   fc = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell); 
   if(fc && UseSound) 
       PlaySound(NameFileSound); 
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OpenBuy(double pr_op) 
  { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossBuy(); 
   ldTake = GetTakeProfitBuy(); 
   lsComm = GetCommentForOrder(); 
   int i = OrderSend(Symbol(), OP_BUY, ldLot, NormalizeDouble(Ask, 4), Slippage, 
                     ldStop, ldTake, lsComm, MAGIC, 0, clOpenBuy); 
   if(UseSound) 
       PlaySound(NameFileSound); 
   return(i);
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OpenSell(double pr_op) 
  { 
   double ldLot, ldStop, ldTake; 
   string lsComm; 
   ldLot = GetSizeLot(); 
   ldStop = GetStopLossSell(); 
   ldTake = GetTakeProfitSell(); 
   lsComm = GetCommentForOrder(); 
   int i = OrderSend(Symbol(), OP_SELL, ldLot, NormalizeDouble(Bid, 4), Slippage, 
                     ldStop, ldTake, lsComm, MAGIC, 0, clOpenSell); 
   if(UseSound) 
       PlaySound(NameFileSound); 
   return(i);
} 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GetCommentForOrder() 
  { 	
    return(Name_Expert); 
  } 
//double GetSizeLot() { 	return(Lots); } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetStopLossBuy() 
  { 	
    return (Bid - lStopLoss*Point);
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetStopLossSell() 
  { 	
    return(Ask + sStopLoss*Point); 
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetTakeProfitBuy() 
  { 	
    return(Ask + lTakeProfit*Point); 
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetTakeProfitSell() 
  { 	
    return(Bid - sTakeProfit*Point); 
  } 
//+------------------------------------------------------------------+


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